diff --git a/plugins/maskcorners/Main.vala b/plugins/maskcorners/Main.vala index 1954e090..670ac4f9 100644 --- a/plugins/maskcorners/Main.vala +++ b/plugins/maskcorners/Main.vala @@ -71,10 +71,18 @@ namespace Gala.Plugins.MaskCorners screen.in_fullscreen_changed.connect (fullscreen_changed); screen.monitors_changed.connect (resetup_cornermasks); + +#if HAS_MUTTER322 + screen.get_display ().gl_video_memory_purged.connect (resetup_cornermasks); +#endif } void destroy_cornermasks () { +#if HAS_MUTTER322 + screen.get_display ().gl_video_memory_purged.disconnect (resetup_cornermasks); +#endif + screen.monitors_changed.disconnect (resetup_cornermasks); screen.in_fullscreen_changed.disconnect (fullscreen_changed); diff --git a/src/Background/SystemBackground.vala b/src/Background/SystemBackground.vala index a03cec63..a1257778 100644 --- a/src/Background/SystemBackground.vala +++ b/src/Background/SystemBackground.vala @@ -60,6 +60,16 @@ namespace Gala }); } } + + public static void refresh () + { + // Meta.Background.refresh_all does not refresh backgrounds with the WALLPAPER style. + // (Last tested with mutter 3.28) + // As a workaround, re-apply the current color again to force the wallpaper texture + // to be rendered from scratch. + if (system_background != null) + system_background.set_color (DEFAULT_BACKGROUND_COLOR); + } } } diff --git a/src/WindowManager.vala b/src/WindowManager.vala index 5bea678f..a8900c54 100644 --- a/src/WindowManager.vala +++ b/src/WindowManager.vala @@ -28,30 +28,8 @@ namespace Gala public abstract async void show_window_menu (WindowFlags flags, int x, int y) throws Error; } - [DBus (name = "org.freedesktop.login1.Manager")] - public interface LoginDRemote : GLib.Object - { - public signal void prepare_for_sleep (bool suspending); - } - public class WindowManagerGala : Meta.Plugin, WindowManager { - const uint GL_VENDOR = 0x1F00; - const string LOGIND_DBUS_NAME = "org.freedesktop.login1"; - const string LOGIND_DBUS_OBJECT_PATH = "/org/freedesktop/login1"; - - delegate unowned string? GlQueryFunc (uint id); - - static bool is_nvidia () - { - var gl_get_string = (GlQueryFunc) Cogl.get_proc_address ("glGetString"); - if (gl_get_string == null) - return false; - - unowned string? vendor = gl_get_string (GL_VENDOR); - return (vendor != null && vendor.contains ("NVIDIA Corporation")); - } - /** * {@inheritDoc} */ @@ -91,7 +69,6 @@ namespace Gala Window? moving; //place for the window that is being moved over - LoginDRemote? logind_proxy = null; Daemon? daemon_proxy = null; Gee.LinkedList modal_stack = new Gee.LinkedList (); @@ -121,18 +98,12 @@ namespace Gala { Util.later_add (LaterType.BEFORE_REDRAW, show_stage); - // Handle FBO issue with nvidia blob - if (logind_proxy == null - && is_nvidia ()) { - try { - logind_proxy = Bus.get_proxy_sync (BusType.SYSTEM, LOGIND_DBUS_NAME, LOGIND_DBUS_OBJECT_PATH); - logind_proxy.prepare_for_sleep.connect (prepare_for_sleep); - } catch (Error e) { - warning ("Failed to get LoginD proxy: %s", e.message); - } - } - - Bus.watch_name (BusType.SESSION, DAEMON_DBUS_NAME, BusNameWatcherFlags.NONE, daemon_appeared, lost_daemon); +#if HAS_MUTTER322 + get_screen ().get_display ().gl_video_memory_purged.connect (() => { + Meta.Background.refresh_all (); + SystemBackground.refresh (); + }); +#endif } void on_menu_get (GLib.Object? o, GLib.AsyncResult? res) @@ -156,14 +127,6 @@ namespace Gala } } - void prepare_for_sleep (bool suspending) - { - if (suspending) - return; - - Meta.Background.refresh_all (); - } - bool show_stage () { var screen = get_screen ();