From 7fcb23199facddaf20046f0a05a99e4926d3ad5b Mon Sep 17 00:00:00 2001 From: Brandon Nielsen Date: Sun, 10 Jan 2021 14:13:15 -0600 Subject: [PATCH 1/5] Change PpNewPrinterDialog to GtkDialog Change PpNewPrinterDialog to GtkDialog instead of a GObject wrapper around a GtkBuilder. Since it is no longer feasible to catch the GtkDialog signals and process them before passing data back to users of PpNewPrinterDialog, callback functions are used. A new "PreResponseCallback" typedef is introduced for callback functions to handle what used to be the "PRE_RESPONSE" signal to abstract away the async nature of adding printer to CUPS. The RESPONSE signal is handled by a standard UserResponseCallback. Destructors no longer cleanup PpNewPrinterDialog instances as they are handled when the dialog is dismissed, or automatically by the destroy_with_parent property. The WID helper macro is removed as access to the GtkBuilder which builds the dialog is no longer possible. Instead, references are kept to the relevant UI components by gtk_widget_class_bind_template_child. PpNewPrinterDialog can be displayed with gtk_dialog_run and gtk_window_set_transient_for. --- panels/printers/cc-printers-panel.c | 38 +- panels/printers/new-printer-dialog.ui | 50 +- panels/printers/pp-new-printer-dialog.c | 614 +++++++++++------------- panels/printers/pp-new-printer-dialog.h | 14 +- 4 files changed, 333 insertions(+), 383 deletions(-) diff --git a/panels/printers/cc-printers-panel.c b/panels/printers/cc-printers-panel.c index 9d8505a1c3..3c0c80a6d0 100644 --- a/panels/printers/cc-printers-panel.c +++ b/panels/printers/cc-printers-panel.c @@ -296,7 +296,6 @@ cc_printers_panel_dispose (GObject *object) } g_clear_object (&self->cups); - g_clear_object (&self->pp_new_printer_dialog); g_clear_pointer (&self->new_printer_name, g_free); g_clear_pointer (&self->renamed_printer_name, g_free); g_clear_pointer (&self->old_printer_name, g_free); @@ -900,23 +899,28 @@ actualize_printers_list (CcPrintersPanel *self) } static void -new_printer_dialog_pre_response_cb (CcPrintersPanel *self, +new_printer_dialog_pre_response_cb (GtkDialog *_dialog, const gchar *device_name, const gchar *device_location, const gchar *device_make_and_model, - gboolean is_network_device) + gboolean is_network_device, + gpointer user_data) { + CcPrintersPanel *self = (CcPrintersPanel*) user_data; + self->new_printer_name = g_strdup (device_name); actualize_printers_list (self); } static void -new_printer_dialog_response_cb (CcPrintersPanel *self, - gint response_id) +new_printer_dialog_response_cb (GtkDialog *_dialog, + gint response_id, + gpointer user_data) { - if (self->pp_new_printer_dialog) - g_clear_object (&self->pp_new_printer_dialog); + CcPrintersPanel *self = (CcPrintersPanel*) user_data; + + gtk_widget_destroy(GTK_WIDGET (_dialog)); if (response_id == GTK_RESPONSE_REJECT) { @@ -944,21 +948,15 @@ printer_add_cb (CcPrintersPanel *self) GtkWidget *toplevel; toplevel = gtk_widget_get_toplevel (GTK_WIDGET (self)); - self->pp_new_printer_dialog = PP_NEW_PRINTER_DIALOG ( - pp_new_printer_dialog_new (GTK_WINDOW (toplevel), - self->all_ppds_list)); + self->pp_new_printer_dialog = pp_new_printer_dialog_new (self->all_ppds_list, + new_printer_dialog_pre_response_cb, + new_printer_dialog_response_cb, + self); - g_signal_connect_object (self->pp_new_printer_dialog, - "pre-response", - G_CALLBACK (new_printer_dialog_pre_response_cb), - self, - G_CONNECT_SWAPPED); + gtk_window_set_transient_for (GTK_WINDOW (self->pp_new_printer_dialog), + GTK_WINDOW (toplevel)); - g_signal_connect_object (self->pp_new_printer_dialog, - "response", - G_CALLBACK (new_printer_dialog_response_cb), - self, - G_CONNECT_SWAPPED); + gtk_dialog_run (GTK_DIALOG (self->pp_new_printer_dialog)); } static void diff --git a/panels/printers/new-printer-dialog.ui b/panels/printers/new-printer-dialog.ui index 978a103464..20b89e4b26 100644 --- a/panels/printers/new-printer-dialog.ui +++ b/panels/printers/new-printer-dialog.ui @@ -1,7 +1,7 @@ - + @@ -19,10 +19,10 @@ - - devices-liststore + + devices_liststore - + - - + + diff --git a/panels/printers/pp-new-printer-dialog.c b/panels/printers/pp-new-printer-dialog.c index 4a62bf2f38..f6984835a7 100644 --- a/panels/printers/pp-new-printer-dialog.c +++ b/panels/printers/pp-new-printer-dialog.c @@ -53,8 +53,6 @@ */ #define HOST_SEARCH_DELAY (500 - 150) -#define WID(s) GTK_WIDGET (gtk_builder_get_object (self->builder, s)) - #define AUTHENTICATION_PAGE "authentication-page" #define ADDPRINTER_PAGE "addprinter-page" @@ -89,15 +87,49 @@ enum struct _PpNewPrinterDialog { - GObject parent_instance; - - GtkBuilder *builder; + GtkDialog parent_instance; GPtrArray *local_cups_devices; - GtkListStore *store; - GtkTreeModelFilter *filter; - GtkTreeView *treeview; + GtkListStore *devices_liststore; + GtkTreeModelFilter *devices_model_filter; + + /* headerbar */ + GtkHeaderBar *headerbar; + + /* headerbar topleft buttons */ + GtkStack *headerbar_topleft_buttons; + GtkButton *go_back_button; + + /* headerbar topright buttons */ + GtkStack *headerbar_topright_buttons; + GtkButton *new_printer_add_button; + GtkButton *unlock_button; + GtkButton *authenticate_button; + /* end headerbar */ + + /* dialogstack */ + GtkStack *dialog_stack; + GtkStack *stack; + + /* scrolledwindow1 */ + GtkScrolledWindow *scrolledwindow1; + GtkTreeView *devices_treeview; + + /* toolbar1 */ + GtkToolbar *toolbar1; + GtkEntry *search_entry; + + /* authentication page */ + GtkLabel *authentication_title; + GtkLabel *authentication_text; + GtkEntry *username_entry; + GtkEntry *password_entry; + /* end dialog stack */ + + PreResponseCallback pre_response_callback; + UserResponseCallback user_callback; + gpointer user_data; cups_dest_t *dests; gint num_of_dests; @@ -115,9 +147,6 @@ struct _PpNewPrinterDialog PPDList *list; - GtkWidget *dialog; - GtkWindow *parent; - GIcon *local_printer_icon; GIcon *remote_printer_icon; GIcon *authenticated_server_icon; @@ -130,108 +159,7 @@ struct _PpNewPrinterDialog guint host_search_timeout_id; }; -G_DEFINE_TYPE (PpNewPrinterDialog, pp_new_printer_dialog, G_TYPE_OBJECT) - -static void pp_new_printer_dialog_finalize (GObject *object); - -enum { - PRE_RESPONSE, - RESPONSE, - LAST_SIGNAL -}; - -static guint signals[LAST_SIGNAL] = { 0 }; - -static void -pp_new_printer_dialog_class_init (PpNewPrinterDialogClass *klass) -{ - GObjectClass *object_class; - - object_class = G_OBJECT_CLASS (klass); - object_class->finalize = pp_new_printer_dialog_finalize; - - /** - * PpNewPrinterDialog::pre-response: - * @device: the device that is being added - * - * The signal which gets emitted when the new printer dialog is closed. - */ - signals[PRE_RESPONSE] = - g_signal_new ("pre-response", - G_TYPE_FROM_CLASS (object_class), - G_SIGNAL_RUN_LAST, - 0, - NULL, NULL, - g_cclosure_marshal_generic, - G_TYPE_NONE, 4, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_BOOLEAN); - - /** - * PpNewPrinterDialog::response: - * @response-id: response id of dialog - * - * The signal which gets emitted after the printer is added and configured. - */ - signals[RESPONSE] = - g_signal_new ("response", - G_TYPE_FROM_CLASS (object_class), - G_SIGNAL_RUN_LAST, - 0, - NULL, NULL, - g_cclosure_marshal_generic, - G_TYPE_NONE, 1, G_TYPE_INT); -} - - -PpNewPrinterDialog * -pp_new_printer_dialog_new (GtkWindow *parent, - PPDList *ppd_list) -{ - PpNewPrinterDialog *self; - - self = g_object_new (PP_TYPE_NEW_PRINTER_DIALOG, NULL); - - self->list = ppd_list_copy (ppd_list); - self->parent = parent; - - gtk_window_set_transient_for (GTK_WINDOW (self->dialog), GTK_WINDOW (parent)); - - gtk_widget_show (self->dialog); - - return PP_NEW_PRINTER_DIALOG (self); -} - -void -pp_new_printer_dialog_set_ppd_list (PpNewPrinterDialog *self, - PPDList *list) -{ - self->list = ppd_list_copy (list); - - if (self->ppd_selection_dialog) - pp_ppd_selection_dialog_set_ppd_list (self->ppd_selection_dialog, self->list); -} - -static void -emit_pre_response (PpNewPrinterDialog *self, - const gchar *device_name, - const gchar *device_location, - const gchar *device_make_and_model, - gboolean network_device) -{ - g_signal_emit (self, - signals[PRE_RESPONSE], - 0, - device_name, - device_location, - device_make_and_model, - network_device); -} - -static void -emit_response (PpNewPrinterDialog *self, - gint response_id) -{ - g_signal_emit (self, signals[RESPONSE], 0, response_id); -} +G_DEFINE_TYPE (PpNewPrinterDialog, pp_new_printer_dialog, GTK_TYPE_DIALOG) typedef struct { @@ -275,7 +203,7 @@ get_authenticated_samba_devices_cb (GObject *source_object, if (devices->len > 0) { - gtk_entry_set_text (GTK_ENTRY (WID ("search-entry")), pp_print_device_get_device_location (g_ptr_array_index (devices, 0))); + gtk_entry_set_text (self->search_entry, pp_print_device_get_device_location (g_ptr_array_index (devices, 0))); search_entry_activated_cb (self); } } @@ -302,23 +230,9 @@ static void go_to_page (PpNewPrinterDialog *self, const gchar *page) { - GtkStack *stack; - - stack = GTK_STACK (WID ("dialog-stack")); - gtk_stack_set_visible_child_name (stack, page); - - stack = GTK_STACK (WID ("headerbar-topright-buttons")); - gtk_stack_set_visible_child_name (stack, page); - - stack = GTK_STACK (WID ("headerbar-topleft-buttons")); - gtk_stack_set_visible_child_name (stack, page); -} - -static gchar * -get_entry_text (const gchar *object_name, - PpNewPrinterDialog *self) -{ - return g_strdup (gtk_entry_get_text (GTK_ENTRY (WID (object_name)))); + gtk_stack_set_visible_child_name (self->dialog_stack, page); + gtk_stack_set_visible_child_name (self->headerbar_topright_buttons, page); + gtk_stack_set_visible_child_name (self->headerbar_topleft_buttons, page); } static void @@ -328,8 +242,8 @@ on_authenticate (PpNewPrinterDialog *self) gchar *username = NULL; gchar *password = NULL; - username = get_entry_text ("username-entry", self); - password = get_entry_text ("password-entry", self); + username = g_strdup (gtk_entry_get_text (self->username_entry)); + password = g_strdup (gtk_entry_get_text (self->password_entry)); if ((username == NULL) || (username[0] == '\0') || (password == NULL) || (password[0] == '\0')) @@ -341,7 +255,7 @@ on_authenticate (PpNewPrinterDialog *self) pp_samba_set_auth_info (PP_SAMBA (self->samba_host), username, password); - gtk_header_bar_set_title (GTK_HEADER_BAR (WID ("headerbar")), _("Add Printer")); + gtk_header_bar_set_title (self->headerbar, _("Add Printer")); go_to_page (self, ADDPRINTER_PAGE); g_object_get (PP_HOST (self->samba_host), "hostname", &hostname, NULL); @@ -355,21 +269,21 @@ on_authentication_required (PpNewPrinterDialog *self) g_autofree gchar *title = NULL; g_autofree gchar *text = NULL; - gtk_header_bar_set_subtitle (GTK_HEADER_BAR (WID ("headerbar")), NULL); - gtk_header_bar_set_title (GTK_HEADER_BAR (WID ("headerbar")), _("Unlock Print Server")); + gtk_header_bar_set_subtitle (self->headerbar, NULL); + gtk_header_bar_set_title (self->headerbar, _("Unlock Print Server")); g_object_get (self->samba_host, "hostname", &hostname, NULL); /* Translators: Samba server needs authentication of the user to show list of its printers. */ title = g_strdup_printf (_("Unlock %s."), hostname); - gtk_label_set_text (GTK_LABEL (WID ("authentication-title")), title); + gtk_label_set_text (self->authentication_title, title); /* Translators: Samba server needs authentication of the user to show list of its printers. */ text = g_strdup_printf (_("Enter username and password to view printers on %s."), hostname); - gtk_label_set_text (GTK_LABEL (WID ("authentication-text")), text); + gtk_label_set_text (self->authentication_text, text); go_to_page (self, AUTHENTICATION_PAGE); - g_signal_connect_object (WID ("authenticate-button"), "clicked", G_CALLBACK (on_authenticate), self, G_CONNECT_SWAPPED); + g_signal_connect_object (self->authenticate_button, "clicked", G_CALLBACK (on_authenticate), self, G_CONNECT_SWAPPED); } static void @@ -379,13 +293,13 @@ auth_entries_changed (PpNewPrinterDialog *self) gchar *username = NULL; gchar *password = NULL; - username = get_entry_text ("username-entry", self); - password = get_entry_text ("password-entry", self); + username = g_strdup (gtk_entry_get_text (self->username_entry)); + password = g_strdup (gtk_entry_get_text (self->password_entry)); can_authenticate = (username != NULL && username[0] != '\0' && password != NULL && password[0] != '\0'); - gtk_widget_set_sensitive (WID ("authenticate-button"), can_authenticate); + gtk_widget_set_sensitive (GTK_WIDGET (self->authenticate_button), can_authenticate); g_clear_pointer (&username, g_free); g_clear_pointer (&password, g_free); @@ -398,10 +312,10 @@ on_go_back_button_clicked (PpNewPrinterDialog *self) g_clear_object (&self->samba_host); go_to_page (self, ADDPRINTER_PAGE); - gtk_header_bar_set_title (GTK_HEADER_BAR (WID ("headerbar")), _("Add Printer")); - gtk_widget_set_sensitive (WID ("new-printer-add-button"), FALSE); + gtk_header_bar_set_title (self->headerbar, _("Add Printer")); + gtk_widget_set_sensitive (GTK_WIDGET (self->new_printer_add_button), FALSE); - gtk_tree_selection_unselect_all (gtk_tree_view_get_selection (self->treeview)); + gtk_tree_selection_unselect_all (gtk_tree_view_get_selection (self->devices_treeview)); } static void @@ -412,11 +326,11 @@ authenticate_samba_server (PpNewPrinterDialog *self) AuthSMBData *data; gchar *server_name = NULL; - gtk_widget_set_sensitive (WID ("unlock-button"), FALSE); - gtk_widget_set_sensitive (WID ("authenticate-button"), FALSE); - gtk_widget_grab_focus (WID ("username-entry")); + gtk_widget_set_sensitive (GTK_WIDGET (self->unlock_button), FALSE); + gtk_widget_set_sensitive (GTK_WIDGET (self->authenticate_button), FALSE); + gtk_widget_grab_focus (GTK_WIDGET (self->username_entry)); - if (gtk_tree_selection_get_selected (gtk_tree_view_get_selection (self->treeview), &model, &iter)) + if (gtk_tree_selection_get_selected (gtk_tree_view_get_selection (self->devices_treeview), &model, &iter)) { gtk_tree_model_get (model, &iter, DEVICE_NAME_COLUMN, &server_name, @@ -452,124 +366,21 @@ static gboolean stack_key_press_cb (PpNewPrinterDialog *self, GdkEvent *event) { - gtk_widget_grab_focus (WID ("search-entry")); + gtk_widget_grab_focus (GTK_WIDGET (self->search_entry)); gtk_main_do_event (event); return TRUE; } -static void -pp_new_printer_dialog_init (PpNewPrinterDialog *self) -{ - GtkStyleContext *context; - GtkWidget *widget; - g_autoptr(GError) error = NULL; - gchar *objects[] = { "dialog", - "devices-liststore", - "devices-model-filter", - NULL }; - guint builder_result; - - self->builder = gtk_builder_new (); - - builder_result = gtk_builder_add_objects_from_resource (self->builder, - "/org/gnome/control-center/printers/new-printer-dialog.ui", - objects, &error); - - if (builder_result == 0) - { - g_warning ("Could not load ui: %s", error->message); - } - - self->local_cups_devices = g_ptr_array_new_with_free_func (g_object_unref); - - /* GCancellable for cancelling of async operations */ - self->cancellable = g_cancellable_new (); - - /* Construct dialog */ - self->dialog = WID ("dialog"); - - self->treeview = GTK_TREE_VIEW (WID ("devices-treeview")); - - self->store = GTK_LIST_STORE (gtk_builder_get_object (self->builder, "devices-liststore")); - - self->filter = GTK_TREE_MODEL_FILTER (gtk_builder_get_object (self->builder, "devices-model-filter")); - - /* Connect signals */ - g_signal_connect_object (self->dialog, "response", G_CALLBACK (new_printer_dialog_response_cb), self, G_CONNECT_SWAPPED); - - widget = WID ("search-entry"); - g_signal_connect_object (widget, "activate", G_CALLBACK (search_entry_activated_cb), self, G_CONNECT_SWAPPED); - g_signal_connect_object (widget, "search-changed", G_CALLBACK (search_entry_changed_cb), self, G_CONNECT_SWAPPED); - - g_signal_connect_object (WID ("unlock-button"), "clicked", G_CALLBACK (authenticate_samba_server), self, G_CONNECT_SWAPPED); - - g_signal_connect_object (WID ("stack"), "key-press-event", G_CALLBACK (stack_key_press_cb), self, G_CONNECT_SWAPPED); - - /* Authentication form widgets */ - g_signal_connect_object (WID ("username-entry"), "changed", G_CALLBACK (auth_entries_changed), self, G_CONNECT_SWAPPED); - g_signal_connect_object (WID ("password-entry"), "changed", G_CALLBACK (auth_entries_changed), self, G_CONNECT_SWAPPED); - g_signal_connect_object (WID ("go-back-button"), "clicked", G_CALLBACK (on_go_back_button_clicked), self, G_CONNECT_SWAPPED); - - /* Set junctions */ - widget = WID ("scrolledwindow1"); - context = gtk_widget_get_style_context (widget); - gtk_style_context_set_junction_sides (context, GTK_JUNCTION_BOTTOM); - - widget = WID ("toolbar1"); - context = gtk_widget_get_style_context (widget); - gtk_style_context_set_junction_sides (context, GTK_JUNCTION_TOP); - - /* Fill with data */ - populate_devices_list (self); -} - -static void -pp_new_printer_dialog_finalize (GObject *object) -{ - PpNewPrinterDialog *self = PP_NEW_PRINTER_DIALOG (object); - - g_cancellable_cancel (self->remote_host_cancellable); - g_cancellable_cancel (self->cancellable); - - g_clear_handle_id (&self->host_search_timeout_id, g_source_remove); - g_clear_object (&self->remote_host_cancellable); - g_clear_object (&self->cancellable); - g_clear_pointer (&self->dialog, gtk_widget_destroy); - 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->new_device); - g_clear_object (&self->local_printer_icon); - g_clear_object (&self->remote_printer_icon); - g_clear_object (&self->authenticated_server_icon); - g_clear_object (&self->snmp_host); - g_clear_object (&self->socket_host); - g_clear_object (&self->lpd_host); - g_clear_object (&self->remote_cups_host); - g_clear_object (&self->samba_host); - - if (self->num_of_dests > 0) - { - cupsFreeDests (self->num_of_dests, self->dests); - self->num_of_dests = 0; - self->dests = NULL; - } - - G_OBJECT_CLASS (pp_new_printer_dialog_parent_class)->finalize (object); -} - static void device_selection_changed_cb (PpNewPrinterDialog *self) { GtkTreeModel *model; GtkTreeIter iter; - GtkWidget *widget; - GtkWidget *stack; gboolean authentication_needed; gboolean selected; - selected = gtk_tree_selection_get_selected (gtk_tree_view_get_selection (self->treeview), + selected = gtk_tree_selection_get_selected (gtk_tree_view_get_selection (self->devices_treeview), &model, &iter); @@ -579,18 +390,13 @@ device_selection_changed_cb (PpNewPrinterDialog *self) SERVER_NEEDS_AUTHENTICATION_COLUMN, &authentication_needed, -1); - widget = WID ("new-printer-add-button"); - gtk_widget_set_sensitive (widget, selected); - - widget = WID ("unlock-button"); - gtk_widget_set_sensitive (widget, authentication_needed); - - stack = WID ("headerbar-topright-buttons"); + gtk_widget_set_sensitive (GTK_WIDGET (self->new_printer_add_button), selected); + gtk_widget_set_sensitive (GTK_WIDGET (self->unlock_button), authentication_needed); if (authentication_needed) - gtk_stack_set_visible_child_name (GTK_STACK (stack), "unlock-button"); + gtk_stack_set_visible_child_name (self->headerbar_topright_buttons, "unlock-button"); else - gtk_stack_set_visible_child_name (GTK_STACK (stack), ADDPRINTER_PAGE); + gtk_stack_set_visible_child_name (self->headerbar_topright_buttons, ADDPRINTER_PAGE); } } @@ -601,22 +407,22 @@ remove_device_from_list (PpNewPrinterDialog *self, GtkTreeIter iter; gboolean cont; - cont = gtk_tree_model_get_iter_first (GTK_TREE_MODEL (self->store), &iter); + cont = gtk_tree_model_get_iter_first (GTK_TREE_MODEL (self->devices_liststore), &iter); while (cont) { g_autoptr(PpPrintDevice) device = NULL; - gtk_tree_model_get (GTK_TREE_MODEL (self->store), &iter, + gtk_tree_model_get (GTK_TREE_MODEL (self->devices_liststore), &iter, DEVICE_COLUMN, &device, -1); if (g_strcmp0 (pp_print_device_get_device_name (device), device_name) == 0) { - gtk_list_store_remove (self->store, &iter); + gtk_list_store_remove (self->devices_liststore, &iter); break; } - cont = gtk_tree_model_iter_next (GTK_TREE_MODEL (self->store), &iter); + cont = gtk_tree_model_iter_next (GTK_TREE_MODEL (self->devices_liststore), &iter); } update_dialog_state (self); @@ -672,7 +478,7 @@ add_device_to_list (PpNewPrinterDialog *self, "device-original-name", pp_print_device_get_device_name (device), NULL); - gtk_tree_model_foreach (GTK_TREE_MODEL (self->store), + gtk_tree_model_foreach (GTK_TREE_MODEL (self->devices_liststore), prepend_original_name, &original_names_list); @@ -769,8 +575,6 @@ static void update_dialog_state (PpNewPrinterDialog *self) { GtkTreeIter iter; - GtkWidget *header; - GtkWidget *stack; gboolean searching; searching = self->cups_searching || @@ -782,22 +586,19 @@ update_dialog_state (PpNewPrinterDialog *self) self->samba_authenticated_searching || self->samba_searching; - header = WID ("headerbar"); - stack = WID ("stack"); - if (searching) { - gtk_header_bar_set_subtitle (GTK_HEADER_BAR (header), _("Searching for Printers")); + gtk_header_bar_set_subtitle (self->headerbar, _("Searching for Printers")); } else { - gtk_header_bar_set_subtitle (GTK_HEADER_BAR (header), NULL); + gtk_header_bar_set_subtitle (self->headerbar, NULL); } - if (gtk_tree_model_get_iter_first (GTK_TREE_MODEL (self->store), &iter)) - gtk_stack_set_visible_child_name (GTK_STACK (stack), "standard-page"); + if (gtk_tree_model_get_iter_first (GTK_TREE_MODEL (self->devices_liststore), &iter)) + gtk_stack_set_visible_child_name (self->stack, "standard-page"); else - gtk_stack_set_visible_child_name (GTK_STACK (stack), searching ? "loading-page" : "no-printers-page"); + gtk_stack_set_visible_child_name (self->stack, searching ? "loading-page" : "no-printers-page"); } static void @@ -818,7 +619,7 @@ group_physical_devices_cb (gchar ***device_uris, for (j = 0; device_uris[i][j] != NULL; j++) { - device = device_in_liststore (device_uris[i][j], self->store); + device = device_in_liststore (device_uris[i][j], self->devices_liststore); if (device != NULL) break; } @@ -941,18 +742,18 @@ get_cups_devices_cb (GPtrArray *devices, { add_devices_to_list (self, devices); - length = gtk_tree_model_iter_n_children (GTK_TREE_MODEL (self->store), NULL) + self->local_cups_devices->len; + length = gtk_tree_model_iter_n_children (GTK_TREE_MODEL (self->devices_liststore), NULL) + self->local_cups_devices->len; if (length > 0) { all_devices = g_new0 (PpPrintDevice *, length); i = 0; - cont = gtk_tree_model_get_iter_first (GTK_TREE_MODEL (self->store), &iter); + cont = gtk_tree_model_get_iter_first (GTK_TREE_MODEL (self->devices_liststore), &iter); while (cont) { g_autoptr(PpPrintDevice) device = NULL; - gtk_tree_model_get (GTK_TREE_MODEL (self->store), &iter, + gtk_tree_model_get (GTK_TREE_MODEL (self->devices_liststore), &iter, DEVICE_COLUMN, &device, -1); @@ -964,7 +765,7 @@ get_cups_devices_cb (GPtrArray *devices, NULL); i++; - cont = gtk_tree_model_iter_next (GTK_TREE_MODEL (self->store), &iter); + cont = gtk_tree_model_iter_next (GTK_TREE_MODEL (self->devices_liststore), &iter); } for (guint j = 0; j < self->local_cups_devices->len; j++) @@ -1413,14 +1214,14 @@ search_address (const gchar *text, { words_length = g_strv_length (words); - cont = gtk_tree_model_get_iter_first (GTK_TREE_MODEL (self->store), &iter); + cont = gtk_tree_model_get_iter_first (GTK_TREE_MODEL (self->devices_liststore), &iter); while (cont) { g_autoptr(PpPrintDevice) device = NULL; g_autofree gchar *lowercase_name = NULL; g_autofree gchar *lowercase_location = NULL; - gtk_tree_model_get (GTK_TREE_MODEL (self->store), &iter, + gtk_tree_model_get (GTK_TREE_MODEL (self->devices_liststore), &iter, DEVICE_COLUMN, &device, -1); @@ -1441,11 +1242,11 @@ search_address (const gchar *text, if (subfound) found = TRUE; - gtk_list_store_set (GTK_LIST_STORE (self->store), &iter, + gtk_list_store_set (GTK_LIST_STORE (self->devices_liststore), &iter, DEVICE_VISIBLE_COLUMN, subfound, -1); - cont = gtk_tree_model_iter_next (GTK_TREE_MODEL (self->store), &iter); + cont = gtk_tree_model_iter_next (GTK_TREE_MODEL (self->devices_liststore), &iter); } g_strfreev (words); @@ -1457,17 +1258,17 @@ search_address (const gchar *text, */ if (!found && words_length == 1) { - cont = gtk_tree_model_get_iter_first (GTK_TREE_MODEL (self->store), &iter); + cont = gtk_tree_model_get_iter_first (GTK_TREE_MODEL (self->devices_liststore), &iter); while (cont) { g_autoptr(PpPrintDevice) device = NULL; next_set = FALSE; - gtk_tree_model_get (GTK_TREE_MODEL (self->store), &iter, + gtk_tree_model_get (GTK_TREE_MODEL (self->devices_liststore), &iter, DEVICE_COLUMN, &device, -1); - gtk_list_store_set (GTK_LIST_STORE (self->store), &iter, + gtk_list_store_set (GTK_LIST_STORE (self->devices_liststore), &iter, DEVICE_VISIBLE_COLUMN, TRUE, -1); @@ -1478,14 +1279,14 @@ search_address (const gchar *text, acquisition_method == ACQUISITION_METHOD_LPD || acquisition_method == ACQUISITION_METHOD_SAMBA_HOST) { - if (!gtk_list_store_remove (self->store, &iter)) + if (!gtk_list_store_remove (self->devices_liststore, &iter)) break; else next_set = TRUE; } if (!next_set) - cont = gtk_tree_model_iter_next (GTK_TREE_MODEL (self->store), &iter); + cont = gtk_tree_model_iter_next (GTK_TREE_MODEL (self->devices_liststore), &iter); } if (text && text[0] != '\0') @@ -1550,7 +1351,7 @@ search_address (const gchar *text, static void search_entry_activated_cb (PpNewPrinterDialog *self) { - search_address (gtk_entry_get_text (GTK_ENTRY (WID ("search-entry"))), + search_address (gtk_entry_get_text (self->search_entry), self, FALSE); } @@ -1558,7 +1359,7 @@ search_entry_activated_cb (PpNewPrinterDialog *self) static void search_entry_changed_cb (PpNewPrinterDialog *self) { - search_address (gtk_entry_get_text (GTK_ENTRY (WID ("search-entry"))), + search_address (gtk_entry_get_text (self->search_entry), self, TRUE); } @@ -1639,9 +1440,9 @@ set_device (PpNewPrinterDialog *self, } if (iter == NULL) - gtk_list_store_append (self->store, &titer); + gtk_list_store_append (self->devices_liststore, &titer); - gtk_list_store_set (self->store, iter == NULL ? &titer : iter, + gtk_list_store_set (self->devices_liststore, iter == NULL ? &titer : iter, DEVICE_GICON_COLUMN, pp_print_device_is_network_device (device) ? self->remote_printer_icon : self->local_printer_icon, DEVICE_NAME_COLUMN, pp_print_device_get_device_name (device), DEVICE_DISPLAY_NAME_COLUMN, pp_print_device_get_display_name (device), @@ -1654,9 +1455,9 @@ set_device (PpNewPrinterDialog *self, pp_print_device_get_host_name (device) != NULL) { if (iter == NULL) - gtk_list_store_append (self->store, &titer); + gtk_list_store_append (self->devices_liststore, &titer); - gtk_list_store_set (self->store, iter == NULL ? &titer : iter, + gtk_list_store_set (self->devices_liststore, iter == NULL ? &titer : iter, DEVICE_GICON_COLUMN, self->authenticated_server_icon, DEVICE_NAME_COLUMN, pp_print_device_get_host_name (device), DEVICE_DISPLAY_NAME_COLUMN, pp_print_device_get_host_name (device), @@ -1680,12 +1481,12 @@ replace_device (PpNewPrinterDialog *self, if (old_device != NULL && new_device != NULL) { - cont = gtk_tree_model_get_iter_first (GTK_TREE_MODEL (self->store), &iter); + cont = gtk_tree_model_get_iter_first (GTK_TREE_MODEL (self->devices_liststore), &iter); while (cont) { g_autoptr(PpPrintDevice) device = NULL; - gtk_tree_model_get (GTK_TREE_MODEL (self->store), &iter, + gtk_tree_model_get (GTK_TREE_MODEL (self->devices_liststore), &iter, DEVICE_COLUMN, &device, -1); @@ -1695,7 +1496,7 @@ replace_device (PpNewPrinterDialog *self, break; } - cont = gtk_tree_model_iter_next (GTK_TREE_MODEL (self->store), &iter); + cont = gtk_tree_model_iter_next (GTK_TREE_MODEL (self->devices_liststore), &iter); } } } @@ -1737,7 +1538,7 @@ row_activated_cb (PpNewPrinterDialog *self) gboolean authentication_needed; gboolean selected; - selected = gtk_tree_selection_get_selected (gtk_tree_view_get_selection (self->treeview), + selected = gtk_tree_selection_get_selected (gtk_tree_view_get_selection (self->devices_treeview), &model, &iter); @@ -1751,7 +1552,7 @@ row_activated_cb (PpNewPrinterDialog *self) } else { - gtk_dialog_response (GTK_DIALOG (self->dialog), GTK_RESPONSE_OK); + gtk_dialog_response (GTK_DIALOG (self), GTK_RESPONSE_OK); } } } @@ -1768,7 +1569,7 @@ cell_data_func (GtkTreeViewColumn *tree_column, g_autofree gchar *name = NULL; g_autofree gchar *description = NULL; - selected = gtk_tree_selection_iter_is_selected (gtk_tree_view_get_selection (self->treeview), iter); + selected = gtk_tree_selection_iter_is_selected (gtk_tree_view_get_selection (self->devices_treeview), iter); gtk_tree_model_get (tree_model, iter, DEVICE_DISPLAY_NAME_COLUMN, &name, @@ -1814,10 +1615,10 @@ populate_devices_list (PpNewPrinterDialog *self) GtkCellRenderer *text_renderer; GtkCellRenderer *icon_renderer; - g_signal_connect_object (gtk_tree_view_get_selection (self->treeview), + g_signal_connect_object (gtk_tree_view_get_selection (self->devices_treeview), "changed", G_CALLBACK (device_selection_changed_cb), self, G_CONNECT_SWAPPED); - g_signal_connect_object (self->treeview, + g_signal_connect_object (self->devices_treeview, "row-activated", G_CALLBACK (row_activated_cb), self, G_CONNECT_SWAPPED); self->local_printer_icon = g_themed_icon_new ("printer"); @@ -1837,7 +1638,7 @@ populate_devices_list (PpNewPrinterDialog *self) "gicon", DEVICE_GICON_COLUMN, NULL); gtk_tree_view_column_set_max_width (column, -1); gtk_tree_view_column_set_min_width (column, 80); - gtk_tree_view_append_column (self->treeview, column); + gtk_tree_view_append_column (self->devices_treeview, column); text_renderer = gtk_cell_renderer_text_new (); @@ -1845,9 +1646,9 @@ populate_devices_list (PpNewPrinterDialog *self) NULL); gtk_tree_view_column_set_cell_data_func (column, text_renderer, cell_data_func, self, NULL); - gtk_tree_view_append_column (self->treeview, column); + gtk_tree_view_append_column (self->devices_treeview, column); - gtk_tree_model_filter_set_visible_column (self->filter, DEVICE_VISIBLE_COLUMN); + gtk_tree_model_filter_set_visible_column (self->devices_model_filter, DEVICE_VISIBLE_COLUMN); cups = pp_cups_new (); pp_cups_get_dests_async (cups, self->cancellable, cups_get_dests_cb, self); @@ -1871,21 +1672,17 @@ printer_add_async_cb (GObject *source_object, success = pp_new_printer_add_finish (PP_NEW_PRINTER (source_object), res, &error); - if (success) - { - emit_response (self, response_id); - } - else + if (!success) { if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) { g_warning ("%s", error->message); response_id = GTK_RESPONSE_REJECT; - - emit_response (self, response_id); } } + + self->user_callback (GTK_DIALOG (self), response_id, self->user_data); } static void @@ -1906,7 +1703,7 @@ ppd_selection_cb (GtkDialog *_dialog, ppd_display_name = pp_ppd_selection_dialog_get_ppd_display_name (self->ppd_selection_dialog); } else { - emit_response (self, GTK_RESPONSE_CANCEL); + self->user_callback (GTK_DIALOG (self), GTK_RESPONSE_CANCEL, self->user_data); } if (ppd_name) @@ -1925,7 +1722,7 @@ ppd_selection_cb (GtkDialog *_dialog, "device-original-name", ppd_display_name, NULL); - gtk_tree_model_foreach (GTK_TREE_MODEL (self->store), + gtk_tree_model_foreach (GTK_TREE_MODEL (self->devices_liststore), prepend_original_name, &original_names_list); @@ -1945,13 +1742,14 @@ ppd_selection_cb (GtkDialog *_dialog, NULL); } - emit_pre_response (self, - pp_print_device_get_device_name (self->new_device), - pp_print_device_get_device_location (self->new_device), - pp_print_device_get_device_make_and_model (self->new_device), - pp_print_device_is_network_device (self->new_device)); + self->pre_response_callback (GTK_DIALOG (self), + pp_print_device_get_device_name (self->new_device), + pp_print_device_get_device_location (self->new_device), + pp_print_device_get_device_make_and_model (self->new_device), + pp_print_device_is_network_device (self->new_device), + self->user_data); - window_id = (guint) GDK_WINDOW_XID (gtk_widget_get_window (GTK_WIDGET (gtk_window_get_transient_for (GTK_WINDOW (self->dialog))))); + window_id = (guint) GDK_WINDOW_XID (gtk_widget_get_window (GTK_WIDGET (gtk_window_get_transient_for (GTK_WINDOW (self))))); new_printer = pp_new_printer_new (); g_object_set (new_printer, @@ -1991,14 +1789,12 @@ new_printer_dialog_response_cb (PpNewPrinterDialog *self, GtkTreeIter iter; gint acquisition_method; - gtk_widget_hide (GTK_WIDGET (self->dialog)); - if (response_id == GTK_RESPONSE_OK) { g_cancellable_cancel (self->cancellable); g_clear_object (&self->cancellable); - if (gtk_tree_selection_get_selected (gtk_tree_view_get_selection (self->treeview), &model, &iter)) + if (gtk_tree_selection_get_selected (gtk_tree_view_get_selection (self->devices_treeview), &model, &iter)) { gtk_tree_model_get (model, &iter, DEVICE_COLUMN, &device, @@ -2024,19 +1820,20 @@ new_printer_dialog_response_cb (PpNewPrinterDialog *self, self); gtk_window_set_transient_for (GTK_WINDOW (self->ppd_selection_dialog), - GTK_WINDOW (self->parent)); + GTK_WINDOW (self)); gtk_dialog_run (GTK_DIALOG (self->ppd_selection_dialog)); } else { - emit_pre_response (self, - pp_print_device_get_device_name (device), - pp_print_device_get_device_location (device), - pp_print_device_get_device_make_and_model (device), - pp_print_device_is_network_device (device)); + self->pre_response_callback (GTK_DIALOG (self), + pp_print_device_get_device_name (device), + pp_print_device_get_device_location (device), + pp_print_device_get_device_make_and_model (device), + pp_print_device_is_network_device (device), + self->user_data); - window_id = (guint) GDK_WINDOW_XID (gtk_widget_get_window (GTK_WIDGET (gtk_window_get_transient_for (GTK_WINDOW (self->dialog))))); + window_id = (guint) GDK_WINDOW_XID (gtk_widget_get_window (GTK_WIDGET (gtk_window_get_transient_for (GTK_WINDOW (self))))); new_printer = pp_new_printer_new (); g_object_set (new_printer, @@ -2066,6 +1863,153 @@ new_printer_dialog_response_cb (PpNewPrinterDialog *self, } else { - emit_response (self, GTK_RESPONSE_CANCEL); + self->user_callback (GTK_DIALOG (self), GTK_RESPONSE_CANCEL, self->user_data); } } + +PpNewPrinterDialog * +pp_new_printer_dialog_new (PPDList *ppd_list, + PreResponseCallback pre_response_callback, + UserResponseCallback user_callback, + gpointer user_data) +{ + PpNewPrinterDialog *self; + GtkStyleContext *context; + + self = g_object_new (pp_new_printer_dialog_get_type (), NULL); + + self->pre_response_callback = pre_response_callback; + self->user_callback = user_callback; + self->user_data = user_data; + + self->list = ppd_list_copy (ppd_list); + + self->local_cups_devices = g_ptr_array_new_with_free_func (g_object_unref); + + /* GCancellable for cancelling of async operations */ + self->cancellable = g_cancellable_new (); + + g_signal_connect_object (self, "response", G_CALLBACK (new_printer_dialog_response_cb), self, G_CONNECT_SWAPPED); + + g_signal_connect_object (self->search_entry, "activate", G_CALLBACK (search_entry_activated_cb), self, G_CONNECT_SWAPPED); + g_signal_connect_object (self->search_entry, "search-changed", G_CALLBACK (search_entry_changed_cb), self, G_CONNECT_SWAPPED); + + g_signal_connect_object (self->unlock_button, "clicked", G_CALLBACK (authenticate_samba_server), self, G_CONNECT_SWAPPED); + + g_signal_connect_object (self->stack, "key-press-event", G_CALLBACK (stack_key_press_cb), self, G_CONNECT_SWAPPED); + + /* Authentication form widgets */ + g_signal_connect_object (self->username_entry, "changed", G_CALLBACK (auth_entries_changed), self, G_CONNECT_SWAPPED); + g_signal_connect_object (self->password_entry, "changed", G_CALLBACK (auth_entries_changed), self, G_CONNECT_SWAPPED); + g_signal_connect_object (self->go_back_button, "clicked", G_CALLBACK (on_go_back_button_clicked), self, G_CONNECT_SWAPPED); + + /* Set junctions */ + context = gtk_widget_get_style_context (GTK_WIDGET (self->scrolledwindow1)); + gtk_style_context_set_junction_sides (context, GTK_JUNCTION_BOTTOM); + + context = gtk_widget_get_style_context (GTK_WIDGET (self->toolbar1)); + gtk_style_context_set_junction_sides (context, GTK_JUNCTION_TOP); + + /* Set titlebar */ + gtk_window_set_titlebar(GTK_WINDOW (self), GTK_WIDGET (self->headerbar)); + + /* Fill with data */ + populate_devices_list (self); + + return self; +} + +static void +pp_new_printer_dialog_dispose (GObject *object) +{ + PpNewPrinterDialog *self = PP_NEW_PRINTER_DIALOG (object); + + g_cancellable_cancel (self->remote_host_cancellable); + g_cancellable_cancel (self->cancellable); + + g_clear_handle_id (&self->host_search_timeout_id, g_source_remove); + g_clear_object (&self->remote_host_cancellable); + g_clear_object (&self->cancellable); + g_clear_pointer (&self->list, ppd_list_free); + g_clear_pointer (&self->local_cups_devices, g_ptr_array_unref); + g_clear_object (&self->new_device); + g_clear_object (&self->local_printer_icon); + g_clear_object (&self->remote_printer_icon); + g_clear_object (&self->authenticated_server_icon); + g_clear_object (&self->snmp_host); + g_clear_object (&self->socket_host); + g_clear_object (&self->lpd_host); + g_clear_object (&self->remote_cups_host); + g_clear_object (&self->samba_host); + + if (self->num_of_dests > 0) + { + cupsFreeDests (self->num_of_dests, self->dests); + self->num_of_dests = 0; + self->dests = NULL; + } + + G_OBJECT_CLASS (pp_new_printer_dialog_parent_class)->dispose (object); +} + +void +pp_new_printer_dialog_class_init (PpNewPrinterDialogClass *klass) +{ + GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); + GObjectClass *object_class = G_OBJECT_CLASS (klass); + + gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/control-center/printers/new-printer-dialog.ui"); + + gtk_widget_class_bind_template_child (widget_class, PpNewPrinterDialog, devices_liststore); + gtk_widget_class_bind_template_child (widget_class, PpNewPrinterDialog, devices_model_filter); + + /* headerbar */ + gtk_widget_class_bind_template_child (widget_class, PpNewPrinterDialog, headerbar); + + /* headerbar topleft buttons */ + gtk_widget_class_bind_template_child (widget_class, PpNewPrinterDialog, headerbar_topleft_buttons); + gtk_widget_class_bind_template_child (widget_class, PpNewPrinterDialog, go_back_button); + + /* headerbar topright buttons */ + gtk_widget_class_bind_template_child (widget_class, PpNewPrinterDialog, headerbar_topright_buttons); + gtk_widget_class_bind_template_child (widget_class, PpNewPrinterDialog, new_printer_add_button); + gtk_widget_class_bind_template_child (widget_class, PpNewPrinterDialog, unlock_button); + gtk_widget_class_bind_template_child (widget_class, PpNewPrinterDialog, authenticate_button); + + /* dialogstack */ + gtk_widget_class_bind_template_child (widget_class, PpNewPrinterDialog, dialog_stack); + gtk_widget_class_bind_template_child (widget_class, PpNewPrinterDialog, stack); + + /* scrolledwindow1 */ + gtk_widget_class_bind_template_child (widget_class, PpNewPrinterDialog, scrolledwindow1); + gtk_widget_class_bind_template_child (widget_class, PpNewPrinterDialog, devices_treeview); + + /* toolbar1 */ + gtk_widget_class_bind_template_child (widget_class, PpNewPrinterDialog, toolbar1); + gtk_widget_class_bind_template_child (widget_class, PpNewPrinterDialog, search_entry); + + /* authentication page */ + gtk_widget_class_bind_template_child (widget_class, PpNewPrinterDialog, authentication_title); + gtk_widget_class_bind_template_child (widget_class, PpNewPrinterDialog, authentication_text); + gtk_widget_class_bind_template_child (widget_class, PpNewPrinterDialog, username_entry); + gtk_widget_class_bind_template_child (widget_class, PpNewPrinterDialog, password_entry); + + object_class->dispose = pp_new_printer_dialog_dispose; +} + + +void +pp_new_printer_dialog_init (PpNewPrinterDialog *self) +{ + gtk_widget_init_template (GTK_WIDGET (self)); +} + +void +pp_new_printer_dialog_set_ppd_list (PpNewPrinterDialog *self, + PPDList *list) +{ + self->list = ppd_list_copy (list); + + if (self->ppd_selection_dialog) + pp_ppd_selection_dialog_set_ppd_list (self->ppd_selection_dialog, self->list); +} diff --git a/panels/printers/pp-new-printer-dialog.h b/panels/printers/pp-new-printer-dialog.h index 0a7d84be87..455edde060 100644 --- a/panels/printers/pp-new-printer-dialog.h +++ b/panels/printers/pp-new-printer-dialog.h @@ -26,10 +26,18 @@ G_BEGIN_DECLS #define PP_TYPE_NEW_PRINTER_DIALOG (pp_new_printer_dialog_get_type ()) -G_DECLARE_FINAL_TYPE (PpNewPrinterDialog, pp_new_printer_dialog, PP, NEW_PRINTER_DIALOG, GObject) +G_DECLARE_FINAL_TYPE (PpNewPrinterDialog, pp_new_printer_dialog, PP, NEW_PRINTER_DIALOG, GtkDialog) -PpNewPrinterDialog *pp_new_printer_dialog_new (GtkWindow *parent, - PPDList *ppd_list); +typedef void (*PreResponseCallback) (GtkDialog *dialog, + const gchar *device_name, + const gchar *device_location, + const gchar *device_make_and_model, + gboolean is_network_device, + gpointer user_data); +PpNewPrinterDialog *pp_new_printer_dialog_new (PPDList *ppd_list, + PreResponseCallback pre_response_callback, + UserResponseCallback user_callback, + gpointer user_data); void pp_new_printer_dialog_set_ppd_list (PpNewPrinterDialog *dialog, PPDList *list); -- GitLab From f933a878e4bc47d0c164167846711a9621d2e058 Mon Sep 17 00:00:00 2001 From: Brandon Nielsen Date: Sun, 10 Jan 2021 14:28:55 -0600 Subject: [PATCH 2/5] Formatting. --- panels/printers/cc-printers-panel.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/panels/printers/cc-printers-panel.c b/panels/printers/cc-printers-panel.c index 3c0c80a6d0..95e0559976 100644 --- a/panels/printers/cc-printers-panel.c +++ b/panels/printers/cc-printers-panel.c @@ -904,7 +904,7 @@ new_printer_dialog_pre_response_cb (GtkDialog *_dialog, const gchar *device_location, const gchar *device_make_and_model, gboolean is_network_device, - gpointer user_data) + gpointer user_data) { CcPrintersPanel *self = (CcPrintersPanel*) user_data; -- GitLab From 5a291a570f294386f618a0de3f78e823770c82cf Mon Sep 17 00:00:00 2001 From: Brandon Nielsen Date: Tue, 9 Feb 2021 14:24:03 -0600 Subject: [PATCH 3/5] Hide new printer dialog in pre-response. This requires showing the dialog with gtk_widget_show_all to keep the control panal responsive while the asynchronous add is handled by the dialog. --- panels/printers/cc-printers-panel.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/panels/printers/cc-printers-panel.c b/panels/printers/cc-printers-panel.c index 95e0559976..453635fa6a 100644 --- a/panels/printers/cc-printers-panel.c +++ b/panels/printers/cc-printers-panel.c @@ -908,6 +908,9 @@ new_printer_dialog_pre_response_cb (GtkDialog *_dialog, { CcPrintersPanel *self = (CcPrintersPanel*) user_data; + /* Hide here, destroy once the dialog completes async printer addition */ + gtk_widget_hide(GTK_WIDGET (_dialog)); + self->new_printer_name = g_strdup (device_name); actualize_printers_list (self); @@ -956,7 +959,7 @@ printer_add_cb (CcPrintersPanel *self) gtk_window_set_transient_for (GTK_WINDOW (self->pp_new_printer_dialog), GTK_WINDOW (toplevel)); - gtk_dialog_run (GTK_DIALOG (self->pp_new_printer_dialog)); + gtk_widget_show_all (GTK_DIALOG (self->pp_new_printer_dialog)); } static void -- GitLab From b8334c0b1d66142518337dbc0d24909627faa875 Mon Sep 17 00:00:00 2001 From: Brandon Nielsen Date: Tue, 9 Feb 2021 14:51:52 -0600 Subject: [PATCH 4/5] Formatting. --- panels/printers/cc-printers-panel.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/panels/printers/cc-printers-panel.c b/panels/printers/cc-printers-panel.c index 453635fa6a..d5cab11f9a 100644 --- a/panels/printers/cc-printers-panel.c +++ b/panels/printers/cc-printers-panel.c @@ -909,7 +909,7 @@ new_printer_dialog_pre_response_cb (GtkDialog *_dialog, CcPrintersPanel *self = (CcPrintersPanel*) user_data; /* Hide here, destroy once the dialog completes async printer addition */ - gtk_widget_hide(GTK_WIDGET (_dialog)); + gtk_widget_hide (GTK_WIDGET (_dialog)); self->new_printer_name = g_strdup (device_name); @@ -923,7 +923,7 @@ new_printer_dialog_response_cb (GtkDialog *_dialog, { CcPrintersPanel *self = (CcPrintersPanel*) user_data; - gtk_widget_destroy(GTK_WIDGET (_dialog)); + gtk_widget_destroy (GTK_WIDGET (_dialog)); if (response_id == GTK_RESPONSE_REJECT) { -- GitLab From 886ee95a0df84ab0aaf9f4139e20c7c5325d10ab Mon Sep 17 00:00:00 2001 From: Brandon Nielsen Date: Tue, 9 Feb 2021 14:58:50 -0600 Subject: [PATCH 5/5] Show over show all. --- panels/printers/cc-printers-panel.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/panels/printers/cc-printers-panel.c b/panels/printers/cc-printers-panel.c index d5cab11f9a..7b5502237a 100644 --- a/panels/printers/cc-printers-panel.c +++ b/panels/printers/cc-printers-panel.c @@ -959,7 +959,7 @@ printer_add_cb (CcPrintersPanel *self) gtk_window_set_transient_for (GTK_WINDOW (self->pp_new_printer_dialog), GTK_WINDOW (toplevel)); - gtk_widget_show_all (GTK_DIALOG (self->pp_new_printer_dialog)); + gtk_widget_show (GTK_DIALOG (self->pp_new_printer_dialog)); } static void -- GitLab