[Xfce4-commits] <postler:master> Reflect unread status in new replies and merge flags

Christian Dywan noreply at xfce.org
Wed Jul 6 23:24:01 CEST 2011


Updating branch refs/heads/master
         to 5e1bf9528f5453510245188b7e16dcd94507367a (commit)
       from 7ed2f88d54b62d74dad68e0a0e8c75ca98ca0de1 (commit)

commit 5e1bf9528f5453510245188b7e16dcd94507367a
Author: Christian Dywan <christian at twotoasts.de>
Date:   Wed Jul 6 23:20:54 2011 +0200

    Reflect unread status in new replies and merge flags
    
    The number of replies is always the number of unread
    messages of a conversation. If it's a single message it
    is the same as unread used to be.
    
    Replied and Forwarded states show on the left unless the
    message is flagged, which supersedes the former.

 postler/postler-cellrendererconvo.vala |   13 ++++-----
 postler/postler-index.vala             |    2 +-
 postler/postler-message.vala           |    7 +++-
 postler/postler-messages.vala          |   45 ++++---------------------------
 4 files changed, 18 insertions(+), 49 deletions(-)

diff --git a/postler/postler-cellrendererconvo.vala b/postler/postler-cellrendererconvo.vala
index e636f26..0d11c6a 100644
--- a/postler/postler-cellrendererconvo.vala
+++ b/postler/postler-cellrendererconvo.vala
@@ -29,8 +29,7 @@ public class Postler.CellRendererConvo : Gtk.CellRenderer {
     public string date { set; get; }
     public string sender { set; get; }
     public string text { set; get; }
-    public int unread { set; get; }
-    public bool message_unread = false;
+    public int replies { set; get; }
     public bool flagged = false;
 
     double sender_height = 0.0;
@@ -181,8 +180,8 @@ public class Postler.CellRendererConvo : Gtk.CellRenderer {
             color_insensitive.alpha -= 0.4;
         }
 
-        /* Unread */
-        if (message_unread) {
+        /* Replies */
+        if (replies > 0) {
             color_normal.blue += 0.5;
             color_normal.green -= 0.2;
             color_normal.red -= 0.2;
@@ -199,10 +198,10 @@ public class Postler.CellRendererConvo : Gtk.CellRenderer {
         cr.move_to (area.x + area.width - get_layout_width (layout) - 5, area.y);
         Pango.cairo_show_layout (cr, layout);
 
-        /* Show unread count */
+        /* Show number of new replies */
         double unread_width = 0.0;
-        if (unread > 0) { /* Don't show [0] */
-            layout = widget.create_pango_layout (unread.to_string ());
+        if (replies > 0) { /* Don't show [0] */
+            layout = widget.create_pango_layout (replies.to_string ());
             double margin = 5;
             double rect_width = get_layout_width (layout) + margin * 2;
             double rect_height = get_layout_height (layout) + margin * 2;
diff --git a/postler/postler-index.vala b/postler/postler-index.vala
index f8c1f16..5a95b6b 100644
--- a/postler/postler-index.vala
+++ b/postler/postler-index.vala
@@ -287,7 +287,7 @@ namespace Postler {
                 if (database.prepare_v2 ("""
                     SELECT subject, sender, recipients,
                     unread, flagged, forwarded, replied, priority, date, uri, excerpt,
-                    (SELECT COUNT (*) FROM messages WHERE threads = ?1) AS replies
+                    (SELECT COUNT (*) FROM messages WHERE threads = ?1 AND unread = 1) AS replies
                     FROM messages
                     WHERE id = ?1 GROUP BY id ORDER BY date ASC LIMIT 1
                     """,
diff --git a/postler/postler-message.vala b/postler/postler-message.vala
index b82311c..f6ab6ae 100644
--- a/postler/postler-message.vala
+++ b/postler/postler-message.vala
@@ -98,7 +98,7 @@ namespace Postler {
         public string? recipients { public get; set; }
         public string? reply_to { public get; set; }
         public bool can_reply_personally { public get; set; default = true; }
-        public bool unread { public get; set; }
+        public bool unread { public set; get; }
         public bool flagged { public get; set; }
         public bool forwarded { public get; set; }
         public bool replied { public get; set; }
@@ -173,7 +173,7 @@ namespace Postler {
 
         public Message.from_statement (string id, Sqlite.Statement statement) {
             this.id = id;
-            this.replies = statement.column_int64 (10);
+            this.replies = statement.column_int64 (11);
             this.subject = statement.column_text (0);
             this.sender = statement.column_text (1);
             this.recipients = statement.column_text (2);
@@ -208,6 +208,9 @@ namespace Postler {
                 flag = MessageFlags.TOGGLE_READ;
             else if (flag == MessageFlags.MARK_READ)
                 return;
+            /* The message itself counts as a reply even as a parent */
+            if (flag == MessageFlags.TOGGLE_READ)
+                replies += unread ? -1 : +1;
             string old_path = get_path ();
             return_if_fail (old_path != null);
             string new_path = Postler.Messages.toggle_flag (old_path, flag);
diff --git a/postler/postler-messages.vala b/postler/postler-messages.vala
index 7cf16f2..ac63ef8 100644
--- a/postler/postler-messages.vala
+++ b/postler/postler-messages.vala
@@ -88,21 +88,6 @@ public class Postler.Messages : Gtk.TreeView {
         return escaped.str;
     }
 
-    void render_status (Gtk.CellLayout layout, Gtk.CellRenderer cell,
-        Gtk.TreeModel model, Gtk.TreeIter iter) {
-
-        Message message;
-
-        model.get (iter, Columns.MESSAGE, out message);
-
-        if (message.forwarded)
-            cell.set ("stock-id", STOCK_MAIL_FORWARDED);
-        else if (message.replied)
-            cell.set ("stock-id", STOCK_MAIL_REPLIED);
-        else
-            cell.set ("stock-id", message.unread ? STOCK_MAIL_UNREAD : null);
-    }
-
     void render_flag (Gtk.CellLayout layout, Gtk.CellRenderer cell,
         Gtk.TreeModel model, Gtk.TreeIter iter) {
         Message message;
@@ -119,6 +104,10 @@ public class Postler.Messages : Gtk.TreeView {
         } else {
             if (Gtk.IconTheme.get_for_screen (screen).has_icon (STOCK_NOT_STARRED))
                 prelight_stock_id = STOCK_NOT_STARRED;
+            if (message.forwarded)
+                stock_id = STOCK_MAIL_FORWARDED;
+            else if (message.replied)
+                stock_id = STOCK_MAIL_REPLIED;
         }
         cell.set ("active", message.flagged,
                   "stock-id", stock_id, "prelight-stock-id", prelight_stock_id);
@@ -142,8 +131,7 @@ public class Postler.Messages : Gtk.TreeView {
         renderer.subject = escape_text (message.subject ?? _("No subject"));
         renderer.date = Postler.Content.format_date (message.date);
         renderer.sender = escape_text (Postler.Contact.name_from_string (message.sender));
-        renderer.unread = (int)message.replies;
-        renderer.message_unread = message.unread;
+        renderer.replies = (int)message.replies;
         renderer.flagged = message.flagged;
         renderer.text = message.excerpt + "…";
     }
@@ -157,15 +145,6 @@ public class Postler.Messages : Gtk.TreeView {
         toggle_message_flag (iter, MessageFlags.TOGGLE_FLAGGED, () => { });
     }
 
-    void renderer_status_toggled (Gtk.CellRendererToggle renderer,
-                                  string                 path) {
-        Gtk.TreeIter iter = Gtk.TreeIter ();
-        if (!model.get_iter_from_string (out iter, path))
-            return;
-
-        toggle_message_flag (iter, MessageFlags.TOGGLE_READ, () => { });
-    }
-
     void on_drag_data_get (Gdk.DragContext context,
         Gtk.SelectionData selection_data, uint info, uint time_) {
 
@@ -209,18 +188,6 @@ public class Postler.Messages : Gtk.TreeView {
         Gtk.cell_renderer_get_padding (renderer_flag, out xpad, null);
         column.set_fixed_width (cell_width + xpad * 4);
 
-        column = new Gtk.TreeViewColumn ();
-        column.set_sizing (Gtk.TreeViewColumnSizing.FIXED);
-        column.set_title (_("Status"));
-        var renderer_status = new Postler.CellRendererToggle ();
-        column.pack_start (renderer_status, true);
-        column.set_cell_data_func (renderer_status, render_status);
-        renderer_status.toggled.connect (renderer_status_toggled);
-        insert_column (column, -1);
-        column.cell_get_size (null, null, null, out cell_width, null);
-        Gtk.cell_renderer_get_padding (renderer_flag, out xpad, null);
-        column.set_fixed_width (cell_width + xpad * 4);
-
         var renderer_text = new Postler.CellRendererConvo ();
         column = new Gtk.TreeViewColumn.with_attributes ("Messages", renderer_text, null);;
         column.set_sizing (Gtk.TreeViewColumnSizing.FIXED);
@@ -494,7 +461,7 @@ public class Postler.Messages : Gtk.TreeView {
            || (!forward && iter_previous (ref iter))) {
             Message message;
             model.get (iter, Columns.MESSAGE, out message);
-            if (message.unread) {
+            if (message.replies > 0) {
                 set_cursor (model.get_path (iter), null, false);
                 break;
             }



More information about the Xfce4-commits mailing list