mate-desktop/0001-KYOS-F-Add-api-to-check-hotplug_mode_update-property.patch

128 lines
4.5 KiB
Diff
Raw Normal View History

From 8fd6a3dc1ca2cf4c728ba61a86055320c1257383 Mon Sep 17 00:00:00 2001
From: songchuanfei <songchuanfei@kylinos.com.cn>
Date: Tue, 7 Apr 2020 17:13:46 +0800
Subject: [PATCH] KYOS-F: Add api to check hotplug_mode_update property for
outputs
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- 添加检查给定输出的hotplug_mode_update属性的接口该属性标记了虚拟屏幕(Virtural Screen)
Signed-off-by: songchuanfei <songchuanfei@kylinos.com.cn>
---
libmate-desktop/mate-rr-config.c | 1 +
libmate-desktop/mate-rr-config.h | 2 ++
libmate-desktop/mate-rr-output-info.c | 5 +++++
libmate-desktop/mate-rr-private.h | 1 +
libmate-desktop/mate-rr.c | 16 ++++++++++++++++
libmate-desktop/mate-rr.h | 1 +
6 files changed, 26 insertions(+)
diff --git a/libmate-desktop/mate-rr-config.c b/libmate-desktop/mate-rr-config.c
index 09d2b8f..3609292 100644
--- a/libmate-desktop/mate-rr-config.c
+++ b/libmate-desktop/mate-rr-config.c
@@ -518,6 +518,7 @@ mate_rr_config_load_current (MateRRConfig *config, GError **error)
output->priv->name = g_strdup (mate_rr_output_get_name (rr_output));
output->priv->connected = mate_rr_output_is_connected (rr_output);
+ output->priv->hotplug_mode_update = mate_rr_output_has_hotplug_mode_update (rr_output);
if (!output->priv->connected)
{
diff --git a/libmate-desktop/mate-rr-config.h b/libmate-desktop/mate-rr-config.h
index 85c8c9f..2f16d52 100644
--- a/libmate-desktop/mate-rr-config.h
+++ b/libmate-desktop/mate-rr-config.h
@@ -87,6 +87,8 @@ void mate_rr_output_info_set_primary (MateRROutputInfo *self, gboolean prima
int mate_rr_output_info_get_preferred_width (MateRROutputInfo *self);
int mate_rr_output_info_get_preferred_height (MateRROutputInfo *self);
+gboolean mate_rr_output_info_has_hotplug_mode_update (MateRROutputInfo *self);
+
typedef struct
{
GObject parent;
diff --git a/libmate-desktop/mate-rr-output-info.c b/libmate-desktop/mate-rr-output-info.c
index 9761e9c..85ee50b 100644
--- a/libmate-desktop/mate-rr-output-info.c
+++ b/libmate-desktop/mate-rr-output-info.c
@@ -250,3 +250,8 @@ int mate_rr_output_info_get_preferred_height (MateRROutputInfo *self)
return self->priv->pref_height;
}
+
+gboolean mate_rr_output_info_has_hotplug_mode_update (MateRROutputInfo *self)
+{
+ return self->priv->hotplug_mode_update;
+}
diff --git a/libmate-desktop/mate-rr-private.h b/libmate-desktop/mate-rr-private.h
index d5410ca..fa14368 100644
--- a/libmate-desktop/mate-rr-private.h
+++ b/libmate-desktop/mate-rr-private.h
@@ -70,6 +70,7 @@ struct MateRROutputInfoPrivate
int pref_height;
char * display_name;
gboolean primary;
+ gboolean hotplug_mode_update;
};
struct MateRRConfigPrivate
diff --git a/libmate-desktop/mate-rr.c b/libmate-desktop/mate-rr.c
index 04ffd0d..a9bdf79 100644
--- a/libmate-desktop/mate-rr.c
+++ b/libmate-desktop/mate-rr.c
@@ -89,6 +89,7 @@ struct MateRROutput
int n_preferred;
guint8 * edid_data;
int edid_size;
+ gboolean hotplug_mode_update;
char * connector_type;
};
@@ -1202,6 +1203,19 @@ read_edid_data (MateRROutput *output, int *len)
return NULL;
}
+static gboolean check_hotplug_mode_update(MateRROutput *output)
+{
+ Atom atom;
+
+ atom = XInternAtom(DISPLAY(output), "hotplug_mode_update", FALSE);
+ return (XRRQueryOutputProperty(DISPLAY(output), output->id, atom) != NULL);
+}
+
+gboolean mate_rr_output_has_hotplug_mode_update(MateRROutput *output)
+{
+ return output->hotplug_mode_update;
+}
+
static char *
get_connector_type_string (MateRROutput *output)
{
@@ -1315,6 +1329,8 @@ output_initialize (MateRROutput *output, XRRScreenResources *res, GError **error
/* Edid data */
output->edid_data = read_edid_data (output, &output->edid_size);
+
+ output->hotplug_mode_update = check_hotplug_mode_update(output);
XRRFreeOutputInfo (info);
diff --git a/libmate-desktop/mate-rr.h b/libmate-desktop/mate-rr.h
index cc7e427..be3e7e8 100644
--- a/libmate-desktop/mate-rr.h
+++ b/libmate-desktop/mate-rr.h
@@ -146,6 +146,7 @@ MateRRMode * mate_rr_output_get_preferred_mode (MateRROutput *output);
gboolean mate_rr_output_supports_mode (MateRROutput *output,
MateRRMode *mode);
gboolean mate_rr_output_get_is_primary (MateRROutput *output);
+gboolean mate_rr_output_has_hotplug_mode_update (MateRROutput *output);
/* MateRRMode */
guint32 mate_rr_mode_get_id (MateRRMode *mode);
--
2.18.1