From b0b15b7ced28b3c6ddfcd4b0a7e46ee6432a243c Mon Sep 17 00:00:00 2001 Message-Id: From: Mark Wooding Date: Tue, 10 Jun 2008 22:33:53 +0100 Subject: [PATCH] Columns are now resizable and wide columns are ellipsized. Columns more reliably get their right width. Organization: Straylight/Edgeware From: Richard Kettlewell NB http://bugzilla.gnome.org/show_bug.cgi?id=316087 applies here. Amazingly, GTK+ column resizing is broken nearly three years after someone reported it (and presumably in fact longer than that). --- disobedience/added.c | 8 ++++---- disobedience/queue-generic.c | 7 +++++++ disobedience/queue-generic.h | 13 +++++++++++-- disobedience/queue.c | 10 +++++----- disobedience/recent.c | 10 +++++----- 5 files changed, 32 insertions(+), 16 deletions(-) diff --git a/disobedience/added.c b/disobedience/added.c index 9373af3..8eef894 100644 --- a/disobedience/added.c +++ b/disobedience/added.c @@ -70,10 +70,10 @@ static void added_init(void) { /** @brief Columns for the new tracks list */ static const struct queue_column added_columns[] = { - { "Artist", column_namepart, "artist", 0 }, - { "Album", column_namepart, "album", 0 }, - { "Title", column_namepart, "title", 0 }, - { "Length", column_length, 0, 1 } + { "Artist", column_namepart, "artist", COL_EXPAND|COL_ELLIPSIZE }, + { "Album", column_namepart, "album", COL_EXPAND|COL_ELLIPSIZE }, + { "Title", column_namepart, "title", COL_EXPAND|COL_ELLIPSIZE }, + { "Length", column_length, 0, COL_RIGHT } }; /** @brief Pop-up menu for new tracks list */ diff --git a/disobedience/queue-generic.c b/disobedience/queue-generic.c index 5f27bd9..4db5750 100644 --- a/disobedience/queue-generic.c +++ b/disobedience/queue-generic.c @@ -380,11 +380,18 @@ GtkWidget *init_queuelike(struct queuelike *ql) { /* Create cell renderers and label columns */ for(int n = 0; n < ql->ncolumns; ++n) { GtkCellRenderer *r = gtk_cell_renderer_text_new(); + if(ql->columns[n].flags & COL_ELLIPSIZE) + g_object_set(r, "ellipsize", PANGO_ELLIPSIZE_END, (char *)0); + if(ql->columns[n].flags & COL_RIGHT) + g_object_set(r, "xalign", (gfloat)1.0, (char *)0); GtkTreeViewColumn *c = gtk_tree_view_column_new_with_attributes (ql->columns[n].name, r, "text", n, (char *)0); + g_object_set(c, "resizable", TRUE, (char *)0); + if(ql->columns[n].flags & COL_EXPAND) + g_object_set(c, "expand", TRUE, (char *)0); gtk_tree_view_append_column(GTK_TREE_VIEW(ql->view), c); } diff --git a/disobedience/queue-generic.h b/disobedience/queue-generic.h index 7ee93b6..9ca1f80 100644 --- a/disobedience/queue-generic.h +++ b/disobedience/queue-generic.h @@ -32,10 +32,19 @@ struct queue_column { /** @brief Passed to value() */ const char *data; - /** @brief TODO */ - gfloat xalign; + /** @brief Flags word */ + unsigned flags; }; +/** @brief Ellipsize column if too wide */ +#define COL_ELLIPSIZE 0x0001 + +/** @brief Set expand property */ +#define COL_EXPAND 0x0002 + +/** @brief Right-algin column */ +#define COL_RIGHT 0x0004 + /** @brief An item in the queue's popup menu */ struct queue_menuitem { /** @brief Menu item name */ diff --git a/disobedience/queue.c b/disobedience/queue.c index 18d9d8b..06c761c 100644 --- a/disobedience/queue.c +++ b/disobedience/queue.c @@ -116,12 +116,12 @@ static void queue_init(void) { /** @brief Columns for the queue */ static const struct queue_column queue_columns[] = { - { "When", column_when, 0, 1 }, + { "When", column_when, 0, COL_RIGHT }, { "Who", column_who, 0, 0 }, - { "Artist", column_namepart, "artist", 0 }, - { "Album", column_namepart, "album", 0 }, - { "Title", column_namepart, "title", 0 }, - { "Length", column_length, 0, 1 } + { "Artist", column_namepart, "artist", COL_EXPAND|COL_ELLIPSIZE }, + { "Album", column_namepart, "album", COL_EXPAND|COL_ELLIPSIZE }, + { "Title", column_namepart, "title", COL_EXPAND|COL_ELLIPSIZE }, + { "Length", column_length, 0, COL_RIGHT } }; /** @brief Pop-up menu for queue */ diff --git a/disobedience/recent.c b/disobedience/recent.c index 1f3e667..ea7b26e 100644 --- a/disobedience/recent.c +++ b/disobedience/recent.c @@ -66,12 +66,12 @@ static void recent_init(void) { /** @brief Columns for the recently-played list */ static const struct queue_column recent_columns[] = { - { "When", column_when, 0, 1 }, + { "When", column_when, 0, COL_RIGHT }, { "Who", column_who, 0, 0 }, - { "Artist", column_namepart, "artist", 0 }, - { "Album", column_namepart, "album", 0 }, - { "Title", column_namepart, "title", 0 }, - { "Length", column_length, 0, 1 } + { "Artist", column_namepart, "artist", COL_EXPAND|COL_ELLIPSIZE }, + { "Album", column_namepart, "album", COL_EXPAND|COL_ELLIPSIZE }, + { "Title", column_namepart, "title", COL_EXPAND|COL_ELLIPSIZE }, + { "Length", column_length, 0, COL_RIGHT } }; /** @brief Pop-up menu for recently played list */ -- [mdw]