[mutter] window: Move _NET_WM_DESKTOP setting to window-x11



commit d02505852d4eea2772bed7e726e51b989655749c
Author: Jasper St. Pierre <jstpierre mecheye net>
Date:   Tue May 20 15:46:21 2014 -0400

    window: Move _NET_WM_DESKTOP setting to window-x11

 src/core/window-private.h |    5 ++---
 src/core/window.c         |   44 ++++++++++----------------------------------
 src/core/workspace.c      |    6 +++---
 src/x11/window-x11.c      |   37 +++++++++++++++++++++++++++++++++++++
 4 files changed, 52 insertions(+), 40 deletions(-)
---
diff --git a/src/core/window-private.h b/src/core/window-private.h
index cf26b7f..f0bcc4d 100644
--- a/src/core/window-private.h
+++ b/src/core/window-private.h
@@ -477,6 +477,7 @@ struct _MetaWindowClass
                                   MetaGrabOp  op);
   void (*grab_op_ended)          (MetaWindow *window,
                                   MetaGrabOp  op);
+  void (*current_workspace_changed) (MetaWindow *window);
   void (*move_resize_internal)   (MetaWindow                *window,
                                   int                        gravity,
                                   MetaRectangle              requested_rect,
@@ -615,9 +616,7 @@ void        meta_window_update_unfocused_button_grabs (MetaWindow *window);
 void     meta_window_set_focused_internal (MetaWindow *window,
                                            gboolean    focused);
 
-void     meta_window_set_current_workspace_hint (MetaWindow *window);
-
-unsigned long meta_window_get_net_wm_desktop (MetaWindow *window);
+void     meta_window_current_workspace_changed (MetaWindow *window);
 
 void meta_window_show_menu (MetaWindow *window);
 
diff --git a/src/core/window.c b/src/core/window.c
index cab1994..0e2427a 100644
--- a/src/core/window.c
+++ b/src/core/window.c
@@ -205,6 +205,11 @@ meta_window_real_grab_op_ended (MetaWindow *window,
   window->shaken_loose = FALSE;
 }
 
+static void
+meta_window_real_current_workspace_changed (MetaWindow *window)
+{
+}
+
 static gboolean
 meta_window_real_update_struts (MetaWindow *window)
 {
@@ -378,6 +383,7 @@ meta_window_class_init (MetaWindowClass *klass)
 
   klass->grab_op_began = meta_window_real_grab_op_began;
   klass->grab_op_ended = meta_window_real_grab_op_ended;
+  klass->current_workspace_changed = meta_window_real_current_workspace_changed;
   klass->update_struts = meta_window_real_update_struts;
   klass->get_default_skip_hints = meta_window_real_get_default_skip_hints;
 
@@ -1130,7 +1136,7 @@ _meta_window_shared_new (MetaDisplay         *display,
         }
 
       /* for the various on_all_workspaces = TRUE possible above */
-      meta_window_set_current_workspace_hint (window);
+      meta_window_current_workspace_changed (window);
 
       meta_window_update_struts (window);
     }
@@ -1502,7 +1508,7 @@ meta_window_update_on_all_workspaces (MetaWindow *window)
               tmp = tmp->next;
             }
         }
-      meta_window_set_current_workspace_hint (window);
+      meta_window_current_workspace_changed (window);
     }
 }
 
@@ -4637,40 +4643,10 @@ meta_window_unstick (MetaWindow  *window)
                                  &stick);
 }
 
-unsigned long
-meta_window_get_net_wm_desktop (MetaWindow *window)
-{
-  if (window->on_all_workspaces)
-    return 0xFFFFFFFF;
-  else
-    return meta_workspace_index (window->workspace);
-}
-
 void
-meta_window_set_current_workspace_hint (MetaWindow *window)
+meta_window_current_workspace_changed (MetaWindow *window)
 {
-  /* FIXME if on more than one workspace, we claim to be "sticky",
-   * the WM spec doesn't say what to do here.
-   */
-  unsigned long data[1];
-
-  if (window->workspace == NULL)
-    {
-      /* this happens when unmanaging windows */
-      return;
-    }
-
-  data[0] = meta_window_get_net_wm_desktop (window);
-
-  meta_verbose ("Setting _NET_WM_DESKTOP of %s to %lu\n",
-                window->desc, data[0]);
-
-  meta_error_trap_push (window->display);
-  XChangeProperty (window->display->xdisplay, window->xwindow,
-                   window->display->atom__NET_WM_DESKTOP,
-                   XA_CARDINAL,
-                   32, PropModeReplace, (guchar*) data, 1);
-  meta_error_trap_pop (window->display);
+  META_WINDOW_GET_CLASS (window)->current_workspace_changed (window);
 }
 
 static gboolean
diff --git a/src/core/workspace.c b/src/core/workspace.c
index 80c38f8..419adb9 100644
--- a/src/core/workspace.c
+++ b/src/core/workspace.c
@@ -342,7 +342,7 @@ meta_workspace_add_window (MetaWorkspace *workspace,
 
   window->workspace = workspace;
 
-  meta_window_set_current_workspace_hint (window);
+  meta_window_current_workspace_changed (window);
 
   if (window->struts)
     {
@@ -391,7 +391,7 @@ meta_workspace_remove_window (MetaWorkspace *workspace,
       g_assert (g_list_find (workspace->mru_list, window) == NULL);
     }
 
-  meta_window_set_current_workspace_hint (window);
+  meta_window_current_workspace_changed (window);
 
   if (window->struts)
     {
@@ -718,7 +718,7 @@ meta_workspace_update_window_hints (MetaWorkspace *workspace)
     {
       MetaWindow *win = l->data;
 
-      meta_window_set_current_workspace_hint (win);
+      meta_window_current_workspace_changed (win);
 
       l = l->next;
     }
diff --git a/src/x11/window-x11.c b/src/x11/window-x11.c
index fd4efe3..85dcaba 100644
--- a/src/x11/window-x11.c
+++ b/src/x11/window-x11.c
@@ -945,6 +945,42 @@ send_sync_request (MetaWindow *window)
                                       meta_window_updates_are_frozen (window));
 }
 
+static unsigned long
+meta_window_get_net_wm_desktop (MetaWindow *window)
+{
+  if (window->on_all_workspaces)
+    return 0xFFFFFFFF;
+  else
+    return meta_workspace_index (window->workspace);
+}
+
+static void
+meta_window_x11_current_workspace_changed (MetaWindow *window)
+{
+  /* FIXME if on more than one workspace, we claim to be "sticky",
+   * the WM spec doesn't say what to do here.
+   */
+  unsigned long data[1];
+
+  if (window->workspace == NULL)
+    {
+      /* this happens when unmanaging windows */
+      return;
+    }
+
+  data[0] = meta_window_get_net_wm_desktop (window);
+
+  meta_verbose ("Setting _NET_WM_DESKTOP of %s to %lu\n",
+                window->desc, data[0]);
+
+  meta_error_trap_push (window->display);
+  XChangeProperty (window->display->xdisplay, window->xwindow,
+                   window->display->atom__NET_WM_DESKTOP,
+                   XA_CARDINAL,
+                   32, PropModeReplace, (guchar*) data, 1);
+  meta_error_trap_pop (window->display);
+}
+
 static void
 meta_window_x11_move_resize_internal (MetaWindow                *window,
                                       int                        gravity,
@@ -1426,6 +1462,7 @@ meta_window_x11_class_init (MetaWindowX11Class *klass)
   window_class->focus = meta_window_x11_focus;
   window_class->grab_op_began = meta_window_x11_grab_op_began;
   window_class->grab_op_ended = meta_window_x11_grab_op_ended;
+  window_class->current_workspace_changed = meta_window_x11_current_workspace_changed;
   window_class->move_resize_internal = meta_window_x11_move_resize_internal;
   window_class->update_struts = meta_window_x11_update_struts;
   window_class->get_default_skip_hints = meta_window_x11_get_default_skip_hints;


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