[mutter] window: Make sure override_redirect window have correct monitor info



commit 8ab136b7eae11a244c8bbda159418a64eaf878bb
Author: Adel Gadllah <adel gadllah gmail com>
Date:   Mon Jun 24 09:49:44 2013 +0200

    window: Make sure override_redirect window have correct monitor info
    
    We need to update window->monitor on override_redirect windows as well, other
    wise they may end up with an invalid struct which triggers and assert when
    meta_window_is_monitor_sized is called.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=702564

 src/core/screen.c |    2 +-
 src/core/window.c |    8 ++++++++
 2 files changed, 9 insertions(+), 1 deletions(-)
---
diff --git a/src/core/screen.c b/src/core/screen.c
index 200724a..6db3ea3 100644
--- a/src/core/screen.c
+++ b/src/core/screen.c
@@ -3039,7 +3039,7 @@ meta_screen_resize (MetaScreen *screen,
 
   /* Fix up monitor for all windows on this screen */
   windows = meta_display_list_windows (screen->display,
-                                       META_LIST_DEFAULT);
+                                       META_LIST_INCLUDE_OVERRIDE_REDIRECT);
   for (tmp = windows; tmp != NULL; tmp = tmp->next)
     {
       MetaWindow *window = tmp->data;
diff --git a/src/core/window.c b/src/core/window.c
index 7104e60..66e37e1 100644
--- a/src/core/window.c
+++ b/src/core/window.c
@@ -145,6 +145,8 @@ static void meta_window_move_between_rects (MetaWindow          *window,
 static void unmaximize_window_before_freeing (MetaWindow        *window);
 static void unminimize_window_and_all_transient_parents (MetaWindow *window);
 
+static void meta_window_update_monitor (MetaWindow *window);
+
 /* Idle handlers for the three queues (run with meta_later_add()). The
  * "data" parameter in each case will be a GINT_TO_POINTER of the
  * index into the queue arrays to use.
@@ -4767,6 +4769,12 @@ meta_window_update_for_monitors_changed (MetaWindow *window)
   if (window->type == META_WINDOW_DESKTOP)
     return;
 
+  if (window->override_redirect)
+    {
+      meta_window_update_monitor (window);
+      return;
+    }
+
   old = window->monitor;
 
   /* Start on primary */


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