source-dialog: properly update edit page top widgets

Build URIs for files and remote sources,
hide things for local calendars, etc. The
only major missing piece of the puzzle now
is GOA itself.
This commit is contained in:
Georges Basile Stavracas Neto
2015-05-25 12:35:33 -04:00
committed by Erick Pérez Castellanos
parent 33d341ff13
commit cdd6c967f8
2 changed files with 91 additions and 3 deletions
+2 -2
View File
@@ -559,7 +559,7 @@
</child>
<child>
<object class="GtkLabel" id="account_dim_label">
<property name="visible">True</property>
<property name="visible" bind-source="account_box" bind-property="visible" bind-flags="default|sync-create"/>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Account</property>
<property name="xalign">1</property>
@@ -574,7 +574,7 @@
</child>
<child>
<object class="GtkLabel" id="location_dim_label">
<property name="visible">True</property>
<property name="visible" bind-source="calendar_url_button" bind-property="visible" bind-flags="default|sync-create"/>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Location</property>
<property name="xalign">1</property>
+89 -1
View File
@@ -646,6 +646,44 @@ response_signal (GtkDialog *dialog,
}
}
static gboolean
is_remote_source (ESource *source)
{
gboolean has_webdav, has_auth;
g_assert (E_IS_SOURCE (source));
has_webdav = e_source_has_extension (source, E_SOURCE_EXTENSION_WEBDAV_BACKEND);
has_auth = e_source_has_extension (source, E_SOURCE_EXTENSION_AUTHENTICATION);
if (!has_webdav || !has_auth)
return FALSE;
if (has_auth)
{
ESourceAuthentication *auth;
auth = e_source_get_extension (source, E_SOURCE_EXTENSION_AUTHENTICATION);
// No host is set, it's not a remote source
if (e_source_authentication_get_host (auth) == NULL)
return FALSE;
}
if (has_webdav)
{
ESourceWebdav *webdav;
webdav = e_source_get_extension (source, E_SOURCE_EXTENSION_WEBDAV_BACKEND);
// No resource path specified, not a remote source
if (e_source_webdav_get_resource_path (webdav) == NULL)
return FALSE;
}
return TRUE;
}
static void
stack_visible_child_name_changed (GObject *object,
GParamSpec *pspec,
@@ -666,16 +704,27 @@ stack_visible_child_name_changed (GObject *object,
gtk_widget_set_visible (priv->back_button, FALSE);
}
// Update fields when it goes to the edit page.
/*
* Update fields when it goes to the edit page.
* Here, only widgets that depends on the current
* source are updated, while indenpendent widgets
* are updated at #gcal_source_dialog_set_mode
*/
if (g_strcmp0 (visible_name, "edit") == 0 && priv->source != NULL)
{
ESource *default_source;
gchar *parent_name;
GdkRGBA color;
gboolean creation_mode;
gboolean is_goa;
gboolean is_file;
gboolean is_remote;
default_source = gcal_manager_get_default_source (priv->manager);
creation_mode = priv->mode == GCAL_SOURCE_DIALOG_MODE_CREATE;
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);
get_source_parent_name_color (priv->manager, priv->source, &parent_name, NULL);
@@ -685,6 +734,45 @@ stack_visible_child_name_changed (GObject *object,
gtk_widget_set_visible (priv->back_button, !creation_mode);
gtk_widget_set_visible (priv->add_button, creation_mode);
gtk_widget_set_visible (priv->cancel_button, creation_mode);
gtk_widget_set_visible (priv->account_box, is_goa);
gtk_widget_set_visible (priv->calendar_url_button, !is_goa && (is_file || is_remote));
// If it's a file, set the file path
if (is_file)
{
ESourceLocal *local;
GFile *file;
gchar *uri;
local = e_source_get_extension (priv->source, E_SOURCE_EXTENSION_LOCAL_BACKEND);
file = e_source_local_get_custom_file (local);
uri = g_file_get_uri (file);
gtk_link_button_set_uri (GTK_LINK_BUTTON (priv->calendar_url_button), uri);
gtk_button_set_label (GTK_BUTTON (priv->calendar_url_button), uri);
g_free (uri);
}
// If it's remote, build the uri
if (is_remote)
{
ESourceAuthentication *auth;
ESourceWebdav *webdav;
gchar *uri;
auth = e_source_get_extension (priv->source, E_SOURCE_EXTENSION_AUTHENTICATION);
webdav = e_source_get_extension (priv->source, E_SOURCE_EXTENSION_WEBDAV_BACKEND);
uri = g_strdup_printf ("https://%s%s", e_source_authentication_get_host (auth),
e_source_webdav_get_resource_path (webdav));
gtk_link_button_set_uri (GTK_LINK_BUTTON (priv->calendar_url_button), uri);
gtk_button_set_label (GTK_BUTTON (priv->calendar_url_button), uri);
g_free (uri);
}
// TODO: setup GOA settings
/* block signals */
g_signal_handlers_block_by_func (priv->calendar_visible_check, calendar_visible_check_toggled, user_data);