metacity r3816 - in trunk: . src/core



Author: tthurman
Date: Sat Aug 16 03:09:40 2008
New Revision: 3816
URL: http://svn.gnome.org/viewvc/metacity?rev=3816&view=rev

Log:
2008-08-16  Ted Percival  <ted midg3t net>

        Ensure the user_rect is set sanely for windows that start maximized.
        Prevents maximized windows from warping across the screen.
        Fixes bug #504692.

        * src/core/window.c (save_user_placement): renamed version of
        meta_window_save_user_rect().
        * src/core/window.c (force_save_user_placement): similar, but will
        always save user_rect even if the window is maximised or fullscreen.
        * src/core/window.c (meta_window_move_resize_internal): unplaced
        windows have force_save_user_placement() called instead of
        save_user_placement().



Modified:
   trunk/ChangeLog
   trunk/src/core/window.c

Modified: trunk/src/core/window.c
==============================================================================
--- trunk/src/core/window.c	(original)
+++ trunk/src/core/window.c	Sat Aug 16 03:09:40 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



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