From c5461b8536b6171aea17d0e97d41710988b73534 Mon Sep 17 00:00:00 2001 From: fiaxh Date: Sun, 9 Jan 2022 14:28:17 +0100 Subject: 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 --- .../file_default_widget.vala | 28 +++++++++++++--------- 1 file changed, 17 insertions(+), 11 deletions(-) (limited to 'main/src/ui/conversation_content_view/file_default_widget.vala') 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) { -- cgit v1.2.3-54-g00ecf