gdk: Add a GdkWindow::state property
authorMatthias Clasen <mclasen@redhat.com>
Thu, 14 Dec 2017 23:51:38 +0000 (18:51 -0500)
committerMatthias Clasen <mclasen@redhat.com>
Fri, 15 Dec 2017 03:24:06 +0000 (22:24 -0500)
This will eventually replace the window state event.

gdk/gdkevents.c
gdk/gdkwindow.c

index db702b2a634430b491913d439f5c1cb62fbc12a6..32da413ec41602d1fd10cac95b18d397fcae3462 100644 (file)
@@ -2013,6 +2013,7 @@ _gdk_set_window_state (GdkWindow      *window,
     case GDK_WINDOW_TOPLEVEL:
     case GDK_WINDOW_TEMP: /* ? */
       gdk_display_put_event (display, temp_event);
+      g_object_notify (G_OBJECT (window), "state");
       break;
     case GDK_WINDOW_FOREIGN:
     case GDK_WINDOW_ROOT:
index e6f9fa3791471775fb7d1555786ae8dffc34c3f5..931079d5777cba4a5950116fbcac391800b6780d 100644 (file)
@@ -100,6 +100,7 @@ enum {
   PROP_0,
   PROP_CURSOR,
   PROP_DISPLAY,
+  PROP_STATE,
   LAST_PROP
 };
 
@@ -275,6 +276,13 @@ gdk_window_class_init (GdkWindowClass *klass)
                            GDK_TYPE_DISPLAY,
                            G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
 
+  properties[PROP_STATE] =
+      g_param_spec_flags ("state",
+                          P_("State"),
+                          P_("State"),
+                          GDK_TYPE_WINDOW_STATE, GDK_WINDOW_STATE_WITHDRAWN,
+                          G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
+
   g_object_class_install_properties (object_class, LAST_PROP, properties);
 
   /**
@@ -435,6 +443,10 @@ gdk_window_get_property (GObject    *object,
       g_value_set_object (value, window->display);
       break;
 
+    case PROP_STATE:
+      g_value_set_flags (value, window->state);
+      break;
+
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
@@ -1345,6 +1357,8 @@ _gdk_window_destroy_hierarchy (GdkWindow *window,
              cairo_region_destroy (window->clip_region);
              window->clip_region = NULL;
            }
+
+          g_object_notify_by_pspec (G_OBJECT (window), properties[PROP_STATE]);
        }
       break;
     }
@@ -3343,6 +3357,7 @@ gdk_window_show_internal (GdkWindow *window, gboolean raise)
   else
     {
       window->state = 0;
+      g_object_notify_by_pspec (G_OBJECT (window), properties[PROP_STATE]);
     }
 
   did_show = _gdk_window_update_viewable (window);
@@ -3622,7 +3637,10 @@ gdk_window_hide (GdkWindow *window)
                                     GDK_WINDOW_STATE_WITHDRAWN);
     }
   else if (was_mapped)
-    window->state = GDK_WINDOW_STATE_WITHDRAWN;
+    {
+      window->state = GDK_WINDOW_STATE_WITHDRAWN;
+      g_object_notify_by_pspec (G_OBJECT (window), properties[PROP_STATE]);
+    }
 
   if (was_mapped)
     {