[gtk/issue-1961-master: 1/3] Add getter for a monitor connector



commit 309ae9dc1228ece6c24de2a3dea83fa21d608407
Author: Emmanuele Bassi <ebassi gnome org>
Date:   Thu Jun 20 14:52:41 2019 +0100

    Add getter for a monitor connector
    
    The migration from GdkScreen's monitor API to GdkMonitor left out a way
    to get the connector's name of a monitor.
    
    While there's no real guarantee coming from the underlying graphics
    system that the connector's name is stable, some system components may
    use it to uniquely identify a monitor until the next plug in/out event.

 docs/reference/gdk/gdk4-sections.txt |  1 +
 gdk/gdkmonitor.c                     | 38 ++++++++++++++++++++++++++++++++++++
 gdk/gdkmonitor.h                     |  2 ++
 gdk/gdkmonitorprivate.h              |  3 +++
 4 files changed, 44 insertions(+)
---
diff --git a/docs/reference/gdk/gdk4-sections.txt b/docs/reference/gdk/gdk4-sections.txt
index 3de29617c3..7cb4a8aab9 100644
--- a/docs/reference/gdk/gdk4-sections.txt
+++ b/docs/reference/gdk/gdk4-sections.txt
@@ -1128,6 +1128,7 @@ gdk_monitor_get_width_mm
 gdk_monitor_get_height_mm
 gdk_monitor_get_manufacturer
 gdk_monitor_get_model
+gdk_monitor_get_connector
 gdk_monitor_get_scale_factor
 gdk_monitor_get_refresh_rate
 GdkSubpixelLayout
diff --git a/gdk/gdkmonitor.c b/gdk/gdkmonitor.c
index 18730d3df2..2d27c29972 100644
--- a/gdk/gdkmonitor.c
+++ b/gdk/gdkmonitor.c
@@ -49,6 +49,7 @@ enum {
   PROP_DISPLAY,
   PROP_MANUFACTURER,
   PROP_MODEL,
+  PROP_CONNECTOR,
   PROP_SCALE_FACTOR,
   PROP_GEOMETRY,
   PROP_WORKAREA,
@@ -100,6 +101,10 @@ gdk_monitor_get_property (GObject    *object,
       g_value_set_string (value, monitor->model);
       break;
 
+    case PROP_CONNECTOR:
+      g_value_set_string (value, monitor->connector);
+      break;
+
     case PROP_SCALE_FACTOR:
       g_value_set_int (value, monitor->scale_factor);
       break;
@@ -165,6 +170,7 @@ gdk_monitor_finalize (GObject *object)
 {
   GdkMonitor *monitor = GDK_MONITOR (object);
 
+  g_free (monitor->connector);
   g_free (monitor->manufacturer);
   g_free (monitor->model);
 
@@ -198,6 +204,12 @@ gdk_monitor_class_init (GdkMonitorClass *class)
                          "The model name",
                          NULL,
                          G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
+  props[PROP_CONNECTOR] =
+    g_param_spec_string ("connector",
+                         "Connector",
+                         "The connector name",
+                         NULL,
+                         G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
   props[PROP_SCALE_FACTOR] =
     g_param_spec_int ("scale-factor",
                       "Scale factor",
@@ -369,6 +381,22 @@ gdk_monitor_get_height_mm (GdkMonitor *monitor)
   return monitor->height_mm;
 }
 
+/**
+ * gdk_monitor_get_connector:
+ * @monitor: a #GdkMonitor
+ *
+ * Gets the name of the monitor's connector, if available.
+ *
+ * Returns: (transfer none) (nullable): the name of the connector
+ */
+const char *
+gdk_monitor_get_connector (GdkMonitor *monitor)
+{
+  g_return_val_if_fail (GDK_IS_MONITOR (monitor), NULL);
+
+  return monitor->connector;
+}
+
 /**
  * gdk_monitor_get_manufacturer:
  * @monitor: a #GdkMonitor
@@ -504,6 +532,16 @@ gdk_monitor_set_model (GdkMonitor *monitor,
   g_object_notify (G_OBJECT (monitor), "model");
 }
 
+void
+gdk_monitor_set_connector (GdkMonitor *monitor,
+                           const char *connector)
+{
+  g_free (monitor->connector);
+  monitor->connector = g_strdup (connector);
+
+  g_object_notify (G_OBJECT (monitor), "connector");
+}
+
 void
 gdk_monitor_set_position (GdkMonitor *monitor,
                           int         x,
diff --git a/gdk/gdkmonitor.h b/gdk/gdkmonitor.h
index 79fd434660..b711195e31 100644
--- a/gdk/gdkmonitor.h
+++ b/gdk/gdkmonitor.h
@@ -80,6 +80,8 @@ const char *      gdk_monitor_get_manufacturer    (GdkMonitor   *monitor);
 GDK_AVAILABLE_IN_ALL
 const char *      gdk_monitor_get_model           (GdkMonitor   *monitor);
 GDK_AVAILABLE_IN_ALL
+const char *      gdk_monitor_get_connector       (GdkMonitor   *monitor);
+GDK_AVAILABLE_IN_ALL
 int               gdk_monitor_get_scale_factor    (GdkMonitor   *monitor);
 GDK_AVAILABLE_IN_ALL
 int               gdk_monitor_get_refresh_rate    (GdkMonitor   *monitor);
diff --git a/gdk/gdkmonitorprivate.h b/gdk/gdkmonitorprivate.h
index a2c7b5c86b..f7331376e7 100644
--- a/gdk/gdkmonitorprivate.h
+++ b/gdk/gdkmonitorprivate.h
@@ -36,6 +36,7 @@ struct _GdkMonitor {
   GdkDisplay *display;
   char *manufacturer;
   char *model;
+  char *connector;
   GdkRectangle geometry;
   int width_mm;
   int height_mm;
@@ -58,6 +59,8 @@ void            gdk_monitor_set_manufacturer    (GdkMonitor *monitor,
                                                  const char *manufacturer);
 void            gdk_monitor_set_model           (GdkMonitor *monitor,
                                                  const char *model);
+void            gdk_monitor_set_connector       (GdkMonitor *monitor,
+                                                 const char *connector);
 void            gdk_monitor_set_position        (GdkMonitor *monitor,
                                                  int         x,
                                                  int         y);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]