diff options
author | Stefano Facchini <stefano.facchini@gmail.com> | 2020-06-17 18:46:56 +0200 |
---|---|---|
committer | Stefano Facchini <stefano.facchini@gmail.com> | 2020-06-30 16:01:22 +0200 |
commit | d271460c576f5f21440535fd0cd6dfe360b25b85 (patch) | |
tree | a014c361cabf44747e54305320ea03d0417636e8 /src | |
parent | ec55e68ed273ca8e9996d525015d005a8431ae5a (diff) | |
download | baobab-d271460c576f5f21440535fd0cd6dfe360b25b85.tar.gz |
Re-root the treeview on row activation
In this way we can avoid horizontal scrolling in the treeview, at last.
Diffstat (limited to 'src')
-rw-r--r-- | src/baobab-window.vala | 76 |
1 files changed, 44 insertions, 32 deletions
diff --git a/src/baobab-window.vala b/src/baobab-window.vala index 2e35570..c75f7d4 100644 --- a/src/baobab-window.vala +++ b/src/baobab-window.vala @@ -51,7 +51,6 @@ namespace Baobab { public new Gtk.TreePath path { set { - print("current_path=%s\n", value.to_string()); Gtk.TreeIter iter; location.scanner.get_iter (out iter, value); @@ -192,6 +191,7 @@ namespace Baobab { rings_chart.item_activated.connect (on_chart_item_activated); treemap_chart.item_activated.connect (on_chart_item_activated); + pathbar.item_activated.connect (on_pathbar_item_activated); // Setup drag-n-drop drag_data_received.connect (on_drag_data_received); @@ -294,7 +294,7 @@ namespace Baobab { // Update the timestamp for GtkRecentManager location_list.add_location (location); - treeview.model = location.scanner; + treeview.model = null; scan_active_location (force); } @@ -366,12 +366,11 @@ namespace Baobab { void on_chart_item_activated (Chart chart, Gtk.TreeIter iter) { var path = active_location.scanner.get_path (iter); + reroot_treeview (path); + } - if (!treeview.is_row_expanded (path)) { - treeview.expand_to_path (path); - } - - treeview.set_cursor (path, null, false); + void on_pathbar_item_activated (Pathbar pathbar, Gtk.TreePath path) { + reroot_treeview (path); } void on_drag_data_received (Gtk.Widget widget, Gdk.DragContext context, int x, int y, @@ -441,6 +440,18 @@ namespace Baobab { } } + bool get_selected_iter (out Gtk.TreeIter iter) { + Gtk.TreeIter filter_iter; + + var selection = treeview.get_selection (); + var result = selection.get_selected (null, out filter_iter); + + var filter = (Gtk.TreeModelFilter) treeview.model; + filter.convert_iter_to_child_iter (out iter, filter_iter); + + return result; + } + void setup_treeview () { treeview.button_press_event.connect ((event) => { if (event.triggers_context_menu ()) { @@ -459,42 +470,44 @@ namespace Baobab { }); treeview_popup_open.activate.connect (() => { - var selection = treeview.get_selection (); Gtk.TreeIter iter; - if (selection.get_selected (null, out iter)) { + if (get_selected_iter (out iter)) { open_item (iter); } }); treeview_popup_copy.activate.connect (() => { - var selection = treeview.get_selection (); Gtk.TreeIter iter; - if (selection.get_selected (null, out iter)) { + if (get_selected_iter (out iter)) { copy_path (iter); } }); treeview_popup_trash.activate.connect (() => { - var selection = treeview.get_selection (); Gtk.TreeIter iter; - if (selection.get_selected (null, out iter)) { + if (get_selected_iter (out iter)) { trash_file (iter); } }); - var selection = treeview.get_selection (); - selection.changed.connect (() => { - Gtk.TreeIter iter; - if (selection.get_selected (null, out iter)) { - var path = active_location.scanner.get_path (iter); - rings_chart.root = path; - treemap_chart.root = path; - folder_display.path = path; - pathbar.path = path; - } + treeview.row_activated.connect ((filter_path, column) => { + var filter = (Gtk.TreeModelFilter) treeview.model; + var path = filter.convert_path_to_child_path (filter_path); + reroot_treeview (path); + treeview.set_cursor (new Gtk.TreePath.first (), null, false); }); } + void reroot_treeview (Gtk.TreePath path) { + rings_chart.root = path; + treemap_chart.root = path; + folder_display.path = path; + pathbar.path = path; + + var filter = new Gtk.TreeModelFilter (active_location.scanner, path); + treeview.model = filter; + } + void message (string primary_msg, string secondary_msg, Gtk.MessageType type) { infobar.message_type = type; infobar_primary_label.label = "<b>%s</b>".printf (primary_msg); @@ -555,18 +568,18 @@ namespace Baobab { main_stack.visible_child = child; } - void first_row_has_child (Gtk.TreeModel model, Gtk.TreePath path, Gtk.TreeIter iter) { - model.row_has_child_toggled.disconnect (first_row_has_child); - treeview.expand_row (path, false); + void scanner_has_first_row (Gtk.TreeModel model, Gtk.TreePath path, Gtk.TreeIter iter) { + model.row_has_child_toggled.disconnect (scanner_has_first_row); + reroot_treeview (path); } - void expand_first_row () { + void reroot_when_scanner_not_empty () { Gtk.TreeIter first; - if (treeview.model.get_iter_first (out first) && treeview.model.iter_has_child (first)) { - treeview.expand_row (treeview.model.get_path (first), false); + if (active_location.scanner.get_iter_first (out first)) { + reroot_treeview (new Gtk.TreePath.first ()); } else { - treeview.model.row_has_child_toggled.connect (first_row_has_child); + active_location.scanner.row_has_child_toggled.connect (scanner_has_first_row); } } @@ -622,8 +635,7 @@ namespace Baobab { set_ui_state (result_page, true); scanner.scan (force); - - expand_first_row (); + reroot_when_scanner_not_empty (); } public void scan_directory (File directory, ScanFlags flags=ScanFlags.NONE) { |