From ec1ad935daefe1839d07b1b7bcfb41d634bd4a7a Mon Sep 17 00:00:00 2001 From: Georges Basile Stavracas Neto Date: Mon, 9 Feb 2015 16:43:27 -0200 Subject: [PATCH] source-dialog: implement changing the default source --- data/ui/source-dialog.ui | 1 + src/gcal-source-dialog.c | 38 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+) diff --git a/data/ui/source-dialog.ui b/data/ui/source-dialog.ui index 84bea988..0545232f 100644 --- a/data/ui/source-dialog.ui +++ b/data/ui/source-dialog.ui @@ -71,6 +71,7 @@ False 0 True + 0 diff --git a/src/gcal-source-dialog.c b/src/gcal-source-dialog.c index ce8deb70..4341effd 100644 --- a/src/gcal-source-dialog.c +++ b/src/gcal-source-dialog.c @@ -37,6 +37,7 @@ typedef struct /* flags */ gint mode : 1; ESource *source; + ESource *old_default_source; GBinding *title_bind; /* manager */ @@ -57,6 +58,10 @@ static void action_widget_activated (GtkWidget *w static void color_set (GtkColorButton *button, gpointer user_data); +static void default_check_toggled (GObject *object, + GParamSpec *pspec, + gpointer user_data); + static gboolean description_label_link_activated (GtkWidget *widget, gchar *uri, gpointer user_data); @@ -93,6 +98,8 @@ action_widget_activated (GtkWidget *widget, response = GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (widget), "response")); + priv->old_default_source = NULL; + gtk_dialog_response (GTK_DIALOG (user_data), response); } @@ -111,6 +118,36 @@ color_set (GtkColorButton *button, e_source_selectable_set_color (extension, gdk_rgba_to_string (&color)); } +static void +default_check_toggled (GObject *object, + GParamSpec *pspec, + gpointer user_data) +{ + GcalSourceDialogPrivate *priv = GCAL_SOURCE_DIALOG (user_data)->priv; + + /* Retrieve the current default source */ + if (priv->old_default_source == NULL) + { + priv->old_default_source = gcal_manager_get_default_source (priv->manager); + g_object_unref (priv->old_default_source); + } + + /** + * Keeps toggling between the + * current source and the previous + * default source. + */ + if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (object))) + { + gcal_manager_set_default_source (priv->manager, priv->source); + } + else + { + gcal_manager_set_default_source (priv->manager, priv->old_default_source); + } +} + + /** * description_label_link_activated: * @@ -243,6 +280,7 @@ gcal_source_dialog_class_init (GcalSourceDialogClass *klass) gtk_widget_class_bind_template_callback (widget_class, action_widget_activated); gtk_widget_class_bind_template_callback (widget_class, color_set); + gtk_widget_class_bind_template_callback (widget_class, default_check_toggled); gtk_widget_class_bind_template_callback (widget_class, description_label_link_activated); gtk_widget_class_bind_template_callback (widget_class, name_entry_text_changed); }