[gnome-logs] Use a single row for each log entry
- From: David King <davidk src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-logs] Use a single row for each log entry
- Date: Tue, 26 May 2015 10:14:27 +0000 (UTC)
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]