diff --git a/src/Services/PopoverManager.vala b/src/Services/PopoverManager.vala index ea74b347..5c7daacf 100644 --- a/src/Services/PopoverManager.vala +++ b/src/Services/PopoverManager.vala @@ -1,20 +1,7 @@ /* - * Copyright (c) 2011-2015 Ikey Doherty - * - * 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 2026 elementary, Inc. (https://elementary.io) + * 2011-2015 Ikey Doherty + * SPDX-License-Identifier: GPL-2.0-or-later */ public class Wingpanel.Services.PopoverManager : Object { @@ -29,37 +16,44 @@ public class Wingpanel.Services.PopoverManager : Object { } set { + // Double close. Shouldn't happen? if (value == null && _current_indicator == null) { return; } - if (_current_indicator == null && value != null) { // First open - _current_indicator = value; - indicator_open = true; - } else if (value == null && _current_indicator != null) { // Close requested - _current_indicator.set_state_flags (NORMAL, true); - _current_indicator.display_widget.has_tooltip = true; - _current_indicator.base_indicator.closed (); - _current_indicator = null; - popover.popdown (); - indicator_open = false; - } else { // Switch + // Switch or Close + if (_current_indicator != null) { _current_indicator.set_state_flags (NORMAL, true); _current_indicator.display_widget.has_tooltip = true; _current_indicator.base_indicator.closed (); - _current_indicator = value; - popover.unparent (); - } - if (_current_indicator != null) { - popover.child = _current_indicator.indicator_widget; - popover.set_parent (_current_indicator); - popover.popup (); + // Close + if (value == null) { + popover.popdown (); + popover.unparent (); + _current_indicator = null; + indicator_open = false; + return; + } else { + popover.unparent (); + } + } - _current_indicator.set_state_flags (CHECKED, true); - _current_indicator.display_widget.has_tooltip = false; - _current_indicator.base_indicator.opened (); + // First open + if (_current_indicator == null) { + indicator_open = true; } + + _current_indicator = value; + _current_indicator.set_state_flags (CHECKED, true); + _current_indicator.display_widget.has_tooltip = false; + + popover.child = _current_indicator.indicator_widget; + popover.set_parent (_current_indicator); + + // Make sure display_widget is parented beforehand + _current_indicator.base_indicator.opened (); + popover.popup (); } } @@ -72,7 +66,6 @@ public class Wingpanel.Services.PopoverManager : Object { popover.closed.connect (() => { current_indicator = null; - popover.unparent (); }); } }