From 49fde8dc224f7e73add8e59a8d9a78ba97467265 Mon Sep 17 00:00:00 2001 From: Georges Basile Stavracas Neto Date: Thu, 9 Apr 2015 15:43:34 -0300 Subject: [PATCH] source-dialog: respond to the 'sources.web' action --- src/gcal-source-dialog.c | 50 +++++++++++++++++++++++++++++++--------- 1 file changed, 39 insertions(+), 11 deletions(-) diff --git a/src/gcal-source-dialog.c b/src/gcal-source-dialog.c index d8d708cd..655378b4 100644 --- a/src/gcal-source-dialog.c +++ b/src/gcal-source-dialog.c @@ -168,6 +168,10 @@ static void on_local_activated (GSimpleAction *ac GVariant *param, gpointer user_data); +static void on_web_activated (GSimpleAction *action, + GVariant *param, + gpointer user_data); + static void remove_source (GcalManager *manager, ESource *source, gpointer user_data); @@ -204,7 +208,7 @@ G_DEFINE_TYPE_WITH_PRIVATE (GcalSourceDialog, gcal_source_dialog, GTK_TYPE_DIALO GActionEntry actions[] = { {"file", on_file_activated, NULL, NULL, NULL}, {"local", on_local_activated, NULL, NULL, NULL}, - {"web", NULL, NULL, NULL, NULL} + {"web", on_web_activated, NULL, NULL, NULL} }; @@ -725,7 +729,8 @@ stack_visible_child_name_changed (GObject *object, gboolean is_remote; default_source = gcal_manager_get_default_source (priv->manager); - creation_mode = priv->mode == GCAL_SOURCE_DIALOG_MODE_CREATE; + creation_mode = (priv->mode == GCAL_SOURCE_DIALOG_MODE_CREATE || + priv->mode == GCAL_SOURCE_DIALOG_MODE_CREATE_WEB); is_goa = is_goa_source (GCAL_SOURCE_DIALOG (user_data), priv->source); is_file = e_source_has_extension (priv->source, E_SOURCE_EXTENSION_LOCAL_BACKEND); is_remote = is_remote_source (priv->source); @@ -799,8 +804,11 @@ stack_visible_child_name_changed (GObject *object, gtk_widget_set_visible (priv->default_check, !gcal_manager_is_client_writable (priv->manager, priv->source)); /* title */ - gtk_header_bar_set_title (GTK_HEADER_BAR (priv->headerbar), e_source_get_display_name (priv->source)); - gtk_header_bar_set_subtitle (GTK_HEADER_BAR (priv->headerbar), parent_name); + if (!creation_mode) + { + gtk_header_bar_set_title (GTK_HEADER_BAR (priv->headerbar), e_source_get_display_name (priv->source)); + gtk_header_bar_set_subtitle (GTK_HEADER_BAR (priv->headerbar), parent_name); + } /* toggle the remove button */ gtk_widget_set_visible (priv->remove_button, e_source_get_removable (priv->source)); @@ -1080,6 +1088,22 @@ on_local_activated (GSimpleAction *action, gcal_source_dialog_set_mode (GCAL_SOURCE_DIALOG (user_data), GCAL_SOURCE_DIALOG_MODE_CREATE); } +/** + * on_web_activated: + * + * Redirect to the web calendar creation + * page + * + * Returns: + */ +static void +on_web_activated (GSimpleAction *action, + GVariant *param, + gpointer user_data) +{ + gcal_source_dialog_set_mode (GCAL_SOURCE_DIALOG (user_data), GCAL_SOURCE_DIALOG_MODE_CREATE_WEB); +} + /** * validate_url_cb: * @@ -1820,16 +1844,20 @@ gcal_source_dialog_set_mode (GcalSourceDialog *dialog, switch (mode) { case GCAL_SOURCE_DIALOG_MODE_CREATE: - // Bind title - if (priv->title_bind == NULL) - { - priv->title_bind = g_object_bind_property (priv->name_entry, "text", priv->headerbar, "title", - G_BINDING_DEFAULT); - } - + gtk_header_bar_set_title (GTK_HEADER_BAR (priv->headerbar), _("Add Calendar")); + gtk_header_bar_set_subtitle (GTK_HEADER_BAR (priv->headerbar), NULL); gtk_stack_set_visible_child_name (GTK_STACK (priv->stack), "edit"); break; + case GCAL_SOURCE_DIALOG_MODE_CREATE_WEB: + gtk_header_bar_set_title (GTK_HEADER_BAR (priv->headerbar), _("Add Calendar")); + gtk_header_bar_set_subtitle (GTK_HEADER_BAR (priv->headerbar), NULL); + gtk_header_bar_set_show_close_button (GTK_HEADER_BAR (priv->headerbar), FALSE); + gtk_stack_set_visible_child_name (GTK_STACK (priv->stack), "create"); + gtk_widget_set_visible (priv->add_button, TRUE); + gtk_widget_set_visible (priv->cancel_button, TRUE); + break; + case GCAL_SOURCE_DIALOG_MODE_EDIT: // Bind title if (priv->title_bind == NULL)