aboutsummaryrefslogtreecommitdiff
path: root/main/src/ui/conversation_content_view/file_default_widget.vala
diff options
context:
space:
mode:
authorfiaxh <git@lightrise.org>2022-01-09 14:28:17 +0100
committerfiaxh <git@lightrise.org>2022-01-09 15:30:13 +0100
commitc5461b8536b6171aea17d0e97d41710988b73534 (patch)
tree3522951dff680be85411b13cd31dc88c5a89cd6a /main/src/ui/conversation_content_view/file_default_widget.vala
parent25db512297781ea9e4a01c6e6719cb7e43db6db4 (diff)
downloaddino-c5461b8536b6171aea17d0e97d41710988b73534.tar.gz
dino-c5461b8536b6171aea17d0e97d41710988b73534.zip
Imrove file widget menu (fixup 25db512)
- Fix file menu remaining visible after clicking an action - Fix file menu for images (clicking resulted in hiding of the file widget part) - Fix styling of file menus for images - Fix compiler warnings and runtime criticals
Diffstat (limited to 'main/src/ui/conversation_content_view/file_default_widget.vala')
-rw-r--r--main/src/ui/conversation_content_view/file_default_widget.vala28
1 files changed, 17 insertions, 11 deletions
diff --git a/main/src/ui/conversation_content_view/file_default_widget.vala b/main/src/ui/conversation_content_view/file_default_widget.vala
index 9832e527..dc952b30 100644
--- a/main/src/ui/conversation_content_view/file_default_widget.vala
+++ b/main/src/ui/conversation_content_view/file_default_widget.vala
@@ -15,7 +15,7 @@ public class FileDefaultWidget : EventBox {
[GtkChild] public unowned Image content_type_image;
[GtkChild] public unowned Spinner spinner;
[GtkChild] public unowned EventBox stack_event_box;
- [GtkChild] public MenuButton file_menu;
+ [GtkChild] public unowned MenuButton file_menu;
public ModelButton file_open_button;
public ModelButton file_save_button;
@@ -23,10 +23,10 @@ public class FileDefaultWidget : EventBox {
private FileTransfer.State state;
public FileDefaultWidget() {
- this.enter_notify_event.connect(on_pointer_entered);
- this.leave_notify_event.connect(on_pointer_left);
+ this.enter_notify_event.connect(on_pointer_entered_event);
+ this.leave_notify_event.connect(on_pointer_left_event);
file_open_button = new ModelButton() { text=_("Open"), visible=true };
- file_save_button = new ModelButton() { text=_("Save as..."), visible=true };
+ file_save_button = new ModelButton() { text=_("Save as…"), visible=true };
}
public void update_file_info(string? mime_type, FileTransfer.State state, long size) {
@@ -41,15 +41,19 @@ public class FileDefaultWidget : EventBox {
case FileTransfer.State.COMPLETE:
mime_label.label = mime_description;
image_stack.set_visible_child_name("content_type_image");
+
+ // Create a menu
Gtk.PopoverMenu popover_menu = new Gtk.PopoverMenu();
Box file_menu_box = new Box(Orientation.VERTICAL, 0) { margin=10, visible=true };
file_menu_box.add(file_open_button);
file_menu_box.add(file_save_button);
popover_menu.add(file_menu_box);
file_menu.popover = popover_menu;
- file_menu.clicked.connect(() => {
+ file_menu.button_release_event.connect(() => {
popover_menu.visible = true;
+ return true;
});
+ popover_menu.closed.connect(on_pointer_left);
break;
case FileTransfer.State.IN_PROGRESS:
mime_label.label = _("Downloading %s…").printf(get_size_string(size));
@@ -74,9 +78,7 @@ public class FileDefaultWidget : EventBox {
}
}
- private bool on_pointer_entered(Gdk.EventCrossing event) {
- if (event.detail == Gdk.NotifyType.INFERIOR) return false;
-
+ private bool on_pointer_entered_event(Gdk.EventCrossing event) {
event.get_window().set_cursor(new Cursor.for_display(Gdk.Display.get_default(), CursorType.HAND2));
content_type_image.opacity = 0.7;
if (state == FileTransfer.State.NOT_STARTED) {
@@ -88,17 +90,21 @@ public class FileDefaultWidget : EventBox {
return false;
}
- private bool on_pointer_left(Gdk.EventCrossing event) {
+ private bool on_pointer_left_event(Gdk.EventCrossing event) {
if (event.detail == Gdk.NotifyType.INFERIOR) return false;
- if (file_menu.popover.visible == true) return false;
+ if (file_menu.popover != null && file_menu.popover.visible) return false;
event.get_window().set_cursor(new Cursor.for_display(Gdk.Display.get_default(), CursorType.XTERM));
+ on_pointer_left();
+ return false;
+ }
+
+ private void on_pointer_left() {
content_type_image.opacity = 0.5;
if (state == FileTransfer.State.NOT_STARTED) {
image_stack.set_visible_child_name("content_type_image");
}
file_menu.visible = false;
- return false;
}
private static string get_file_icon_name(string? mime_type) {