summaryrefslogtreecommitdiff
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
parent3b628ac25b6209d414d1f8964a743e0a2b0a29f9 (diff)
downloadbaobab-959ef4b4768d6a192f715115029dd3d15d40069f.tar.gz
window: Use popover instead of GtkMenu
GtkMenu is gone in GTK4
-rw-r--r--data/baobab.gresource.xml1
-rw-r--r--data/ui/baobab-main-window.ui32
-rw-r--r--data/ui/baobab-treeview-menu.ui19
-rw-r--r--src/baobab-window.vala78
4 files changed, 63 insertions, 67 deletions
diff --git a/data/baobab.gresource.xml b/data/baobab.gresource.xml
index d61d46c..2f1709f 100644
--- a/data/baobab.gresource.xml
+++ b/data/baobab.gresource.xml
@@ -9,6 +9,7 @@
<file compressed="true">ui/baobab-main-window.ui</file>
<file compressed="true">ui/baobab-pathbutton.ui</file>
<file compressed="true">ui/baobab-preferences-dialog.ui</file>
+ <file compressed="true">ui/baobab-treeview-menu.ui</file>
<file compressed="true">gtk/help-overlay.ui</file>
<file compressed="true">gtk/menus.ui</file>
<file compressed="true">icons/scalable/actions/view-ringschart-symbolic.svg</file>
diff --git a/data/ui/baobab-main-window.ui b/data/ui/baobab-main-window.ui
index b677cb5..e1cd76a 100644
--- a/data/ui/baobab-main-window.ui
+++ b/data/ui/baobab-main-window.ui
@@ -31,36 +31,10 @@
</item>
</section>
</menu>
- <object class="GtkMenu" id="treeview_popup_menu">
- <property name="visible">True</property>
+ <object class="GtkPopoverMenu" id="treeview_popover_menu">
<property name="can_focus">False</property>
- <child>
- <object class="GtkMenuItem" id="treeview_popup_open">
- <property name="use_action_appearance">False</property>
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="label" translatable="yes">_Open Folder</property>
- <property name="use_underline">True</property>
- </object>
- </child>
- <child>
- <object class="GtkMenuItem" id="treeview_popup_copy">
- <property name="use_action_appearance">False</property>
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="label" translatable="yes">_Copy Path to Clipboard</property>
- <property name="use_underline">True</property>
- </object>
- </child>
- <child>
- <object class="GtkMenuItem" id="treeview_popup_trash">
- <property name="use_action_appearance">False</property>
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="label" translatable="yes">Mo_ve to Trash</property>
- <property name="use_underline">True</property>
- </object>
- </child>
+ <property name="relative-to">treeview</property>
+ <property name="position">bottom</property>
</object>
<template class="BaobabWindow" parent="HdyApplicationWindow">
<property name="title" translatable="yes">Disk Usage Analyzer</property>
diff --git a/data/ui/baobab-treeview-menu.ui b/data/ui/baobab-treeview-menu.ui
new file mode 100644
index 0000000..26ad7db
--- /dev/null
+++ b/data/ui/baobab-treeview-menu.ui
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+ <menu id="treeview_menu">
+ <section>
+ <item>
+ <attribute name="label" translatable="yes">_Open Folder</attribute>
+ <attribute name="action">win.treeview-open-folder</attribute>
+ </item>
+ <item>
+ <attribute name="label" translatable="yes">_Copy Path to Clipboard</attribute>
+ <attribute name="action">win.treeview-copy</attribute>
+ </item>
+ <item>
+ <attribute name="label" translatable="yes">Mo_ve to Trash</attribute>
+ <attribute name="action">win.treeview-trash</attribute>
+ </item>
+ </section>
+ </menu>
+</interface>
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) => {