]> Pileus Git - ~andy/gtk/commitdiff
Make tracking the on_all_desktops state work better.
authorMatthias Clasen <mclasen@redhat.com>
Mon, 1 Aug 2005 16:01:24 +0000 (16:01 +0000)
committerMatthias Clasen <matthiasc@src.gnome.org>
Mon, 1 Aug 2005 16:01:24 +0000 (16:01 +0000)
2005-08-01  Matthias Clasen  <mclasen@redhat.com>

* gdk/x11/gdkevents-x11.c (gdk_check_wm_desktop_changed): Make
tracking the on_all_desktops state work better.

* gdk/x11/gdkwindow-x11.c (gdk_x11_window_move_to_current_desktop):
Don't do anything if the window is on all desktops.  (#311803,
Elijah Newren)

ChangeLog
ChangeLog.pre-2-10
ChangeLog.pre-2-8
gdk/x11/gdkevents-x11.c
gdk/x11/gdkwindow-x11.c

index 5ea2255f796949a8e5b6213dd16dfa38de11d4ab..a0999c62ba33e5f6a3c64872963de4b4d8334859 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2005-08-01  Matthias Clasen  <mclasen@redhat.com>
+
+       * gdk/x11/gdkevents-x11.c (gdk_check_wm_desktop_changed): Make
+       tracking the on_all_desktops state work better.
+
+       * gdk/x11/gdkwindow-x11.c (gdk_x11_window_move_to_current_desktop): 
+       Don't do anything if the window is on all desktops.  (#311803,
+       Elijah Newren)
+
 2005-08-01  Dom Lachowicz <cinamod@hotmail.com>
 
        * modules/engines/ms-windows/Theme/gtk-2.0/gtkrc: Part of #168326
index 5ea2255f796949a8e5b6213dd16dfa38de11d4ab..a0999c62ba33e5f6a3c64872963de4b4d8334859 100644 (file)
@@ -1,3 +1,12 @@
+2005-08-01  Matthias Clasen  <mclasen@redhat.com>
+
+       * gdk/x11/gdkevents-x11.c (gdk_check_wm_desktop_changed): Make
+       tracking the on_all_desktops state work better.
+
+       * gdk/x11/gdkwindow-x11.c (gdk_x11_window_move_to_current_desktop): 
+       Don't do anything if the window is on all desktops.  (#311803,
+       Elijah Newren)
+
 2005-08-01  Dom Lachowicz <cinamod@hotmail.com>
 
        * modules/engines/ms-windows/Theme/gtk-2.0/gtkrc: Part of #168326
index 5ea2255f796949a8e5b6213dd16dfa38de11d4ab..a0999c62ba33e5f6a3c64872963de4b4d8334859 100644 (file)
@@ -1,3 +1,12 @@
+2005-08-01  Matthias Clasen  <mclasen@redhat.com>
+
+       * gdk/x11/gdkevents-x11.c (gdk_check_wm_desktop_changed): Make
+       tracking the on_all_desktops state work better.
+
+       * gdk/x11/gdkwindow-x11.c (gdk_x11_window_move_to_current_desktop): 
+       Don't do anything if the window is on all desktops.  (#311803,
+       Elijah Newren)
+
 2005-08-01  Dom Lachowicz <cinamod@hotmail.com>
 
        * modules/engines/ms-windows/Theme/gtk-2.0/gtkrc: Part of #168326
index afbfedb9769144b90cf36a762d7d89c98ffabb4b..63a22cbd3644d88e2336420528290fe0311d4f72 100644 (file)
@@ -409,7 +409,7 @@ do_net_wm_state_changes (GdkWindow *window)
     }
   else
     {
-      if (toplevel->have_sticky && toplevel->on_all_desktops)
+      if (toplevel->have_sticky || toplevel->on_all_desktops)
         gdk_synthesize_window_state (window,
                                      0,
                                      GDK_WINDOW_STATE_STICKY);
@@ -459,33 +459,29 @@ gdk_check_wm_desktop_changed (GdkWindow *window)
   gint format;
   gulong nitems;
   gulong bytes_after;
+  guchar *data;
+  gulong *desktop;
+
+  type = None;
+  gdk_error_trap_push ();
+  XGetWindowProperty (GDK_DISPLAY_XDISPLAY (display), 
+                      GDK_WINDOW_XID (window),
+                      gdk_x11_get_xatom_by_name_for_display (display, "_NET_WM_DESKTOP"),
+                      0, G_MAXLONG, False, XA_CARDINAL, &type, 
+                      &format, &nitems,
+                      &bytes_after, &data);
+  gdk_error_trap_pop ();
 
-  if (toplevel->have_sticky)
+  if (type != None)
     {
-      guchar *data;
-      gulong *desktop;
-      
-      type = None;
-      gdk_error_trap_push ();
-      XGetWindowProperty (GDK_DISPLAY_XDISPLAY (display), 
-                         GDK_WINDOW_XID (window),
-                          gdk_x11_get_xatom_by_name_for_display (display, "_NET_WM_DESKTOP"),
-                         0, G_MAXLONG, False, XA_CARDINAL, &type, 
-                         &format, &nitems,
-                          &bytes_after, &data);
-      gdk_error_trap_pop ();
-
-      if (type != None)
-        {
-         desktop = (gulong *)data;
-          toplevel->on_all_desktops = (*desktop == 0xFFFFFFFF);
-          XFree (desktop);
-        }
-      else
-       toplevel->on_all_desktops = FALSE;
-      
-      do_net_wm_state_changes (window);
+      desktop = (gulong *)data;
+      toplevel->on_all_desktops = (*desktop == 0xFFFFFFFF);
+      XFree (desktop);
     }
+  else
+    toplevel->on_all_desktops = FALSE;
+      
+  do_net_wm_state_changes (window);
 }
 
 static void
index ca82cfc2de14ecf1d51c6266e9b7ea12eea07db9..b2ced14ac6af528b1276d19aa90da0a6132d55b4 100644 (file)
@@ -2027,13 +2027,20 @@ gdk_window_lower (GdkWindow *window)
  * Moves the window to the correct workspace when running under a 
  * window manager that supports multiple workspaces, as described
  * in the <ulink url="http://www.freedesktop.org/Standards/wm-spec">Extended 
- * Window Manager Hints</ulink>.
+ * Window Manager Hints</ulink>.  Will not do anything if the
+ * window is already on all workspaces.
  * 
  * Since: 2.8
  */
 void
 gdk_x11_window_move_to_current_desktop (GdkWindow *window)
 {
+  GdkToplevelX11 *toplevel;
+  toplevel = _gdk_x11_window_get_toplevel (window);
+
+  if (toplevel->on_all_desktops)
+    return;
+
   if (gdk_x11_screen_supports_net_wm_hint (GDK_WINDOW_SCREEN (window),
                                           gdk_atom_intern ("_NET_WM_DESKTOP", FALSE)))
     {