44 */
55
66public class Dock.Launcher : BaseItem {
7+ private class PopoverTooltip : Gtk .Popover {
8+ class construct {
9+ set_css_name ("tooltip ");
10+ }
11+ }
12+
713 private const int DND_TIMEOUT = 1000 ;
814
915 private static Settings ? notify_settings;
@@ -30,7 +36,8 @@ public class Dock.Launcher : BaseItem {
3036 private Gtk . Revealer badge_revealer;
3137 private Adw . TimedAnimation bounce_up;
3238 private Adw . TimedAnimation bounce_down;
33- private Gtk . PopoverMenu popover;
39+ private Gtk . PopoverMenu popover_menu;
40+ private Gtk . Popover popover_tooltip;
3441
3542 private Gtk . Image ? second_running_indicator;
3643 private bool multiple_windows_open {
@@ -63,11 +70,32 @@ public class Dock.Launcher : BaseItem {
6370 }
6471
6572 construct {
66- popover = new Gtk .PopoverMenu .from_model (app. menu_model) {
73+ popover_menu = new Gtk .PopoverMenu .from_model (app. menu_model) {
6774 autohide = true ,
6875 position = TOP
6976 };
70- popover. set_parent (this );
77+ popover_menu. set_parent (this );
78+
79+ var name_label = new Gtk .Label (app. app_info. get_display_name ());
80+ popover_tooltip = new PopoverTooltip () {
81+ position = TOP ,
82+ child = name_label,
83+ autohide = false ,
84+ can_focus = false ,
85+ can_target = false ,
86+ focusable = false ,
87+ has_arrow = false
88+ };
89+ popover_tooltip. set_parent (this );
90+
91+ var motion_controller = new Gtk .EventControllerMotion ();
92+ motion_controller. enter. connect (() = > {
93+ if (! popover_menu. visible) {
94+ popover_tooltip. popup ();
95+ }
96+ });
97+ motion_controller. leave. connect (popover_tooltip. popdown);
98+ add_controller (motion_controller);
7199
72100 image = new Gtk .Image ();
73101
@@ -99,8 +127,6 @@ public class Dock.Launcher : BaseItem {
99127 overlay. add_overlay (badge_revealer);
100128 overlay. add_overlay (progress_revealer);
101129
102- tooltip_text = app. app_info. get_display_name ();
103-
104130 insert_action_group (ACTION_GROUP_PREFIX , app. action_group);
105131
106132 // We have to destroy the progressbar when it is not needed otherwise it will
@@ -154,7 +180,10 @@ public class Dock.Launcher : BaseItem {
154180 gesture_click. released. connect (on_click_released);
155181
156182 var long_press = new Gtk .GestureLongPress ();
157- long_press. pressed. connect (popover. popup);
183+ long_press. pressed. connect (() = > {
184+ popover_menu. popup ();
185+ popover_tooltip. popdown ();
186+ });
158187 add_controller (long_press);
159188
160189 var scroll_controller = new Gtk .EventControllerScroll (VERTICAL );
@@ -200,8 +229,10 @@ public class Dock.Launcher : BaseItem {
200229 }
201230
202231 ~Launcher () {
203- popover. unparent ();
204- popover. dispose ();
232+ popover_menu. unparent ();
233+ popover_menu. dispose ();
234+ popover_tooltip. unparent ();
235+ popover_tooltip. dispose ();
205236 }
206237
207238 /**
@@ -232,7 +263,8 @@ public class Dock.Launcher : BaseItem {
232263 }
233264 break ;
234265 case Gdk . BUTTON_SECONDARY:
235- popover. popup ();
266+ popover_menu. popup ();
267+ popover_tooltip. popdown ();
236268 break ;
237269 }
238270 }
0 commit comments