diff --git a/data/org.gnome.rhythmbox.gschema.xml b/data/org.gnome.rhythmbox.gschema.xml
index 649ffc6a7..c6d6b9647 100644
--- a/data/org.gnome.rhythmbox.gschema.xml
+++ b/data/org.gnome.rhythmbox.gschema.xml
@@ -137,13 +137,6 @@
The list of columns that will be shown. If a given source doesn't support a particular column, it won't be displayed.
-
-
- []
- List of collapsed page groups
- The list of page groups that will initially be collapsed rather than expanded.
-
-
'%aa/%at'
diff --git a/sources/rb-display-page-tree.c b/sources/rb-display-page-tree.c
index c8b3cd328..d31ca3301 100644
--- a/sources/rb-display-page-tree.c
+++ b/sources/rb-display-page-tree.c
@@ -42,7 +42,6 @@
#include "rb-display-page-tree.h"
#include "rb-display-page-model.h"
#include "rb-debug.h"
-#include "rb-stock-icons.h"
#include "rb-marshal.h"
#include "rb-cell-renderer-pixbuf.h"
#include "gossip-cell-renderer-expander.h"
@@ -139,135 +138,90 @@ get_selected_page (RBDisplayPageTree *display_page_tree)
return page;
}
-static gboolean
-retrieve_expander_state (RBDisplayPageTree *display_page_tree, RBDisplayPageGroup *group)
+static void
+heading_cell_data_func (GtkTreeViewColumn *tree_column,
+ GtkCellRenderer *cell,
+ GtkTreeModel *model,
+ GtkTreeIter *iter,
+ RBDisplayPageTree *display_page_tree)
{
- char **groups;
- char *id;
- gboolean collapsed;
+ RBDisplayPage *page;
- groups = g_settings_get_strv (display_page_tree->priv->settings, "collapsed-groups");
- g_object_get (group, "id", &id, NULL);
- collapsed = rb_str_in_strv (id, (const char **)groups);
- g_free (id);
- g_strfreev (groups);
+ gtk_tree_model_get (GTK_TREE_MODEL (display_page_tree->priv->page_model), iter,
+ RB_DISPLAY_PAGE_MODEL_COLUMN_PAGE, &page,
+ -1);
- return (collapsed == FALSE);
-}
-static void
-store_expander_state (RBDisplayPageTree *display_page_tree, RBDisplayPageGroup *group, gboolean expanded)
-{
- char **newgroups = NULL;
- char **groups;
- char *id;
- int num;
- int i;
- int p;
-
- groups = g_settings_get_strv (display_page_tree->priv->settings, "collapsed-groups");
- g_object_get (group, "id", &id, NULL);
-
- num = g_strv_length (groups);
- p = 0;
- if (rb_str_in_strv (id, (const char **)groups) && expanded) {
- newgroups = g_new0(char *, num);
- for (i = 0; i < num; i++) {
- if (g_strcmp0 (groups[i], id) != 0) {
- newgroups[p++] = g_strdup (groups[i]);
- }
- }
- } else if (expanded == FALSE) {
- newgroups = g_new0(char *, num + 2);
- for (i = 0; i < num; i++) {
- newgroups[i] = g_strdup (groups[i]);
- }
- newgroups[i] = g_strdup (id);
+ if (RB_IS_DISPLAY_PAGE_GROUP (page)) {
+ char *name;
+ g_object_get (page, "name", &name, NULL);
+ g_object_set (cell,
+ "text", name,
+ "visible", TRUE,
+ NULL);
+ g_free (name);
+ } else {
+ g_object_set (cell,
+ "visible", FALSE,
+ NULL);
}
- if (newgroups != NULL) {
- g_settings_set_strv (display_page_tree->priv->settings, "collapsed-groups", (const char * const *)newgroups);
- g_strfreev (newgroups);
- }
- g_strfreev (groups);
- g_free (id);
+ g_object_unref (page);
}
static void
-set_cell_background (RBDisplayPageTree *display_page_tree,
- GtkCellRenderer *cell,
- gboolean is_group,
- gboolean is_active)
+padding_cell_data_func (GtkTreeViewColumn *tree_column,
+ GtkCellRenderer *cell,
+ GtkTreeModel *model,
+ GtkTreeIter *iter,
+ RBDisplayPageTree *display_page_tree)
{
- GdkRGBA color;
-
- g_return_if_fail (display_page_tree != NULL);
- g_return_if_fail (cell != NULL);
-
- gtk_style_context_get_color (gtk_widget_get_style_context (GTK_WIDGET (display_page_tree)),
- GTK_STATE_FLAG_SELECTED,
- &color);
-
- if (!is_group) {
- if (is_active) {
- /* Here we take the current theme colour and add it to
- * the colour for white and average the two. This
- * gives a colour which is inline with the theme but
- * slightly whiter.
- */
- color.red = (color.red + 1.0) / 2;
- color.green = (color.green + 1.0) / 2;
- color.blue = (color.blue + 1.0) / 2;
-
- g_object_set (cell,
- "cell-background-rgba", &color,
- NULL);
- } else {
- g_object_set (cell,
- "cell-background-rgba", NULL,
- NULL);
- }
+ RBDisplayPage *page;
+
+ gtk_tree_model_get (GTK_TREE_MODEL (display_page_tree->priv->page_model), iter,
+ RB_DISPLAY_PAGE_MODEL_COLUMN_PAGE, &page,
+ -1);
+ if (RB_IS_DISPLAY_PAGE_GROUP (page)) {
+ g_object_set (cell,
+ "visible", FALSE,
+ "xpad", 0,
+ "ypad", 0,
+ NULL);
} else {
- /* don't set background for group heading */
+ g_object_set (cell,
+ "visible", TRUE,
+ "xpad", 3,
+ "ypad", 3,
+ NULL);
}
-}
-static void
-indent_level1_cell_data_func (GtkTreeViewColumn *tree_column,
- GtkCellRenderer *cell,
- GtkTreeModel *model,
- GtkTreeIter *iter,
- RBDisplayPageTree *display_page_tree)
-{
- GtkTreePath *path;
- int depth;
-
- path = gtk_tree_model_get_path (model, iter);
- depth = gtk_tree_path_get_depth (path);
- gtk_tree_path_free (path);
- g_object_set (cell,
- "text", " ",
- "visible", depth > 1,
- NULL);
+ g_object_unref (page);
}
static void
-indent_level2_cell_data_func (GtkTreeViewColumn *tree_column,
- GtkCellRenderer *cell,
- GtkTreeModel *model,
- GtkTreeIter *iter,
- RBDisplayPageTree *display_page_tree)
+padding2_cell_data_func (GtkTreeViewColumn *tree_column,
+ GtkCellRenderer *cell,
+ GtkTreeModel *model,
+ GtkTreeIter *iter,
+ RBDisplayPageTree *display_page_tree)
{
GtkTreePath *path;
- int depth;
path = gtk_tree_model_get_path (model, iter);
- depth = gtk_tree_path_get_depth (path);
+ if (gtk_tree_path_get_depth (path) > 2) {
+ g_object_set (cell,
+ "visible", TRUE,
+ "xpad", 3,
+ "ypad", 0,
+ NULL);
+ } else {
+ g_object_set (cell,
+ "visible", FALSE,
+ "xpad", 0,
+ "ypad", 0,
+ NULL);
+ }
gtk_tree_path_free (path);
- g_object_set (cell,
- "text", " ",
- "visible", depth > 2,
- NULL);
}
static void
@@ -319,7 +273,6 @@ title_cell_data_func (GtkTreeViewColumn *column,
RBDisplayPageTree *display_page_tree)
{
RBDisplayPage *page;
- char *name;
gboolean playing;
gtk_tree_model_get (GTK_TREE_MODEL (display_page_tree->priv->page_model), iter,
@@ -327,16 +280,20 @@ title_cell_data_func (GtkTreeViewColumn *column,
RB_DISPLAY_PAGE_MODEL_COLUMN_PLAYING, &playing,
-1);
- g_object_get (page, "name", &name, NULL);
-
- g_object_set (renderer,
- "text", name,
- "weight", playing ? PANGO_WEIGHT_BOLD : PANGO_WEIGHT_NORMAL,
- NULL);
+ if (RB_IS_DISPLAY_PAGE_GROUP (page)) {
+ g_object_set (renderer, "visible", FALSE, NULL);
+ } else {
+ char *name;
+ g_object_get (page, "name", &name, NULL);
- set_cell_background (display_page_tree, renderer, RB_IS_DISPLAY_PAGE_GROUP (page), FALSE);
+ g_object_set (renderer,
+ "visible", TRUE,
+ "text", name,
+ "weight", playing ? PANGO_WEIGHT_BOLD : PANGO_WEIGHT_NORMAL,
+ NULL);
+ g_free (name);
+ }
- g_free (name);
g_object_unref (page);
}
@@ -349,7 +306,13 @@ expander_cell_data_func (GtkTreeViewColumn *column,
{
RBDisplayPage *page;
- if (gtk_tree_model_iter_has_child (model, iter)) {
+ gtk_tree_model_get (GTK_TREE_MODEL (display_page_tree->priv->page_model), iter,
+ RB_DISPLAY_PAGE_MODEL_COLUMN_PAGE, &page,
+ -1);
+
+ if (RB_IS_DISPLAY_PAGE_GROUP (page) || gtk_tree_model_iter_has_child (model, iter) == FALSE) {
+ g_object_set (cell, "visible", FALSE, NULL);
+ } else if (gtk_tree_model_iter_has_child (model, iter)) {
GtkTreePath *path;
gboolean row_expanded;
@@ -362,14 +325,8 @@ expander_cell_data_func (GtkTreeViewColumn *column,
"visible", TRUE,
"expander-style", row_expanded ? GTK_EXPANDER_EXPANDED : GTK_EXPANDER_COLLAPSED,
NULL);
- } else {
- g_object_set (cell, "visible", FALSE, NULL);
}
- gtk_tree_model_get (GTK_TREE_MODEL (display_page_tree->priv->page_model), iter,
- RB_DISPLAY_PAGE_MODEL_COLUMN_PAGE, &page,
- -1);
- set_cell_background (display_page_tree, cell, RB_IS_DISPLAY_PAGE_GROUP (page), FALSE);
g_object_unref (page);
}
@@ -398,41 +355,6 @@ row_activated_cb (GtkTreeView *treeview,
}
}
-static void
-update_expanded_state (RBDisplayPageTree *display_page_tree,
- GtkTreeIter *iter,
- gboolean expanded)
-{
- GtkTreeModel *model;
- RBDisplayPage *page;
-
- model = gtk_tree_view_get_model (GTK_TREE_VIEW (display_page_tree->priv->treeview));
- gtk_tree_model_get (model, iter,
- RB_DISPLAY_PAGE_MODEL_COLUMN_PAGE, &page,
- -1);
- if (RB_IS_DISPLAY_PAGE_GROUP (page)) {
- store_expander_state (display_page_tree, RB_DISPLAY_PAGE_GROUP (page), expanded);
- }
-}
-
-static void
-row_expanded_cb (GtkTreeView *treeview,
- GtkTreeIter *iter,
- GtkTreePath *path,
- RBDisplayPageTree *display_page_tree)
-{
- update_expanded_state (display_page_tree, iter, TRUE);
-}
-
-static void
-row_collapsed_cb (GtkTreeView *treeview,
- GtkTreeIter *iter,
- GtkTreePath *path,
- RBDisplayPageTree *display_page_tree)
-{
- update_expanded_state (display_page_tree, iter, FALSE);
-}
-
static void
drop_received_cb (RBDisplayPageModel *model,
RBDisplayPage *page,
@@ -481,39 +403,10 @@ model_row_inserted_cb (GtkTreeModel *model,
GtkTreeIter *iter,
RBDisplayPageTree *display_page_tree)
{
- gboolean expand = FALSE;
- if (gtk_tree_path_get_depth (path) == 2) {
- GtkTreeIter group_iter;
- expand = TRUE;
- if (gtk_tree_model_iter_parent (model, &group_iter, iter)) {
- gboolean loaded;
- RBDisplayPage *page;
- RBDisplayPageGroupCategory category;
-
- gtk_tree_model_get (model, &group_iter,
- RB_DISPLAY_PAGE_MODEL_COLUMN_PAGE, &page,
- -1);
- g_object_get (page, "loaded", &loaded, "category", &category, NULL);
- if (category == RB_DISPLAY_PAGE_GROUP_CATEGORY_TRANSIENT || loaded == FALSE) {
- expand = retrieve_expander_state (display_page_tree, RB_DISPLAY_PAGE_GROUP (page));
- }
- g_object_unref (page);
- }
- } else if (gtk_tree_path_get_depth (path) == 1) {
- RBDisplayPage *page;
-
- gtk_tree_model_get (model, iter,
- RB_DISPLAY_PAGE_MODEL_COLUMN_PAGE, &page,
- -1);
- expand = retrieve_expander_state (display_page_tree, RB_DISPLAY_PAGE_GROUP (page));
- }
-
- if (expand) {
- display_page_tree->priv->expand_rows = g_list_append (display_page_tree->priv->expand_rows,
- gtk_tree_row_reference_new (model, path));
- if (display_page_tree->priv->expand_rows_id == 0) {
- display_page_tree->priv->expand_rows_id = g_idle_add ((GSourceFunc)expand_rows_cb, display_page_tree);
- }
+ display_page_tree->priv->expand_rows = g_list_append (display_page_tree->priv->expand_rows,
+ gtk_tree_row_reference_new (model, path));
+ if (display_page_tree->priv->expand_rows_id == 0) {
+ display_page_tree->priv->expand_rows_id = g_idle_add ((GSourceFunc)expand_rows_cb, display_page_tree);
}
gtk_tree_view_columns_autosize (GTK_TREE_VIEW (display_page_tree->priv->treeview));
@@ -956,14 +849,6 @@ impl_constructed (GObject *object)
"row_activated",
G_CALLBACK (row_activated_cb),
display_page_tree, 0);
- g_signal_connect_object (display_page_tree->priv->treeview,
- "row-collapsed",
- G_CALLBACK (row_collapsed_cb),
- display_page_tree, 0);
- g_signal_connect_object (display_page_tree->priv->treeview,
- "row-expanded",
- G_CALLBACK (row_expanded_cb),
- display_page_tree, 0);
g_signal_connect_object (display_page_tree->priv->treeview,
"key_release_event",
G_CALLBACK (key_release_cb),
@@ -979,31 +864,43 @@ impl_constructed (GObject *object)
display_page_tree->priv->blank_pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB, TRUE, 8, pixbuf_width, pixbuf_height);
gdk_pixbuf_fill (display_page_tree->priv->blank_pixbuf, 0);
+ /* initial padding */
+ renderer = gtk_cell_renderer_text_new ();
+ gtk_tree_view_column_pack_start (display_page_tree->priv->main_column, renderer, FALSE);
+ g_object_set (renderer, "xpad", 3, NULL);
+
/* headings */
renderer = gtk_cell_renderer_text_new ();
gtk_tree_view_column_pack_start (display_page_tree->priv->main_column, renderer, FALSE);
gtk_tree_view_column_set_cell_data_func (display_page_tree->priv->main_column,
renderer,
- (GtkTreeCellDataFunc) indent_level1_cell_data_func,
+ (GtkTreeCellDataFunc) heading_cell_data_func,
display_page_tree,
NULL);
g_object_set (renderer,
+ "weight", PANGO_WEIGHT_BOLD,
+ "weight-set", TRUE,
+ "ypad", 6,
"xpad", 0,
- "visible", FALSE,
NULL);
- /* Set up the indent level2 column */
+ /* icon padding */
renderer = gtk_cell_renderer_text_new ();
gtk_tree_view_column_pack_start (display_page_tree->priv->main_column, renderer, FALSE);
gtk_tree_view_column_set_cell_data_func (display_page_tree->priv->main_column,
renderer,
- (GtkTreeCellDataFunc) indent_level2_cell_data_func,
+ (GtkTreeCellDataFunc) padding_cell_data_func,
+ display_page_tree,
+ NULL);
+
+ /* padding for second level */
+ renderer = gtk_cell_renderer_text_new ();
+ gtk_tree_view_column_pack_start (display_page_tree->priv->main_column, renderer, FALSE);
+ gtk_tree_view_column_set_cell_data_func (display_page_tree->priv->main_column,
+ renderer,
+ (GtkTreeCellDataFunc) padding2_cell_data_func,
display_page_tree,
NULL);
- g_object_set (renderer,
- "xpad", 0,
- "visible", FALSE,
- NULL);
/* Set up the pixbuf column */
renderer = gtk_cell_renderer_pixbuf_new ();