[gthumb] contact sheet: fixed error when closing the dialog
- From: Paolo Bacchilega <paobac src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gthumb] contact sheet: fixed error when closing the dialog
- Date: Tue, 26 Nov 2013 17:42:07 +0000 (UTC)
commit 9f8e58748998fd2300d7c9e61e9302dc4dbb439e
Author: Paolo Bacchilega <paobac src gnome org>
Date: Tue Nov 26 18:34:07 2013 +0100
contact sheet: fixed error when closing the dialog
disconnect from the selection changed signal
before destroying the dialog.
extensions/contact_sheet/dlg-contact-sheet.c | 44 ++++++++++++++++++++-----
1 files changed, 35 insertions(+), 9 deletions(-)
---
diff --git a/extensions/contact_sheet/dlg-contact-sheet.c b/extensions/contact_sheet/dlg-contact-sheet.c
index c00357b..bd397c5 100644
--- a/extensions/contact_sheet/dlg-contact-sheet.c
+++ b/extensions/contact_sheet/dlg-contact-sheet.c
@@ -59,6 +59,7 @@ typedef struct {
GtkBuilder *builder;
GtkWidget *dialog;
GtkWidget *thumbnail_caption_chooser;
+ gulong theme_selection_changed_event;
} DialogData;
@@ -90,6 +91,26 @@ destroy_cb (GtkWidget *widget,
}
+static void
+close_dialog (DialogData *data)
+{
+ if (data->theme_selection_changed_event != 0) {
+ g_signal_handler_disconnect (GET_WIDGET ("theme_iconview"),
data->theme_selection_changed_event);
+ data->theme_selection_changed_event = 0;
+ }
+ gtk_widget_destroy (data->dialog);
+}
+
+
+static void
+dialog_delete_event_cb (GtkWidget *widget,
+ GdkEvent *event,
+ gpointer user_data)
+{
+ close_dialog (user_data);
+}
+
+
static GthContactSheetTheme *
get_selected_theme (DialogData *data)
{
@@ -228,7 +249,7 @@ ok_clicked_cb (GtkWidget *widget,
gth_contact_sheet_creator_set_thumbnail_caption (GTH_CONTACT_SHEET_CREATOR (task), thumbnail_caption);
gth_browser_exec_task (data->browser, task, FALSE);
- gtk_widget_destroy (data->dialog);
+ close_dialog (data);
g_object_unref (task);
g_free (thumbnail_caption);
@@ -451,7 +472,7 @@ theme_dialog_response_cb (GtkDialog *dialog,
GError *error = NULL;
if (response_id == GTK_RESPONSE_CANCEL) {
- gtk_widget_destroy (GTK_WIDGET (dialog));
+ gtk_widget_destroy (dialog);
return;
}
@@ -537,7 +558,7 @@ theme_dialog_response_cb (GtkDialog *dialog,
gtk_tree_path_free (path);
g_object_unref (preview);
- gtk_widget_destroy (GTK_WIDGET (dialog));
+ gtk_widget_destroy (dialog);
}
@@ -807,14 +828,18 @@ dlg_contact_sheet (GthBrowser *browser,
"destroy",
G_CALLBACK (destroy_cb),
data);
+ g_signal_connect (G_OBJECT (data->dialog),
+ "delete-event",
+ G_CALLBACK (dialog_delete_event_cb),
+ data);
g_signal_connect (GET_WIDGET ("ok_button"),
"clicked",
G_CALLBACK (ok_clicked_cb),
data);
g_signal_connect_swapped (GET_WIDGET ("cancel_button"),
"clicked",
- G_CALLBACK (gtk_widget_destroy),
- data->dialog);
+ G_CALLBACK (close_dialog),
+ data);
g_signal_connect (GET_WIDGET ("footer_entry"),
"icon-press",
G_CALLBACK (entry_help_icon_press_cb),
@@ -839,10 +864,11 @@ dlg_contact_sheet (GthBrowser *browser,
"clicked",
G_CALLBACK (delete_theme_button_clicked_cb),
data);
- g_signal_connect (GET_WIDGET ("theme_iconview"),
- "selection-changed",
- G_CALLBACK (theme_iconview_selection_changed_cb),
- data);
+ data->theme_selection_changed_event =
+ g_signal_connect (GET_WIDGET ("theme_iconview"),
+ "selection-changed",
+ G_CALLBACK (theme_iconview_selection_changed_cb),
+ data);
/* Run dialog. */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]