128 lines
4.5 KiB
Diff
128 lines
4.5 KiB
Diff
|
|
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
|
|||
|
|
|