source-dialog: use GtkFileChooserButton

This commit is contained in:
Georges Basile Stavracas Neto
2015-05-25 12:35:28 -04:00
committed by Erick Pérez Castellanos
parent 8ff530b66a
commit 1a495b28c7
2 changed files with 47 additions and 60 deletions
+4 -3
View File
@@ -207,13 +207,14 @@
<property name="border_width">18</property> <property name="border_width">18</property>
<property name="row_spacing">12</property> <property name="row_spacing">12</property>
<child> <child>
<object class="GtkButton" id="select_file_button"> <object class="GtkFileChooserButton" id="select_file_button">
<property name="label" translatable="yes">Select Calendar File…</property>
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">True</property> <property name="can_focus">True</property>
<property name="receives_default">True</property> <property name="receives_default">True</property>
<property name="hexpand">True</property> <property name="hexpand">True</property>
<signal name="clicked" handler="select_calendar_file" object="GcalSourceDialog" swapped="no"/> <property name="action">GTK_FILE_CHOOSER_ACTION_OPEN</property>
<property name="local_only">True</property>
<signal name="file_set" handler="calendar_file_selected" object="GcalSourceDialog" swapped="no"/>
</object> </object>
<packing> <packing>
<property name="left_attach">0</property> <property name="left_attach">0</property>
+43 -57
View File
@@ -98,8 +98,8 @@ static void response_signal (GtkDialog *di
gint response_id, gint response_id,
gpointer user_data); gpointer user_data);
static void select_calendar_file (GtkButton *button, static void calendar_file_selected (GtkFileChooserButton *button,
gpointer user_data); gpointer user_data);
static void setup_source_details (GcalSourceDialog *dialog, static void setup_source_details (GcalSourceDialog *dialog,
ESource *source); ESource *source);
@@ -152,7 +152,6 @@ clear_pages (GcalSourceDialog *dialog)
{ {
GcalSourceDialogPrivate *priv = dialog->priv; GcalSourceDialogPrivate *priv = dialog->priv;
gtk_button_set_label (GTK_BUTTON (priv->select_file_button), _("Select Calendar File…"));
gtk_entry_set_text (GTK_ENTRY (priv->calendar_address_entry), ""); gtk_entry_set_text (GTK_ENTRY (priv->calendar_address_entry), "");
gtk_widget_set_sensitive (priv->add_button, FALSE); gtk_widget_set_sensitive (priv->add_button, FALSE);
@@ -320,7 +319,7 @@ response_signal (GtkDialog *dialog,
} }
/** /**
* select_calendar_file: * calendar_file_selected:
* *
* Opens a file selector dialog and * Opens a file selector dialog and
* parse the resulting selection. * parse the resulting selection.
@@ -328,70 +327,49 @@ response_signal (GtkDialog *dialog,
* Returns: * Returns:
*/ */
static void static void
select_calendar_file (GtkButton *button, calendar_file_selected (GtkFileChooserButton *button,
gpointer user_data) gpointer user_data)
{ {
GcalSourceDialogPrivate *priv = GCAL_SOURCE_DIALOG (user_data)->priv; GcalSourceDialogPrivate *priv = GCAL_SOURCE_DIALOG (user_data)->priv;
GtkFileFilter *filter; ESourceExtension *ext;
GtkWidget *dialog; ESource *source;
gint response; GFile *file;
/* File filter */ file = gtk_file_chooser_get_file (GTK_FILE_CHOOSER (priv->select_file_button));
filter = gtk_file_filter_new ();
gtk_file_filter_set_name (filter, _("Calendar files"));
gtk_file_filter_add_mime_type (filter, "text/calendar");
/* File chooser dialog */ if (file == NULL)
dialog = gtk_file_chooser_dialog_new (_("Select a calendar file"), GTK_WINDOW (user_data), return;
GTK_FILE_CHOOSER_ACTION_OPEN, _("Cancel"), GTK_RESPONSE_CANCEL, _("Open"),
GTK_RESPONSE_OK, NULL);
gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (dialog), filter); /**
* Remove any reminescent ESources
* cached before.
*/
if (priv->local_source != NULL)
g_clear_pointer (&(priv->local_source), g_object_unref);
response = gtk_dialog_run (GTK_DIALOG (dialog)); /**
* Create the new source and add the needed
* extensions.
*/
source = e_source_new (NULL, NULL, NULL);
e_source_set_parent (source, "local-stub");
if (response == GTK_RESPONSE_OK) ext = e_source_get_extension (source, E_SOURCE_EXTENSION_CALENDAR);
{ e_source_backend_set_backend_name (E_SOURCE_BACKEND (ext), "local");
ESourceExtension *ext;
ESource *source;
GFile *file;
file = gtk_file_chooser_get_file (GTK_FILE_CHOOSER (dialog)); ext = e_source_get_extension (source, E_SOURCE_EXTENSION_LOCAL_BACKEND);
e_source_local_set_custom_file (E_SOURCE_LOCAL (ext), file);
/** /* update the source properties */
* Remove any reminescent ESources e_source_set_display_name (source, g_file_get_basename (file));
* cached before.
*/
if (priv->local_source != NULL)
g_clear_pointer (&(priv->local_source), g_object_unref);
/** /* Set the private source so it saves at closing */
* Create the new source and add the needed priv->local_source = source;
* extensions.
*/
source = e_source_new (NULL, NULL, NULL);
e_source_set_parent (source, "local-stub");
ext = e_source_get_extension (source, E_SOURCE_EXTENSION_CALENDAR); /* Update buttons */
e_source_backend_set_backend_name (E_SOURCE_BACKEND (ext), "local"); gtk_widget_set_sensitive (priv->add_button, source != NULL);
ext = e_source_get_extension (source, E_SOURCE_EXTENSION_LOCAL_BACKEND); setup_source_details (GCAL_SOURCE_DIALOG (user_data), source);
e_source_local_set_custom_file (E_SOURCE_LOCAL (ext), file);
/* update the source properties */
e_source_set_display_name (source, g_file_get_basename (file));
/* Set the private source so it saves at closing */
priv->local_source = source;
/* Update buttons */
gtk_button_set_label (GTK_BUTTON (priv->select_file_button), g_file_get_basename (file));
gtk_widget_set_sensitive (priv->add_button, source != NULL);
setup_source_details (GCAL_SOURCE_DIALOG (user_data), source);
}
gtk_widget_destroy (dialog);
} }
/** /**
@@ -533,6 +511,7 @@ gcal_source_dialog_constructed (GObject *object)
{ {
GcalSourceDialog *self = (GcalSourceDialog *)object; GcalSourceDialog *self = (GcalSourceDialog *)object;
GcalSourceDialogPrivate *priv = gcal_source_dialog_get_instance_private (self); GcalSourceDialogPrivate *priv = gcal_source_dialog_get_instance_private (self);
GtkFileFilter *filter;
G_OBJECT_CLASS (gcal_source_dialog_parent_class)->constructed (object); G_OBJECT_CLASS (gcal_source_dialog_parent_class)->constructed (object);
@@ -543,6 +522,13 @@ gcal_source_dialog_constructed (GObject *object)
g_object_set_data (G_OBJECT (priv->cancel_button), "response", GINT_TO_POINTER (GTK_RESPONSE_CANCEL)); g_object_set_data (G_OBJECT (priv->cancel_button), "response", GINT_TO_POINTER (GTK_RESPONSE_CANCEL));
g_object_set_data (G_OBJECT (priv->remove_button), "response", GINT_TO_POINTER (GCAL_RESPONSE_REMOVE_SOURCE)); g_object_set_data (G_OBJECT (priv->remove_button), "response", GINT_TO_POINTER (GCAL_RESPONSE_REMOVE_SOURCE));
/* File filter */
filter = gtk_file_filter_new ();
gtk_file_filter_set_name (filter, _("Calendar files"));
gtk_file_filter_add_mime_type (filter, "text/calendar");
gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (priv->select_file_button), filter);
/* setup titlebar */ /* setup titlebar */
gtk_window_set_titlebar (GTK_WINDOW (object), priv->headerbar); gtk_window_set_titlebar (GTK_WINDOW (object), priv->headerbar);
} }
@@ -588,13 +574,13 @@ gcal_source_dialog_class_init (GcalSourceDialogClass *klass)
gtk_widget_class_bind_template_child_private (widget_class, GcalSourceDialog, web_source_grid); gtk_widget_class_bind_template_child_private (widget_class, GcalSourceDialog, web_source_grid);
gtk_widget_class_bind_template_callback (widget_class, action_widget_activated); gtk_widget_class_bind_template_callback (widget_class, action_widget_activated);
gtk_widget_class_bind_template_callback (widget_class, calendar_file_selected);
gtk_widget_class_bind_template_callback (widget_class, color_set); 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, default_check_toggled);
gtk_widget_class_bind_template_callback (widget_class, description_label_link_activated); gtk_widget_class_bind_template_callback (widget_class, description_label_link_activated);
gtk_widget_class_bind_template_callback (widget_class, name_entry_text_changed); gtk_widget_class_bind_template_callback (widget_class, name_entry_text_changed);
gtk_widget_class_bind_template_callback (widget_class, notebook_page_switched); gtk_widget_class_bind_template_callback (widget_class, notebook_page_switched);
gtk_widget_class_bind_template_callback (widget_class, response_signal); gtk_widget_class_bind_template_callback (widget_class, response_signal);
gtk_widget_class_bind_template_callback (widget_class, select_calendar_file);
gtk_widget_class_bind_template_callback (widget_class, spinner_damaged); gtk_widget_class_bind_template_callback (widget_class, spinner_damaged);
gtk_widget_class_bind_template_callback (widget_class, url_entry_text_changed); gtk_widget_class_bind_template_callback (widget_class, url_entry_text_changed);
} }