[mutter/wip/rstrode/rhel-8.0.0: 12/117] window: Force update monitor on hot plugs



commit 8a74b269a619ef3257d5f0398215d024bd692495
Author: Jonas Ã…dahl <jadahl gmail com>
Date:   Fri Aug 24 12:56:31 2018 +0200

    window: Force update monitor on hot plugs
    
    Commit a3da4b8d5bd217c0262fd9361036877d155a300f changed updating of
    window monitors to always use take affect when it was done from a
    non-user operation. This could cause feed back loops when a non-user
    driven operation would trigger the changing of a monitor, which itself
    would trigger changing of the monitor again due to a window scale
    change.
    
    The reason for the change, was that when the window monitor changed due
    to a hot plug, if it didn't actually change, eventually the window
    monitor pointer would be pointing to freed memory.
    
    Instead of force updating the monitor on all non-user operations, just
    do it on hot plugs. This allows for the feedback loop preventing logic
    to still do what its supposed to do, without risking dangling pointers
    on hot plugs.
    
    Related: https://gitlab.gnome.org/GNOME/mutter/issues/189
    Closes: https://gitlab.gnome.org/GNOME/mutter/issues/192
    
    (cherry picked from commit 8d3e053059cd202e740076caedfc8e3ac149066a)

 src/core/window-private.h | 1 +
 src/core/window.c         | 4 ++--
 2 files changed, 3 insertions(+), 2 deletions(-)
---
diff --git a/src/core/window-private.h b/src/core/window-private.h
index bed2fc7f6..8552829b2 100644
--- a/src/core/window-private.h
+++ b/src/core/window-private.h
@@ -125,6 +125,7 @@ typedef enum _MetaWindowUpdateMonitorFlags
 {
   META_WINDOW_UPDATE_MONITOR_FLAGS_NONE = 0,
   META_WINDOW_UPDATE_MONITOR_FLAGS_USER_OP = 1 << 0,
+  META_WINDOW_UPDATE_MONITOR_FLAGS_FORCE = 1 << 1,
 } MetaWindowUpdateMonitorFlags;
 
 typedef struct _MetaPlacementRule
diff --git a/src/core/window.c b/src/core/window.c
index ad4059704..07f826bb5 100644
--- a/src/core/window.c
+++ b/src/core/window.c
@@ -3803,7 +3803,7 @@ meta_window_update_for_monitors_changed (MetaWindow *window)
   if (window->override_redirect || window->type == META_WINDOW_DESKTOP)
     {
       meta_window_update_monitor (window,
-                                  META_WINDOW_UPDATE_MONITOR_FLAGS_NONE);
+                                  META_WINDOW_UPDATE_MONITOR_FLAGS_FORCE);
       return;
     }
 
@@ -3839,7 +3839,7 @@ meta_window_update_for_monitors_changed (MetaWindow *window)
   else
     {
       meta_window_update_monitor (window,
-                                  META_WINDOW_UPDATE_MONITOR_FLAGS_NONE);
+                                  META_WINDOW_UPDATE_MONITOR_FLAGS_FORCE);
     }
 }
 


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