[gnome-control-center] printers: Hide supply level bar when there is no inklevel data



commit 0d0b42eb50be0e9a6e1a31d0c057462539427176
Author: Felipe Borges <felipeborges gnome org>
Date:   Tue Mar 7 14:12:51 2017 +0100

    printers: Hide supply level bar when there is no inklevel data
    
    https://bugzilla.gnome.org/show_bug.cgi?id=779702

 panels/printers/cc-printers-panel.c |   11 +++++
 panels/printers/pp-printer-entry.c  |   73 +++++++++++++++++++++--------------
 panels/printers/pp-printer-entry.h  |    2 +
 panels/printers/printer-entry.ui    |    4 +-
 4 files changed, 60 insertions(+), 30 deletions(-)
---
diff --git a/panels/printers/cc-printers-panel.c b/panels/printers/cc-printers-panel.c
index d8a9f51..5694236 100644
--- a/panels/printers/cc-printers-panel.c
+++ b/panels/printers/cc-printers-panel.c
@@ -106,6 +106,8 @@ struct _CcPrintersPanelPrivate
 
   GHashTable *printer_entries;
 
+  GtkSizeGroup *size_group;
+
   gpointer dummy;
 };
 
@@ -742,12 +744,19 @@ add_printer_entry (CcPrintersPanel *self,
   CcPrintersPanelPrivate *priv;
   PpPrinterEntry         *printer_entry;
   GtkWidget              *content;
+  GSList                 *widgets, *l;
 
   priv = PRINTERS_PANEL_PRIVATE (self);
 
   content = (GtkWidget*) gtk_builder_get_object (priv->builder, "content");
 
   printer_entry = pp_printer_entry_new (printer, priv->is_authorized);
+
+  widgets = pp_printer_entry_get_size_group_widgets (printer_entry);
+  for (l = widgets; l != NULL; l = l->next)
+    gtk_size_group_add_widget (priv->size_group, GTK_WIDGET (l->data));
+  g_slist_free (widgets);
+
   g_signal_connect (printer_entry,
                     "printer-changed",
                     G_CALLBACK (on_printer_changed),
@@ -1276,6 +1285,8 @@ Please check your installation");
 
   priv->subscription_renew_cancellable = g_cancellable_new ();
 
+  priv->size_group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
+
   actualize_printers_list (self);
   attach_to_cups_notifier (self);
 
diff --git a/panels/printers/pp-printer-entry.c b/panels/printers/pp-printer-entry.c
index 18c1104..9fb45e1 100644
--- a/panels/printers/pp-printer-entry.c
+++ b/panels/printers/pp-printer-entry.c
@@ -33,6 +33,14 @@
 
 #define SUPPLY_BAR_HEIGHT 8
 
+typedef struct
+{
+  gchar *marker_names;
+  gchar *marker_levels;
+  gchar *marker_colors;
+  gchar *marker_types;
+} InkLevelData;
+
 struct _PpPrinterEntry
 {
   GtkListBoxRow parent;
@@ -47,6 +55,7 @@ struct _PpPrinterEntry
   gchar    *printer_hostname;
   gboolean  is_authorized;
   gint      printer_state;
+  InkLevelData *inklevel;
 
   /* Maintenance commands */
   PpMaintenanceCommand *clean_command;
@@ -60,6 +69,8 @@ struct _PpPrinterEntry
   GtkLabel       *printer_model;
   GtkLabel       *printer_location_label;
   GtkLabel       *printer_location_address_label;
+  GtkLabel       *printer_inklevel_label;
+  GtkFrame       *supply_frame;
   GtkDrawingArea *supply_drawing_area;
   GtkWidget      *show_jobs_dialog_button;
   GtkWidget      *clean_heads_menuitem;
@@ -216,14 +227,6 @@ sanitize_printer_model (gchar *printer_make_and_model)
   return g_strdup (printer_model);
 }
 
-typedef struct
-{
-  gchar *marker_names;
-  gchar *marker_levels;
-  gchar *marker_colors;
-  gchar *marker_types;
-} InkLevelData;
-
 /* To tone down the colors in the supply level bar
  * we shade them by darkening the hue.
  *
@@ -246,9 +249,9 @@ tone_down_color (GdkRGBA *color,
 }
 
 static gboolean
-supply_levels_draw_cb (GtkWidget    *widget,
-                       cairo_t      *cr,
-                       InkLevelData *inklevel)
+supply_levels_draw_cb (GtkWidget      *widget,
+                       cairo_t        *cr,
+                       PpPrinterEntry *self)
 {
   GtkStyleContext        *context;
   gboolean                is_empty = TRUE;
@@ -264,7 +267,8 @@ supply_levels_draw_cb (GtkWidget    *widget,
 
   gtk_render_background (context, cr, 0, 0, width, height);
 
-  if (inklevel->marker_levels && inklevel->marker_colors && inklevel->marker_names && inklevel->marker_types)
+  if (self->inklevel->marker_levels && self->inklevel->marker_colors &&
+      self->inklevel->marker_names && self->inklevel->marker_types)
     {
       GSList   *markers = NULL;
       GSList   *tmp_list = NULL;
@@ -276,10 +280,10 @@ supply_levels_draw_cb (GtkWidget    *widget,
 
       gtk_style_context_save (context);
 
-      marker_levelsv = g_strsplit (inklevel->marker_levels, ",", -1);
-      marker_colorsv = g_strsplit (inklevel->marker_colors, ",", -1);
-      marker_namesv = g_strsplit (inklevel->marker_names, ",", -1);
-      marker_typesv = g_strsplit (inklevel->marker_types, ",", -1);
+      marker_levelsv = g_strsplit (self->inklevel->marker_levels, ",", -1);
+      marker_colorsv = g_strsplit (self->inklevel->marker_colors, ",", -1);
+      marker_namesv = g_strsplit (self->inklevel->marker_names, ",", -1);
+      marker_typesv = g_strsplit (self->inklevel->marker_types, ",", -1);
 
       if (g_strv_length (marker_levelsv) == g_strv_length (marker_colorsv) &&
           g_strv_length (marker_colorsv) == g_strv_length (marker_namesv) &&
@@ -372,12 +376,9 @@ supply_levels_draw_cb (GtkWidget    *widget,
       }
     }
 
-  if (is_empty)
-    {
-      GtkWidget *frame = gtk_widget_get_parent (widget);
-      gtk_style_context_add_class (gtk_widget_get_style_context (frame),
-                                   "background");
-    }
+  gtk_widget_set_visible (GTK_WIDGET (self->printer_inklevel_label), !is_empty);
+  gtk_widget_set_visible (GTK_WIDGET (self->supply_frame), !is_empty);
+
   return TRUE;
 }
 
@@ -673,12 +674,24 @@ restart_printer (GtkButton      *button,
   g_signal_emit_by_name (self, "printer-changed");
 }
 
+GSList *
+pp_printer_entry_get_size_group_widgets (PpPrinterEntry *self)
+{
+  GSList *widgets = NULL;
+
+  widgets = g_slist_prepend (widgets, self->printer_icon);
+  widgets = g_slist_prepend (widgets, self->printer_location_label);
+  widgets = g_slist_prepend (widgets, self->printer_model_label);
+  widgets = g_slist_prepend (widgets, self->printer_inklevel_label);
+
+  return widgets;
+}
+
 PpPrinterEntry *
 pp_printer_entry_new (cups_dest_t  printer,
                       gboolean     is_authorized)
 {
   PpPrinterEntry *self;
-  InkLevelData   *inklevel;
   cups_ptype_t    printer_type = 0;
   gboolean        is_accepting_jobs;
   gchar          *instance;
@@ -751,7 +764,7 @@ pp_printer_entry_new (cups_dest_t  printer,
 
   self = g_object_new (PP_PRINTER_ENTRY_TYPE, "printer-name", printer.name, NULL);
 
-  inklevel = g_slice_new0 (InkLevelData);
+  self->inklevel = g_slice_new0 (InkLevelData);
 
   if (printer.instance)
     {
@@ -777,13 +790,13 @@ pp_printer_entry_new (cups_dest_t  printer,
       else if (g_strcmp0 (printer.options[i].name, "printer-state-reasons") == 0)
         reason = printer.options[i].value;
       else if (g_strcmp0 (printer.options[i].name, "marker-names") == 0)
-        inklevel->marker_names = g_strcompress (printer.options[i].value);
+        self->inklevel->marker_names = g_strcompress (printer.options[i].value);
       else if (g_strcmp0 (printer.options[i].name, "marker-levels") == 0)
-        inklevel->marker_levels = g_strdup (printer.options[i].value);
+        self->inklevel->marker_levels = g_strdup (printer.options[i].value);
       else if (g_strcmp0 (printer.options[i].name, "marker-colors") == 0)
-        inklevel->marker_colors = g_strdup (printer.options[i].value);
+        self->inklevel->marker_colors = g_strdup (printer.options[i].value);
       else if (g_strcmp0 (printer.options[i].name, "marker-types") == 0)
-        inklevel->marker_types = g_strdup (printer.options[i].value);
+        self->inklevel->marker_types = g_strdup (printer.options[i].value);
       else if (g_strcmp0 (printer.options[i].name, "printer-make-and-model") == 0)
         printer_make_and_model = printer.options[i].value;
       else if (g_strcmp0 (printer.options[i].name, "printer-state") == 0)
@@ -921,7 +934,7 @@ pp_printer_entry_new (cups_dest_t  printer,
       gtk_label_set_text (self->printer_location_address_label, location);
     }
 
-  g_signal_connect (self->supply_drawing_area, "draw", G_CALLBACK (supply_levels_draw_cb), inklevel);
+  g_signal_connect (self->supply_drawing_area, "draw", G_CALLBACK (supply_levels_draw_cb), self);
 
   pp_printer_entry_update_jobs_count (self);
 
@@ -988,6 +1001,8 @@ pp_printer_entry_class_init (PpPrinterEntryClass *klass)
   gtk_widget_class_bind_template_child (widget_class, PpPrinterEntry, printer_model);
   gtk_widget_class_bind_template_child (widget_class, PpPrinterEntry, printer_location_label);
   gtk_widget_class_bind_template_child (widget_class, PpPrinterEntry, printer_location_address_label);
+  gtk_widget_class_bind_template_child (widget_class, PpPrinterEntry, printer_inklevel_label);
+  gtk_widget_class_bind_template_child (widget_class, PpPrinterEntry, supply_frame);
   gtk_widget_class_bind_template_child (widget_class, PpPrinterEntry, supply_drawing_area);
   gtk_widget_class_bind_template_child (widget_class, PpPrinterEntry, printer_default_checkbutton);
   gtk_widget_class_bind_template_child (widget_class, PpPrinterEntry, show_jobs_dialog_button);
diff --git a/panels/printers/pp-printer-entry.h b/panels/printers/pp-printer-entry.h
index 8f37d80..05544bc 100644
--- a/panels/printers/pp-printer-entry.h
+++ b/panels/printers/pp-printer-entry.h
@@ -36,4 +36,6 @@ PpPrinterEntry *pp_printer_entry_new  (cups_dest_t printer,
 
 void            pp_printer_entry_update_jobs_count (PpPrinterEntry *self);
 
+GSList         *pp_printer_entry_get_size_group_widgets (PpPrinterEntry *self);
+
 #endif /* PP_PRINTER_ENTRY_H */
diff --git a/panels/printers/printer-entry.ui b/panels/printers/printer-entry.ui
index f8d0359..74317cc 100644
--- a/panels/printers/printer-entry.ui
+++ b/panels/printers/printer-entry.ui
@@ -101,7 +101,6 @@
                 <property name="visible">True</property>
                 <property name="pixel-size">48</property>
                 <property name="icon_name">printer</property>
-                <property name="halign">end</property>
               </object>
               <packing>
                 <property name="left-attach">0</property>
@@ -192,6 +191,7 @@
                 <property name="ellipsize">PANGO_ELLIPSIZE_MIDDLE</property>
                 <property name="max-width-chars">30</property>
                 <property name="halign">end</property>
+                <property name="xalign">1</property>
                 <style>
                   <class name="dim-label"/>
                 </style>
@@ -219,6 +219,7 @@
                 <property name="visible">True</property>
                 <property name="label" translatable="yes">Location</property>
                 <property name="halign">end</property>
+                <property name="xalign">1</property>
                 <style>
                   <class name="dim-label"/>
                 </style>
@@ -247,6 +248,7 @@
                 <property name="visible">True</property>
                 <property name="label" translatable="yes">Ink Level</property>
                 <property name="halign">end</property>
+                <property name="xalign">1</property>
                 <style>
                   <class name="dim-label"/>
                 </style>


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