[gnome-software/wip/hughsie/sandbox-ui: 12/12] Show the sandbox and source infomation in search results



commit 2839bfd1280f57e398e4470067c2ea5be4721998
Author: Richard Hughes <richard hughsie com>
Date:   Thu Jul 7 11:55:57 2016 +0100

    Show the sandbox and source infomation in search results

 src/gs-app-row.c         |  119 ++++++++++++++++------------------------------
 src/gs-app-row.ui        |  119 ++++++++++++++++++++-------------------------
 src/gs-shell-installed.c |    2 +
 src/gs-shell-search.c    |    1 +
 src/gtk-style.css        |    4 ++
 5 files changed, 101 insertions(+), 144 deletions(-)
---
diff --git a/src/gs-app-row.c b/src/gs-app-row.c
index ff2507e..c5253bd 100644
--- a/src/gs-app-row.c
+++ b/src/gs-app-row.c
@@ -1,6 +1,6 @@
 /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
  *
- * Copyright (C) 2012-2013 Richard Hughes <richard hughsie com>
+ * Copyright (C) 2012-2016 Richard Hughes <richard hughsie com>
  * Copyright (C) 2013 Matthias Clasen <mclasen redhat com>
  *
  * Licensed under the GNU General Public License Version 2
@@ -29,7 +29,6 @@
 #include "gs-star-widget.h"
 #include "gs-progress-button.h"
 #include "gs-common.h"
-#include "gs-folders.h"
 
 typedef struct
 {
@@ -39,18 +38,16 @@ typedef struct
        GtkWidget       *name_label;
        GtkWidget       *version_label;
        GtkWidget       *star;
-       GtkWidget       *folder_label;
        GtkWidget       *description_label;
        GtkWidget       *button_box;
        GtkWidget       *button;
        GtkWidget       *spinner;
        GtkWidget       *label;
        GtkWidget       *checkbox;
-       GtkWidget       *label_tag_foreign;
-       GtkWidget       *label_tag_warning;
-       GtkWidget       *label_tag_webapp;
-       GtkWidget       *label_tag_nonfree;
-       GtkWidget       *label_tag_extension;
+       GtkWidget       *label_warning;
+       GtkWidget       *label_origin;
+       GtkWidget       *box_sandboxed;
+       GtkWidget       *image_sandboxed;
        gboolean         colorful;
        gboolean         show_codec;
        gboolean         show_update;
@@ -152,9 +149,8 @@ gs_app_row_refresh (GsAppRow *app_row)
        GsAppRowPrivate *priv = gs_app_row_get_instance_private (app_row);
        GtkStyleContext *context;
        GString *str = NULL;
+       const gchar *tmp;
        gboolean missing_search_result;
-       gboolean show_nonfree = FALSE;
-       gboolean use_folders = FALSE;
 
        if (priv->app == NULL)
                return;
@@ -187,55 +183,45 @@ gs_app_row_refresh (GsAppRow *app_row)
 
        /* add warning */
        if (gs_app_get_kind (priv->app) == AS_APP_KIND_FIRMWARE) {
-               gtk_label_set_text (GTK_LABEL (priv->label_tag_warning),
+               gtk_label_set_text (GTK_LABEL (priv->label_warning),
                                    /* TRANSLATORS: during the update the device
                                     * will restart into a special update-only mode */
                                    _("Device cannot be used during update."));
-               gtk_widget_show (priv->label_tag_warning);
+               gtk_widget_show (priv->label_warning);
        }
 
-       /* add tags */
-       if (priv->show_update || missing_search_result) {
-               gtk_widget_set_visible (priv->label_tag_webapp, FALSE);
-               show_nonfree = FALSE;
-               gtk_widget_set_visible (priv->label_tag_foreign, FALSE);
-               gtk_widget_set_visible (priv->label_tag_extension, FALSE);
-       } else {
-               switch (gs_app_get_kind (priv->app)) {
-               case AS_APP_KIND_UNKNOWN:
-                       gtk_widget_set_visible (priv->label_tag_webapp, FALSE);
-                       show_nonfree = FALSE;
-                       gtk_widget_set_visible (priv->label_tag_foreign, FALSE);
-                       gtk_widget_set_visible (priv->label_tag_extension, FALSE);
-                       break;
-               case AS_APP_KIND_WEB_APP:
-                       gtk_widget_set_visible (priv->label_tag_webapp, TRUE);
-                       show_nonfree = FALSE;
-                       gtk_widget_set_visible (priv->label_tag_foreign, FALSE);
-                       gtk_widget_set_visible (priv->label_tag_extension, FALSE);
-                       break;
-               case AS_APP_KIND_SHELL_EXTENSION:
-                       gtk_widget_set_visible (priv->label_tag_webapp, FALSE);
-                       show_nonfree = FALSE;
-                       gtk_widget_set_visible (priv->label_tag_foreign, FALSE);
-                       gtk_widget_set_visible (priv->label_tag_extension, TRUE);
-                       break;
-               default:
-                       gtk_widget_set_visible (priv->label_tag_webapp, FALSE);
-                       gtk_widget_set_visible (priv->label_tag_extension, FALSE);
-                       show_nonfree = !gs_app_get_license_is_free (priv->app);
-                       gtk_widget_set_visible (priv->label_tag_foreign,
-                                               !gs_app_has_quirk (priv->app,
-                                                                  AS_APP_QUIRK_PROVENANCE));
-                       break;
+       /* where did this app come from */
+       if (!priv->show_update) {
+               tmp = gs_app_get_origin_hostname (priv->app);
+               if (tmp != NULL) {
+                       g_autofree gchar *origin_tmp = NULL;
+                       /* TRANSLATORS: this refers to where the app came from */
+                       origin_tmp = g_strdup_printf ("%s: %s", _("Source"), tmp);
+                       gtk_label_set_label (GTK_LABEL (priv->label_origin), origin_tmp);
                }
+               gtk_widget_set_visible (priv->label_origin, tmp != NULL);
+       } else {
+               gtk_widget_set_visible (priv->label_origin, FALSE);
        }
 
-       /* Override the non-free label visibility from the settings if needed */
-       if (!g_settings_get_boolean (priv->settings, "show-nonfree-ui"))
-               show_nonfree = FALSE;
-
-       gtk_widget_set_visible (priv->label_tag_nonfree, show_nonfree);
+       /* sandboxed */
+       if (!priv->show_update) {
+               if (gs_app_get_kudos (priv->app) & GS_APP_KUDO_SANDBOXED_SECURE) {
+                       gtk_widget_set_visible (priv->box_sandboxed, TRUE);
+                       gtk_image_set_from_icon_name (GTK_IMAGE (priv->image_sandboxed),
+                                                     "security-high-symbolic",
+                                                     GTK_ICON_SIZE_SMALL_TOOLBAR);
+               } else if (gs_app_get_kudos (priv->app) & GS_APP_KUDO_SANDBOXED) {
+                       gtk_widget_set_visible (priv->box_sandboxed, TRUE);
+                       gtk_image_set_from_icon_name (GTK_IMAGE (priv->image_sandboxed),
+                                                     "security-medium-symbolic",
+                                                     GTK_ICON_SIZE_SMALL_TOOLBAR);
+               } else {
+                       gtk_widget_set_visible (priv->box_sandboxed, FALSE);
+               }
+       } else {
+               gtk_widget_set_visible (priv->box_sandboxed, FALSE);
+       }
 
        gtk_label_set_label (GTK_LABEL (priv->name_label),
                             gs_app_get_name (priv->app));
@@ -261,27 +247,6 @@ gs_app_row_refresh (GsAppRow *app_row)
                                     gs_app_get_version_ui (priv->app));
        }
 
-       use_folders = gs_utils_is_current_desktop ("GNOME") &&
-               g_settings_get_boolean (priv->settings, "show-folder-management");
-
-       if (!use_folders || priv->show_update || priv->show_codec) {
-               gtk_widget_hide (priv->folder_label);
-       } else {
-               g_autoptr(GsFolders) folders = NULL;
-               const gchar *folder;
-               folders = gs_folders_get ();
-               folder = gs_folders_get_app_folder (folders, gs_app_get_id (priv->app), gs_app_get_categories 
(priv->app));
-               if (folder)
-                       folder = gs_folders_get_folder_name (folders, folder);
-
-               /* we overwrite this for some apps */
-               if (folder == NULL)
-                       folder = gs_app_get_metadata_item (priv->app, "X-XdgApp-Tags");
-
-               gtk_label_set_label (GTK_LABEL (priv->folder_label), folder);
-               gtk_widget_set_visible (priv->folder_label, folder != NULL);
-       }
-
        if (gs_app_get_pixbuf (priv->app) != NULL)
                gs_image_set_from_pixbuf (GTK_IMAGE (priv->image),
                                          gs_app_get_pixbuf (priv->app));
@@ -577,18 +542,16 @@ gs_app_row_class_init (GsAppRowClass *klass)
        gtk_widget_class_bind_template_child_private (widget_class, GsAppRow, name_label);
        gtk_widget_class_bind_template_child_private (widget_class, GsAppRow, version_label);
        gtk_widget_class_bind_template_child_private (widget_class, GsAppRow, star);
-       gtk_widget_class_bind_template_child_private (widget_class, GsAppRow, folder_label);
        gtk_widget_class_bind_template_child_private (widget_class, GsAppRow, description_label);
        gtk_widget_class_bind_template_child_private (widget_class, GsAppRow, button_box);
        gtk_widget_class_bind_template_child_private (widget_class, GsAppRow, button);
        gtk_widget_class_bind_template_child_private (widget_class, GsAppRow, spinner);
        gtk_widget_class_bind_template_child_private (widget_class, GsAppRow, label);
        gtk_widget_class_bind_template_child_private (widget_class, GsAppRow, checkbox);
-       gtk_widget_class_bind_template_child_private (widget_class, GsAppRow, label_tag_warning);
-       gtk_widget_class_bind_template_child_private (widget_class, GsAppRow, label_tag_foreign);
-       gtk_widget_class_bind_template_child_private (widget_class, GsAppRow, label_tag_webapp);
-       gtk_widget_class_bind_template_child_private (widget_class, GsAppRow, label_tag_nonfree);
-       gtk_widget_class_bind_template_child_private (widget_class, GsAppRow, label_tag_extension);
+       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, box_sandboxed);
+       gtk_widget_class_bind_template_child_private (widget_class, GsAppRow, image_sandboxed);
 }
 
 static void
diff --git a/src/gs-app-row.ui b/src/gs-app-row.ui
index 0146a6a..a0026cd 100644
--- a/src/gs-app-row.ui
+++ b/src/gs-app-row.ui
@@ -36,8 +36,8 @@
             <property name="visible">True</property>
             <property name="orientation">vertical</property>
             <property name="margin-start">12</property>
-            <property name="spacing">6</property>
-            <property name="valign">start</property>
+            <property name="spacing">0</property>
+            <property name="valign">fill</property>
             <child>
               <object class="GtkLabel" id="name_label">
                 <property name="visible">True</property>
@@ -80,24 +80,54 @@
               </packing>
             </child>
             <child>
-              <object class="GtkLabel" id="folder_label">
+              <object class="GtkBox" id="box_sandboxed">
                 <property name="visible">True</property>
-                <property name="xalign">0.0</property>
-                <property name="yalign">0.5</property>
+                <property name="can_focus">False</property>
+                <property name="orientation">horizontal</property>
+                <property name="spacing">3</property>
                 <property name="halign">start</property>
-                <property name="ellipsize">end</property>
-                <style>
-                  <class name="folder-label"/>
-                </style>
+                <property name="valign">end</property>
+                <child>
+                  <object class="GtkImage" id="image_sandboxed">
+                    <property name="visible">True</property>
+                    <property name="pixel_size">16</property>
+                    <property name="valign">center</property>
+                    <property name="halign">start</property>
+                    <style>
+                      <class name="dim-label"/>
+                    </style>
+                  </object>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="fill">False</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkLabel" id="label_sandboxed">
+                    <property name="label" translatable="yes" comments="security 
sandbox">Sandboxed</property>
+                    <property name="visible">True</property>
+                    <property name="xalign">0.0</property>
+                    <property name="yalign">0.5</property>
+                    <property name="halign">start</property>
+                    <property name="ellipsize">end</property>
+                    <style>
+                      <class name="app-row-origin-text"/>
+                      <class name="dim-label"/>
+                    </style>
+                  </object>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="fill">False</property>
+                  </packing>
+                </child>
               </object>
               <packing>
-                <property name="expand">False</property>
-                <property name="fill">False</property>
+                <property name="expand">True</property>
+                <property name="fill">True</property>
               </packing>
             </child>
           </object>
           <packing>
-            <property name="expand">False</property>
             <property name="fill">True</property>
           </packing>
         </child>
@@ -132,8 +162,9 @@
                 <property name="can_focus">False</property>
                 <property name="spacing">4</property>
                 <property name="margin_left">20</property>
+                <property name="orientation">vertical</property>
                 <child>
-                  <object class="GtkLabel" id="label_tag_warning">
+                  <object class="GtkLabel" id="label_warning">
                     <property name="can_focus">False</property>
                     <property name="label">warning-text</property>
                     <property name="margin_start">20</property>
@@ -151,63 +182,20 @@
                   </packing>
                 </child>
                 <child>
-                  <object class="GtkLabel" id="label_tag_foreign">
-                    <property name="wrap">True</property>
-                    <property name="can_focus">False</property>
-                    <property name="label" translatable="yes" comments="This is shown in the search result 
row as a tag">3rd party</property>
-                    <style>
-                      <class name="app-row-tag"/>
-                    </style>
-                  </object>
-                  <packing>
-                    <property name="expand">False</property>
-                    <property name="fill">True</property>
-                    <property name="position">0</property>
-                  </packing>
-                </child>
-                <child>
-                  <object class="GtkLabel" id="label_tag_webapp">
-                    <property name="wrap">True</property>
-                    <property name="can_focus">False</property>
-                    <property name="label" translatable="yes" comments="This is shown in the search result 
row as a tag">web app</property>
+                  <object class="GtkLabel" id="label_origin">
+                    <property name="visible">True</property>
+                    <property name="xalign">0.0</property>
+                    <property name="yalign">0.5</property>
+                    <property name="halign">start</property>
+                    <property name="ellipsize">end</property>
                     <style>
-                      <class name="app-row-tag"/>
+                      <class name="app-row-origin-text"/>
+                      <class name="dim-label"/>
                     </style>
                   </object>
                   <packing>
                     <property name="expand">False</property>
-                    <property name="fill">True</property>
-                    <property name="position">1</property>
-                  </packing>
-                </child>
-                <child>
-                  <object class="GtkLabel" id="label_tag_nonfree">
-                    <property name="wrap">True</property>
-                    <property name="can_focus">False</property>
-                    <property name="label" translatable="yes" comments="This is shown in the search result 
row as a tag">nonfree</property>
-                    <style>
-                      <class name="app-row-tag"/>
-                    </style>
-                  </object>
-                  <packing>
-                    <property name="expand">False</property>
-                    <property name="fill">True</property>
-                    <property name="position">2</property>
-                  </packing>
-                </child>
-                <child>
-                  <object class="GtkLabel" id="label_tag_extension">
-                    <property name="wrap">True</property>
-                    <property name="can_focus">False</property>
-                    <property name="label" translatable="yes" comments="This is shown in the search result 
row as a tag">shell extension</property>
-                    <style>
-                      <class name="app-row-tag"/>
-                    </style>
-                  </object>
-                  <packing>
-                    <property name="expand">False</property>
-                    <property name="fill">True</property>
-                    <property name="position">3</property>
+                    <property name="fill">False</property>
                   </packing>
                 </child>
               </object>
@@ -227,7 +215,6 @@
           <object class="GtkBox" id="button_box">
             <property name="visible">True</property>
             <property name="orientation">horizontal</property>
-            <property name="width_request">180</property>
             <property name="halign">end</property>
             <property name="valign">center</property>
             <child>
diff --git a/src/gs-shell-installed.c b/src/gs-shell-installed.c
index 5a2543a..292824b 100644
--- a/src/gs-shell-installed.c
+++ b/src/gs-shell-installed.c
@@ -221,6 +221,8 @@ gs_shell_installed_load (GsShellInstalled *self)
                                              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 |
diff --git a/src/gs-shell-search.c b/src/gs-shell-search.c
index bf45bc7..b114f0a 100644
--- a/src/gs-shell-search.c
+++ b/src/gs-shell-search.c
@@ -189,6 +189,7 @@ gs_shell_search_load (GsShellSearch *self)
                                       GS_PLUGIN_REFINE_FLAGS_REQUIRE_DESCRIPTION |
                                       GS_PLUGIN_REFINE_FLAGS_REQUIRE_LICENSE |
                                       GS_PLUGIN_REFINE_FLAGS_REQUIRE_PERMISSIONS |
+                                      GS_PLUGIN_REFINE_FLAGS_REQUIRE_ORIGIN_HOSTNAME |
                                       GS_PLUGIN_REFINE_FLAGS_REQUIRE_RATING,
                                       self->search_cancellable,
                                       gs_shell_search_get_search_cb,
diff --git a/src/gtk-style.css b/src/gtk-style.css
index cfbe6b0..3f1552c 100644
--- a/src/gtk-style.css
+++ b/src/gtk-style.css
@@ -229,6 +229,10 @@
        color: white;
 }
 
+.app-row-origin-text {
+       font-size: 9px;
+}
+
 .fake-header-bar {
        all: unset;
 }


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