diff --git a/src/PanelWindow.vala b/src/PanelWindow.vala index 3608c79b..88c23192 100644 --- a/src/PanelWindow.vala +++ b/src/PanelWindow.vala @@ -98,7 +98,7 @@ public class Wingpanel.PanelWindow : Gtk.Window { } public void toggle_indicator (string name) { - popover_manager.toggle_popover_visible (name); + panel.toggle_indicator (name); } public void registry_handle_global (Wl.Registry wl_registry, uint32 name, string @interface, uint32 version) { diff --git a/src/Services/PopoverManager.vala b/src/Services/PopoverManager.vala index 93b852f3..ec46d09b 100644 --- a/src/Services/PopoverManager.vala +++ b/src/Services/PopoverManager.vala @@ -20,7 +20,6 @@ public class Wingpanel.Services.PopoverManager : Object { public bool indicator_open { get; private set; default = false; } - private Gee.HashMap registered_indicators; private Gtk.Popover popover; private Wingpanel.Widgets.IndicatorEntry? _current_indicator = null; public Wingpanel.Widgets.IndicatorEntry? current_indicator { @@ -67,9 +66,7 @@ public class Wingpanel.Services.PopoverManager : Object { } } - public PopoverManager () { - registered_indicators = new Gee.HashMap (); - + construct { popover = new Gtk.Popover () { has_arrow = false, position = BOTTOM @@ -83,12 +80,6 @@ public class Wingpanel.Services.PopoverManager : Object { }); } - public void toggle_popover_visible (string code_name) { - if (registered_indicators.has_key (code_name)) { - current_indicator = registered_indicators.get (code_name); - } - } - public bool get_visible (Wingpanel.Widgets.IndicatorEntry entry) { return current_indicator != null && current_indicator.base_indicator.code_name == entry.base_indicator.code_name; } @@ -104,18 +95,4 @@ public class Wingpanel.Services.PopoverManager : Object { current_indicator = null; } } - - public void unregister_indicator (Wingpanel.Widgets.IndicatorEntry? widg) { - if (registered_indicators.has_key (widg.base_indicator.code_name)) { - registered_indicators.unset (widg.base_indicator.code_name); - } - } - - public void register_indicator (Wingpanel.Widgets.IndicatorEntry? widg) { - if (registered_indicators.has_key (widg.base_indicator.code_name)) { - return; - } - - registered_indicators.set (widg.base_indicator.code_name, widg); - } } diff --git a/src/Widgets/IndicatorEntry.vala b/src/Widgets/IndicatorEntry.vala index e4a6c279..0948b6d9 100644 --- a/src/Widgets/IndicatorEntry.vala +++ b/src/Widgets/IndicatorEntry.vala @@ -108,10 +108,6 @@ public class Wingpanel.Widgets.IndicatorEntry : Granite.Bin { child = revealer; - if (base_indicator.visible) { - popover_manager.register_indicator (this); - } - base_indicator.close.connect (() => { popover_manager.close (); }); @@ -120,13 +116,7 @@ public class Wingpanel.Widgets.IndicatorEntry : Granite.Bin { /* order will be changed so close all open popovers */ popover_manager.close (); - if (base_indicator.visible) { - popover_manager.register_indicator (this); - set_reveal (base_indicator.visible); - } else { - popover_manager.unregister_indicator (this); - set_reveal (base_indicator.visible); - } + set_reveal (base_indicator.visible); }); var gesture_controller = new Gtk.GestureClick (); diff --git a/src/Widgets/Panel.vala b/src/Widgets/Panel.vala index 64f55b6a..4954b7f8 100644 --- a/src/Widgets/Panel.vala +++ b/src/Widgets/Panel.vala @@ -235,4 +235,14 @@ public class Wingpanel.Widgets.Panel : Granite.Bin { private static bool right_indicators_filter_func (Object item) requires (item is IndicatorEntry) { return !left_indicators_filter_func (item) && !center_indicators_filter_func (item); } + + public void toggle_indicator (string name) { + for (var i = 0; i < visible_indicator_entries.get_n_items (); i++) { + var indicator_entry = (IndicatorEntry) visible_indicator_entries.get_item (i); + if (indicator_entry.base_indicator.code_name == name) { + popover_manager.current_indicator = indicator_entry; + break; + } + } + } }