[gnome-control-center] Change PpPPDSelectionDialog to GtkDialog
- From: Robert Ancell <rancell src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-control-center] Change PpPPDSelectionDialog to GtkDialog
- Date: Fri, 8 Jan 2021 02:51:38 +0000 (UTC)
commit c239521e9d2eecfc1270afb954fbde1df09246d3
Author: Brandon Nielsen <nielsenb jetfuse net>
Date: Sat Dec 12 19:18:34 2020 -0600
Change PpPPDSelectionDialog to GtkDialog
The dialog is now displayed by calling gtk_dialog_run and
gtk_window_set_transient_for in the window displaying the dialog.
Cleanup is handled using gtk_widget_destroy.
Destructors in the windows using the dialog no longer cleanup the dialog
as it is assumed it will be either cleaned up after the response
callback, or handled by the destroy_with_parent property set on the
dialog itself.
panels/printers/pp-details-dialog.c | 8 +-
panels/printers/pp-new-printer-dialog.c | 22 +++--
panels/printers/pp-ppd-selection-dialog.c | 156 ++++++++++++------------------
panels/printers/pp-ppd-selection-dialog.h | 5 +-
panels/printers/ppd-selection-dialog.ui | 20 ++--
5 files changed, 92 insertions(+), 119 deletions(-)
---
diff --git a/panels/printers/pp-details-dialog.c b/panels/printers/pp-details-dialog.c
index 8882a0f49..28b047234 100644
--- a/panels/printers/pp-details-dialog.c
+++ b/panels/printers/pp-details-dialog.c
@@ -174,7 +174,7 @@ ppd_selection_dialog_response_cb (GtkDialog *dialog,
}
}
- g_clear_object (&self->pp_ppd_selection_dialog);
+ gtk_widget_destroy (GTK_WIDGET (self->pp_ppd_selection_dialog));
self->pp_ppd_selection_dialog = NULL;
}
@@ -231,11 +231,15 @@ select_ppd_in_dialog (PpDetailsDialog *self)
}
self->pp_ppd_selection_dialog = pp_ppd_selection_dialog_new (
- GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (self))),
self->all_ppds_list,
manufacturer,
ppd_selection_dialog_response_cb,
self);
+
+ gtk_window_set_transient_for (GTK_WINDOW (self->pp_ppd_selection_dialog),
+ GTK_WINDOW (self));
+
+ gtk_dialog_run (GTK_DIALOG (self->pp_ppd_selection_dialog));
}
}
diff --git a/panels/printers/pp-new-printer-dialog.c b/panels/printers/pp-new-printer-dialog.c
index d26e5b7a7..4a62bf2f3 100644
--- a/panels/printers/pp-new-printer-dialog.c
+++ b/panels/printers/pp-new-printer-dialog.c
@@ -539,7 +539,6 @@ pp_new_printer_dialog_finalize (GObject *object)
g_clear_pointer (&self->list, ppd_list_free);
g_clear_object (&self->builder);
g_clear_pointer (&self->local_cups_devices, g_ptr_array_unref);
- g_clear_object (&self->ppd_selection_dialog);
g_clear_object (&self->new_device);
g_clear_object (&self->local_printer_icon);
g_clear_object (&self->remote_printer_icon);
@@ -1902,15 +1901,14 @@ ppd_selection_cb (GtkDialog *_dialog,
guint window_id = 0;
gint acquisition_method;
- if (response_id != GTK_RESPONSE_OK) {
+ if (response_id == GTK_RESPONSE_OK) {
+ ppd_name = pp_ppd_selection_dialog_get_ppd_name (self->ppd_selection_dialog);
+ ppd_display_name = pp_ppd_selection_dialog_get_ppd_display_name (self->ppd_selection_dialog);
+ }
+ else {
emit_response (self, GTK_RESPONSE_CANCEL);
- return;
}
- ppd_name = pp_ppd_selection_dialog_get_ppd_name (self->ppd_selection_dialog);
- ppd_display_name = pp_ppd_selection_dialog_get_ppd_display_name (self->ppd_selection_dialog);
- g_clear_object (&self->ppd_selection_dialog);
-
if (ppd_name)
{
g_object_set (self->new_device, "device-ppd", ppd_name, NULL);
@@ -1980,6 +1978,8 @@ ppd_selection_cb (GtkDialog *_dialog,
g_clear_object (&self->new_device);
}
+
+ gtk_widget_destroy (GTK_WIDGET (self->ppd_selection_dialog));
}
static void
@@ -2018,11 +2018,15 @@ new_printer_dialog_response_cb (PpNewPrinterDialog *self,
{
self->new_device = pp_print_device_copy (device);
self->ppd_selection_dialog =
- pp_ppd_selection_dialog_new (self->parent,
- self->list,
+ pp_ppd_selection_dialog_new (self->list,
NULL,
ppd_selection_cb,
self);
+
+ gtk_window_set_transient_for (GTK_WINDOW (self->ppd_selection_dialog),
+ GTK_WINDOW (self->parent));
+
+ gtk_dialog_run (GTK_DIALOG (self->ppd_selection_dialog));
}
else
{
diff --git a/panels/printers/pp-ppd-selection-dialog.c b/panels/printers/pp-ppd-selection-dialog.c
index f3ae05c7b..e7f110a38 100644
--- a/panels/printers/pp-ppd-selection-dialog.c
+++ b/panels/printers/pp-ppd-selection-dialog.c
@@ -49,10 +49,13 @@ enum
struct _PpPPDSelectionDialog {
- GObject parent_instance;
+ GtkDialog parent_instance;
- GtkBuilder *builder;
- GtkWidget *dialog;
+ GtkButton *ppd_selection_select_button;
+ GtkSpinner *ppd_spinner;
+ GtkLabel *progress_label;
+ GtkTreeView *ppd_selection_manufacturers_treeview;
+ GtkTreeView *ppd_selection_models_treeview;
UserResponseCallback user_callback;
gpointer user_data;
@@ -64,7 +67,7 @@ struct _PpPPDSelectionDialog {
PPDList *list;
};
-G_DEFINE_TYPE (PpPPDSelectionDialog, pp_ppd_selection_dialog, G_TYPE_OBJECT)
+G_DEFINE_TYPE (PpPPDSelectionDialog, pp_ppd_selection_dialog, GTK_TYPE_DIALOG)
static void
manufacturer_selection_changed_cb (PpPPDSelectionDialog *self)
@@ -77,12 +80,12 @@ manufacturer_selection_changed_cb (PpPPDSelectionDialog *self)
gchar *manufacturer_name = NULL;
gint i, index;
- treeview = GTK_TREE_VIEW (gtk_builder_get_object (self->builder, "ppd-selection-manufacturers-treeview"));
+ treeview = self->ppd_selection_manufacturers_treeview;
if (gtk_tree_selection_get_selected (gtk_tree_view_get_selection (treeview), &model, &iter))
{
gtk_tree_model_get (model, &iter,
- PPD_MANUFACTURERS_NAMES_COLUMN, &manufacturer_name,
- -1);
+ PPD_MANUFACTURERS_NAMES_COLUMN, &manufacturer_name,
+ -1);
}
if (manufacturer_name)
@@ -100,8 +103,7 @@ manufacturer_selection_changed_cb (PpPPDSelectionDialog *self)
if (index >= 0)
{
- models_treeview = (GtkTreeView*)
- gtk_builder_get_object (self->builder, "ppd-selection-models-treeview");
+ models_treeview = self->ppd_selection_models_treeview;
store = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_STRING);
@@ -128,28 +130,27 @@ model_selection_changed_cb (PpPPDSelectionDialog *self)
GtkTreeView *treeview;
GtkTreeModel *model;
GtkTreeIter iter;
- GtkWidget *widget;
+ GtkButton *ppd_select_button;
gchar *model_name = NULL;
- treeview = GTK_TREE_VIEW (gtk_builder_get_object (self->builder, "ppd-selection-models-treeview"));
+ treeview = self->ppd_selection_models_treeview;
if (gtk_tree_selection_get_selected (gtk_tree_view_get_selection (treeview), &model, &iter))
{
gtk_tree_model_get (model, &iter,
PPD_NAMES_COLUMN, &model_name,
- -1);
+ -1);
}
- widget = (GtkWidget*)
- gtk_builder_get_object (self->builder, "ppd-selection-select-button");
+ ppd_select_button = self->ppd_selection_select_button;
if (model_name)
{
- gtk_widget_set_sensitive (widget, TRUE);
+ gtk_widget_set_sensitive (GTK_WIDGET (ppd_select_button), TRUE);
g_free (model_name);
}
else
{
- gtk_widget_set_sensitive (widget, FALSE);
+ gtk_widget_set_sensitive (GTK_WIDGET (ppd_select_button), FALSE);
}
}
@@ -162,20 +163,14 @@ fill_ppds_list (PpPPDSelectionDialog *self)
GtkTreeView *treeview;
GtkTreeIter iter;
GtkTreeIter *preselect_iter = NULL;
- GtkWidget *widget;
gint i;
- widget = (GtkWidget*)
- gtk_builder_get_object (self->builder, "ppd-spinner");
- gtk_widget_hide (widget);
- gtk_spinner_stop (GTK_SPINNER (widget));
+ gtk_widget_hide (GTK_WIDGET (self->ppd_spinner));
+ gtk_spinner_stop (self->ppd_spinner);
- widget = (GtkWidget*)
- gtk_builder_get_object (self->builder, "progress-label");
- gtk_widget_hide (widget);
+ gtk_widget_hide (GTK_WIDGET (self->progress_label));
- treeview = (GtkTreeView*)
- gtk_builder_get_object (self->builder, "ppd-selection-manufacturers-treeview");
+ treeview = self->ppd_selection_manufacturers_treeview;
if (self->list)
{
@@ -217,11 +212,9 @@ populate_dialog (PpPPDSelectionDialog *self)
GtkCellRenderer *renderer;
GtkTreeView *manufacturers_treeview;
GtkTreeView *models_treeview;
- GtkWidget *widget;
GtkWidget *header;
- manufacturers_treeview = (GtkTreeView*)
- gtk_builder_get_object (self->builder, "ppd-selection-manufacturers-treeview");
+ manufacturers_treeview = self->ppd_selection_manufacturers_treeview;
renderer = gtk_cell_renderer_text_new ();
gtk_cell_renderer_set_padding (renderer, 10, 0);
@@ -237,8 +230,7 @@ populate_dialog (PpPPDSelectionDialog *self)
gtk_tree_view_append_column (manufacturers_treeview, column);
- models_treeview = (GtkTreeView*)
- gtk_builder_get_object (self->builder, "ppd-selection-models-treeview");
+ models_treeview = self->ppd_selection_models_treeview;
renderer = gtk_cell_renderer_text_new ();
gtk_cell_renderer_set_padding (renderer, 10, 0);
@@ -261,13 +253,12 @@ populate_dialog (PpPPDSelectionDialog *self)
g_signal_connect_object (gtk_tree_view_get_selection (manufacturers_treeview),
"changed", G_CALLBACK (manufacturer_selection_changed_cb), self,
G_CONNECT_SWAPPED);
- gtk_widget_show (self->dialog);
-
if (!self->list)
{
- widget = (GtkWidget*)
- gtk_builder_get_object (self->builder, "ppd-spinner");
- gtk_spinner_start (GTK_SPINNER (widget));
+ gtk_widget_show (GTK_WIDGET (self->ppd_spinner));
+ gtk_spinner_start (self->ppd_spinner);
+
+ gtk_widget_show (GTK_WIDGET (self->progress_label));
}
else
{
@@ -284,12 +275,9 @@ ppd_selection_dialog_response_cb (PpPPDSelectionDialog *self,
GtkTreeView *models_treeview;
GtkTreeIter iter;
- gtk_widget_hide (GTK_WIDGET (self->dialog));
-
if (response_id == GTK_RESPONSE_OK)
{
- models_treeview = (GtkTreeView*)
- gtk_builder_get_object (self->builder, "ppd-selection-models-treeview");
+ models_treeview = self->ppd_selection_models_treeview;
if (models_treeview)
{
@@ -302,52 +290,24 @@ ppd_selection_dialog_response_cb (PpPPDSelectionDialog *self,
gtk_tree_model_get (model, &iter,
PPD_NAMES_COLUMN, &self->ppd_name,
PPD_DISPLAY_NAMES_COLUMN, &self->ppd_display_name,
- -1);
+ -1);
}
}
}
}
- self->user_callback (GTK_DIALOG (self->dialog), response_id, self->user_data);
+ self->user_callback (GTK_DIALOG (self), response_id, self->user_data);
}
-static void
-pp_ppd_selection_dialog_finalize (GObject *object)
-{
- PpPPDSelectionDialog *self = PP_PPD_SELECTION_DIALOG (object);
-
- g_clear_object (&self->builder);
- g_clear_pointer (&self->dialog, gtk_widget_destroy);
-
- g_clear_pointer (&self->ppd_name, g_free);
- g_clear_pointer (&self->ppd_name, g_free);
- g_clear_pointer (&self->ppd_display_name, g_free);
-
- G_OBJECT_CLASS (pp_ppd_selection_dialog_parent_class)->finalize (object);
-}
-
-static void
-pp_ppd_selection_dialog_class_init (PpPPDSelectionDialogClass *klass)
-{
- GObjectClass *object_class;
-
- object_class = G_OBJECT_CLASS (klass);
- object_class->finalize = pp_ppd_selection_dialog_finalize;
-}
-
-
PpPPDSelectionDialog *
-pp_ppd_selection_dialog_new (GtkWindow *parent,
- PPDList *ppd_list,
+pp_ppd_selection_dialog_new (PPDList *ppd_list,
const gchar *manufacturer,
UserResponseCallback user_callback,
gpointer user_data)
{
PpPPDSelectionDialog *self;
- GtkWidget *widget;
- g_autoptr(GError) error = NULL;
- self = g_object_new (PP_TYPE_PPD_SELECTION_DIALOG, NULL);
+ self = g_object_new (pp_ppd_selection_dialog_get_type (), NULL);
self->user_callback = user_callback;
self->user_data = user_data;
@@ -356,42 +316,48 @@ pp_ppd_selection_dialog_new (GtkWindow *parent,
self->manufacturer = get_standard_manufacturers_name (manufacturer);
- gtk_window_set_transient_for (GTK_WINDOW (self->dialog), GTK_WINDOW (parent));
+ /* connect signal */
+ g_signal_connect_object (self, "response", G_CALLBACK (ppd_selection_dialog_response_cb), self,
G_CONNECT_SWAPPED);
- widget = (GtkWidget*)
- gtk_builder_get_object (self->builder, "ppd-spinner");
- gtk_spinner_start (GTK_SPINNER (widget));
+ gtk_spinner_start (self->ppd_spinner);
populate_dialog (self);
- gtk_window_present (GTK_WINDOW (self->dialog));
-
- return PP_PPD_SELECTION_DIALOG (self);
+ return self;
}
static void
-pp_ppd_selection_dialog_init (PpPPDSelectionDialog *self)
+pp_ppd_selection_dialog_dispose (GObject *object)
{
- g_autoptr(GError) error = NULL;
- gchar *objects[] = { "ppd-selection-dialog", NULL };
- guint builder_result;
+ PpPPDSelectionDialog *self = PP_PPD_SELECTION_DIALOG (object);
- self->builder = gtk_builder_new ();
+ g_clear_pointer (&self->ppd_name, g_free);
+ g_clear_pointer (&self->ppd_display_name, g_free);
+ g_clear_pointer (&self->manufacturer, g_free);
- builder_result = gtk_builder_add_objects_from_resource (self->builder,
-
"/org/gnome/control-center/printers/ppd-selection-dialog.ui",
- objects, &error);
+ G_OBJECT_CLASS (pp_ppd_selection_dialog_parent_class)->dispose (object);
+}
- if (builder_result == 0)
- {
- g_warning ("Could not load ui: %s", error->message);
- }
+void
+pp_ppd_selection_dialog_class_init (PpPPDSelectionDialogClass *klass)
+{
+ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
- self->dialog = (GtkWidget *) gtk_builder_get_object (self->builder, "ppd-selection-dialog");
+ gtk_widget_class_set_template_from_resource (widget_class,
"/org/gnome/control-center/printers/ppd-selection-dialog.ui");
+ gtk_widget_class_bind_template_child (widget_class, PpPPDSelectionDialog, ppd_selection_select_button);
+ gtk_widget_class_bind_template_child (widget_class, PpPPDSelectionDialog, ppd_spinner);
+ gtk_widget_class_bind_template_child (widget_class, PpPPDSelectionDialog, progress_label);
+ gtk_widget_class_bind_template_child (widget_class, PpPPDSelectionDialog,
ppd_selection_manufacturers_treeview);
+ gtk_widget_class_bind_template_child (widget_class, PpPPDSelectionDialog, ppd_selection_models_treeview);
- /* connect signals */
- g_signal_connect (self->dialog, "delete-event", G_CALLBACK (gtk_widget_hide_on_delete), NULL);
- g_signal_connect_object (self->dialog, "response", G_CALLBACK (ppd_selection_dialog_response_cb), self,
G_CONNECT_SWAPPED);
+ object_class->dispose = pp_ppd_selection_dialog_dispose;
+}
+
+void
+pp_ppd_selection_dialog_init (PpPPDSelectionDialog *self)
+{
+ gtk_widget_init_template (GTK_WIDGET (self));
}
gchar *
diff --git a/panels/printers/pp-ppd-selection-dialog.h b/panels/printers/pp-ppd-selection-dialog.h
index 36c0342e1..5b4ee22c3 100644
--- a/panels/printers/pp-ppd-selection-dialog.h
+++ b/panels/printers/pp-ppd-selection-dialog.h
@@ -26,10 +26,9 @@
G_BEGIN_DECLS
#define PP_TYPE_PPD_SELECTION_DIALOG (pp_ppd_selection_dialog_get_type ())
-G_DECLARE_FINAL_TYPE (PpPPDSelectionDialog, pp_ppd_selection_dialog, PP, PPD_SELECTION_DIALOG, GObject)
+G_DECLARE_FINAL_TYPE (PpPPDSelectionDialog, pp_ppd_selection_dialog, PP, PPD_SELECTION_DIALOG, GtkDialog)
-PpPPDSelectionDialog *pp_ppd_selection_dialog_new (GtkWindow *parent,
- PPDList *ppd_list,
+PpPPDSelectionDialog *pp_ppd_selection_dialog_new (PPDList *ppd_list,
const gchar *manufacturer,
UserResponseCallback user_callback,
gpointer user_data);
diff --git a/panels/printers/ppd-selection-dialog.ui b/panels/printers/ppd-selection-dialog.ui
index b40a1b1ad..c89ce3563 100644
--- a/panels/printers/ppd-selection-dialog.ui
+++ b/panels/printers/ppd-selection-dialog.ui
@@ -2,7 +2,7 @@
<!-- Generated with glade 3.18.3 -->
<interface>
<requires lib="gtk+" version="3.12"/>
- <object class="GtkDialog" id="ppd-selection-dialog">
+ <template class="PpPPDSelectionDialog" parent="GtkDialog">
<property name="width_request">600</property>
<property name="height_request">400</property>
<property name="can_focus">False</property>
@@ -23,7 +23,7 @@
<property name="can_focus">False</property>
<property name="layout_style">end</property>
<child>
- <object class="GtkButton" id="ppd-selection-cancel-button">
+ <object class="GtkButton" id="ppd_selection_cancel_button">
<property name="label" translatable="yes">Cancel</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
@@ -36,7 +36,7 @@
</packing>
</child>
<child>
- <object class="GtkButton" id="ppd-selection-select-button">
+ <object class="GtkButton" id="ppd_selection_select_button">
<property name="label" translatable="yes">Select</property>
<property name="visible">True</property>
<property name="sensitive">False</property>
@@ -54,7 +54,7 @@
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
- <object class="GtkSpinner" id="ppd-spinner">
+ <object class="GtkSpinner" id="ppd_spinner">
<property name="visible">True</property>
<property name="width_request">24</property>
<property name="height_request">24</property>
@@ -68,7 +68,7 @@
</packing>
</child>
<child>
- <object class="GtkLabel" id="progress-label">
+ <object class="GtkLabel" id="progress_label">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="no_show_all">True</property>
@@ -112,7 +112,7 @@
<property name="hscrollbar_policy">never</property>
<property name="shadow_type">in</property>
<child>
- <object class="GtkTreeView" id="ppd-selection-manufacturers-treeview">
+ <object class="GtkTreeView" id="ppd_selection_manufacturers_treeview">
<property name="visible">True</property>
<property name="can_focus">True</property>
<child internal-child="selection">
@@ -133,7 +133,7 @@
<property name="can_focus">True</property>
<property name="shadow_type">in</property>
<child>
- <object class="GtkTreeView" id="ppd-selection-models-treeview">
+ <object class="GtkTreeView" id="ppd_selection_models_treeview">
<property name="visible">True</property>
<property name="can_focus">True</property>
<child internal-child="selection">
@@ -158,8 +158,8 @@
</object>
</child>
<action-widgets>
- <action-widget response="-6">ppd-selection-cancel-button</action-widget>
- <action-widget response="-5">ppd-selection-select-button</action-widget>
+ <action-widget response="-6">ppd_selection_cancel_button</action-widget>
+ <action-widget response="-5">ppd_selection_select_button</action-widget>
</action-widgets>
- </object>
+ </template>
</interface>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]