summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFelipe Borges <felipeborges@gnome.org>2017-03-07 14:12:51 +0100
committerFelipe Borges <felipeborges@gnome.org>2017-06-15 15:39:22 +0200
commit0d0b42eb50be0e9a6e1a31d0c057462539427176 (patch)
treeffa1c9bd714445fcd9897de9734aafb773b8aaf9
parent29abc2307d2aa55179c547dd3d2b1c8404a986cc (diff)
downloadgnome-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.c11
-rw-r--r--panels/printers/pp-printer-entry.c73
-rw-r--r--panels/printers/pp-printer-entry.h2
-rw-r--r--panels/printers/printer-entry.ui4
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>