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).
/** @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 */
/* 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);
}
/** @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 */
/** @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 */
/** @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 */