[gnome-calendar/calendar-management] source-manager: implement sources.color action



commit 10abfd207740cf060a374dd0385a70e5310380c7
Author: Georges Basile Stavracas Neto <georges stavracas gmail com>
Date:   Wed Feb 4 00:09:17 2015 -0200

    source-manager: implement sources.color action

 src/gcal-source-manager-dialog.c |   49 +++++++++++++++++++++++++++++++++++++-
 1 files changed, 48 insertions(+), 1 deletions(-)
---
diff --git a/src/gcal-source-manager-dialog.c b/src/gcal-source-manager-dialog.c
index 92ae86a..df5d97f 100644
--- a/src/gcal-source-manager-dialog.c
+++ b/src/gcal-source-manager-dialog.c
@@ -60,6 +60,10 @@ enum {
 };
 
 /* callbacks */
+static void     color_action_activated                     (GSimpleAction       *menu_item,
+                                                            GVariant            *value,
+                                                            gpointer             user_data);
+
 static void     file_action_activated                      (GSimpleAction       *menu_item,
                                                             GVariant            *value,
                                                             gpointer             user_data);
@@ -127,11 +131,54 @@ static GActionEntry action_entries[] =
   { "show", NULL, NULL, "false", NULL },
   { "default", NULL, NULL, "false", NULL },
   { "rename", NULL, NULL, NULL, NULL },
-  { "color", NULL, NULL, NULL, NULL },
+  { "color", color_action_activated, NULL, NULL, NULL },
   { "remove", NULL, NULL, NULL, NULL },
 };
 
 /**
+ * color_action_activated:
+ *
+ * Change the source's color
+ *
+ * Returns:
+ */
+static void
+color_action_activated (GSimpleAction *menu_item,
+                        GVariant      *value,
+                        gpointer       user_data)
+{
+  GcalSourceManagerDialogPrivate *priv;
+  ESourceSelectable *extension;
+  GtkWidget *color_dialog;
+  GdkRGBA color;
+  gint response;
+
+  priv = gcal_source_manager_dialog_get_instance_private (GCAL_SOURCE_MANAGER_DIALOG (user_data));
+
+  g_assert_nonnull (priv->selected_source);
+
+  extension = E_SOURCE_SELECTABLE (e_source_get_extension (priv->selected_source, 
E_SOURCE_EXTENSION_CALENDAR));
+  gdk_rgba_parse (&color, e_source_selectable_get_color (E_SOURCE_SELECTABLE (extension)));
+
+  color_dialog = gtk_color_chooser_dialog_new (_("Choose the new color..."), GTK_WINDOW (user_data));
+  gtk_color_chooser_set_rgba (GTK_COLOR_CHOOSER (color_dialog), &color);
+
+  response = gtk_dialog_run (GTK_DIALOG (color_dialog));
+
+  // Change the color
+  if (response == GTK_RESPONSE_OK)
+    {
+      gtk_color_chooser_get_rgba (GTK_COLOR_CHOOSER (color_dialog), &color);
+      e_source_selectable_set_color (E_SOURCE_SELECTABLE (extension), gdk_rgba_to_string (&color));
+
+      // Save the source updates
+      gcal_manager_update_source (priv->manager, priv->selected_source);
+    }
+
+  gtk_widget_destroy (color_dialog);
+}
+
+/**
  * file_action_activated:
  *
  * Spawns a file chooser dialog with proper


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]