Updating branch refs/heads/master to 4e508068eb054f8102664e27025bde21f87249b2 (commit) from b692fea99435518d8713298edf90a75b95c11638 (commit)
commit 4e508068eb054f8102664e27025bde21f87249b2 Author: Christian Dywan <christ...@twotoasts.de> Date: Wed May 25 01:10:47 2011 +0200 Stop using a TreeModelSort for sorting Sorting can happen in the query, this is faster and we don't need any message data in advance. postler/postler-messages.vala | 110 ++++++++++++++++++---------------------- 1 files changed, 50 insertions(+), 60 deletions(-) diff --git a/postler/postler-messages.vala b/postler/postler-messages.vala index e933e1b..e14eabc 100644 --- a/postler/postler-messages.vala +++ b/postler/postler-messages.vala @@ -12,7 +12,6 @@ public class Postler.Messages : Gtk.TreeView { Accounts accounts; Gtk.TreeStore store; - Gtk.TreeModelSort sort; Gtk.TreePath defer_select; Dexter.Dexter dexter = new Dexter.Dexter (); @@ -42,10 +41,10 @@ public class Postler.Messages : Gtk.TreeView { } void selection_changed () { - Gtk.TreeIter sort_iter; - if (get_selected_iter (out sort_iter)) { + Gtk.TreeIter iter; + if (get_selected_iter (out iter)) { string location; - sort.get (sort_iter, Columns.LOCATION, out location); + model.get (iter, Columns.LOCATION, out location); selected_location = location; } else selected_location = null; @@ -160,24 +159,24 @@ public class Postler.Messages : Gtk.TreeView { void renderer_flag_toggled (Gtk.CellRendererToggle renderer, string path) { - Gtk.TreeIter sort_iter = Gtk.TreeIter (); - if (!sort.get_iter_from_string (out sort_iter, path)) + Gtk.TreeIter iter = Gtk.TreeIter (); + if (!model.get_iter_from_string (out iter, path)) return; string location; - sort.get (sort_iter, Columns.LOCATION, out location); - toggle_message_flag (sort_iter, ref location, 'F'); + model.get (iter, Columns.LOCATION, out location); + toggle_message_flag (iter, ref location, 'F'); } void renderer_status_toggled (Gtk.CellRendererToggle renderer, string path) { - Gtk.TreeIter sort_iter = Gtk.TreeIter (); - if (!sort.get_iter_from_string (out sort_iter, path)) + Gtk.TreeIter iter = Gtk.TreeIter (); + if (!model.get_iter_from_string (out iter, path)) return; string location; - sort.get (sort_iter, Columns.LOCATION, out location); - toggle_message_flag (sort_iter, ref location, 'S'); + model.get (iter, Columns.LOCATION, out location); + toggle_message_flag (iter, ref location, 'S'); } void on_drag_data_get (Gdk.DragContext context, @@ -205,8 +204,6 @@ public class Postler.Messages : Gtk.TreeView { this.accounts = accounts; store = new Gtk.TreeStore (2, typeof (Message), typeof (string)); - sort = new Gtk.TreeModelSort.with_model (store); - set_model (sort); set_search_equal_func (search_inline); get_selection ().set_mode (Gtk.SelectionMode.MULTIPLE); get_selection ().changed.connect (selection_changed); @@ -272,11 +269,11 @@ public class Postler.Messages : Gtk.TreeView { public signal void content_display_window (); /* Vala fails to parse out parameters in virtual signals */ void content_new_window () { - Gtk.TreeIter sort_iter; - if (get_selected_iter (out sort_iter)) { + Gtk.TreeIter iter; + if (get_selected_iter (out iter)) { string location; - sort.get (sort_iter, Columns.LOCATION, out location); - mark_message_read (sort_iter, ref location); + model.get (iter, Columns.LOCATION, out location); + mark_message_read (iter, ref location); Postler.App.spawn_module ("content", location); } } @@ -458,9 +455,6 @@ public class Postler.Messages : Gtk.TreeView { && !FileUtils.test (location + "/cur", FileTest.EXISTS)) return true; - /* FIXME no actual sorting occurs, we can stop using a sortable */ - model = sort = new Gtk.TreeModelSort.with_model (store); - var now = GLib.Date (); now.set_time_val (GLib.TimeVal ()); @@ -518,6 +512,7 @@ public class Postler.Messages : Gtk.TreeView { get_selection().set_select_function( () => { return true; }); } + model = store; hadjustment.value = vadjustment.value = 0; } catch (GLib.Error error) { @@ -541,7 +536,6 @@ public class Postler.Messages : Gtk.TreeView { message.from_hash_table (message_data); store.insert_with_values (null, null, 0, Columns.MESSAGE, message); - model = sort = new Gtk.TreeModelSort.with_model (store); } internal static string toggle_flag (string location, char flag) { @@ -570,7 +564,7 @@ public class Postler.Messages : Gtk.TreeView { return folder + "/" + Path.get_basename (bare_filename) + ":" + new_flags.str; } - void toggle_message_flag (Gtk.TreeIter sort_iter, ref string location, char flag) { + void toggle_message_flag (Gtk.TreeIter iter, ref string location, char flag) { return_if_fail (location != null); string new_location = toggle_flag (location, flag); /* TODO update message file */ @@ -580,20 +574,18 @@ public class Postler.Messages : Gtk.TreeView { string? flagged = null; string status = parse_flags (location, out flagged, out font_weight); - Gtk.TreeIter child_iter; - sort.convert_iter_to_child_iter (out child_iter, sort_iter); - store.set (child_iter, + store.set (iter, Columns.LOCATION, new_location); if (location == selected_location) selected_location = new_location; } } - bool get_selected_iter (out Gtk.TreeIter sort_iter) { + bool get_selected_iter (out Gtk.TreeIter iter) { GLib.List<Gtk.TreePath> paths = get_selection ().get_selected_rows (null); - sort_iter = Gtk.TreeIter (); + iter = Gtk.TreeIter (); var path = paths.nth_data (0); - if (path != null && sort.get_iter (out sort_iter, path)) + if (path != null && model.get_iter (out iter, path)) return true; return false; } @@ -674,11 +666,11 @@ public class Postler.Messages : Gtk.TreeView { } } - void mark_message_read (Gtk.TreeIter sort_iter, ref string location) { + void mark_message_read (Gtk.TreeIter iter, ref string location) { return_if_fail (location != null); string bare_filename; if (!flags_from_filename (location, out bare_filename).contains ("S")) - toggle_message_flag (sort_iter, ref location, 'S'); + toggle_message_flag (iter, ref location, 'S'); } public void toggle_selected_flag (char flag) { @@ -687,23 +679,23 @@ public class Postler.Messages : Gtk.TreeView { paths = get_selection ().get_selected_rows (null); foreach (var path in paths) - references.prepend (new Gtk.TreeRowReference (sort, path)); + references.prepend (new Gtk.TreeRowReference (model, path)); foreach (var reference in references) { var path = reference.get_path (); - Gtk.TreeIter sort_iter; - if (sort.get_iter (out sort_iter, path)) { + Gtk.TreeIter iter; + if (model.get_iter (out iter, path)) { string location; - sort.get (sort_iter, Columns.LOCATION, out location); - toggle_message_flag (sort_iter, ref location, flag); + model.get (iter, Columns.LOCATION, out location); + toggle_message_flag (iter, ref location, flag); } } } - void display_message (Gtk.TreeIter sort_iter) { + void display_message (Gtk.TreeIter iter) { string location; - sort.get (sort_iter, Columns.LOCATION, out location); - mark_message_read (sort_iter, ref location); + model.get (iter, Columns.LOCATION, out location); + mark_message_read (iter, ref location); content.display (location, account_info); } @@ -799,14 +791,14 @@ public class Postler.Messages : Gtk.TreeView { var references = new GLib.List<Gtk.TreeRowReference> (); paths = get_selection ().get_selected_rows (null); foreach (var path in paths) - references.prepend (new Gtk.TreeRowReference (sort, path)); + references.prepend (new Gtk.TreeRowReference (model, path)); foreach (var reference in references) { var path = reference.get_path (); - Gtk.TreeIter sort_iter; - if (sort.get_iter (out sort_iter, path)) { + Gtk.TreeIter iter; + if (model.get_iter (out iter, path)) { string location; - sort.get (sort_iter, Columns.LOCATION, out location); + model.get (iter, Columns.LOCATION, out location); var file = File.new_for_path (location); try { if (destination_path == null) @@ -838,15 +830,13 @@ public class Postler.Messages : Gtk.TreeView { } /* Move to next, more recent message row */ - Gtk.TreeIter child_iter; - sort.convert_iter_to_child_iter (out child_iter, sort_iter); - Gtk.TreePath next_path = sort.get_path (sort_iter); + Gtk.TreePath next_path = model.get_path (iter); content.clear (); - if (store.remove (child_iter)) { + if (store.remove (iter)) { next_path.prev (); - if (sort.get_iter (out sort_iter, next_path)) { - set_cursor (sort.get_path (sort_iter), null, false); - display_message (sort_iter); + if (model.get_iter (out iter, next_path)) { + set_cursor (model.get_path (iter), null, false); + display_message (iter); } } } catch (GLib.Error error) { @@ -867,11 +857,11 @@ public class Postler.Messages : Gtk.TreeView { get_dest_row_at_pos ((int)event.x, (int)event.y, out path, out pos); if (event.type == Gdk.EventType.2BUTTON_PRESS) { - Gtk.TreeIter sort_iter; - if (get_selected_iter (out sort_iter)) { + Gtk.TreeIter iter; + if (get_selected_iter (out iter)) { string location; - sort.get (sort_iter, Columns.LOCATION, out location); - mark_message_read (sort_iter, ref location); + model.get (iter, Columns.LOCATION, out location); + mark_message_read (iter, ref location); Postler.App.spawn_module ("content", location); } } else if (event.type == Gdk.EventType.BUTTON_PRESS @@ -923,24 +913,24 @@ public class Postler.Messages : Gtk.TreeView { } GLib.List<Gtk.TreePath> paths = get_selection ().get_selected_rows (null); - Gtk.TreeIter sort_iter = Gtk.TreeIter (); + Gtk.TreeIter iter = Gtk.TreeIter (); var path = paths.nth_data (0); - if (path != null && sort.get_iter (out sort_iter, path)) { + if (path != null && model.get_iter (out iter, path)) { Gtk.TreeViewColumn column; get_path_at_pos ((int)event.x, (int)event.y, null, out column, null, null); unowned string title = column.get_title (); /* Clickable icons should not display/ mark as read */ if (title != _("Status") && title != _("Flagged")) - display_message (sort_iter); + display_message (iter); } return base.button_release_event (event); } public override void row_activated (Gtk.TreePath path, Gtk.TreeViewColumn column) { - Gtk.TreeIter sort_iter; - if (sort.get_iter (out sort_iter, path)) - display_message (sort_iter); + Gtk.TreeIter iter; + if (model.get_iter (out iter, path)) + display_message (iter); } } _______________________________________________ Xfce4-commits mailing list Xfce4-commits@xfce.org http://foo-projects.org/mailman/listinfo/xfce4-commits