summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorChristopher Davis <christopherdavis@gnome.org>2021-09-21 22:12:44 -0700
committerChristopher Davis <christopherdavis@gnome.org>2021-09-22 02:08:38 -0700
commit959ef4b4768d6a192f715115029dd3d15d40069f (patch)
tree4f01f2417332de0e00d919c59a67d681ad988349 /src
parent3b628ac25b6209d414d1f8964a743e0a2b0a29f9 (diff)
downloadbaobab-959ef4b4768d6a192f715115029dd3d15d40069f.tar.gz
window: Use popover instead of GtkMenu
GtkMenu is gone in GTK4
Diffstat (limited to 'src')
-rw-r--r--src/baobab-window.vala78
1 files changed, 40 insertions, 38 deletions
diff --git a/src/baobab-window.vala b/src/baobab-window.vala
index fb978a1..3126b20 100644
--- a/src/baobab-window.vala
+++ b/src/baobab-window.vala
@@ -57,13 +57,7 @@ namespace Baobab {
[GtkChild]
private unowned Gtk.TreeView treeview;
[GtkChild]
- private unowned Gtk.Menu treeview_popup_menu;
- [GtkChild]
- private unowned Gtk.MenuItem treeview_popup_open;
- [GtkChild]
- private unowned Gtk.MenuItem treeview_popup_copy;
- [GtkChild]
- private unowned Gtk.MenuItem treeview_popup_trash;
+ private unowned Gtk.PopoverMenu treeview_popover_menu;
[GtkChild]
private unowned Gtk.TreeViewColumn size_column;
[GtkChild]
@@ -97,7 +91,10 @@ namespace Baobab {
{ "clear-recent", on_clear_recent },
{ "show-preferences", on_show_preferences },
{ "help", on_help_activate },
- { "about", on_about_activate }
+ { "about", on_about_activate },
+ { "treeview-open-folder", on_treeview_open_folder },
+ { "treeview-copy", on_treeview_copy },
+ { "treeview-trash", on_treeview_trash }
};
protected struct ActionState {
@@ -133,7 +130,11 @@ namespace Baobab {
location_list.location_activated.connect (location_activated);
+ var builder = new Gtk.Builder.from_resource("/org/gnome/baobab/ui/baobab-treeview-menu.ui");
+ GLib.MenuModel treeview_menu = (GLib.MenuModel) builder.get_object ("treeview_menu");
+
setup_treeview ();
+ treeview_popover_menu.bind_model (treeview_menu, null);
infobar_close_button.clicked.connect (() => { clear_message (); });
@@ -352,13 +353,10 @@ namespace Baobab {
Gtk.drag_dest_unset (this);
}
- bool show_treeview_popup (Gtk.Menu popup, Gdk.EventButton? event) {
- if (event != null) {
- popup.popup_at_pointer (event);
- } else {
- popup.popup_at_widget (treeview, Gdk.Gravity.CENTER, Gdk.Gravity.CENTER);
- popup.select_first (false);
- }
+ bool show_treeview_popover (Gtk.PopoverMenu popover, int x, int y) {
+ Gdk.Rectangle rect = { x, y, 0, 0, };
+ popover.set_pointing_to (rect);
+ popover.popup ();
return Gdk.EVENT_STOP;
}
@@ -424,13 +422,34 @@ namespace Baobab {
return sort.convert_child_path_to_path (filter_path);
}
+ void on_treeview_open_folder () {
+ Gtk.TreeIter iter;
+ if (get_selected_iter (out iter)) {
+ open_item (iter);
+ }
+ }
+
+ void on_treeview_copy () {
+ Gtk.TreeIter iter;
+ if (get_selected_iter (out iter)) {
+ copy_path (iter);
+ }
+ }
+
+ void on_treeview_trash () {
+ Gtk.TreeIter iter;
+ if (get_selected_iter (out iter)) {
+ trash_file (iter);
+ }
+ }
+
void setup_treeview () {
treeview.button_press_event.connect ((event) => {
if (event.triggers_context_menu ()) {
Gtk.TreePath path;
if (treeview.get_path_at_pos ((int)event.x, (int)event.y, out path, null, null, null)) {
treeview.get_selection ().select_path (path);
- return show_treeview_popup (treeview_popup_menu, event);
+ return show_treeview_popover (treeview_popover_menu, (int) event.x, (int) event.y);
}
}
@@ -468,28 +487,11 @@ namespace Baobab {
});
treeview.popup_menu.connect (() => {
- return show_treeview_popup (treeview_popup_menu, null);
- });
-
- treeview_popup_open.activate.connect (() => {
- Gtk.TreeIter iter;
- if (get_selected_iter (out iter)) {
- open_item (iter);
- }
- });
-
- treeview_popup_copy.activate.connect (() => {
- Gtk.TreeIter iter;
- if (get_selected_iter (out iter)) {
- copy_path (iter);
- }
- });
-
- treeview_popup_trash.activate.connect (() => {
- Gtk.TreeIter iter;
- if (get_selected_iter (out iter)) {
- trash_file (iter);
- }
+ Gtk.Allocation allocation;
+ treeview.get_allocated_size (out allocation, null);
+ return show_treeview_popover (treeview_popover_menu,
+ allocation.width / 2,
+ allocation.height / 2);
});
treeview.row_activated.connect ((wrapper_path, column) => {