From 7f62ae798d4516ff27405a16ae1887b62a29e288 Mon Sep 17 00:00:00 2001 From: lenemter Date: Fri, 16 Feb 2024 19:09:43 +0900 Subject: [PATCH 1/2] BackgroundManager: send `changed` signal immediately --- compositor/Background/BackgroundManager.vala | 9 +++-- .../WingpanelManager/BackgroundUtils.vala | 35 ++++++------------- 2 files changed, 15 insertions(+), 29 deletions(-) diff --git a/compositor/Background/BackgroundManager.vala b/compositor/Background/BackgroundManager.vala index 12588ba96..d90c49229 100644 --- a/compositor/Background/BackgroundManager.vala +++ b/compositor/Background/BackgroundManager.vala @@ -13,10 +13,10 @@ public class GreeterCompositor.BackgroundManager : Meta.BackgroundGroup { public WindowManager wm { get; construct; } public int monitor_index { get; construct; } public bool control_position { get; construct; } + public Meta.BackgroundActor background_actor { get; private set; } + public Meta.BackgroundActor? new_background_actor { get; private set; default = null; } private BackgroundSource background_source; - private Meta.BackgroundActor background_actor; - private Meta.BackgroundActor? new_background_actor = null; public BackgroundManager (WindowManager wm, int monitor_index, bool control_position = true) { Object (wm: wm, monitor_index: monitor_index, control_position: control_position); @@ -64,15 +64,14 @@ public class GreeterCompositor.BackgroundManager : Meta.BackgroundGroup { transition.remove_on_complete = true; transition.completed.connect (() => { old_background_actor.destroy (); - - changed (); }); old_background_actor.add_transition ("fade-out", transition); } else { old_background_actor.destroy (); - changed (); } + + changed (); } private void update_background_actor (bool animate = true) { diff --git a/compositor/WingpanelManager/BackgroundUtils.vala b/compositor/WingpanelManager/BackgroundUtils.vala index d0f84795e..addf848b3 100644 --- a/compositor/WingpanelManager/BackgroundUtils.vala +++ b/compositor/WingpanelManager/BackgroundUtils.vala @@ -1,20 +1,6 @@ /* - * Copyright (c) 2011-2015 Wingpanel Developers (http://launchpad.net/wingpanel) - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program; if not, write to the - * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301 USA. + * Copyright 2024 elementary, Inc. (https://elementary.io) + * SPDX-License-Identifier: GPL-2.0-or-later */ /* @@ -22,7 +8,7 @@ * related to it are copied from Gala.DBus. */ -namespace BackgroundUtils { +namespace GreeterCompositor.BackgroundUtils { private const double SATURATION_WEIGHT = 1.5; private const double WEIGHT_THRESHOLD = 1.0; @@ -48,17 +34,18 @@ namespace BackgroundUtils { public async ColorInformation get_background_color_information (GreeterCompositor.WindowManager wm, int reference_x, int reference_y, int reference_width, int reference_height) throws DBusError { - var background = wm.background_group.get_child_at_index (wm.get_display ().get_primary_monitor ()); + var bg_manager = (BackgroundManager) wm.background_group.get_child_at_index (wm.get_display ().get_primary_monitor ()); - if (background == null) { + if (bg_manager == null) { throw new DBusError.INVALID_ARGS ("Invalid monitor requested: %i".printf (wm.get_display ().get_primary_monitor ())); } var effect = new DummyOffscreenEffect (); - background.add_effect (effect); + var newest_background_actor = (bg_manager.new_background_actor != null) ? bg_manager.new_background_actor : bg_manager.background_actor; + newest_background_actor.add_effect (effect); - var bg_actor_width = (int)background.width; - var bg_actor_height = (int)background.height; + var bg_actor_width = (int) newest_background_actor.width; + var bg_actor_height = (int) newest_background_actor.height; // A commit in mutter added some padding to offscreen textures, so we // need to avoid looking at the edges of the texture as it often has a @@ -91,7 +78,7 @@ namespace BackgroundUtils { paint_signal_handler = effect.done_painting.connect (() => { SignalHandler.disconnect (effect, paint_signal_handler); - background.remove_effect (effect); + newest_background_actor.remove_effect (effect); var texture = (Cogl.Texture)effect.get_texture (); var texture_width = texture.get_width (); @@ -211,7 +198,7 @@ namespace BackgroundUtils { get_background_color_information.callback (); }); - background.queue_redraw (); + newest_background_actor.queue_redraw (); yield; From 54c597dd0170a4231a2566e7336d8a9e446a81bc Mon Sep 17 00:00:00 2001 From: lenemter Date: Mon, 19 Feb 2024 23:41:26 +0900 Subject: [PATCH 2/2] Sync with gala --- compositor/Background/BackgroundManager.vala | 9 +++++++-- compositor/WingpanelManager/BackgroundUtils.vala | 2 +- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/compositor/Background/BackgroundManager.vala b/compositor/Background/BackgroundManager.vala index d90c49229..6ed3e7d52 100644 --- a/compositor/Background/BackgroundManager.vala +++ b/compositor/Background/BackgroundManager.vala @@ -13,10 +13,15 @@ public class GreeterCompositor.BackgroundManager : Meta.BackgroundGroup { public WindowManager wm { get; construct; } public int monitor_index { get; construct; } public bool control_position { get; construct; } - public Meta.BackgroundActor background_actor { get; private set; } - public Meta.BackgroundActor? new_background_actor { get; private set; default = null; } + public Meta.BackgroundActor newest_background_actor { + get { + return (new_background_actor != null) ? new_background_actor : background_actor; + } + } private BackgroundSource background_source; + private Meta.BackgroundActor background_actor; + private Meta.BackgroundActor? new_background_actor = null; public BackgroundManager (WindowManager wm, int monitor_index, bool control_position = true) { Object (wm: wm, monitor_index: monitor_index, control_position: control_position); diff --git a/compositor/WingpanelManager/BackgroundUtils.vala b/compositor/WingpanelManager/BackgroundUtils.vala index addf848b3..6ec8a9d25 100644 --- a/compositor/WingpanelManager/BackgroundUtils.vala +++ b/compositor/WingpanelManager/BackgroundUtils.vala @@ -41,7 +41,7 @@ namespace GreeterCompositor.BackgroundUtils { } var effect = new DummyOffscreenEffect (); - var newest_background_actor = (bg_manager.new_background_actor != null) ? bg_manager.new_background_actor : bg_manager.background_actor; + unowned var newest_background_actor = bg_manager.newest_background_actor; newest_background_actor.add_effect (effect); var bg_actor_width = (int) newest_background_actor.width;