[Xfce4-commits] <gigolo:master> Store and display colours for bookmarks

Enrico Tröger noreply at xfce.org
Mon Jan 3 00:10:01 CET 2011


Updating branch refs/heads/master
         to c65cba3d9498fabb38def3298c834c8fa14c9d49 (commit)
       from b2686fb283a1a9bcfb8cd3f4732dccbd3ecce7ac (commit)

commit c65cba3d9498fabb38def3298c834c8fa14c9d49
Author: Enrico Tröger <enrico at xfce.org>
Date:   Fri Dec 31 00:48:44 2010 +0100

    Store and display colours for bookmarks
    
    Bookmarks now can have colours which are shown in the bookmarks dialog and can be set in the bookmark edit dialog.
    This is to easily group and identify bookmarks in a large list easily by their colours.

 src/bookmark.c           |   23 ++++++++++++++++++++
 src/bookmark.h           |    3 ++
 src/bookmarkdialog.c     |   18 +++++++++-------
 src/bookmarkeditdialog.c |   51 ++++++++++++++++++++++++++++++++++++++++-----
 src/settings.c           |    7 +++++-
 5 files changed, 87 insertions(+), 15 deletions(-)

diff --git a/src/bookmark.c b/src/bookmark.c
index 9df9282..403d053 100644
--- a/src/bookmark.c
+++ b/src/bookmark.c
@@ -43,6 +43,7 @@ struct _GigoloBookmarkPrivate
 	gchar	*share;
 	guint	 port;
 	gchar	*user;
+	gchar	*color;
 	gboolean autoconnect;
 	gboolean should_not_autoconnect;
 
@@ -629,6 +630,28 @@ void gigolo_bookmark_set_domain(GigoloBookmark *bookmark, const gchar *domain)
 }
 
 
+const gchar *gigolo_bookmark_get_color(GigoloBookmark *bookmark)
+{
+	g_return_val_if_fail(bookmark != NULL, NULL);
+
+	return GIGOLO_BOOKMARK_GET_PRIVATE(bookmark)->color;
+}
+
+
+void gigolo_bookmark_set_color(GigoloBookmark *bookmark, const gchar *color)
+{
+	GigoloBookmarkPrivate *priv;
+
+	g_return_if_fail(bookmark != NULL);
+	g_return_if_fail(color != NULL);
+
+	priv = GIGOLO_BOOKMARK_GET_PRIVATE(bookmark);
+
+	g_free(priv->color);
+	priv->color = g_strdup(color);
+}
+
+
 gboolean gigolo_bookmark_is_valid(GigoloBookmark *bookmark)
 {
 	GigoloBookmarkPrivate *priv;
diff --git a/src/bookmark.h b/src/bookmark.h
index 7b82bd9..89c8064 100644
--- a/src/bookmark.h
+++ b/src/bookmark.h
@@ -95,6 +95,9 @@ gboolean			gigolo_bookmark_parse_uri		(GigoloBookmark *bookmark, const gchar *ur
 
 void				gigolo_bookmark_bookmark_clear	(GigoloBookmark *bookmark);
 
+const gchar*		gigolo_bookmark_get_color		(GigoloBookmark *bookmark);
+void				gigolo_bookmark_set_color		(GigoloBookmark *bookmark, const gchar *color);
+
 G_END_DECLS
 
 #endif /* __BOOKMARK_H__ */
diff --git a/src/bookmarkdialog.c b/src/bookmarkdialog.c
index fbfe574..3fb74df 100644
--- a/src/bookmarkdialog.c
+++ b/src/bookmarkdialog.c
@@ -61,6 +61,7 @@ enum
 	COL_AUTOMOUNT,
 	COL_USERNAME,
 	COL_OTHER,
+	COL_COLOR,
 	COL_BMREF,
 	N_COLUMNS,
 	ACTION_ADD,
@@ -119,6 +120,7 @@ static void update_row_in_model(GigoloBookmarkDialog *dialog, GtkTreeIter *iter,
 			COL_AUTOMOUNT, gigolo_bookmark_get_autoconnect(bm),
 			COL_USERNAME, gigolo_bookmark_get_user(bm),
 			COL_OTHER, other_text->str,
+			COL_COLOR, gigolo_bookmark_get_color(bm),
 			COL_BMREF, bm,
 			-1);
 	g_string_free(other_text, TRUE);
@@ -298,11 +300,11 @@ static void tree_prepare(GigoloBookmarkDialog *dialog)
 	priv->tree = gtk_tree_view_new();
 	priv->store = gtk_list_store_new(N_COLUMNS,
 		G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING,
-		G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_POINTER);
+		G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_POINTER);
 
 	renderer = gtk_cell_renderer_text_new();
 	column = gtk_tree_view_column_new_with_attributes(
-		_("Name"), renderer, "text", COL_NAME, NULL);
+		_("Name"), renderer, "text", COL_NAME, "cell-background", COL_COLOR, NULL);
 	gtk_tree_view_column_set_sort_indicator(column, TRUE);
 	gtk_tree_view_column_set_sort_column_id(column, COL_NAME);
 	gtk_tree_view_column_set_resizable(GTK_TREE_VIEW_COLUMN(column), TRUE);
@@ -310,7 +312,7 @@ static void tree_prepare(GigoloBookmarkDialog *dialog)
 
 	renderer = gtk_cell_renderer_text_new();
 	column = gtk_tree_view_column_new_with_attributes(
-		_("Service Type"), renderer, "text", COL_SCHEME, NULL);
+		_("Service Type"), renderer, "text", COL_SCHEME, "cell-background", COL_COLOR, NULL);
 	gtk_tree_view_column_set_sort_indicator(column, TRUE);
 	gtk_tree_view_column_set_sort_column_id(column, COL_SCHEME);
 	gtk_tree_view_column_set_resizable(GTK_TREE_VIEW_COLUMN(column), TRUE);
@@ -318,7 +320,7 @@ static void tree_prepare(GigoloBookmarkDialog *dialog)
 
 	renderer = gtk_cell_renderer_text_new();
 	column = gtk_tree_view_column_new_with_attributes(
-		_("Host"), renderer, "text", COL_HOST, NULL);
+		_("Host"), renderer, "text", COL_HOST, "cell-background", COL_COLOR, NULL);
 	gtk_tree_view_column_set_sort_indicator(column, TRUE);
 	gtk_tree_view_column_set_sort_column_id(column, COL_HOST);
 	gtk_tree_view_column_set_resizable(GTK_TREE_VIEW_COLUMN(column), TRUE);
@@ -326,7 +328,7 @@ static void tree_prepare(GigoloBookmarkDialog *dialog)
 
 	renderer = gtk_cell_renderer_text_new();
 	column = gtk_tree_view_column_new_with_attributes(
-		_("Port"), renderer, "text", COL_PORT, NULL);
+		_("Port"), renderer, "text", COL_PORT, "cell-background", COL_COLOR, NULL);
 	gtk_tree_view_column_set_sort_indicator(column, TRUE);
 	gtk_tree_view_column_set_sort_column_id(column, COL_PORT);
 	gtk_tree_view_column_set_resizable(GTK_TREE_VIEW_COLUMN(column), TRUE);
@@ -334,7 +336,7 @@ static void tree_prepare(GigoloBookmarkDialog *dialog)
 
 	renderer = gtk_cell_renderer_toggle_new();
 	column = gtk_tree_view_column_new_with_attributes(
-		_("Auto-Connect"), renderer, "active", COL_AUTOMOUNT, NULL);
+		_("Auto-Connect"), renderer, "active", COL_AUTOMOUNT, "cell-background", COL_COLOR, NULL);
 	gtk_tree_view_column_set_sort_indicator(column, TRUE);
 	gtk_tree_view_column_set_sort_column_id(column, COL_AUTOMOUNT);
 	gtk_tree_view_column_set_resizable(GTK_TREE_VIEW_COLUMN(column), TRUE);
@@ -342,7 +344,7 @@ static void tree_prepare(GigoloBookmarkDialog *dialog)
 
 	renderer = gtk_cell_renderer_text_new();
 	column = gtk_tree_view_column_new_with_attributes(
-		_("Username"), renderer, "text", COL_USERNAME, NULL);
+		_("Username"), renderer, "text", COL_USERNAME, "cell-background", COL_COLOR, NULL);
 	gtk_tree_view_column_set_sort_indicator(column, TRUE);
 	gtk_tree_view_column_set_sort_column_id(column, COL_USERNAME);
 	gtk_tree_view_column_set_resizable(GTK_TREE_VIEW_COLUMN(column), TRUE);
@@ -350,7 +352,7 @@ static void tree_prepare(GigoloBookmarkDialog *dialog)
 
 	renderer = gtk_cell_renderer_text_new();
 	column = gtk_tree_view_column_new_with_attributes(
-		_("Other information"), renderer, "text", COL_OTHER, NULL);
+		_("Other information"), renderer, "text", COL_OTHER, "cell-background", COL_COLOR, NULL);
 	gtk_tree_view_column_set_sort_indicator(column, TRUE);
 	gtk_tree_view_column_set_sort_column_id(column, COL_OTHER);
 	gtk_tree_view_column_set_resizable(GTK_TREE_VIEW_COLUMN(column), TRUE);
diff --git a/src/bookmarkeditdialog.c b/src/bookmarkeditdialog.c
index 4522a63..72cfe4b 100644
--- a/src/bookmarkeditdialog.c
+++ b/src/bookmarkeditdialog.c
@@ -82,6 +82,9 @@ struct _GigoloBookmarkEditDialogPrivate
 	GtkWidget *share_button;
 	GtkWidget *share_entry;
 
+	GtkWidget *color_label;
+	GtkWidget *color_chooser;
+
 	GigoloBookmark *bookmark_init;
 	GigoloBookmark *bookmark_update;
 
@@ -402,6 +405,14 @@ static void init_values(GigoloBookmarkEditDialog *dialog)
 	tmp = gigolo_bookmark_get_name(priv->bookmark_init);
 	if (tmp != NULL)
 		gtk_entry_set_text(GTK_ENTRY(priv->name_entry), tmp);
+	/* Color */
+	tmp = gigolo_bookmark_get_color(priv->bookmark_init);
+	if (tmp != NULL)
+	{
+		GdkColor color;
+		if (gdk_color_parse(tmp, &color))
+			gtk_color_button_set_color(GTK_COLOR_BUTTON(priv->color_chooser), &color);
+	}
 	/* URI */
 	uri = gigolo_bookmark_get_uri(priv->bookmark_init);
 	if (uri != NULL)
@@ -530,7 +541,7 @@ static void setup_for_type(GigoloBookmarkEditDialog *dialog)
 		gtk_container_remove(GTK_CONTAINER(priv->table), priv->information_label);
 	}
 
-	i = 4;
+	i = 5;
 	table = priv->table;
 
 	if (meth->scheme == NULL)
@@ -740,6 +751,21 @@ static void fill_method_combo_box(GigoloBookmarkEditDialog *dialog)
 }
 
 
+static void update_bookmark_color(GigoloBookmarkEditDialog *dialog)
+{
+	GigoloBookmarkEditDialogPrivate *priv;
+	GdkColor color;
+	gchar *color_string;
+
+	priv = GIGOLO_BOOKMARK_EDIT_DIALOG_GET_PRIVATE(dialog);
+
+	gtk_color_button_get_color(GTK_COLOR_BUTTON(priv->color_chooser), &color);
+	color_string = gdk_color_to_string(&color);
+	gigolo_bookmark_set_color(priv->bookmark_update, color_string);
+	g_free(color_string);
+}
+
+
 /* Update the contents of the bookmark with the values from the dialog. */
 static void update_bookmark(GigoloBookmarkEditDialog *dialog)
 {
@@ -767,6 +793,8 @@ static void update_bookmark(GigoloBookmarkEditDialog *dialog)
 	else
 		gigolo_bookmark_set_name(priv->bookmark_update, GIGOLO_BOOKMARK_NAME_NONE);
 
+	update_bookmark_color(dialog);
+
 	if (idx == -1)
 		idx = 0;
 	if (methods[idx].scheme == NULL)
@@ -862,6 +890,8 @@ static void gigolo_bookmark_edit_dialog_set_property(GObject *object, guint prop
 				combo_set_active(priv->type_combo, 0);
 				gtk_widget_hide(priv->name_label);
 				gtk_widget_hide(priv->name_entry);
+				gtk_widget_hide(priv->color_label);
+				gtk_widget_hide(priv->color_chooser);
 				gtk_widget_hide(priv->autoconnect_label);
 				gtk_widget_hide(priv->autoconnect_checkbtn);
 				break;
@@ -975,23 +1005,32 @@ static void gigolo_bookmark_edit_dialog_init(GigoloBookmarkEditDialog *dialog)
 	gtk_label_set_mnemonic_widget(GTK_LABEL(priv->name_label), entry);
 	gtk_table_attach(GTK_TABLE(table), entry, 1, 2, 0, 1, GTK_FILL | GTK_EXPAND, GTK_FILL, 0, 0);
 
+	priv->color_label = gtk_label_new_with_mnemonic(_("_Color:"));
+	gtk_misc_set_alignment(GTK_MISC(priv->color_label), 0.0, 0.5);
+	gtk_table_attach(GTK_TABLE(table), priv->color_label, 0, 1, 1, 2, GTK_FILL, GTK_FILL, 0, 0);
+
+	priv->color_chooser = gtk_color_button_new();
+	gtk_label_set_mnemonic_widget(GTK_LABEL(priv->color_label), priv->color_chooser);
+	gtk_table_attach(GTK_TABLE(table), priv->color_chooser,
+		1, 2, 1, 2, GTK_FILL | GTK_EXPAND, GTK_FILL, 0, 0);
+
 	priv->autoconnect_label = gtk_label_new_with_mnemonic(_("Au_to-Connect"));
 	gtk_misc_set_alignment(GTK_MISC(priv->autoconnect_label), 0.0, 0.5);
-	gtk_table_attach(GTK_TABLE(table), priv->autoconnect_label, 0, 1, 1, 2, GTK_FILL, GTK_FILL, 0, 0);
+	gtk_table_attach(GTK_TABLE(table), priv->autoconnect_label, 0, 1, 2, 3, GTK_FILL, GTK_FILL, 0, 0);
 
 	priv->autoconnect_checkbtn = gtk_check_button_new();
 	gtk_label_set_mnemonic_widget(GTK_LABEL(priv->autoconnect_label), priv->autoconnect_checkbtn);
-	gtk_table_attach(GTK_TABLE(table), priv->autoconnect_checkbtn, 1, 2, 1, 2, GTK_FILL, GTK_FILL, 0, 0);
+	gtk_table_attach(GTK_TABLE(table), priv->autoconnect_checkbtn, 1, 2, 2, 3, GTK_FILL, GTK_FILL, 0, 0);
 
 	label = gtk_label_new_with_mnemonic(_("Service t_ype:"));
 	gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
-	gtk_table_attach(GTK_TABLE(table), label, 0, 1, 2, 3, GTK_FILL, GTK_FILL, 0, 0);
+	gtk_table_attach(GTK_TABLE(table), label, 0, 1, 3, 4, GTK_FILL, GTK_FILL, 0, 0);
 
 	priv->type_combo = combo = gtk_combo_box_new();
-	gtk_table_attach(GTK_TABLE(table), combo, 1, 2, 2, 3, GTK_FILL | GTK_EXPAND, GTK_FILL, 0, 0);
+	gtk_table_attach(GTK_TABLE(table), combo, 1, 2, 3, 4, GTK_FILL | GTK_EXPAND, GTK_FILL, 0, 0);
 
 	label_tmp = gtk_label_new(" ");
-	gtk_table_attach(GTK_TABLE(table), label_tmp, 0, 2, 3, 4, GTK_FILL | GTK_EXPAND, GTK_FILL, 0, 0);
+	gtk_table_attach(GTK_TABLE(table), label_tmp, 0, 2, 4, 5, GTK_FILL | GTK_EXPAND, GTK_FILL, 0, 0);
 
 	renderer = gtk_cell_renderer_text_new();
 	gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(combo), renderer, TRUE);
diff --git a/src/settings.c b/src/settings.c
index 6282c44..503a76a 100644
--- a/src/settings.c
+++ b/src/settings.c
@@ -496,6 +496,7 @@ static void write_settings_bookmarks(GigoloSettings *settings)
 			set_setting_string(k, name, "share", gigolo_bookmark_get_share(bm));
 			set_setting_string(k, name, "domain", gigolo_bookmark_get_domain(bm));
 			set_setting_string(k, name, "path", gigolo_bookmark_get_path(bm));
+			set_setting_string(k, name, "color", gigolo_bookmark_get_color(bm));
 			set_setting_int(k, name, "port", gigolo_bookmark_get_port(bm));
 			set_setting_int(k, name, "autoconnect", gigolo_bookmark_get_autoconnect(bm));
 		}
@@ -598,7 +599,7 @@ static void load_settings_read_bookmarks(GigoloSettingsPrivate *priv)
 	GError *error = NULL;
 	gsize len, i;
 	gchar **groups;
-	gchar *scheme, *host, *user, *domain, *share, *folder, *path;
+	gchar *scheme, *host, *user, *domain, *share, *folder, *path, *color;
 	gint port;
 	gboolean autoconnect;
 	GigoloBookmark *bm;
@@ -622,6 +623,7 @@ static void load_settings_read_bookmarks(GigoloSettingsPrivate *priv)
 		user = get_setting_string(k, groups[i], "user", "");
 		domain = get_setting_string(k, groups[i], "domain", "");
 		share = get_setting_string(k, groups[i], "share", "");
+		color = get_setting_string(k, groups[i], "color", "");
 		port = get_setting_int(k, groups[i], "port", 0);
 		autoconnect = get_setting_int(k, groups[i], "autoconnect", FALSE);
 
@@ -640,6 +642,8 @@ static void load_settings_read_bookmarks(GigoloSettingsPrivate *priv)
 			gigolo_bookmark_set_path(bm, path);
 		if (NZV(share))
 			gigolo_bookmark_set_share(bm, share);
+		if (NZV(color))
+			gigolo_bookmark_set_color(bm, color);
 		gigolo_bookmark_set_port(bm, port);
 		gigolo_bookmark_set_autoconnect(bm, autoconnect);
 
@@ -652,6 +656,7 @@ static void load_settings_read_bookmarks(GigoloSettingsPrivate *priv)
 		g_free(user);
 		g_free(domain);
 		g_free(share);
+		g_free(color);
 	}
 	g_strfreev(groups);
 



More information about the Xfce4-commits mailing list