[gnome-logs] Use a single row for each log entry



commit 995bacac51ee84516e9d0c4950dcc1edd45cdd64
Author: Jonathan Kang <jonathan121537 gmail com>
Date:   Tue May 26 17:17:27 2015 +0800

    Use a single row for each log entry
    
    Add seperator between adjacent rows and use a single row for each entry.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=727895

 src/gl-eventviewlist.c |   46 ++++++++++++++++++++++-
 src/gl-eventviewrow.c  |   98 ++++++++++++++++++++++++-----------------------
 src/gl-eventviewrow.h  |    2 +
 3 files changed, 97 insertions(+), 49 deletions(-)
---
diff --git a/src/gl-eventviewlist.c b/src/gl-eventviewlist.c
index 5f50440..7d21b99 100644
--- a/src/gl-eventviewlist.c
+++ b/src/gl-eventviewlist.c
@@ -43,6 +43,8 @@ typedef struct
     GlJournalEntry *entry;
     GlUtilClockFormat clock_format;
     GtkListBox *entries_box;
+    GtkSizeGroup *message_sizegroup;
+    GtkSizeGroup *time_sizegroup;
     GtkWidget *categories;
     GtkWidget *event_search;
     GtkWidget *event_scrolled;
@@ -122,6 +124,29 @@ utf8_strcasestr (const gchar *potential_hit,
   return matches;
 }
 
+static void
+listbox_update_header_func (GtkListBoxRow *row,
+                            GtkListBoxRow *before,
+                            gpointer user_data)
+{
+    GtkWidget *current;
+
+    if (before == NULL)
+    {
+        gtk_list_box_row_set_header (row, NULL);
+        return;
+    }
+
+    current = gtk_list_box_row_get_header (row);
+
+    if (current == NULL)
+    {
+        current = gtk_separator_new (GTK_ORIENTATION_HORIZONTAL);
+        gtk_widget_show (current);
+        gtk_list_box_row_set_header (row, current);
+    }
+}
+
 static gboolean
 listbox_search_filter_func (GtkListBoxRow *row,
                             GlEventViewList *view)
@@ -305,11 +330,23 @@ static GtkWidget *
 gl_event_list_view_create_row_widget (gpointer item,
                                       gpointer user_data)
 {
+    GtkWidget *rtn;
+    GtkWidget *message_label;
+    GtkWidget *time_label;
     GlEventViewList *view = user_data;
 
     GlEventViewListPrivate *priv = gl_event_view_list_get_instance_private (view);
 
-    return gl_event_view_row_new (item, priv->current_row_style, priv->clock_format);
+    rtn = gl_event_view_row_new (item, priv->current_row_style, priv->clock_format);
+    message_label = gl_event_view_row_get_message_label (GL_EVENT_VIEW_ROW (rtn));
+    time_label = gl_event_view_row_get_time_label (GL_EVENT_VIEW_ROW (rtn));
+
+    gtk_size_group_add_widget (GTK_SIZE_GROUP (priv->message_sizegroup),
+                               message_label);
+    gtk_size_group_add_widget (GTK_SIZE_GROUP (priv->time_sizegroup),
+                               time_label);
+
+    return rtn;
 }
 
 static gchar *
@@ -567,6 +604,8 @@ gl_event_view_list_finalize (GObject *object)
 
     g_clear_object (&priv->journal_model);
     g_clear_pointer (&priv->search_text, g_free);
+    g_object_unref (priv->message_sizegroup);
+    g_object_unref (priv->time_sizegroup);
 }
 
 static void
@@ -607,6 +646,8 @@ gl_event_view_list_init (GlEventViewList *view)
 
     priv = gl_event_view_list_get_instance_private (view);
     priv->search_text = NULL;
+    priv->message_sizegroup = gtk_size_group_new (GTK_SIZE_GROUP_BOTH);
+    priv->time_sizegroup = gtk_size_group_new (GTK_SIZE_GROUP_BOTH);
     categories = GL_CATEGORY_LIST (priv->categories);
 
     priv->journal_model = gl_journal_model_new ();
@@ -620,6 +661,9 @@ gl_event_view_list_init (GlEventViewList *view)
                              gl_event_list_view_create_row_widget,
                              view, NULL);
 
+    gtk_list_box_set_header_func (GTK_LIST_BOX (priv->entries_box),
+                                  (GtkListBoxUpdateHeaderFunc) listbox_update_header_func,
+                                  NULL, NULL);
     gtk_list_box_set_filter_func (GTK_LIST_BOX (priv->entries_box),
                                   (GtkListBoxFilterFunc) listbox_search_filter_func,
                                   view, NULL);
diff --git a/src/gl-eventviewrow.c b/src/gl-eventviewrow.c
index b177773..f7494c7 100644
--- a/src/gl-eventviewrow.c
+++ b/src/gl-eventviewrow.c
@@ -44,12 +44,34 @@ typedef struct
     GlUtilClockFormat clock_format;
     GlJournalEntry *entry;
     GlEventViewRowStyle style;
+    GtkWidget *message_label;
+    GtkWidget *time_label;
 } GlEventViewRowPrivate;
 
 G_DEFINE_TYPE_WITH_PRIVATE (GlEventViewRow, gl_event_view_row, GTK_TYPE_LIST_BOX_ROW)
 
 static GParamSpec *obj_properties[N_PROPERTIES] = { NULL, };
 
+GtkWidget *
+gl_event_view_row_get_message_label (GlEventViewRow *row)
+{
+    GlEventViewRowPrivate *priv;
+
+    priv = gl_event_view_row_get_instance_private (row);
+
+    return priv->message_label;
+}
+
+GtkWidget *
+gl_event_view_row_get_time_label (GlEventViewRow *row)
+{
+    GlEventViewRowPrivate *priv;
+
+    priv = gl_event_view_row_get_instance_private (row);
+
+    return priv->time_label;
+}
+
 static void
 gl_event_view_row_finalize (GObject *object)
 {
@@ -117,11 +139,8 @@ gl_event_view_row_create_cmdline (GlEventViewRow *row)
     GlEventViewRowPrivate *priv;
     GtkStyleContext *context;
     GtkWidget *grid;
-    gchar *markup;
-    GtkWidget *label;
     gchar *time;
     gboolean rtl;
-    GtkWidget *image;
     GlJournalEntry *entry;
     GDateTime *now;
 
@@ -136,42 +155,28 @@ gl_event_view_row_create_cmdline (GlEventViewRow *row)
     gtk_grid_set_column_spacing (GTK_GRID (grid), 6);
     gtk_container_add (GTK_CONTAINER (row), grid);
 
-    if (gl_journal_entry_get_command_line (entry))
-      markup = g_markup_printf_escaped ("<b>%s</b>", gl_journal_entry_get_command_line (entry));
-    else
-      markup = g_strdup ("");
-
-    label = gtk_label_new (NULL);
-    gtk_widget_set_direction (label, GTK_TEXT_DIR_LTR);
-    gtk_widget_set_hexpand (label, TRUE);
-    gtk_widget_set_halign (label, GTK_ALIGN_START);
-    gtk_label_set_ellipsize (GTK_LABEL (label), PANGO_ELLIPSIZE_END);
-    gtk_label_set_markup (GTK_LABEL (label), markup);
-    g_free (markup);
-    gtk_grid_attach (GTK_GRID (grid), label, rtl ? 1 : 0, 0, 1, 1);
-
-    label = gtk_label_new (gl_journal_entry_get_message (entry));
-    gtk_widget_set_direction (label, GTK_TEXT_DIR_LTR);
-    context = gtk_widget_get_style_context (GTK_WIDGET (label));
+    priv->message_label = gtk_label_new (gl_journal_entry_get_message (entry));
+    gtk_widget_set_direction (priv->message_label, GTK_TEXT_DIR_LTR);
+    context = gtk_widget_get_style_context (GTK_WIDGET (priv->message_label));
     gtk_style_context_add_class (context, "event-monospace");
-    gtk_widget_set_halign (label, GTK_ALIGN_START);
-    gtk_label_set_ellipsize (GTK_LABEL (label), PANGO_ELLIPSIZE_END);
-    gtk_grid_attach (GTK_GRID (grid), label, 0, 1, 2, 1);
+    gtk_widget_set_halign (priv->message_label, GTK_ALIGN_START);
+    gtk_label_set_ellipsize (GTK_LABEL (priv->message_label),
+                             PANGO_ELLIPSIZE_END);
+    gtk_label_set_xalign (GTK_LABEL (priv->message_label), 0);
+    gtk_grid_attach (GTK_GRID (grid), priv->message_label,
+                     rtl ? 1 : 0, 0, 1, 1);
 
     now = g_date_time_new_now_local ();
     time = gl_util_timestamp_to_display (gl_journal_entry_get_timestamp (entry),
                                          now, priv->clock_format);
     g_date_time_unref (now);
-    label = gtk_label_new (time);
-    context = gtk_widget_get_style_context (GTK_WIDGET (label));
+    priv->time_label = gtk_label_new (time);
+    context = gtk_widget_get_style_context (GTK_WIDGET (priv->time_label));
     gtk_style_context_add_class (context, "dim-label");
     gtk_style_context_add_class (context, "event-time");
-    gtk_widget_set_halign (label, GTK_ALIGN_END);
-    gtk_grid_attach (GTK_GRID (grid), label, rtl ? 0 : 1, 0, 1, 1);
-
-    image = gtk_image_new_from_icon_name ("go-next-symbolic",
-                                          GTK_ICON_SIZE_MENU);
-    gtk_grid_attach (GTK_GRID (grid), image, 2, 0, 1, 2);
+    gtk_widget_set_halign (priv->time_label, GTK_ALIGN_END);
+    gtk_label_set_xalign (GTK_LABEL (priv->time_label), 1);
+    gtk_grid_attach (GTK_GRID (grid), priv->time_label, rtl ? 0 : 1, 0, 1, 1);
 
     g_free (time);
 }
@@ -182,10 +187,8 @@ gl_event_view_row_create_simple (GlEventViewRow *row)
     GlEventViewRowPrivate *priv;
     GtkStyleContext *context;
     GtkWidget *grid;
-    GtkWidget *label;
     gchar *time;
     gboolean rtl;
-    GtkWidget *image;
     GlJournalEntry *entry;
     GDateTime *now;
 
@@ -200,29 +203,28 @@ gl_event_view_row_create_simple (GlEventViewRow *row)
     gtk_grid_set_column_spacing (GTK_GRID (grid), 6);
     gtk_container_add (GTK_CONTAINER (row), grid);
 
-    label = gtk_label_new (gl_journal_entry_get_message (entry));
-    gtk_widget_set_direction (label, GTK_TEXT_DIR_LTR);
-    context = gtk_widget_get_style_context (GTK_WIDGET (label));
+    priv->message_label = gtk_label_new (gl_journal_entry_get_message (entry));
+    gtk_widget_set_direction (priv->message_label, GTK_TEXT_DIR_LTR);
+    context = gtk_widget_get_style_context (GTK_WIDGET (priv->message_label));
     gtk_style_context_add_class (context, "event-monospace");
-    gtk_widget_set_hexpand (label, TRUE);
-    gtk_widget_set_halign (label, GTK_ALIGN_START);
-    gtk_label_set_ellipsize (GTK_LABEL (label), PANGO_ELLIPSIZE_END);
-    gtk_grid_attach (GTK_GRID (grid), label, 0, 1, 1, 1);
+    gtk_widget_set_halign (priv->message_label, GTK_ALIGN_START);
+    gtk_label_set_ellipsize (GTK_LABEL (priv->message_label),
+                             PANGO_ELLIPSIZE_END);
+    gtk_label_set_xalign (GTK_LABEL (priv->message_label), 0);
+    gtk_grid_attach (GTK_GRID (grid), priv->message_label,
+                     rtl ? 1 : 0, 0, 1, 1);
 
     now = g_date_time_new_now_local ();
     time = gl_util_timestamp_to_display (gl_journal_entry_get_timestamp (entry),
                                          now, priv->clock_format);
     g_date_time_unref (now);
-    label = gtk_label_new (time);
-    context = gtk_widget_get_style_context (GTK_WIDGET (label));
+    priv->time_label = gtk_label_new (time);
+    context = gtk_widget_get_style_context (GTK_WIDGET (priv->time_label));
     gtk_style_context_add_class (context, "dim-label");
     gtk_style_context_add_class (context, "event-time");
-    gtk_widget_set_halign (label, GTK_ALIGN_END);
-    gtk_grid_attach (GTK_GRID (grid), label, rtl ? 1 : 0, 0, 1, 1);
-
-    image = gtk_image_new_from_icon_name ("go-next-symbolic",
-                                          GTK_ICON_SIZE_MENU);
-    gtk_grid_attach (GTK_GRID (grid), image, 1, 0, 1, 2);
+    gtk_widget_set_halign (priv->time_label, GTK_ALIGN_END);
+    gtk_label_set_xalign (GTK_LABEL (priv->time_label), 1);
+    gtk_grid_attach (GTK_GRID (grid), priv->time_label, rtl ? 0 : 1, 0, 1, 1);
 
     g_free (time);
 }
diff --git a/src/gl-eventviewrow.h b/src/gl-eventviewrow.h
index 219e36f..503e889 100644
--- a/src/gl-eventviewrow.h
+++ b/src/gl-eventviewrow.h
@@ -45,6 +45,8 @@ G_DECLARE_FINAL_TYPE (GlEventViewRow, gl_event_view_row, GL, EVENT_VIEW_ROW, Gtk
 
 GtkWidget * gl_event_view_row_new (GlJournalEntry *entry, GlEventViewRowStyle style, GlUtilClockFormat 
clock_format);
 GlJournalEntry * gl_event_view_row_get_entry (GlEventViewRow *row);
+GtkWidget * gl_event_view_row_get_message_label (GlEventViewRow *row);
+GtkWidget * gl_event_view_row_get_time_label (GlEventViewRow *row);
 
 G_END_DECLS
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]