[Xfce4-commits] <midori:master> Render history dates directly without age column or render callback

Christian Dywan noreply at xfce.org
Wed Feb 3 01:42:01 CET 2010


Updating branch refs/heads/master
         to bee4615d1007f5d8295afc364c9f0df8108ab1ee (commit)
       from b4a414f3717faca39be65343035bf944b83ec9fe (commit)

commit bee4615d1007f5d8295afc364c9f0df8108ab1ee
Author: Christian Dywan <christian at twotoasts.de>
Date:   Tue Feb 2 23:51:49 2010 +0100

    Render history dates directly without age column or render callback
    
    Resurrect sokoke_days_between for calculating age in days.

 midori/sokoke.c         |   31 ++++++++++
 midori/sokoke.h         |    4 +
 panels/midori-history.c |  151 ++++++++++++++++++----------------------------
 3 files changed, 94 insertions(+), 92 deletions(-)

diff --git a/midori/sokoke.c b/midori/sokoke.c
index 504dedf..f307fe7 100644
--- a/midori/sokoke.c
+++ b/midori/sokoke.c
@@ -1146,6 +1146,37 @@ sokoke_time_t_to_julian (const time_t* timestamp)
 }
 
 /**
+ * sokoke_days_between:
+ * @day1: a time_t timestamp value
+ * @day2: a time_t timestamp value
+ *
+ * Calculates the number of days between two timestamps.
+ *
+ * Return value: an integer.
+ **/
+gint
+sokoke_days_between (const time_t* day1,
+                     const time_t* day2)
+{
+    GDate* date1;
+    GDate* date2;
+    gint age;
+
+    date1 = g_date_new ();
+    date2 = g_date_new ();
+
+    g_date_set_time_t (date1, *day1);
+    g_date_set_time_t (date2, *day2);
+
+    age = g_date_days_between (date1, date2);
+
+    g_date_free (date1);
+    g_date_free (date2);
+
+    return age;
+}
+
+/**
  * sokoke_register_stock_items:
  *
  * Registers several custom stock items used throughout Midori.
diff --git a/midori/sokoke.h b/midori/sokoke.h
index 0896ce7..e8a6d7f 100644
--- a/midori/sokoke.h
+++ b/midori/sokoke.h
@@ -182,6 +182,10 @@ sokoke_action_create_popup_menu_item    (GtkAction*      action);
 gint64
 sokoke_time_t_to_julian                 (const time_t*   timestamp);
 
+gint
+sokoke_days_between                     (const time_t*   day1,
+                                         const time_t*   day2);
+
 void
 sokoke_register_stock_items             (void);
 
diff --git a/panels/midori-history.c b/panels/midori-history.c
index ba63067..87d2153 100644
--- a/panels/midori-history.c
+++ b/panels/midori-history.c
@@ -142,8 +142,7 @@ midori_history_clear_db (MidoriHistory* history)
 
 static void
 midori_history_remove_item_from_db (MidoriHistory* history,
-                                    KatzeItem*     item,
-                                    int            age)
+                                    KatzeItem*     item)
 {
     gchar* sqlcmd;
     sqlite3* db;
@@ -173,7 +172,7 @@ midori_history_remove_item_from_db (MidoriHistory* history,
 
 static gboolean
 midori_history_read_from_db (MidoriHistory* history,
-                             GtkTreeModel*  model,
+                             GtkTreeStore*  model,
                              GtkTreeIter*   parent,
                              int            req_day)
 {
@@ -188,9 +187,8 @@ midori_history_read_from_db (MidoriHistory* history,
     db = g_object_get_data (G_OBJECT (history->array), "db");
 
     if (req_day == 0)
-        sqlcmd = g_strdup ("SELECT day, date, "
-                           "(strftime ('%s','now') - date) / 86400 as age "
-                           " FROM history GROUP BY day ORDER BY day ASC");
+        sqlcmd = g_strdup ("SELECT day, date "
+                           "FROM history GROUP BY day ORDER BY day ASC");
     else
         sqlcmd = g_strdup_printf ("SELECT uri, title, date, day "
                                   " FROM history WHERE day = '%d' "
@@ -210,24 +208,59 @@ midori_history_read_from_db (MidoriHistory* history,
         const unsigned char* title;
         sqlite3_int64 date;
         sqlite3_int64 day;
-        sqlite3_int64 age;
-        gchar token[50];
 
         if (req_day == 0)
         {
+            time_t current_time;
+            gint age;
+            gchar token[50];
+            gchar* sdate;
+
             day = sqlite3_column_int64 (statement, 0);
             date = sqlite3_column_int64 (statement, 1);
-            age = sqlite3_column_int64 (statement, 2);
 
             item = katze_item_new ();
             katze_item_set_added (item, day);
-            strftime (token, sizeof (token), "%x", localtime ((time_t *)&date));
-            katze_item_set_name (item, token);
-            gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &root_iter, NULL,
-                                               0, 0, item, 1, age, -1);
+            current_time = time (NULL);
+            age = sokoke_days_between ((time_t*)&date, &current_time);
+
+            /* A negative age is a date in the future, the clock is probably off */
+            if (age < -1)
+            {
+                static gboolean clock_warning = FALSE;
+                if (!clock_warning)
+                {
+                    midori_app_send_notification (history->app,
+                        _("Erroneous clock time"),
+                        _("The clock time lies in the past. "
+                          "Please check the current date and time."));
+                    clock_warning = TRUE;
+                }
+            }
+
+            if (age > 7 || age < 0)
+            {
+                strftime (token, sizeof (token), "%x", localtime ((time_t*)&date));
+                sdate = token;
+            }
+            else if (age > 6)
+                sdate = _("A week ago");
+            else if (age > 1)
+                sdate = g_strdup_printf (ngettext ("%d day ago",
+                    "%d days ago", (gint)age), (gint)age);
+            else if (age == 0)
+                sdate = _("Today");
+            else
+                sdate = _("Yesterday");
+
+            gtk_tree_store_insert_with_values (model, &root_iter, NULL,
+                                               0, 0, item, 1, sdate, -1);
             /* FIXME: Always show expanders even if no child nodes? */
-            gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &iter, &root_iter,
-                                               0, 0, item, 1, -1, -1);
+            gtk_tree_store_insert_with_values (model, &iter, &root_iter,
+                0, 0, item, 1, katze_item_get_name (item), -1);
+
+            if (age > 1 && age < 7)
+                g_free (sdate);
         }
         else
         {
@@ -242,11 +275,8 @@ midori_history_read_from_db (MidoriHistory* history,
             katze_item_set_added (item, date);
             katze_item_set_uri (item, (gchar*)uri);
             katze_item_set_name (item, (gchar*)title);
-            /* FIXME: Gtk-WARNING **: gtk/gtktreestore.c:946: Invalid column
-                number -1076101456 added to iter (remember to end your list
-                of columns with a -1) */
-            gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), NULL, parent,
-                                               0, 0, item, 1, -1, -1);
+            gtk_tree_store_insert_with_values (model, NULL, parent,
+                0, 0, item, 1, katze_item_get_name (item), -1);
         }
     }
 
@@ -277,10 +307,9 @@ midori_history_delete_clicked_cb (GtkWidget*     toolitem,
                                            &model, &iter))
     {
         KatzeItem* item;
-        gint64 age;
 
-        gtk_tree_model_get (model, &iter, 0, &item, 1, &age, -1);
-        midori_history_remove_item_from_db (history, item, age);
+        gtk_tree_model_get (model, &iter, 0, &item, -1);
+        midori_history_remove_item_from_db (history, item);
         gtk_tree_store_remove (GTK_TREE_STORE (model), &iter);
         g_object_unref (item);
     }
@@ -423,7 +452,7 @@ midori_history_set_app (MidoriHistory* history,
     history->array = katze_object_get_object (app, "history");
     model = gtk_tree_view_get_model (GTK_TREE_VIEW (history->treeview));
     #if HAVE_SQLITE
-    midori_history_read_from_db (history, model, NULL, 0);
+    midori_history_read_from_db (history, GTK_TREE_STORE (model), NULL, 0);
     #endif
 }
 
@@ -473,10 +502,9 @@ midori_history_treeview_render_icon_cb (GtkTreeViewColumn* column,
                                         GtkWidget*         treeview)
 {
     KatzeItem* item;
-    gint64 age;
     GdkPixbuf* pixbuf = NULL;
 
-    gtk_tree_model_get (model, iter, 0, &item, 1, &age, -1);
+    gtk_tree_model_get (model, iter, 0, &item, -1);
 
     if (katze_item_get_uri (item))
         pixbuf = katze_load_cached_icon (katze_item_get_uri (item), treeview);
@@ -492,67 +520,6 @@ midori_history_treeview_render_icon_cb (GtkTreeViewColumn* column,
     g_object_unref (item);
 }
 
-static void
-midori_history_treeview_render_text_cb (GtkTreeViewColumn* column,
-                                        GtkCellRenderer*   renderer,
-                                        GtkTreeModel*      model,
-                                        GtkTreeIter*       iter,
-                                        MidoriHistory*     history)
-{
-    KatzeItem* item;
-    gint64 age;
-
-    gtk_tree_model_get (model, iter, 0, &item, 1, &age, -1);
-
-    if (age != -1)
-    {
-        gchar* sdate;
-
-        /* A negative age is a date in the future, the clock is probably off */
-        if (age < -1)
-        {
-            static gboolean clock_warning = FALSE;
-            if (!clock_warning)
-            {
-                midori_app_send_notification (history->app,
-                    _("Erroneous clock time"),
-                    _("The clock time lies in the past. "
-                      "Please check the current date and time."));
-                clock_warning = TRUE;
-            }
-        }
-
-        if (age > 7 || age < 0)
-        {
-            g_object_set (renderer, "text", katze_item_get_name (item), NULL);
-        }
-        else if (age > 6)
-        {
-            sdate = _("A week ago");
-            g_object_set (renderer, "text", sdate, NULL);
-        }
-        else if (age > 1)
-        {
-            sdate = g_strdup_printf (ngettext ("%d day ago",
-                "%d days ago", (gint)age), (gint)age);
-            g_object_set (renderer, "text", sdate, NULL);
-            g_free (sdate);
-        }
-        else
-        {
-            if (age == 0)
-                sdate = _("Today");
-            else
-                sdate = _("Yesterday");
-            g_object_set (renderer, "text", sdate, NULL);
-        }
-    }
-    else
-        g_object_set (renderer, "text", katze_item_get_name (item), NULL);
-
-    g_object_unref (item);
-}
-
 #if HAVE_SQLITE
 static void
 midori_history_row_activated_cb (GtkTreeView*       treeview,
@@ -842,7 +809,8 @@ midori_history_row_expanded_cb (GtkTreeView*   treeview,
     gtk_tree_model_get (model, iter, 0, &item, -1);
     /* FIXME: We need always repopulate parent. Now ignoring dupes */
     if (gtk_tree_model_iter_n_children (model, iter) < 2)
-        midori_history_read_from_db (history, model, iter, katze_item_get_added (item));
+        midori_history_read_from_db (history, GTK_TREE_STORE (model),
+                                     iter, katze_item_get_added (item));
     g_object_unref (item);
 }
 
@@ -869,7 +837,7 @@ midori_history_init (MidoriHistory* history)
     /* FIXME: Dereference the net on finalization */
 
     /* Create the treeview */
-    model = gtk_tree_store_new (2, KATZE_TYPE_ITEM, G_TYPE_INT64);
+    model = gtk_tree_store_new (2, KATZE_TYPE_ITEM, G_TYPE_STRING);
     treeview = gtk_tree_view_new_with_model (GTK_TREE_MODEL (model));
     gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (treeview), FALSE);
     column = gtk_tree_view_column_new ();
@@ -880,9 +848,8 @@ midori_history_init (MidoriHistory* history)
         treeview, NULL);
     renderer_text = gtk_cell_renderer_text_new ();
     gtk_tree_view_column_pack_start (column, renderer_text, FALSE);
-    gtk_tree_view_column_set_cell_data_func (column, renderer_text,
-        (GtkTreeCellDataFunc)midori_history_treeview_render_text_cb,
-        history, NULL);
+    gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (column), renderer_text,
+        "text", 1, NULL);
     gtk_tree_view_append_column (GTK_TREE_VIEW (treeview), column);
     g_object_unref (model);
     #if HAVE_SQLITE



More information about the Xfce4-commits mailing list