chiark / gitweb /
Columns are now resizable and wide columns are ellipsized. Columns
authorRichard Kettlewell <rjk@greenend.org.uk>
Tue, 10 Jun 2008 21:33:53 +0000 (22:33 +0100)
committerRichard Kettlewell <rjk@greenend.org.uk>
Tue, 10 Jun 2008 21:33:53 +0000 (22:33 +0100)
more reliably get their right width.

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
disobedience/queue-generic.c
disobedience/queue-generic.h
disobedience/queue.c
disobedience/recent.c

index 9373af333bca8299d8ec9884d6f22f1ebc05b777..8eef894f981f0800497df81b07427145ab703483 100644 (file)
@@ -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 */
index 5f27bd9ae11341477b459973c4ebb3a0d6acacf7..4db57502f0f7da0f5ccbf3aacde48e902a057ce4 100644 (file)
@@ -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);
   }
 
index 7ee93b64f1b37d6dec43f3b53770ccd6509d7987..9ca1f8009ef01c2d23260ddf9be9c683445103ca 100644 (file)
@@ -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 */
index 18d9d8b4366da0a6b363183910bfd27de90c2b59..06c761c49fc07022b5eb2dc73f6fc8aef5c93a54 100644 (file)
@@ -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 */
index 1f3e66748253c864d2044aaf53f815abea1d9f5b..ea7b26e1f7dc908d4619397ec47afa9d61f14cf6 100644 (file)
@@ -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 */