From 19042d754814dbbf70eebee255fa2bdac0c57259 Mon Sep 17 00:00:00 2001 From: Jeremy Wootten Date: Wed, 12 Nov 2025 18:33:36 +0000 Subject: [PATCH 1/2] Add a tooltip; change widget name --- src/HistoryWidget.vala | 7 +++++++ src/Indicator.vala | 37 ++++++++++++++++++++++++++++++------- 2 files changed, 37 insertions(+), 7 deletions(-) diff --git a/src/HistoryWidget.vala b/src/HistoryWidget.vala index d2210f6..1fba62d 100644 --- a/src/HistoryWidget.vala +++ b/src/HistoryWidget.vala @@ -10,6 +10,7 @@ public class Clipboard.HistoryWidget : Gtk.Box { private uint wait_timeout = 0; public signal void close_request (); + public signal void changed (); construct { clipboard_text_set = new Gee.HashSet (); @@ -52,6 +53,7 @@ public class Clipboard.HistoryWidget : Gtk.Box { clipboard_item_list.prepend (new_item); clipboard_item_list.select_row (new_item); clipboard_item_list.show_all (); + changed (); } }); } @@ -97,5 +99,10 @@ public class Clipboard.HistoryWidget : Gtk.Box { add (label); } + + } + + public uint get_n_items () { + return clipboard_text_set.size; } } diff --git a/src/Indicator.vala b/src/Indicator.vala index 3824488..5ad4d3e 100644 --- a/src/Indicator.vala +++ b/src/Indicator.vala @@ -5,7 +5,7 @@ public class Clipboard.Indicator : Wingpanel.Indicator { private static GLib.Settings settings; - private Gtk.Image panel_icon; + private Gtk.Widget display_widget; private HistoryWidget history_widget; public Wingpanel.IndicatorManager.ServerType server_type { get; construct set; } @@ -26,20 +26,24 @@ public class Clipboard.Indicator : Wingpanel.Indicator { } public override Gtk.Widget get_display_widget () { - if (panel_icon == null) { - panel_icon = new Gtk.Image.from_icon_name ("edit-copy-symbolic", Gtk.IconSize.SMALL_TOOLBAR); + if (display_widget == null) { + display_widget = new Gtk.Image.from_icon_name ( + "edit-copy-symbolic", + Gtk.IconSize.SMALL_TOOLBAR + ); if (server_type == Wingpanel.IndicatorManager.ServerType.GREETER) { this.visible = false; } else { - // var visible_settings = new Settings ("io.elementary.desktop.wingpanel.clipboard"); - // visible_settings.bind ("show-indicator", this, "visible", SettingsBindFlags.DEFAULT); this.visible = true; } + + get_widget (); // Initialize history widget + history_widget.changed.connect (update_tooltip); + update_tooltip (); } - get_widget (); - return panel_icon; + return display_widget; } public override Gtk.Widget? get_widget () { @@ -60,6 +64,25 @@ public class Clipboard.Indicator : Wingpanel.Indicator { public override void closed () { } + + private void update_tooltip () { + uint n_items = history_widget.get_n_items (); + string description; + if (n_items > 0) { + description = ngettext ( + _("Clipboard: %u item"), + _("Clipboard: %u items"), + n_items + ).printf (n_items); + } else { + description = _("Clipboard: Empty"); + } + + string accel_label = n_items > 0 ? _("Middle-click to clear") : ""; + accel_label = Granite.TOOLTIP_SECONDARY_TEXT_MARKUP.printf (accel_label); + + display_widget.tooltip_markup = "%s\n%s".printf (description, accel_label); + } } public Wingpanel.Indicator? get_indicator (Module module, Wingpanel.IndicatorManager.ServerType server_type) { From 328c38de9131f4913c63e99495ff63bc94a4e198 Mon Sep 17 00:00:00 2001 From: Jeremy Wootten Date: Wed, 12 Nov 2025 19:09:46 +0000 Subject: [PATCH 2/2] Implement middle-click action; rework --- src/HistoryWidget.vala | 10 ++++++++++ src/Indicator.vala | 38 ++++++++++++++++++++++++++++++-------- 2 files changed, 40 insertions(+), 8 deletions(-) diff --git a/src/HistoryWidget.vala b/src/HistoryWidget.vala index 1fba62d..b7c52f1 100644 --- a/src/HistoryWidget.vala +++ b/src/HistoryWidget.vala @@ -105,4 +105,14 @@ public class Clipboard.HistoryWidget : Gtk.Box { public uint get_n_items () { return clipboard_text_set.size; } + + + public void clear_history () { + clipboard_text_set.clear (); + clipboard_item_list.@foreach ((child) => { + child.destroy (); + }); + + changed (); + } } diff --git a/src/Indicator.vala b/src/Indicator.vala index 5ad4d3e..5110ee2 100644 --- a/src/Indicator.vala +++ b/src/Indicator.vala @@ -27,11 +27,18 @@ public class Clipboard.Indicator : Wingpanel.Indicator { public override Gtk.Widget get_display_widget () { if (display_widget == null) { - display_widget = new Gtk.Image.from_icon_name ( + var panel_icon = new Gtk.Image.from_icon_name ( "edit-copy-symbolic", Gtk.IconSize.SMALL_TOOLBAR ); + display_widget = new Gtk.EventBox () { + child = panel_icon + }; + + display_widget.events = BUTTON_PRESS_MASK; + + if (server_type == Wingpanel.IndicatorManager.ServerType.GREETER) { this.visible = false; } else { @@ -40,6 +47,18 @@ public class Clipboard.Indicator : Wingpanel.Indicator { get_widget (); // Initialize history widget history_widget.changed.connect (update_tooltip); + + // EventController does not work? + display_widget.button_press_event.connect ((event) => { + if (event.button == 3) { + history_widget.clear_history (); + return true; + } + + return false; + }); + + display_widget.show_all (); update_tooltip (); } @@ -70,18 +89,21 @@ public class Clipboard.Indicator : Wingpanel.Indicator { string description; if (n_items > 0) { description = ngettext ( - _("Clipboard: %u item"), - _("Clipboard: %u items"), + _("Clipboard Manager: %u item"), + _("Clipboard Manager: %u items"), n_items ).printf (n_items); } else { - description = _("Clipboard: Empty"); + description = _("Clipboard Manager: Empty"); } - string accel_label = n_items > 0 ? _("Middle-click to clear") : ""; - accel_label = Granite.TOOLTIP_SECONDARY_TEXT_MARKUP.printf (accel_label); - - display_widget.tooltip_markup = "%s\n%s".printf (description, accel_label); + if (n_items > 0) { + string accel_label = n_items > 0 ? _("Middle-click to clear") : ""; + accel_label = Granite.TOOLTIP_SECONDARY_TEXT_MARKUP.printf (accel_label); + display_widget.tooltip_markup = "%s\n%s".printf (description, accel_label); + } else { + display_widget.tooltip_markup = "%s".printf (description); + } } }