[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