metacity r3819 - in branches/gnome-2-24: . src/core



Author: tthurman
Date: Mon Aug 18 12:49:28 2008
New Revision: 3819
URL: http://svn.gnome.org/viewvc/metacity?rev=3819&view=rev

Log:
2008-08-18  Thomas Thurman  <tthurman gnome org>

        * Cherrypick bugfixes from trunk.



Modified:
   branches/gnome-2-24/ChangeLog
   branches/gnome-2-24/src/core/window.c
   branches/gnome-2-24/src/core/workspace.c

Modified: branches/gnome-2-24/src/core/window.c
==============================================================================
--- branches/gnome-2-24/src/core/window.c	(original)
+++ branches/gnome-2-24/src/core/window.c	Mon Aug 18 12:49:28 2008
@@ -75,7 +75,8 @@
 static void     meta_window_hide          (MetaWindow     *window);
 
 static void     meta_window_save_rect         (MetaWindow    *window);
-static void     meta_window_save_user_rect    (MetaWindow    *window);
+static void     save_user_window_placement    (MetaWindow    *window);
+static void     force_save_user_window_placement (MetaWindow    *window);
 
 static void meta_window_move_resize_internal (MetaWindow         *window,
                                               MetaMoveResizeFlags flags,
@@ -2450,11 +2451,28 @@
     }
 }
 
+/**
+ * Save the user_rect regardless of whether the window is maximized or
+ * fullscreen. See save_user_window_placement() for most uses.
+ *
+ * \param window  Store current position of this window for future reference
+ */
+static void
+force_save_user_window_placement (MetaWindow *window)
+{
+  meta_window_get_client_root_coords (window, &window->user_rect);
+}
+
+/**
+ * Save the user_rect, but only if the window is neither maximized nor
+ * fullscreen, otherwise the window may snap back to those dimensions
+ * (bug #461927).
+ *
+ * \param window  Store current position of this window for future reference
+ */
 static void
-meta_window_save_user_rect (MetaWindow *window)
+save_user_window_placement (MetaWindow *window)
 {
-  /* We do not save maximized or fullscreen dimensions, otherwise the
-   * window may snap back to those dimensions (Bug #461927). */
   if (!(META_WINDOW_MAXIMIZED (window) || window->fullscreen))
     {
       MetaRectangle user_rect;
@@ -3520,13 +3538,11 @@
   if (need_configure_notify)
     send_configure_notify (window);
 
-  /* user_rect is the position to restore towards if strut changes occur.  Thus
-   * we want user_rect to reflect user position/size changes OR the initial
-   * placement of the window.
-   */
-  if (is_user_action || !window->placed)
-    meta_window_save_user_rect(window);
-  
+  if (!window->placed)
+    force_save_user_window_placement (window);
+  else if (is_user_action)
+    save_user_window_placement (window);
+
   if (need_move_frame || need_resize_frame ||
       need_move_client || need_resize_client)
     {
@@ -4568,7 +4584,7 @@
    *
    * See also bug 426519.
    */
-  meta_window_save_user_rect(window);
+  save_user_window_placement (window);
 }
 
 gboolean

Modified: branches/gnome-2-24/src/core/workspace.c
==============================================================================
--- branches/gnome-2-24/src/core/workspace.c	(original)
+++ branches/gnome-2-24/src/core/workspace.c	Mon Aug 18 12:49:28 2008
@@ -514,9 +514,12 @@
       MetaWindow *win = tmp->data;
       GSList *s_iter;
 
-      for (s_iter = win->struts; s_iter != NULL; s_iter = s_iter->next)
+      for (s_iter = win->struts; s_iter != NULL; s_iter = s_iter->next) {
+        MetaStrut *cpy = g_new (MetaStrut, 1);
+        *cpy = *((MetaStrut *)s_iter->data);
         workspace->all_struts = g_slist_prepend (workspace->all_struts,
-                                                 s_iter->data);
+                                                 cpy);
+      }
     }
   g_list_free (windows);
 



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