metacity r4090 - in trunk: . src/core



Author: tthurman
Date: Tue Jan 27 05:03:06 2009
New Revision: 4090
URL: http://svn.gnome.org/viewvc/metacity?rev=4090&view=rev

Log:
        All the window properties are now handled using simple
        window property handlers.  Closes #549886.
	* src/core/window-private.h:
	* src/core/window-props.c:
	* src/core/window.c:



Modified:
   trunk/ChangeLog
   trunk/src/core/window-private.h
   trunk/src/core/window-props.c
   trunk/src/core/window.c

Modified: trunk/src/core/window-private.h
==============================================================================
--- trunk/src/core/window-private.h	(original)
+++ trunk/src/core/window-private.h	Tue Jan 27 05:03:06 2009
@@ -629,4 +629,7 @@
 
 void meta_window_update_icon_now (MetaWindow *window);
 
+void meta_window_update_role (MetaWindow *window);
+void meta_window_update_net_wm_type (MetaWindow *window);
+
 #endif

Modified: trunk/src/core/window-props.c
==============================================================================
--- trunk/src/core/window-props.c	(original)
+++ trunk/src/core/window-props.c	Tue Jan 27 05:03:06 2009
@@ -196,6 +196,65 @@
 }
 
 static void
+complain_about_broken_client (MetaWindow    *window,
+                              MetaPropValue *value,
+                              gboolean       initial)
+{
+  meta_warning ("Broken client! Window %s changed client leader window or SM client ID\n",
+                window->desc);
+}
+
+static void
+reload_net_wm_window_type (MetaWindow    *window,
+                           MetaPropValue *value,
+                           gboolean       initial)
+{
+  meta_window_update_net_wm_type (window);
+}
+
+static void
+reload_icon (MetaWindow    *window,
+             Atom           atom)
+{
+  meta_icon_cache_property_changed (&window->icon_cache,
+                                    window->display,
+                                    atom);
+  meta_window_queue(window, META_QUEUE_UPDATE_ICON);
+}
+
+static void
+reload_net_wm_icon (MetaWindow    *window,
+                    MetaPropValue *value,
+                    gboolean       initial)
+{
+  reload_icon (window, window->display->atom__NET_WM_ICON);
+}
+
+static void
+reload_kwm_win_icon (MetaWindow    *window,
+                     MetaPropValue *value,
+                     gboolean       initial)
+{
+  reload_icon (window, window->display->atom__KWM_WIN_ICON);
+}
+
+static void
+reload_struts (MetaWindow    *window,
+               MetaPropValue *value,
+               gboolean       initial)
+{
+  meta_window_update_struts (window);
+}
+
+static void
+reload_wm_window_role (MetaWindow    *window,
+                       MetaPropValue *value,
+                       gboolean       initial)
+{
+  meta_window_update_role (window);
+}
+
+static void
 init_net_wm_pid (MetaDisplay   *display,
                  Atom           property,
                  MetaPropValue *value)
@@ -565,6 +624,13 @@
    * clients don't change the property.
    */
 
+  if (!initial) {
+    /* no, they DON'T change the property */
+    meta_verbose ("Ignoring _NET_WM_STATE: we should be the one who set "
+                  "the property in the first place\n");
+    return;
+  }
+
   window->shaded = FALSE;
   window->maximized_horizontally = FALSE;
   window->maximized_vertically = FALSE;
@@ -1488,7 +1554,7 @@
     meta_window_queue (window, META_QUEUE_MOVE_RESIZE);
 }
 
-#define N_HOOKS 26
+#define N_HOOKS 28
 
 void
 meta_display_init_window_prop_hooks (MetaDisplay *display)
@@ -1533,6 +1599,16 @@
   hooks[i].reload_func = reload_wm_name;
   ++i;
 
+  hooks[i].property = display->atom__NET_WM_ICON;
+  hooks[i].init_func = NULL;
+  hooks[i].reload_func = reload_net_wm_icon;
+  ++i;
+
+  hooks[i].property = display->atom__KWM_WIN_ICON;
+  hooks[i].init_func = NULL;
+  hooks[i].reload_func = reload_kwm_win_icon;
+  ++i;
+
   hooks[i].property = display->atom__NET_WM_ICON_NAME;
   hooks[i].init_func = init_net_wm_icon_name;
   hooks[i].reload_func = reload_net_wm_icon_name;
@@ -1565,22 +1641,22 @@
 
   hooks[i].property = display->atom_WM_CLIENT_LEADER;
   hooks[i].init_func = NULL;
-  hooks[i].reload_func = NULL;
+  hooks[i].reload_func = complain_about_broken_client;
   ++i;
 
   hooks[i].property = display->atom_SM_CLIENT_ID;
   hooks[i].init_func = NULL;
-  hooks[i].reload_func = NULL;
+  hooks[i].reload_func = complain_about_broken_client;
   ++i;
 
   hooks[i].property = display->atom_WM_WINDOW_ROLE;
   hooks[i].init_func = NULL;
-  hooks[i].reload_func = NULL;
+  hooks[i].reload_func = reload_wm_window_role;
   ++i;
 
   hooks[i].property = display->atom__NET_WM_WINDOW_TYPE;
   hooks[i].init_func = NULL;
-  hooks[i].reload_func = NULL;
+  hooks[i].reload_func = reload_net_wm_window_type;
   ++i;
 
   hooks[i].property = display->atom__NET_WM_DESKTOP;
@@ -1590,12 +1666,12 @@
 
   hooks[i].property = display->atom__NET_WM_STRUT;
   hooks[i].init_func = NULL;
-  hooks[i].reload_func = NULL;
+  hooks[i].reload_func = reload_struts;
   ++i;
 
   hooks[i].property = display->atom__NET_WM_STRUT_PARTIAL;
   hooks[i].init_func = NULL;
-  hooks[i].reload_func = NULL;
+  hooks[i].reload_func = reload_struts;
   ++i;
 
   hooks[i].property = display->atom__NET_STARTUP_ID;

Modified: trunk/src/core/window.c
==============================================================================
--- trunk/src/core/window.c	(original)
+++ trunk/src/core/window.c	Tue Jan 27 05:03:06 2009
@@ -57,8 +57,6 @@
 
 
 static void     update_sm_hints           (MetaWindow     *window);
-static void     update_role               (MetaWindow     *window);
-static void     update_net_wm_type        (MetaWindow     *window);
 static void     update_net_frame_extents  (MetaWindow     *window);
 static void     recalc_window_type        (MetaWindow     *window);
 static void     recalc_window_features    (MetaWindow     *window);
@@ -598,8 +596,8 @@
   meta_window_reload_properties (window, initial_props, N_INITIAL_PROPS, TRUE);
   
   update_sm_hints (window); /* must come after transient_for */
-  update_role (window);
-  update_net_wm_type (window);
+  meta_window_update_role (window);
+  meta_window_update_net_wm_type (window);
   meta_window_update_icon_now (window);
 
   if (window->initially_iconic)
@@ -5431,11 +5429,7 @@
 process_property_notify (MetaWindow     *window,
                          XPropertyEvent *event)
 {
-  /* Property notifies we want to use.
-   * FIXME once we move entirely to the window-props.h framework, we
-   * can just call reload on the property in the event and get rid of
-   * this if-else chain.
-   */
+  Window xid = window->xwindow;
 
   if (meta_is_verbose ()) /* avoid looking up the name if we don't have to */
     {
@@ -5447,62 +5441,13 @@
       XFree (property_name);
     }
  
-  if (event->atom == window->display->atom_WM_WINDOW_ROLE)
-    {
-      update_role (window);
-    }
-  else if (event->atom ==
-           window->display->atom_WM_CLIENT_LEADER ||
-           event->atom ==
-           window->display->atom_SM_CLIENT_ID)
-    {
-      meta_warning ("Broken client! Window %s changed client leader window or SM client ID\n", window->desc);
-    }
-  else if (event->atom ==
-           window->display->atom__NET_WM_STATE)
-    {
-      meta_verbose ("Ignoring _NET_WM_STATE: we should be the one who set the property in the first place\n");
-    }
-  else if (event->atom ==
-           window->display->atom__NET_WM_WINDOW_TYPE)
-    {
-      update_net_wm_type (window);
-    }
-  else if (event->atom == window->display->atom__NET_WM_ICON)
-    {
-      meta_icon_cache_property_changed (&window->icon_cache,
-                                        window->display,
-                                        event->atom);
-      meta_window_queue(window, META_QUEUE_UPDATE_ICON);
-    }
-  else if (event->atom == window->display->atom__KWM_WIN_ICON)
+  if (event->atom == window->display->atom__NET_WM_USER_TIME &&
+      window->user_time_window)
     {
-      meta_icon_cache_property_changed (&window->icon_cache,
-                                        window->display,
-                                        event->atom);
-      meta_window_queue(window, META_QUEUE_UPDATE_ICON);
+      xid = window->user_time_window;
     }
-  else if ((event->atom == window->display->atom__NET_WM_STRUT) ||
-	   (event->atom == window->display->atom__NET_WM_STRUT_PARTIAL))
-    {
-      meta_window_update_struts (window);
-    }
-  else if (event->atom == window->display->atom__NET_WM_USER_TIME)
-    {
-      Window xid;
-      Atom atom__NET_WM_USER_TIME;
 
-      atom__NET_WM_USER_TIME = window->display->atom__NET_WM_USER_TIME;
-      if (window->user_time_window)
-        xid = window->user_time_window;
-      else
-        xid = window->xwindow;
-      meta_window_reload_property_from_xwindow (window,
-                                                xid,
-                                                atom__NET_WM_USER_TIME, FALSE);
-    }
-  else
-    meta_window_reload_property (window, event->atom, FALSE);
+  meta_window_reload_property (window, event->atom, FALSE);
 
   return TRUE;
 }
@@ -5692,8 +5637,8 @@
                 window->sm_client_id ? window->sm_client_id : "none");
 }
 
-static void
-update_role (MetaWindow *window)
+void
+meta_window_update_role (MetaWindow *window)
 {
   char *str;
   
@@ -5713,8 +5658,8 @@
                 window->desc, window->role ? window->role : "null");
 }
 
-static void
-update_net_wm_type (MetaWindow *window)
+void
+meta_window_update_net_wm_type (MetaWindow *window)
 {
   int n_atoms;
   Atom *atoms;
@@ -5771,7 +5716,7 @@
         meta_XFree (str);
     }
   
-  recalc_window_type (window);
+  meta_window_recalc_window_type (window);
 }
 
 static void



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