[gnome-software] Add the installed size of the apps in the installed view
- From: Joaquim Manuel Pereira Rocha <jrocha src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-software] Add the installed size of the apps in the installed view
- Date: Mon, 28 Nov 2016 13:11:46 +0000 (UTC)
commit 844badeeb619152921fb4f04f31a9ee17a16b96a
Author: Joaquim Rocha <jrocha endlessm com>
Date: Sun Nov 27 15:13:01 2016 +0100
Add the installed size of the apps in the installed view
This is a need for some distros and should be temporary until the
Usage app can display the sizes for applications. It is disabled by
default.
data/org.gnome.software.gschema.xml | 4 ++
src/gs-app-row.c | 23 ++++++++
src/gs-app-row.h | 2 +
src/gs-app-row.ui | 102 ++++++++++++++++++++++-------------
src/gs-shell-installed.c | 37 +++++++++----
src/gtk-style.css | 4 ++
6 files changed, 124 insertions(+), 48 deletions(-)
---
diff --git a/data/org.gnome.software.gschema.xml b/data/org.gnome.software.gschema.xml
index 321d163..2eeb2fb 100644
--- a/data/org.gnome.software.gschema.xml
+++ b/data/org.gnome.software.gschema.xml
@@ -122,6 +122,10 @@
<default>false</default>
<summary>Show non-free software in search results</summary>
</key>
+ <key name="installed-page-show-size" type="b">
+ <default>false</default>
+ <summary>Show the installed size for apps in the list of installed applications</summary>
+ </key>
<key name="nonfree-software-uri" type="s">
<default>'https://en.wikipedia.org/wiki/Proprietary_software'</default>
<summary>The URI that explains nonfree and proprietary software</summary>
diff --git a/src/gs-app-row.c b/src/gs-app-row.c
index fe10c94..9471c28 100644
--- a/src/gs-app-row.c
+++ b/src/gs-app-row.c
@@ -49,12 +49,14 @@ typedef struct
GtkWidget *label_warning;
GtkWidget *label_origin;
GtkWidget *label_installed;
+ GtkWidget *label_app_size;
gboolean colorful;
gboolean show_folders;
gboolean show_buttons;
gboolean show_source;
gboolean show_codec;
gboolean show_update;
+ gboolean show_installed_size;
gboolean selectable;
guint pending_refresh_id;
GSettings *settings;
@@ -288,6 +290,7 @@ gs_app_row_refresh (GsAppRow *app_row)
GString *str = NULL;
const gchar *tmp;
gboolean missing_search_result;
+ guint64 installed_size;
if (priv->app == NULL)
return;
@@ -464,6 +467,17 @@ gs_app_row_refresh (GsAppRow *app_row)
} else {
gtk_widget_set_visible (priv->checkbox, FALSE);
}
+
+ installed_size = gs_app_get_size_installed (priv->app);
+ if (priv->show_installed_size &&
+ installed_size != GS_APP_SIZE_UNKNOWABLE && installed_size != 0) {
+ g_autofree gchar *size = NULL;
+ size = g_format_size (installed_size);
+ gtk_label_set_label (GTK_LABEL (priv->label_app_size), size);
+ gtk_widget_show (priv->label_app_size);
+ } else {
+ gtk_widget_hide (priv->label_app_size);
+ }
}
static void
@@ -656,6 +670,7 @@ gs_app_row_class_init (GsAppRowClass *klass)
gtk_widget_class_bind_template_child_private (widget_class, GsAppRow, label_warning);
gtk_widget_class_bind_template_child_private (widget_class, GsAppRow, label_origin);
gtk_widget_class_bind_template_child_private (widget_class, GsAppRow, label_installed);
+ gtk_widget_class_bind_template_child_private (widget_class, GsAppRow, label_app_size);
}
static void
@@ -747,6 +762,14 @@ gs_app_row_set_show_codec (GsAppRow *app_row, gboolean show_codec)
gs_app_row_refresh (app_row);
}
+void
+gs_app_row_set_show_installed_size (GsAppRow *app_row, gboolean show_size)
+{
+ GsAppRowPrivate *priv = gs_app_row_get_instance_private (app_row);
+ priv->show_installed_size = show_size;
+ gs_app_row_refresh (app_row);
+}
+
/**
* gs_app_row_set_show_update:
*
diff --git a/src/gs-app-row.h b/src/gs-app-row.h
index a39377d..ed649ff 100644
--- a/src/gs-app-row.h
+++ b/src/gs-app-row.h
@@ -65,6 +65,8 @@ GsApp *gs_app_row_get_app (GsAppRow *app_row);
void gs_app_row_set_size_groups (GsAppRow *app_row,
GtkSizeGroup *image,
GtkSizeGroup *name);
+void gs_app_row_set_show_installed_size (GsAppRow *app_row,
+ gboolean show_size);
G_END_DECLS
diff --git a/src/gs-app-row.ui b/src/gs-app-row.ui
index 622129a..d25ccab 100644
--- a/src/gs-app-row.ui
+++ b/src/gs-app-row.ui
@@ -242,53 +242,79 @@
</packing>
</child>
<child>
- <object class="GtkBox" id="button_box">
+ <object class="GtkBox" id="vertical_box">
<property name="visible">True</property>
- <property name="orientation">horizontal</property>
- <property name="halign">end</property>
+ <property name="orientation">vertical</property>
+ <property name="halign">center</property>
<property name="valign">center</property>
+ <property name="margin-right">24</property>
<child>
- <object class="GsProgressButton" id="button">
- <property name="margin_end">24</property>
- <property name="width_request">100</property>
- <property name="halign">end</property>
- </object>
- <packing>
- <property name="pack_type">end</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- <child>
- <object class="GtkSpinner" id="spinner">
- <property name="margin_start">12</property>
- <property name="margin_end">12</property>
- <property name="halign">end</property>
+ <object class="GtkBox" id="button_box">
+ <property name="visible">True</property>
+ <property name="orientation">horizontal</property>
+ <property name="halign">end</property>
+ <property name="valign">center</property>
+ <child>
+ <object class="GsProgressButton" id="button">
+ <property name="width_request">100</property>
+ <property name="halign">end</property>
+ </object>
+ <packing>
+ <property name="pack_type">end</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkSpinner" id="spinner">
+ <property name="margin_start">12</property>
+ <property name="margin_end">12</property>
+ <property name="halign">end</property>
+ </object>
+ <packing>
+ <property name="pack_type">end</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label">
+ <property name="margin_start">12</property>
+ <property name="margin_end">12</property>
+ <property name="halign">end</property>
+ </object>
+ <packing>
+ <property name="pack_type">end</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
</object>
<packing>
- <property name="pack_type">end</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
+ <property name="pack_type">start</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
</packing>
</child>
- <child>
- <object class="GtkLabel" id="label">
- <property name="margin_start">12</property>
- <property name="margin_end">12</property>
- <property name="halign">end</property>
+ <child>
+ <object class="GtkLabel" id="label_app_size">
+ <property name="visible">True</property>
+ <property name="halign">center</property>
+ <property name="valign">center</property>
+ <property name="label">150 MB</property>
+ <property name="margin-top">6</property>
+ <style>
+ <class name="app-row-app-size"/>
+ <class name="dim-label"/>
+ </style>
</object>
- <packing>
- <property name="pack_type">end</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
+ <packing>
+ <property name="pack_type">end</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
</packing>
- </child>
- </object>
- <packing>
- <property name="pack_type">end</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
+ </child>
+ </object>
</child>
</object>
</child>
diff --git a/src/gs-shell-installed.c b/src/gs-shell-installed.c
index 0de6173..357642b 100644
--- a/src/gs-shell-installed.c
+++ b/src/gs-shell-installed.c
@@ -159,6 +159,13 @@ gs_shell_installed_notify_state_changed_cb (GsApp *app,
static void selection_changed (GsShellInstalled *self);
+static gboolean
+should_show_installed_size (GsShellInstalled *self)
+{
+ return g_settings_get_boolean (self->settings,
+ "installed-page-show-size");
+}
+
static void
gs_shell_installed_add_app (GsShellInstalled *self, GsAppList *list, GsApp *app)
{
@@ -183,6 +190,9 @@ gs_shell_installed_add_app (GsShellInstalled *self, GsAppList *list, GsApp *app)
self->sizegroup_image,
self->sizegroup_name);
+ gs_app_row_set_show_installed_size (GS_APP_ROW (app_row),
+ should_show_installed_size (self));
+
gs_app_row_set_selectable (GS_APP_ROW (app_row),
self->selection_mode);
@@ -229,6 +239,8 @@ out:
static void
gs_shell_installed_load (GsShellInstalled *self)
{
+ GsPluginRefineFlags flags;
+
if (self->waiting)
return;
self->waiting = TRUE;
@@ -236,18 +248,23 @@ gs_shell_installed_load (GsShellInstalled *self)
/* remove old entries */
gs_container_remove_all (GTK_CONTAINER (self->list_box_install));
+ flags = GS_PLUGIN_REFINE_FLAGS_REQUIRE_ICON |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_HISTORY |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_SETUP_ACTION |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_VERSION |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_PERMISSIONS |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_ORIGIN_HOSTNAME |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_PROVENANCE |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_DESCRIPTION |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_LICENSE |
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_RATING;
+
+ if (should_show_installed_size (self))
+ flags |= GS_PLUGIN_REFINE_FLAGS_REQUIRE_SIZE;
+
/* get popular apps */
gs_plugin_loader_get_installed_async (self->plugin_loader,
- GS_PLUGIN_REFINE_FLAGS_REQUIRE_ICON |
- GS_PLUGIN_REFINE_FLAGS_REQUIRE_HISTORY |
- GS_PLUGIN_REFINE_FLAGS_REQUIRE_SETUP_ACTION |
- GS_PLUGIN_REFINE_FLAGS_REQUIRE_VERSION |
- GS_PLUGIN_REFINE_FLAGS_REQUIRE_PERMISSIONS |
- GS_PLUGIN_REFINE_FLAGS_REQUIRE_ORIGIN_HOSTNAME |
- GS_PLUGIN_REFINE_FLAGS_REQUIRE_PROVENANCE |
- GS_PLUGIN_REFINE_FLAGS_REQUIRE_DESCRIPTION |
- GS_PLUGIN_REFINE_FLAGS_REQUIRE_LICENSE |
- GS_PLUGIN_REFINE_FLAGS_REQUIRE_RATING,
+ flags,
GS_PLUGIN_FAILURE_FLAGS_USE_EVENTS,
self->cancellable,
gs_shell_installed_get_installed_cb,
diff --git a/src/gtk-style.css b/src/gtk-style.css
index ae634c4..4dae833 100644
--- a/src/gtk-style.css
+++ b/src/gtk-style.css
@@ -34,6 +34,10 @@
font-size: smaller;
}
+.app-row-app-size {
+ font-size: x-small;
+}
+
.needs-attention {
background-image: none;
background-color: shade(@theme_selected_bg_color, 1.1);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]