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

commit c65cba3d9498fabb38def3298c834c8fa14c9d49
Author: Enrico Tröger <enr...@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);
 
_______________________________________________
Xfce4-commits mailing list
Xfce4-commits@xfce.org
http://foo-projects.org/mailman/listinfo/xfce4-commits

Reply via email to