[gnome-control-center] Printers: Add method for authentication of jobs to PpPrinterEntry



commit 212b8a65044574eeaa3618e39ef044ab7399637b
Author: Marek Kasik <mkasik redhat com>
Date:   Fri Feb 16 17:02:19 2018 +0100

    Printers: Add method for authentication of jobs to PpPrinterEntry
    
    This commit adds method for triggerring of authentication of print jobs
    to PpPrinterEntry. This is needed for asking for authentication of jobs
    of a printer from the main panel.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=758170

 panels/printers/pp-jobs-dialog.c   | 36 ++++++++++++++++++++++++++++++++++++
 panels/printers/pp-jobs-dialog.h   | 20 +++++++++++---------
 panels/printers/pp-printer-entry.c | 28 +++++++++++++++++++++-------
 panels/printers/pp-printer-entry.h |  2 ++
 4 files changed, 70 insertions(+), 16 deletions(-)
---
diff --git a/panels/printers/pp-jobs-dialog.c b/panels/printers/pp-jobs-dialog.c
index 7b2993114..63120fffc 100644
--- a/panels/printers/pp-jobs-dialog.c
+++ b/panels/printers/pp-jobs-dialog.c
@@ -59,6 +59,8 @@ struct _PpJobsDialog {
   gchar *printer_name;
 
   gchar    **actual_auth_info_required;
+  gboolean   jobs_filled;
+  gboolean   pop_up_authentication_popup;
 
   GCancellable *get_jobs_cancellable;
 };
@@ -305,6 +307,18 @@ create_listbox_row (gpointer item,
   return box;
 }
 
+static void
+pop_up_authentication_popup (PpJobsDialog *dialog)
+{
+  GtkWidget *widget;
+
+  if (dialog->actual_auth_info_required != NULL)
+    {
+      widget = GTK_WIDGET (gtk_builder_get_object (GTK_BUILDER (dialog->builder), 
"authenticate-jobs-button"));
+      gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), TRUE);
+    }
+}
+
 static void
 update_jobs_list_cb (GObject      *source_object,
                      GAsyncResult *result,
@@ -395,6 +409,17 @@ update_jobs_list_cb (GObject      *source_object,
 
   g_list_free (jobs);
   g_clear_object (&dialog->get_jobs_cancellable);
+
+  if (!dialog->jobs_filled)
+    {
+      if (dialog->pop_up_authentication_popup)
+        {
+          pop_up_authentication_popup (dialog);
+          dialog->pop_up_authentication_popup = FALSE;
+        }
+
+      dialog->jobs_filled = TRUE;
+    }
 }
 
 static void
@@ -561,6 +586,8 @@ pp_jobs_dialog_new (GtkWindow            *parent,
   dialog->user_data = user_data;
   dialog->printer_name = g_strdup (printer_name);
   dialog->actual_auth_info_required = NULL;
+  dialog->jobs_filled = FALSE;
+  dialog->pop_up_authentication_popup = FALSE;
 
   /* connect signals */
   g_signal_connect (dialog->dialog, "delete-event", G_CALLBACK (gtk_widget_hide_on_delete), NULL);
@@ -653,3 +680,12 @@ pp_jobs_dialog_hide (PpJobsDialog *dialog)
 {
   gtk_widget_hide (GTK_WIDGET (dialog->dialog));
 }
+
+void
+pp_jobs_dialog_authenticate_jobs (PpJobsDialog *dialog)
+{
+  if (dialog->jobs_filled)
+    pop_up_authentication_popup (dialog);
+  else
+    dialog->pop_up_authentication_popup = TRUE;
+}
diff --git a/panels/printers/pp-jobs-dialog.h b/panels/printers/pp-jobs-dialog.h
index 408805de7..492a7c413 100644
--- a/panels/printers/pp-jobs-dialog.h
+++ b/panels/printers/pp-jobs-dialog.h
@@ -28,15 +28,17 @@ 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_set_callback  (PpJobsDialog         *dialog,
-                                            UserResponseCallback  user_callback,
-                                            gpointer              user_data);
-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);
+
+void          pp_jobs_dialog_authenticate_jobs (PpJobsDialog         *dialog);
 
 G_END_DECLS
 
diff --git a/panels/printers/pp-printer-entry.c b/panels/printers/pp-printer-entry.c
index 10fc934e0..827ee837a 100644
--- a/panels/printers/pp-printer-entry.c
+++ b/panels/printers/pp-printer-entry.c
@@ -662,17 +662,31 @@ printer_jobs_dialog_free_cb (GtkDialog *dialog,
   pp_jobs_dialog_free ((PpJobsDialog *) user_data);
 }
 
+static void
+pp_printer_entry_show_jobs_dialog (PpPrinterEntry *self)
+{
+  if (self->pp_jobs_dialog == NULL)
+    {
+      self->pp_jobs_dialog = pp_jobs_dialog_new (
+        GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (self))),
+        jobs_dialog_response_cb,
+        self,
+        self->printer_name);
+    }
+}
+
+void
+pp_printer_entry_authenticate_jobs (PpPrinterEntry *self)
+{
+  pp_printer_entry_show_jobs_dialog (self);
+  pp_jobs_dialog_authenticate_jobs (self->pp_jobs_dialog);
+}
+
 static void
 show_jobs_dialog (GtkButton *button,
                   gpointer   user_data)
 {
-  PpPrinterEntry *self = PP_PRINTER_ENTRY (user_data);
-
-  self->pp_jobs_dialog = pp_jobs_dialog_new (
-    GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (self))),
-    jobs_dialog_response_cb,
-    self,
-    self->printer_name);
+  pp_printer_entry_show_jobs_dialog (PP_PRINTER_ENTRY (user_data));
 }
 
 enum
diff --git a/panels/printers/pp-printer-entry.h b/panels/printers/pp-printer-entry.h
index 05544bc13..e8ea41d94 100644
--- a/panels/printers/pp-printer-entry.h
+++ b/panels/printers/pp-printer-entry.h
@@ -38,4 +38,6 @@ void            pp_printer_entry_update_jobs_count (PpPrinterEntry *self);
 
 GSList         *pp_printer_entry_get_size_group_widgets (PpPrinterEntry *self);
 
+void            pp_printer_entry_authenticate_jobs (PpPrinterEntry *self);
+
 #endif /* PP_PRINTER_ENTRY_H */


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]