diff options
author | Felipe Borges <felipeborges@gnome.org> | 2017-03-07 14:12:51 +0100 |
---|---|---|
committer | Felipe Borges <felipeborges@gnome.org> | 2017-06-15 15:39:22 +0200 |
commit | 0d0b42eb50be0e9a6e1a31d0c057462539427176 (patch) | |
tree | ffa1c9bd714445fcd9897de9734aafb773b8aaf9 | |
parent | 29abc2307d2aa55179c547dd3d2b1c8404a986cc (diff) | |
download | gnome-control-center-0d0b42eb50be0e9a6e1a31d0c057462539427176.tar.gz |
printers: Hide supply level bar when there is no inklevel data
https://bugzilla.gnome.org/show_bug.cgi?id=779702
-rw-r--r-- | panels/printers/cc-printers-panel.c | 11 | ||||
-rw-r--r-- | panels/printers/pp-printer-entry.c | 73 | ||||
-rw-r--r-- | panels/printers/pp-printer-entry.h | 2 | ||||
-rw-r--r-- | 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 d8a9f51c1..5694236bf 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 18c11044a..9fb45e14d 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 8f37d80e9..05544bc13 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 f8d035994..74317ccbf 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> |