Skip to content

Commit a338fe2

Browse files
committed
Replace tooltip with instant popover (#29, #324, #422)
1 parent 697e0c2 commit a338fe2

File tree

2 files changed

+45
-9
lines changed

2 files changed

+45
-9
lines changed

data/Application.css

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,10 @@ launcher progressbar progress {
6464
min-width: 0;
6565
}
6666

67+
tooltip {
68+
margin-bottom: 0.5em;
69+
}
70+
6771
backgrounditem,
6872
icongroup {
6973
padding: 6px;

src/AppSystem/Launcher.vala

Lines changed: 41 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,12 @@
44
*/
55

66
public 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

Comments
 (0)