diff options
author | Felipe Borges <felipeborges@gnome.org> | 2017-03-13 09:16:29 +0100 |
---|---|---|
committer | Felipe Borges <felipeborges@gnome.org> | 2017-03-13 12:47:18 +0100 |
commit | 58270a2c76328b6a2b96325c3764cfe60241bf10 (patch) | |
tree | a479c9dc985b83dd97a04c37c32251ebe7c8bc39 | |
parent | 4bc4d8fb2d8e3537640584e2340524d7285b7b9d (diff) | |
download | gnome-control-center-58270a2c76328b6a2b96325c3764cfe60241bf10.tar.gz |
printers: Make the dialogs independent of the PpPrinterEntry lifetime
https://bugzilla.gnome.org/show_bug.cgi?id=779846
-rw-r--r-- | panels/printers/pp-jobs-dialog.c | 12 | ||||
-rw-r--r-- | panels/printers/pp-jobs-dialog.h | 15 | ||||
-rw-r--r-- | panels/printers/pp-options-dialog.c | 12 | ||||
-rw-r--r-- | panels/printers/pp-options-dialog.h | 15 | ||||
-rw-r--r-- | panels/printers/pp-printer-entry.c | 36 |
5 files changed, 78 insertions, 12 deletions
diff --git a/panels/printers/pp-jobs-dialog.c b/panels/printers/pp-jobs-dialog.c index f821920cc..6971256c4 100644 --- a/panels/printers/pp-jobs-dialog.c +++ b/panels/printers/pp-jobs-dialog.c @@ -334,6 +334,18 @@ pp_jobs_dialog_update (PpJobsDialog *dialog) } void +pp_jobs_dialog_set_callback (PpJobsDialog *dialog, + UserResponseCallback user_callback, + gpointer user_data) +{ + if (dialog != NULL) + { + dialog->user_callback = user_callback; + dialog->user_data = user_data; + } +} + +void pp_jobs_dialog_free (PpJobsDialog *dialog) { if (dialog->get_jobs_cancellable != NULL) diff --git a/panels/printers/pp-jobs-dialog.h b/panels/printers/pp-jobs-dialog.h index 216e5b372..408805de7 100644 --- a/panels/printers/pp-jobs-dialog.h +++ b/panels/printers/pp-jobs-dialog.h @@ -28,12 +28,15 @@ G_BEGIN_DECLS typedef struct _PpJobsDialog PpJobsDialog; -PpJobsDialog *pp_jobs_dialog_new (GtkWindow *parent, - UserResponseCallback user_callback, - gpointer user_data, - gchar *printer_name); -void pp_jobs_dialog_update (PpJobsDialog *dialog); -void pp_jobs_dialog_free (PpJobsDialog *dialog); +PpJobsDialog *pp_jobs_dialog_new (GtkWindow *parent, + UserResponseCallback user_callback, + gpointer user_data, + gchar *printer_name); +void pp_jobs_dialog_update (PpJobsDialog *dialog); +void pp_jobs_dialog_set_callback (PpJobsDialog *dialog, + UserResponseCallback user_callback, + gpointer user_data); +void pp_jobs_dialog_free (PpJobsDialog *dialog); G_END_DECLS diff --git a/panels/printers/pp-options-dialog.c b/panels/printers/pp-options-dialog.c index e96f4e745..47ea2e34b 100644 --- a/panels/printers/pp-options-dialog.c +++ b/panels/printers/pp-options-dialog.c @@ -889,6 +889,18 @@ pp_options_dialog_new (GtkWindow *parent, } void +pp_options_dialog_set_callback (PpOptionsDialog *dialog, + UserResponseCallback user_callback, + gpointer user_data) +{ + if (dialog != NULL) + { + dialog->user_callback = user_callback; + dialog->user_data = user_data; + } +} + +void pp_options_dialog_free (PpOptionsDialog *dialog) { gtk_widget_destroy (GTK_WIDGET (dialog->dialog)); diff --git a/panels/printers/pp-options-dialog.h b/panels/printers/pp-options-dialog.h index e88843c0f..5e7557560 100644 --- a/panels/printers/pp-options-dialog.h +++ b/panels/printers/pp-options-dialog.h @@ -28,12 +28,15 @@ G_BEGIN_DECLS typedef struct _PpOptionsDialog PpOptionsDialog; -PpOptionsDialog *pp_options_dialog_new (GtkWindow *parent, - UserResponseCallback user_callback, - gpointer user_data, - gchar *printer_name, - gboolean sensitive); -void pp_options_dialog_free (PpOptionsDialog *dialog); +PpOptionsDialog *pp_options_dialog_new (GtkWindow *parent, + UserResponseCallback user_callback, + gpointer user_data, + gchar *printer_name, + gboolean sensitive); +void pp_options_dialog_set_callback (PpOptionsDialog *dialog, + UserResponseCallback user_callback, + gpointer user_data); +void pp_options_dialog_free (PpOptionsDialog *dialog); G_END_DECLS diff --git a/panels/printers/pp-printer-entry.c b/panels/printers/pp-printer-entry.c index a51a15b5e..482392475 100644 --- a/panels/printers/pp-printer-entry.c +++ b/panels/printers/pp-printer-entry.c @@ -338,6 +338,14 @@ details_dialog_cb (GtkDialog *dialog, } static void +details_dialog_free_cb (GtkDialog *dialog, + gint response_id, + gpointer user_data) +{ + pp_details_dialog_free (PP_DETAILS_DIALOG (dialog)); +} + +static void on_show_printer_details_dialog (GtkButton *button, PpPrinterEntry *self) { @@ -365,6 +373,14 @@ printer_options_dialog_cb (GtkDialog *dialog, } static void +printer_options_dialog_free_cb (GtkDialog *dialog, + gint response_id, + gpointer user_data) +{ + pp_options_dialog_free ((PpOptionsDialog *) user_data); +} + +static void on_show_printer_options_dialog (GtkButton *button, PpPrinterEntry *self) { @@ -484,6 +500,14 @@ jobs_dialog_response_cb (GtkDialog *dialog, } static void +printer_jobs_dialog_free_cb (GtkDialog *dialog, + gint response_id, + gpointer user_data) +{ + pp_jobs_dialog_free ((PpJobsDialog *) user_data); +} + +static void show_jobs_dialog (GtkButton *button, gpointer user_data) { @@ -776,6 +800,18 @@ pp_printer_entry_dispose (GObject *object) { PpPrinterEntry *self = PP_PRINTER_ENTRY (object); + if (self->pp_details_dialog != NULL) + { + g_signal_handlers_disconnect_by_data (self->pp_details_dialog, self); + g_signal_connect (self->pp_details_dialog, "response", G_CALLBACK (details_dialog_free_cb), NULL); + } + + if (self->pp_options_dialog != NULL) + pp_options_dialog_set_callback (self->pp_options_dialog, printer_options_dialog_free_cb, self->pp_options_dialog); + + if (self->pp_jobs_dialog != NULL) + pp_jobs_dialog_set_callback (self->pp_jobs_dialog, printer_jobs_dialog_free_cb, self->pp_jobs_dialog); + g_clear_pointer (&self->printer_name, g_free); g_clear_pointer (&self->printer_location, g_free); g_clear_pointer (&self->printer_make_and_model, g_free); |