monitor: Add a ::valid property
authorMatthias Clasen <mclasen@redhat.com>
Wed, 1 Nov 2017 18:02:08 +0000 (14:02 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Wed, 1 Nov 2017 18:17:20 +0000 (14:17 -0400)
This is slightly more useful than the existing
::invalidate signal, since it can be queried at
any time.

docs/reference/gdk/gdk4-sections.txt
gdk/gdkmonitor.c
gdk/gdkmonitor.h
gdk/gdkmonitorprivate.h

index a39abe61361d69fe312397556a3c8a1bd85bfa58..797bb27290838cb2d6e24c500c08b2f61be9d7d8 100644 (file)
@@ -1271,6 +1271,7 @@ gdk_monitor_get_refresh_rate
 GdkSubpixelLayout
 gdk_monitor_get_subpixel_layout
 gdk_monitor_is_primary
+gdk_monitor_is_valid
 
 <SUBSECTION Standard>
 gdk_monitor_get_type
index fb721481db82dcdb9bf38e09aa2e8ec5141621cb..3e8ec272b5a366c63abed9c4486edc0d39720461 100644 (file)
@@ -49,6 +49,7 @@ enum {
   PROP_HEIGHT_MM,
   PROP_REFRESH_RATE,
   PROP_SUBPIXEL_LAYOUT,
+  PROP_VALID,
   LAST_PROP
 };
 
@@ -67,6 +68,7 @@ static void
 gdk_monitor_init (GdkMonitor *monitor)
 {
   monitor->scale_factor = 1;
+  monitor->valid = TRUE;
 }
 
 static void
@@ -123,6 +125,10 @@ gdk_monitor_get_property (GObject    *object,
       g_value_set_enum (value, monitor->subpixel_layout);
       break;
 
+    case PROP_VALID:
+      g_value_set_boolean (value, monitor->valid);
+      break;
+
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
     }
@@ -232,6 +238,12 @@ gdk_monitor_class_init (GdkMonitorClass *class)
                        GDK_TYPE_SUBPIXEL_LAYOUT,
                        GDK_SUBPIXEL_LAYOUT_UNKNOWN,
                        G_PARAM_READABLE);
+  props[PROP_VALID] =
+    g_param_spec_boolean ("valid",
+                          "Valid",
+                          "Whether the monitor is still valid",
+                          TRUE,
+                          G_PARAM_READABLE);
 
   g_object_class_install_properties (object_class, LAST_PROP, props);
 
@@ -595,5 +607,27 @@ gdk_monitor_set_subpixel_layout (GdkMonitor        *monitor,
 void
 gdk_monitor_invalidate (GdkMonitor *monitor)
 {
+  monitor->valid = FALSE;
+  g_object_notify (G_OBJECT (monitor), "valid");
   g_signal_emit (monitor, signals[INVALIDATE], 0);
 }
+
+/**
+ * gdk_monitor_is_valid:
+ * @monitor: a #GdkMonitor
+ *
+ * Returns %TRUE if the @monitor object corresponds to a
+ * physical monitor. The @monitor becomes invalid when the
+ * physical monitor is unplugged or removed.
+ *
+ * Returns: %TRUE if the object corresponds to a physical monitor
+ *
+ * Since: 3.94
+ */
+gboolean
+gdk_monitor_is_valid (GdkMonitor *monitor)
+{
+  g_return_val_if_fail (GDK_IS_MONITOR (monitor), FALSE);
+
+  return monitor->valid;
+}
index a12bfa8ac026eb2bc6236f4892633cc8583f0fca..887bbbd40ce2c726051e3b8d6880783fcdd9eca4 100644 (file)
@@ -89,6 +89,8 @@ GDK_AVAILABLE_IN_3_22
 GdkSubpixelLayout gdk_monitor_get_subpixel_layout (GdkMonitor   *monitor);
 GDK_AVAILABLE_IN_3_22
 gboolean          gdk_monitor_is_primary          (GdkMonitor   *monitor);
+GDK_AVAILABLE_IN_3_94
+gboolean          gdk_monitor_is_valid            (GdkMonitor   *monitor);
 
 G_END_DECLS
 
index c76b59ce9048c926912f7391ead2c23596a6a9e0..a2c7b5c86b6f1e6a6d32b0544abc4b27f4f68831 100644 (file)
@@ -42,6 +42,7 @@ struct _GdkMonitor {
   int scale_factor;
   int refresh_rate;
   GdkSubpixelLayout subpixel_layout;
+  gboolean valid;
 };
 
 struct _GdkMonitorClass {