Hello community,

here is the log from the commit of package gnome-software for openSUSE:Factory 
checked in at 2016-12-07 11:11:44
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/gnome-software (Old)
 and      /work/SRC/openSUSE:Factory/.gnome-software.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "gnome-software"

Changes:
--------
--- /work/SRC/openSUSE:Factory/gnome-software/gnome-software.changes    
2016-11-10 13:11:47.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.gnome-software.new/gnome-software.changes       
2016-12-07 11:11:45.000000000 +0100
@@ -1,0 +2,17 @@
+Thu Dec  1 16:18:05 UTC 2016 - [email protected]
+
+- Update to version 3.22.3:
+  + Misc. fixes to the search results page.
+  + Misc. flatpak bug and crasher fixes.
+  + Correctly raise the codec search window under the Wayland
+    session.
+  + Improve spinner state handling on the updates page.
+  + Make it possible to upgrade two Fedora versions at a time.
+  + Fix a memory leak with every search request.
+  + Don't show screenshot placeholder for add-ons that can't have
+    screenshots.
+  + Show an error if the screenshot download fails.
+  + Get the screenshot metadata from the GNOME Shell Extension JSON
+    data.
+
+-------------------------------------------------------------------

Old:
----
  gnome-software-3.22.2.tar.xz

New:
----
  gnome-software-3.22.3.tar.xz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ gnome-software.spec ++++++
--- /var/tmp/diff_new_pack.5TiR4k/_old  2016-12-07 11:11:46.000000000 +0100
+++ /var/tmp/diff_new_pack.5TiR4k/_new  2016-12-07 11:11:46.000000000 +0100
@@ -17,7 +17,7 @@
 
 
 Name:           gnome-software
-Version:        3.22.2
+Version:        3.22.3
 Release:        0
 %define gs_plugin_api 11
 Summary:        GNOME Software Store

++++++ gnome-software-3.22.2.tar.xz -> gnome-software-3.22.3.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gnome-software-3.22.2/NEWS 
new/gnome-software-3.22.3/NEWS
--- old/gnome-software-3.22.2/NEWS      2016-11-07 20:45:14.000000000 +0100
+++ new/gnome-software-3.22.3/NEWS      2016-12-01 16:53:35.000000000 +0100
@@ -1,3 +1,18 @@
+Version 3.22.3
+~~~~~~~~~~~~~~
+Released: 2016-12-01
+
+This stable release fixes the following bugs:
+ * Misc. fixes to the search results page
+ * Misc. flatpak bug and crasher fixes
+ * Correctly raise the codec search window under the Wayland session
+ * Improve spinner state handling on the updates page
+ * Make it possible to upgrade two Fedora versions at a time
+ * Fix a memory leak with every search request
+ * Don't show screenshot placeholder for add-ons that can't have screenshots
+ * Show an error if the screenshot download fails
+ * Get the screenshot metadata from the GNOME Shell Extension JSON data
+
 Version 3.22.2
 ~~~~~~~~~~~~~~
 Released: 2016-11-07
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gnome-software-3.22.2/config.h 
new/gnome-software-3.22.3/config.h
--- old/gnome-software-3.22.2/config.h  2016-11-07 20:44:18.000000000 +0100
+++ new/gnome-software-3.22.3/config.h  2016-12-01 16:52:14.000000000 +0100
@@ -110,7 +110,7 @@
 #define PACKAGE_NAME "gnome-software"
 
 /* Define to the full name and version of this package. */
-#define PACKAGE_STRING "gnome-software 3.22.2"
+#define PACKAGE_STRING "gnome-software 3.22.3"
 
 /* Define to the one symbol short name of this package. */
 #define PACKAGE_TARNAME "gnome-software"
@@ -119,10 +119,10 @@
 #define PACKAGE_URL ""
 
 /* Define to the version of this package. */
-#define PACKAGE_VERSION "3.22.2"
+#define PACKAGE_VERSION "3.22.3"
 
 /* Define to 1 if you have the ANSI C header files. */
 #define STDC_HEADERS 1
 
 /* Version number of package */
-#define VERSION "3.22.2"
+#define VERSION "3.22.3"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gnome-software-3.22.2/configure 
new/gnome-software-3.22.3/configure
--- old/gnome-software-3.22.2/configure 2016-11-07 20:44:13.000000000 +0100
+++ new/gnome-software-3.22.3/configure 2016-12-01 16:52:08.000000000 +0100
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for gnome-software 3.22.2.
+# Generated by GNU Autoconf 2.69 for gnome-software 3.22.3.
 #
 # Report bugs to 
<http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-software>.
 #
@@ -591,8 +591,8 @@
 # Identity of this package.
 PACKAGE_NAME='gnome-software'
 PACKAGE_TARNAME='gnome-software'
-PACKAGE_VERSION='3.22.2'
-PACKAGE_STRING='gnome-software 3.22.2'
+PACKAGE_VERSION='3.22.3'
+PACKAGE_STRING='gnome-software 3.22.3'
 
PACKAGE_BUGREPORT='http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-software'
 PACKAGE_URL=''
 
@@ -1556,7 +1556,7 @@
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures gnome-software 3.22.2 to adapt to many kinds of 
systems.
+\`configure' configures gnome-software 3.22.3 to adapt to many kinds of 
systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1626,7 +1626,7 @@
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of gnome-software 3.22.2:";;
+     short | recursive ) echo "Configuration of gnome-software 3.22.3:";;
    esac
   cat <<\_ACEOF
 
@@ -1844,7 +1844,7 @@
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-gnome-software configure 3.22.2
+gnome-software configure 3.22.3
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2213,7 +2213,7 @@
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by gnome-software $as_me 3.22.2, which was
+It was created by gnome-software $as_me 3.22.3, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -3077,7 +3077,7 @@
 
 # Define the identity of the package.
  PACKAGE='gnome-software'
- VERSION='3.22.2'
+ VERSION='3.22.3'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -18021,7 +18021,7 @@
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by gnome-software $as_me 3.22.2, which was
+This file was extended by gnome-software $as_me 3.22.3, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -18087,7 +18087,7 @@
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; 
s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-gnome-software config.status 3.22.2
+gnome-software config.status 3.22.3
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gnome-software-3.22.2/configure.ac 
new/gnome-software-3.22.3/configure.ac
--- old/gnome-software-3.22.2/configure.ac      2016-11-07 20:42:06.000000000 
+0100
+++ new/gnome-software-3.22.3/configure.ac      2016-12-01 14:52:56.000000000 
+0100
@@ -1,7 +1,7 @@
 # Copyright (C) 2010-2015 Richard Hughes <[email protected]>
 AC_PREREQ(2.63)
 
-AC_INIT([gnome-software],[3.22.2],[http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-software])
+AC_INIT([gnome-software],[3.22.3],[http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-software])
 AC_CONFIG_SRCDIR(src)
 AM_INIT_AUTOMAKE([1.11 no-dist-gzip dist-xz tar-ustar serial-tests foreign])
 AC_CONFIG_HEADERS([config.h])
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gnome-software-3.22.2/data/appdata/org.gnome.Software.appdata.xml.in 
new/gnome-software-3.22.3/data/appdata/org.gnome.Software.appdata.xml.in
--- old/gnome-software-3.22.2/data/appdata/org.gnome.Software.appdata.xml.in    
2016-11-07 20:43:12.000000000 +0100
+++ new/gnome-software-3.22.3/data/appdata/org.gnome.Software.appdata.xml.in    
2016-12-01 16:49:17.000000000 +0100
@@ -46,6 +46,22 @@
    Validate with `appstream-util validate *.appdata.xml`
   -->
   <releases>
+    <release date="2016-12-01" version="3.22.3">
+      <description>
+        <p>This stable release fixes the following bugs:</p>
+        <ul>
+          <li>Misc. fixes to the search results page</li>
+          <li>Misc. flatpak bug and crasher fixes</li>
+          <li>Correctly raise the codec search window under the Wayland 
session</li>
+          <li>Improve spinner state handling on the updates page</li>
+          <li>Make it possible to upgrade two Fedora versions at a time</li>
+          <li>Fix a memory leak with every search request</li>
+          <li>Don't show screenshot placeholder for add-ons that can't have 
screenshots</li>
+          <li>Show an error if the screenshot download fails</li>
+          <li>Get the screenshot metadata from the GNOME Shell Extension JSON 
data</li>
+        </ul>
+      </description>
+    </release>
     <release date="2016-11-07" version="3.22.2">
       <description>
         <p>This stable release fixes the following bugs:</p>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gnome-software-3.22.2/doc/api/gnome-software-sections.txt 
new/gnome-software-3.22.3/doc/api/gnome-software-sections.txt
--- old/gnome-software-3.22.2/doc/api/gnome-software-sections.txt       
2016-11-07 20:45:21.000000000 +0100
+++ new/gnome-software-3.22.3/doc/api/gnome-software-sections.txt       
2016-12-01 16:53:44.000000000 +0100
@@ -337,7 +337,6 @@
 gs_utils_show_error_dialog
 gs_utils_build_unique_id_kind
 gs_utils_list_has_app_fuzzy
-gs_search_button_new
 </SECTION>
 
 <SECTION>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gnome-software-3.22.2/src/gnome-software.ui 
new/gnome-software-3.22.3/src/gnome-software.ui
--- old/gnome-software-3.22.2/src/gnome-software.ui     2016-11-07 
20:42:06.000000000 +0100
+++ new/gnome-software-3.22.3/src/gnome-software.ui     2016-12-01 
14:52:56.000000000 +0100
@@ -241,6 +241,32 @@
                 </child>
               </object>
             </child>
+            <child>
+              <object class="GtkToggleButton" id="search_button">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">False</property>
+                <child internal-child="accessible">
+                  <object class="AtkObject" id="search_button_accessible">
+                    <property name="accessible-name" 
translatable="yes">Search</property>
+                  </object>
+                </child>
+                <style>
+                  <class name="image-button"/>
+                </style>
+                <child>
+                  <object class="GtkImage" id="search_image">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="icon_name">edit-find-symbolic</property>
+                    <property name="icon_size">1</property>
+                  </object>
+                </child>
+              </object>
+              <packing>
+                <property name="pack-type">end</property>
+              </packing>
+            </child>
           </object>
           <packing>
             <property name="expand">False</property>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gnome-software-3.22.2/src/gs-app-row.c 
new/gnome-software-3.22.3/src/gs-app-row.c
--- old/gnome-software-3.22.2/src/gs-app-row.c  2016-11-07 20:42:06.000000000 
+0100
+++ new/gnome-software-3.22.3/src/gs-app-row.c  2016-12-01 14:52:56.000000000 
+0100
@@ -49,12 +49,9 @@
        GtkWidget       *label_warning;
        GtkWidget       *label_origin;
        GtkWidget       *label_installed;
-       GtkWidget       *box_sandboxed;
-       GtkWidget       *image_sandboxed;
        gboolean         colorful;
        gboolean         show_folders;
        gboolean         show_buttons;
-       gboolean         show_sandbox;
        gboolean         show_source;
        gboolean         show_codec;
        gboolean         show_update;
@@ -344,25 +341,6 @@
                gtk_widget_set_visible (priv->label_origin, FALSE);
        }
 
-       /* sandboxed */
-       if (priv->show_sandbox) {
-               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);
-       }
-
        /* installed tag */
        if (!priv->show_buttons) {
                switch (gs_app_get_state (priv->app)) {
@@ -678,8 +656,6 @@
        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, 
box_sandboxed);
-       gtk_widget_class_bind_template_child_private (widget_class, GsAppRow, 
image_sandboxed);
 }
 
 static void
@@ -753,15 +729,6 @@
        gs_app_row_refresh (app_row);
 }
 
-void
-gs_app_row_set_show_sandbox (GsAppRow *app_row, gboolean show_sandbox)
-{
-       GsAppRowPrivate *priv = gs_app_row_get_instance_private (app_row);
-
-       priv->show_sandbox = show_sandbox;
-       gs_app_row_refresh (app_row);
-}
-
 void
 gs_app_row_set_show_source (GsAppRow *app_row, gboolean show_source)
 {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gnome-software-3.22.2/src/gs-app-row.ui 
new/gnome-software-3.22.3/src/gs-app-row.ui
--- old/gnome-software-3.22.2/src/gs-app-row.ui 2016-10-12 10:07:40.000000000 
+0200
+++ new/gnome-software-3.22.3/src/gs-app-row.ui 2016-12-01 14:52:56.000000000 
+0100
@@ -127,54 +127,6 @@
                     <property name="fill">False</property>
                   </packing>
                 </child>
-                <child>
-                  <object class="GtkBox" id="box_sandboxed">
-                    <property name="visible">True</property>
-                    <property name="can_focus">False</property>
-                    <property name="orientation">horizontal</property>
-                    <property name="margin_top">6</property>
-                    <property name="spacing">3</property>
-                    <property name="halign">start</property>
-                    <property name="valign">start</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">True</property>
-                    <property name="fill">True</property>
-                  </packing>
-                </child>
               </object>
               <packing>
                 <property name="fill">True</property>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gnome-software-3.22.2/src/gs-app.c 
new/gnome-software-3.22.3/src/gs-app.c
--- old/gnome-software-3.22.2/src/gs-app.c      2016-11-07 20:42:06.000000000 
+0100
+++ new/gnome-software-3.22.3/src/gs-app.c      2016-12-01 14:52:56.000000000 
+0100
@@ -770,7 +770,7 @@
        /* this state change was unexpected */
        if (!state_change_ok) {
                g_warning ("State change on %s from %s to %s is not OK",
-                          app->id,
+                          gs_app_get_unique_id (app),
                           as_app_state_to_string (app->state),
                           as_app_state_to_string (state));
                return FALSE;
@@ -792,7 +792,8 @@
        default:
                if (app->state_recover != state) {
                        g_debug ("%s non-transient state now %s",
-                                app->id, as_app_state_to_string (state));
+                                gs_app_get_unique_id (app),
+                                as_app_state_to_string (state));
                        app->state_recover = state;
                }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gnome-software-3.22.2/src/gs-application.c 
new/gnome-software-3.22.3/src/gs-application.c
--- old/gnome-software-3.22.2/src/gs-application.c      2016-11-07 
20:42:06.000000000 +0100
+++ new/gnome-software-3.22.3/src/gs-application.c      2016-12-01 
14:52:56.000000000 +0100
@@ -32,7 +32,12 @@
 #include <libsoup/soup.h>
 
 #ifdef GDK_WINDOWING_X11
-#include <gtk/gtkx.h>
+#include <gdk/gdkx.h>
+#endif
+#ifdef GDK_WINDOWING_WAYLAND
+#if GTK_CHECK_VERSION(3,22,4)
+#include <gdk/gdkwayland.h>
+#endif
 #endif
 
 #ifdef HAVE_PACKAGEKIT
@@ -320,10 +325,13 @@
 
        gs_shell_setup (app->shell, app->plugin_loader, app->cancellable);
        gtk_application_add_window (GTK_APPLICATION (app), gs_shell_get_window 
(app->shell));
+
+       /* monitor the network as the many UI operations need the network */
+       gs_application_monitor_network (app);
 }
 
 static void
-initialize_ui_and_present_window (GsApplication *app)
+initialize_ui_and_present_window (GsApplication *app, const gchar *startup_id)
 {
        GList *windows;
        GtkWindow *window;
@@ -332,6 +340,9 @@
        windows = gtk_application_get_windows (GTK_APPLICATION (app));
        if (windows) {
                window = windows->data;
+
+               if (startup_id != NULL)
+                       gtk_window_set_startup_id (window, startup_id);
                gtk_window_present (window);
        }
 }
@@ -541,7 +552,7 @@
        GsApplication *app = GS_APPLICATION (data);
        const gchar *mode;
 
-       initialize_ui_and_present_window (app);
+       initialize_ui_and_present_window (app, NULL);
 
        mode = g_variant_get_string (parameter, NULL);
        if (g_strcmp0 (mode, "updates") == 0) {
@@ -568,7 +579,7 @@
        GsApplication *app = GS_APPLICATION (data);
        const gchar *search;
 
-       initialize_ui_and_present_window (app);
+       initialize_ui_and_present_window (app, NULL);
 
        search = g_variant_get_string (parameter, NULL);
        gs_shell_show_search (app->shell, search);
@@ -583,7 +594,7 @@
        const gchar *id;
        const gchar *search;
 
-       initialize_ui_and_present_window (app);
+       initialize_ui_and_present_window (app, NULL);
 
        g_variant_get (parameter, "(&s&s)", &id, &search);
        if (search != NULL && search[0] != '\0')
@@ -608,7 +619,7 @@
        GsApplication *app = GS_APPLICATION (data);
        g_autoptr (GsApp) a = NULL;
 
-       initialize_ui_and_present_window (app);
+       initialize_ui_and_present_window (app, NULL);
 
        a = gs_app_new (NULL);
        gs_app_add_source (a, g_variant_get_string (parameter, NULL));
@@ -624,7 +635,6 @@
        const gchar *filename;
 
        gs_application_initialize_ui (app);
-       gs_application_monitor_network (GS_APPLICATION (app));
 
        g_variant_get (parameter, "(&s)", &filename);
        gs_shell_show_filename (app->shell, filename);
@@ -662,7 +672,7 @@
 {
        GsApplication *app = GS_APPLICATION (data);
 
-       initialize_ui_and_present_window (app);
+       initialize_ui_and_present_window (app, NULL);
 
        gs_shell_set_mode (app->shell, GS_SHELL_MODE_UPDATES);
        gs_update_monitor_show_error (app->update_monitor, app->shell);
@@ -674,26 +684,32 @@
                              gpointer       data)
 {
        GsApplication *app = GS_APPLICATION (data);
-#ifdef GDK_WINDOWING_X11
        GdkDisplay *display;
-#endif
        const gchar *mode;
        const gchar *startup_id;
        g_autofree gchar **resources = NULL;
 
        g_variant_get (parameter, "(&s^a&s&s)", &mode, &resources, &startup_id);
 
-#ifdef GDK_WINDOWING_X11
        display = gdk_display_get_default ();
-
+#ifdef GDK_WINDOWING_X11
        if (GDK_IS_X11_DISPLAY (display)) {
                if (startup_id != NULL && startup_id[0] != '\0')
                        gdk_x11_display_set_startup_notification_id (display,
                                                                     
startup_id);
        }
 #endif
+#ifdef GDK_WINDOWING_WAYLAND
+#if GTK_CHECK_VERSION(3,22,4)
+       if (GDK_IS_WAYLAND_DISPLAY (display)) {
+               if (startup_id != NULL && startup_id[0] != '\0')
+                       gdk_wayland_display_set_startup_notification_id 
(display,
+                                                                        
startup_id);
+       }
+#endif
+#endif
 
-       initialize_ui_and_present_window (app);
+       initialize_ui_and_present_window (app, startup_id);
 
        gs_shell_show_extras_search (app->shell, mode, resources);
 }
@@ -777,7 +793,6 @@
        GsApplication *app = GS_APPLICATION (application);
 
        gs_application_initialize_ui (GS_APPLICATION (application));
-       gs_application_monitor_network (GS_APPLICATION (application));
 
        /* start metadata loading screen */
        if (gs_shell_get_mode (app->shell) == GS_SHELL_MODE_UNKNOWN) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gnome-software-3.22.2/src/gs-common.c 
new/gnome-software-3.22.3/src/gs-common.c
--- old/gnome-software-3.22.2/src/gs-common.c   2016-11-07 20:42:06.000000000 
+0100
+++ new/gnome-software-3.22.3/src/gs-common.c   2016-12-01 14:52:56.000000000 
+0100
@@ -850,53 +850,6 @@
        gtk_widget_show (dialog);
 }
 
-static void
-gs_search_button_cb (GtkToggleButton *toggle_button, GtkSearchBar *search_bar)
-{
-       gtk_search_bar_set_search_mode (search_bar,
-                                       gtk_toggle_button_get_active 
(toggle_button));
-}
-
-static void
-gs_search_mode_enabled_cb (GtkSearchBar *search_bar,
-                          GParamSpec *pspec,
-                          GtkToggleButton *toggle_button)
-{
-       gtk_toggle_button_set_active (toggle_button,
-                                     gtk_search_bar_get_search_mode 
(search_bar));
-}
-
-/**
- * gs_search_button_new:
- *
- * Creates a new search toggle button.
- */
-GtkWidget *
-gs_search_button_new (GtkSearchBar *search_bar)
-{
-       GtkWidget *widget;
-       GtkWidget *im;
-
-       widget = gtk_toggle_button_new ();
-       im = gtk_image_new_from_icon_name ("edit-find-symbolic", 
GTK_ICON_SIZE_BUTTON);
-       gtk_widget_set_visible (im, TRUE);
-       gtk_container_add (GTK_CONTAINER (widget), im);
-       gtk_widget_set_visible (widget, TRUE);
-
-       if (search_bar != NULL) {
-               /* show the search bar when clicked */
-               g_signal_connect (widget, "clicked",
-                                 G_CALLBACK (gs_search_button_cb),
-                                 search_bar);
-               /* set the button enabled when search appears */
-               g_signal_connect (search_bar, "notify::search-mode-enabled",
-                                 G_CALLBACK (gs_search_mode_enabled_cb),
-                                 widget);
-       }
-
-       return widget;
-}
-
 /**
  * gs_utils_get_error_value:
  * @error: A GError
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gnome-software-3.22.2/src/gs-common.h 
new/gnome-software-3.22.3/src/gs-common.h
--- old/gnome-software-3.22.2/src/gs-common.h   2016-11-07 20:42:06.000000000 
+0100
+++ new/gnome-software-3.22.3/src/gs-common.h   2016-12-01 14:52:56.000000000 
+0100
@@ -70,7 +70,6 @@
                                                 const gchar    *id);
 gboolean        gs_utils_list_has_app_fuzzy    (GsAppList      *list,
                                                 GsApp          *app);
-GtkWidget      *gs_search_button_new           (GtkSearchBar   *search_bar);
 
 G_END_DECLS
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gnome-software-3.22.2/src/gs-page.c 
new/gnome-software-3.22.3/src/gs-page.c
--- old/gnome-software-3.22.2/src/gs-page.c     2016-11-07 20:42:06.000000000 
+0100
+++ new/gnome-software-3.22.3/src/gs-page.c     2016-12-01 14:52:56.000000000 
+0100
@@ -196,8 +196,10 @@
            !gs_shell_is_active (priv->shell))
                gs_app_notify_installed (helper->app);
 
-       if (GS_PAGE_GET_CLASS (page)->app_installed != NULL)
+       if (gs_app_is_installed (helper->app) &&
+           GS_PAGE_GET_CLASS (page)->app_installed != NULL) {
                GS_PAGE_GET_CLASS (page)->app_installed (page, helper->app);
+       }
 }
 
 static void
@@ -265,8 +267,10 @@
                return;
        }
 
-       if (GS_PAGE_GET_CLASS (page)->app_removed != NULL)
+       if (!gs_app_is_installed (helper->app) &&
+           GS_PAGE_GET_CLASS (page)->app_removed != NULL) {
                GS_PAGE_GET_CLASS (page)->app_removed (page, helper->app);
+       }
 }
 
 GtkWidget *
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gnome-software-3.22.2/src/gs-screenshot-image.c 
new/gnome-software-3.22.3/src/gs-screenshot-image.c
--- old/gnome-software-3.22.2/src/gs-screenshot-image.c 2016-10-12 
10:07:40.000000000 +0200
+++ new/gnome-software-3.22.3/src/gs-screenshot-image.c 2016-12-01 
14:52:56.000000000 +0100
@@ -215,10 +215,12 @@
                return;
 
        if (msg->status_code != SOUP_STATUS_OK) {
+                g_warning ("Result of screenshot downloading attempt with "
+                          "status code '%u': %s", msg->status_code,
+                          msg->reason_phrase);
                /* TRANSLATORS: this is when we try to download a screenshot and
                 * we get back 404 */
                gs_screenshot_image_set_error (ssimg, _("Screenshot not 
found"));
-               gtk_widget_hide (GTK_WIDGET (ssimg));
                return;
        }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gnome-software-3.22.2/src/gs-shell-details.c 
new/gnome-software-3.22.3/src/gs-shell-details.c
--- old/gnome-software-3.22.2/src/gs-shell-details.c    2016-11-07 
20:42:06.000000000 +0100
+++ new/gnome-software-3.22.3/src/gs-shell-details.c    2016-12-01 
14:52:56.000000000 +0100
@@ -569,6 +569,8 @@
        case AS_APP_KIND_SOURCE:
        case AS_APP_KIND_FIRMWARE:
        case AS_APP_KIND_DRIVER:
+       case AS_APP_KIND_INPUT_METHOD:
+       case AS_APP_KIND_LOCALIZATION:
                gtk_widget_set_visible (self->box_details_screenshot_fallback, 
FALSE);
                break;
        default:
@@ -1445,6 +1447,16 @@
        gs_plugin_loader_file_to_app_async (self->plugin_loader,
                                            file,
                                            GS_PLUGIN_REFINE_FLAGS_REQUIRE_ICON 
|
+                                           
GS_PLUGIN_REFINE_FLAGS_REQUIRE_LICENSE |
+                                           GS_PLUGIN_REFINE_FLAGS_REQUIRE_SIZE 
|
+                                           
GS_PLUGIN_REFINE_FLAGS_REQUIRE_VERSION |
+                                           
GS_PLUGIN_REFINE_FLAGS_REQUIRE_HISTORY |
+                                           
GS_PLUGIN_REFINE_FLAGS_REQUIRE_ORIGIN_UI |
+                                           
GS_PLUGIN_REFINE_FLAGS_REQUIRE_MENU_PATH |
+                                           GS_PLUGIN_REFINE_FLAGS_REQUIRE_URL |
+                                           
GS_PLUGIN_REFINE_FLAGS_REQUIRE_SETUP_ACTION |
+                                           
GS_PLUGIN_REFINE_FLAGS_REQUIRE_PROVENANCE |
+                                           
GS_PLUGIN_REFINE_FLAGS_REQUIRE_RELATED |
                                            
GS_PLUGIN_REFINE_FLAGS_REQUIRE_PERMISSIONS,
                                            self->cancellable,
                                            gs_shell_details_file_to_app_cb,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gnome-software-3.22.2/src/gs-shell-overview.c 
new/gnome-software-3.22.3/src/gs-shell-overview.c
--- old/gnome-software-3.22.2/src/gs-shell-overview.c   2016-11-07 
20:42:06.000000000 +0100
+++ new/gnome-software-3.22.3/src/gs-shell-overview.c   2016-12-01 
14:52:56.000000000 +0100
@@ -51,7 +51,6 @@
        gboolean                 loading_categories;
        gboolean                 empty;
        gchar                   *category_of_day;
-       GtkWidget               *search_button;
        GHashTable              *category_hash;         /* id : GsCategory */
        GSettings               *settings;
 
@@ -574,7 +573,8 @@
        }
 
        /* we hid the search bar */
-       gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->search_button), 
FALSE);
+       widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, 
"search_button"));
+       gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), FALSE);
 
        widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, 
"buttonbox_main"));
        gtk_widget_show (widget);
@@ -737,7 +737,6 @@
                         GCancellable *cancellable)
 {
        GsShellOverviewPrivate *priv = gs_shell_overview_get_instance_private 
(self);
-       GtkSearchBar *search_bar;
        GtkAdjustment *adj;
        GtkWidget *tile;
        gint i;
@@ -776,12 +775,6 @@
        g_signal_connect (priv->categories_expander_button, "clicked",
                          G_CALLBACK 
(gs_shell_overview_categories_expander_cb), self);
 
-       /* search button */
-       search_bar = GTK_SEARCH_BAR (gtk_builder_get_object (priv->builder,
-                                                            "search_bar"));
-       priv->search_button = gs_search_button_new (search_bar);
-       gs_page_set_header_end_widget (GS_PAGE (self), priv->search_button);
-
        /* chain up */
        gs_page_setup (GS_PAGE (self),
                       shell,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gnome-software-3.22.2/src/gs-shell-search.c 
new/gnome-software-3.22.3/src/gs-shell-search.c
--- old/gnome-software-3.22.2/src/gs-shell-search.c     2016-11-07 
20:42:06.000000000 +0100
+++ new/gnome-software-3.22.3/src/gs-shell-search.c     2016-12-01 
14:52:56.000000000 +0100
@@ -44,7 +44,6 @@
        gchar                   *appid_to_show;
        gchar                   *value;
        guint                    waiting_id;
-       GtkWidget               *search_button;
 
        GtkWidget               *list_box_search;
        GtkWidget               *scrolledwindow_search;
@@ -134,7 +133,6 @@
        for (i = 0; i < gs_app_list_length (list); i++) {
                app = gs_app_list_index (list, i);
                app_row = gs_app_row_new (app);
-               gs_app_row_set_show_sandbox (GS_APP_ROW (app_row), TRUE);
                if (!gs_app_has_quirk (app, AS_APP_QUIRK_PROVENANCE) ||
                    gs_utils_list_has_app_fuzzy (list, app))
                        gs_app_row_set_show_source (GS_APP_ROW (app_row), TRUE);
@@ -254,7 +252,8 @@
        gtk_widget_show (widget);
 
        /* hardcode */
-       gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (self->search_button), 
TRUE);
+       widget = GTK_WIDGET (gtk_builder_get_object (self->builder, 
"search_button"));
+       gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), TRUE);
 
        if (scroll_up) {
                GtkAdjustment *adj;
@@ -381,14 +380,6 @@
        gs_shell_search_reload (page);
 }
 
-static void
-gs_shell_search_search_button_cb (GtkButton *button, GsShellSearch *self)
-{
-       if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (button)))
-               return;
-       gs_shell_change_mode (self->shell, GS_SHELL_MODE_OVERVIEW, NULL, TRUE);
-}
-
 void
 gs_shell_search_setup (GsShellSearch *self,
                       GsShell *shell,
@@ -418,12 +409,6 @@
                                    gs_shell_search_sort_func,
                                    self, NULL);
 
-       /* search button */
-       self->search_button = gs_search_button_new (NULL);
-       gs_page_set_header_end_widget (GS_PAGE (self), self->search_button);
-       g_signal_connect (self->search_button, "clicked",
-                         G_CALLBACK (gs_shell_search_search_button_cb), self);
-
        /* chain up */
        gs_page_setup (GS_PAGE (self),
                       shell,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gnome-software-3.22.2/src/gs-shell-updates.c 
new/gnome-software-3.22.3/src/gs-shell-updates.c
--- old/gnome-software-3.22.2/src/gs-shell-updates.c    2016-11-07 
20:42:06.000000000 +0100
+++ new/gnome-software-3.22.3/src/gs-shell-updates.c    2016-12-01 
14:52:56.000000000 +0100
@@ -302,11 +302,11 @@
        /* headerbar refresh icon */
        switch (self->state) {
        case GS_SHELL_UPDATES_STATE_ACTION_REFRESH:
+       case GS_SHELL_UPDATES_STATE_ACTION_GET_UPDATES:
                gtk_image_set_from_icon_name (GTK_IMAGE (gtk_button_get_image 
(GTK_BUTTON (self->button_refresh))),
                                              "media-playback-stop-symbolic", 
GTK_ICON_SIZE_MENU);
                gtk_widget_show (self->button_refresh);
                break;
-       case GS_SHELL_UPDATES_STATE_ACTION_GET_UPDATES:
        case GS_SHELL_UPDATES_STATE_STARTUP:
        case GS_SHELL_UPDATES_STATE_MANAGED:
                gtk_widget_hide (self->button_refresh);
@@ -338,8 +338,11 @@
        case GS_SHELL_UPDATES_STATE_FAILED:
                gtk_stack_set_visible_child_name (GTK_STACK 
(self->stack_updates), "failed");
                break;
-       case GS_SHELL_UPDATES_STATE_ACTION_REFRESH:
        case GS_SHELL_UPDATES_STATE_ACTION_GET_UPDATES:
+               gtk_stack_set_visible_child_name (GTK_STACK 
(self->stack_updates),
+                                                 "spinner");
+               break;
+       case GS_SHELL_UPDATES_STATE_ACTION_REFRESH:
                if (self->result_flags != GS_SHELL_UPDATES_FLAG_NONE) {
                        gtk_stack_set_visible_child_name (GTK_STACK 
(self->stack_updates), "view");
                } else {
@@ -554,6 +557,7 @@
                }
        } else if (gs_app_list_length (list) == 0) {
                g_debug ("updates-shell: no upgrades to show");
+               gs_shell_updates_clear_flag (self, 
GS_SHELL_UPDATES_FLAG_HAS_UPGRADES);
        } else {
                GsApp *app = gs_app_list_index (list, 0);
                g_debug ("got upgrade %s", gs_app_get_id (app));
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gnome-software-3.22.2/src/gs-shell.c 
new/gnome-software-3.22.3/src/gs-shell.c
--- old/gnome-software-3.22.2/src/gs-shell.c    2016-11-07 20:42:06.000000000 
+0100
+++ new/gnome-software-3.22.3/src/gs-shell.c    2016-12-01 14:52:56.000000000 
+0100
@@ -83,6 +83,7 @@
        GQueue                  *back_entry_stack;
        GPtrArray               *modal_dialogs;
        gulong                   search_changed_id;
+       gboolean                 in_mode_change;
 } GsShellPrivate;
 
 G_DEFINE_TYPE_WITH_PRIVATE (GsShell, gs_shell, G_TYPE_OBJECT)
@@ -254,10 +255,16 @@
        widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, 
"header_selection_menu_button"));
        gtk_widget_hide (widget);
 
+       priv->in_mode_change = TRUE;
+       /* only show the search button in overview and search pages */
+       widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, 
"search_button"));
+       gtk_widget_set_visible (widget, mode == GS_SHELL_MODE_OVERVIEW ||
+                                       mode == GS_SHELL_MODE_SEARCH);
        /* hide unless we're going to search */
        widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, 
"search_bar"));
        gtk_search_bar_set_search_mode (GTK_SEARCH_BAR (widget),
                                        mode == GS_SHELL_MODE_SEARCH);
+       priv->in_mode_change = FALSE;
 
        context = gtk_widget_get_style_context (GTK_WIDGET 
(gtk_builder_get_object (priv->builder, "header")));
        gtk_style_context_remove_class (context, "selection-mode");
@@ -333,9 +340,13 @@
 
        /* show the back button if needed */
        widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, 
"button_back"));
-       gtk_widget_set_visible (widget, !g_queue_is_empty 
(priv->back_entry_stack));
+       gtk_widget_set_visible (widget,
+                               mode != GS_SHELL_MODE_SEARCH &&
+                               !g_queue_is_empty (priv->back_entry_stack));
 
+       priv->in_mode_change = TRUE;
        gs_page_switch_to (new_page, scroll_up);
+       priv->in_mode_change = FALSE;
 
        /* update header bar widgets */
        widget = gs_page_get_header_start_widget (new_page);
@@ -528,6 +539,35 @@
        }
 }
 
+static void
+search_button_clicked_cb (GtkToggleButton *toggle_button, GsShell *shell)
+{
+       GsShellPrivate *priv = gs_shell_get_instance_private (shell);
+       GtkWidget *search_bar;
+
+       search_bar = GTK_WIDGET (gtk_builder_get_object (priv->builder, 
"search_bar"));
+       gtk_search_bar_set_search_mode (GTK_SEARCH_BAR (search_bar),
+                                       gtk_toggle_button_get_active 
(toggle_button));
+
+       if (priv->in_mode_change)
+               return;
+
+       /* switch back to overview */
+       if (!gtk_toggle_button_get_active (toggle_button))
+               gs_shell_change_mode (shell, GS_SHELL_MODE_OVERVIEW, NULL, 
TRUE);
+}
+
+static void
+search_mode_enabled_cb (GtkSearchBar *search_bar, GParamSpec *pspec, GsShell 
*shell)
+{
+       GsShellPrivate *priv = gs_shell_get_instance_private (shell);
+       GtkWidget *search_button;
+
+       search_button = GTK_WIDGET (gtk_builder_get_object (priv->builder, 
"search_button"));
+       gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (search_button),
+                                     gtk_search_bar_get_search_mode 
(search_bar));
+}
+
 static gboolean
 window_key_press_event (GtkWidget *win, GdkEventKey *event, GsShell *shell)
 {
@@ -680,6 +720,17 @@
        g_signal_connect_after (priv->main_window, "button_press_event",
                                G_CALLBACK (window_button_press_event), shell);
 
+       /* show the search bar when clicking on the search button */
+       widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, 
"search_button"));
+       g_signal_connect (widget, "clicked",
+                         G_CALLBACK (search_button_clicked_cb),
+                         shell);
+       /* set the search button enabled when search bar appears */
+       widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, 
"search_bar"));
+       g_signal_connect (widget, "notify::search-mode-enabled",
+                         G_CALLBACK (search_mode_enabled_cb),
+                         shell);
+
        /* setup buttons */
        widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, 
"button_back"));
        g_signal_connect (widget, "clicked",
@@ -853,6 +904,8 @@
 void gs_shell_show_extras_search (GsShell *shell, const gchar *mode, gchar 
**resources)
 {
        GsShellPrivate *priv = gs_shell_get_instance_private (shell);
+
+       save_back_entry (shell);
        gs_shell_extras_search (priv->shell_extras, mode, resources);
        gs_shell_change_mode (shell, GS_SHELL_MODE_EXTRAS, NULL, TRUE);
        gs_shell_activate (shell);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gnome-software-3.22.2/src/gs-update-list.c 
new/gnome-software-3.22.3/src/gs-update-list.c
--- old/gnome-software-3.22.2/src/gs-update-list.c      2016-10-12 
10:07:40.000000000 +0200
+++ new/gnome-software-3.22.3/src/gs-update-list.c      2016-11-27 
16:36:29.000000000 +0100
@@ -45,8 +45,6 @@
 
 G_DEFINE_TYPE_WITH_PRIVATE (GsUpdateList, gs_update_list, GTK_TYPE_LIST_BOX)
 
-#define GET_PRIV(o)    gs_update_list_get_instance_private(o)
-
 static void
 gs_update_list_button_clicked_cb (GsAppRow *app_row,
                                  GsUpdateList *update_list)
@@ -59,7 +57,7 @@
 gs_update_list_add_app (GsUpdateList *update_list,
                        GsApp   *app)
 {
-       GsUpdateListPrivate *priv = GET_PRIV (update_list);
+       GsUpdateListPrivate *priv = gs_update_list_get_instance_private 
(update_list);
        GtkWidget *app_row;
 
        app_row = gs_app_row_new (app);
@@ -194,7 +192,7 @@
 gs_update_list_dispose (GObject *object)
 {
        GsUpdateList *update_list = GS_UPDATE_LIST (object);
-       GsUpdateListPrivate *priv = GET_PRIV (update_list);
+       GsUpdateListPrivate *priv = gs_update_list_get_instance_private 
(update_list);
 
        g_clear_object (&priv->sizegroup_image);
        g_clear_object (&priv->sizegroup_name);
@@ -205,7 +203,7 @@
 static void
 gs_update_list_init (GsUpdateList *update_list)
 {
-       GsUpdateListPrivate *priv = GET_PRIV (update_list);
+       GsUpdateListPrivate *priv = gs_update_list_get_instance_private 
(update_list);
        priv->sizegroup_image = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
        priv->sizegroup_name = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gnome-software-3.22.2/src/plugins/gs-appstream.c 
new/gnome-software-3.22.3/src/plugins/gs-appstream.c
--- old/gnome-software-3.22.2/src/plugins/gs-appstream.c        2016-11-07 
20:42:06.000000000 +0100
+++ new/gnome-software-3.22.3/src/plugins/gs-appstream.c        2016-12-01 
14:52:56.000000000 +0100
@@ -120,30 +120,44 @@
                gs_app_add_icon (app, icon);
 }
 
-static void
-gs_appstream_refine_add_addons (GsPlugin *plugin, GsApp *app, AsApp *item)
+static gboolean
+gs_appstream_refine_add_addons (GsPlugin *plugin,
+                               GsApp *app,
+                               AsApp *item,
+                               GError **error)
 {
        GPtrArray *addons;
        guint i;
+       g_autoptr(AsProfileTask) ptask = NULL;
+
+       /* we only care about addons to desktop apps */
+       if (gs_app_get_kind (app) != AS_APP_KIND_DESKTOP)
+               return TRUE;
+
+       /* search categories for the search term */
+       ptask = as_profile_start (gs_plugin_get_profile (plugin),
+                                 "appstream::refine-addons{%s}",
+                                 gs_app_get_unique_id (app));
+       g_assert (ptask != NULL);
 
        addons = as_app_get_addons (item);
        if (addons == NULL)
-               return;
+               return TRUE;
 
        for (i = 0; i < addons->len; i++) {
                AsApp *as_addon = g_ptr_array_index (addons, i);
-               g_autoptr(GError) error = NULL;
                g_autoptr(GsApp) addon = NULL;
 
-               addon = gs_app_new (as_app_get_id (as_addon));
+               addon = gs_appstream_create_app (plugin, as_addon, error);
+               if (addon == NULL)
+                       return FALSE;
 
                /* add all the data we can */
-               if (!gs_appstream_refine_app (plugin, addon, as_addon, &error)) 
{
-                       g_warning ("failed to refine addon: %s", 
error->message);
-                       continue;
-               }
+               if (!gs_appstream_refine_app (plugin, addon, as_addon, error))
+                       return FALSE;
                gs_app_add_addon (app, addon);
        }
+       return TRUE;
 }
 
 static void
@@ -506,6 +520,13 @@
        GPtrArray *kudos;
        const gchar *tmp;
        guint i;
+       g_autoptr(AsProfileTask) ptask = NULL;
+
+       /* search categories for the search term */
+       ptask = as_profile_start (gs_plugin_get_profile (plugin),
+                                 "appstream::refine-app{%s}",
+                                 gs_app_get_unique_id (app));
+       g_assert (ptask != NULL);
 
        /* set the kind to be more precise */
        if (gs_app_get_kind (app) == AS_APP_KIND_UNKNOWN ||
@@ -657,7 +678,8 @@
                gs_app_set_sources (app, pkgnames);
 
        /* set addons */
-       gs_appstream_refine_add_addons (plugin, app, item);
+       if (!gs_appstream_refine_add_addons (plugin, app, item, error))
+               return FALSE;
 
        /* set screenshots */
        gs_appstream_refine_add_screenshots (app, item);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gnome-software-3.22.2/src/plugins/gs-flatpak.c 
new/gnome-software-3.22.3/src/plugins/gs-flatpak.c
--- old/gnome-software-3.22.2/src/plugins/gs-flatpak.c  2016-11-07 
20:42:06.000000000 +0100
+++ new/gnome-software-3.22.3/src/plugins/gs-flatpak.c  2016-12-01 
14:52:56.000000000 +0100
@@ -113,6 +113,10 @@
        g_autoptr(GError) error = NULL;
        g_autoptr(GError) error_md = NULL;
 
+       /* don't refresh when it's us ourselves doing the change */
+       if (gs_plugin_has_flags (self->plugin, GS_PLUGIN_FLAGS_RUNNING_SELF))
+               return;
+
        /* manually drop the cache */
        if (!flatpak_installation_drop_caches (self->installation,
                                               NULL, &error)) {
@@ -1025,6 +1029,10 @@
        if (gs_app_get_origin_hostname (app) != NULL)
                return TRUE;
 
+       /* no origin */
+       if (gs_app_get_origin (app) == NULL)
+               return TRUE;
+
        /* get the remote  */
        xremote = flatpak_installation_get_remote_by_name (self->installation,
                                                           gs_app_get_origin 
(app),
@@ -1470,6 +1478,16 @@
        } else {
                g_autoptr(FlatpakRef) xref = NULL;
 
+               /* no origin */
+               if (gs_app_get_origin (app) == NULL) {
+                       g_set_error (error,
+                                    GS_PLUGIN_ERROR,
+                                    GS_PLUGIN_ERROR_NOT_SUPPORTED,
+                                    "no origin set for %s",
+                                    gs_app_get_unique_id (app));
+                       return FALSE;
+               }
+
                /* fetch from the server */
                xref = gs_flatpak_create_fake_ref (app, error);
                if (xref == NULL)
@@ -1584,6 +1602,16 @@
        } else {
                g_autoptr(FlatpakRef) xref = NULL;
                g_autoptr(GError) error_local = NULL;
+
+               /* no origin */
+               if (gs_app_get_origin (app) == NULL) {
+                       g_set_error (error,
+                                    GS_PLUGIN_ERROR,
+                                    GS_PLUGIN_ERROR_NOT_SUPPORTED,
+                                    "no origin set for %s",
+                                    gs_app_get_unique_id (app));
+                       return FALSE;
+               }
                xref = gs_flatpak_create_fake_ref (app, error);
                if (xref == NULL)
                        return FALSE;
@@ -1952,6 +1980,15 @@
                                                            app,
                                                            cancellable, error);
        } else {
+               /* no origin */
+               if (gs_app_get_origin (app) == NULL) {
+                       g_set_error (error,
+                                    GS_PLUGIN_ERROR,
+                                    GS_PLUGIN_ERROR_NOT_SUPPORTED,
+                                    "no origin set for %s",
+                                    gs_app_get_unique_id (app));
+                       return FALSE;
+               }
                g_debug ("installing %s", gs_app_get_id (app));
                xref = flatpak_installation_install (self->installation,
                                                     gs_app_get_origin (app),
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gnome-software-3.22.2/src/plugins/gs-plugin-appstream.c 
new/gnome-software-3.22.3/src/plugins/gs-plugin-appstream.c
--- old/gnome-software-3.22.2/src/plugins/gs-plugin-appstream.c 2016-11-07 
20:42:06.000000000 +0100
+++ new/gnome-software-3.22.3/src/plugins/gs-plugin-appstream.c 2016-12-01 
14:52:56.000000000 +0100
@@ -345,6 +345,13 @@
        GsPluginData *priv = gs_plugin_get_data (plugin);
        const gchar *unique_id;
        AsApp *item;
+       g_autoptr(AsProfileTask) ptask = NULL;
+
+       /* search categories for the search term */
+       ptask = as_profile_start (gs_plugin_get_profile (plugin),
+                                 "appstream::refine-from-id{%s}",
+                                 gs_app_get_unique_id (app));
+       g_assert (ptask != NULL);
 
        /* unfound */
        *found = FALSE;
@@ -391,6 +398,12 @@
        GPtrArray *sources;
        const gchar *pkgname;
        guint i;
+       g_autoptr(AsProfileTask) ptask = NULL;
+
+       /* search categories for the search term */
+       ptask = as_profile_start_literal (gs_plugin_get_profile (plugin),
+                                         "appstream::refine-from-pkgname");
+       g_assert (ptask != NULL);
 
        /* find anything that matches the ID */
        sources = gs_app_get_sources (app);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gnome-software-3.22.2/src/plugins/gs-plugin-fedora-distro-upgrades.c 
new/gnome-software-3.22.3/src/plugins/gs-plugin-fedora-distro-upgrades.c
--- old/gnome-software-3.22.2/src/plugins/gs-plugin-fedora-distro-upgrades.c    
2016-11-07 20:42:06.000000000 +0100
+++ new/gnome-software-3.22.3/src/plugins/gs-plugin-fedora-distro-upgrades.c    
2016-12-01 14:52:56.000000000 +0100
@@ -299,6 +299,19 @@
        return g_strdup_printf ("#151E65");
 }
 
+static gint
+sort_distros_cb (gconstpointer a, gconstpointer b)
+{
+       DistroInfo *distro_a = *((DistroInfo **) a);
+       DistroInfo *distro_b = *((DistroInfo **) b);
+
+       if (distro_a->version > distro_b->version)
+               return 1;
+       if (distro_a->version < distro_b->version)
+               return -1;
+       return 0;
+}
+
 gboolean
 gs_plugin_add_distro_upgrades (GsPlugin *plugin,
                               GsAppList *list,
@@ -328,6 +341,7 @@
        distros = parse_pkgdb_collections_data (data, (gssize) len, error);
        if (distros == NULL)
                return FALSE;
+       g_ptr_array_sort (distros, sort_distros_cb);
        for (i = 0; i < distros->len; i++) {
                DistroInfo *distro_info = g_ptr_array_index (distros, i);
                g_autofree gchar *app_id = NULL;
@@ -343,13 +357,14 @@
                if (g_strcmp0 (distro_info->name, priv->os_name) != 0)
                        continue;
 
-               /* only interested in newer versions */
-               if (distro_info->version <= priv->os_version)
+               /* only interested in newer versions, but not more than N+2 */
+               if (distro_info->version <= priv->os_version ||
+                   distro_info->version > priv->os_version + 2)
                        continue;
 
                /* only interested in non-devel distros */
                if (!g_settings_get_boolean (settings, 
"show-upgrade-prerelease")) {
-                       if (distro_info->status != DISTRO_STATUS_ACTIVE)
+                       if (distro_info->status == DISTRO_STATUS_DEVEL)
                                continue;
                }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gnome-software-3.22.2/src/plugins/gs-plugin-flatpak-system.c 
new/gnome-software-3.22.3/src/plugins/gs-plugin-flatpak-system.c
--- old/gnome-software-3.22.2/src/plugins/gs-plugin-flatpak-system.c    
2016-11-07 20:42:06.000000000 +0100
+++ new/gnome-software-3.22.3/src/plugins/gs-plugin-flatpak-system.c    
2016-12-01 14:52:56.000000000 +0100
@@ -36,15 +36,15 @@
 
 struct GsPluginData {
        GsFlatpak               *flatpak;
-       GSettings               *settings;
 };
 
 void
 gs_plugin_initialize (GsPlugin *plugin)
 {
        GsPluginData *priv = gs_plugin_alloc_data (plugin, 
sizeof(GsPluginData));
+       g_autoptr(GSettings) settings = g_settings_new ("org.gnome.software");
+
        priv->flatpak = gs_flatpak_new (plugin, AS_APP_SCOPE_SYSTEM);
-       priv->settings = g_settings_new ("org.gnome.software");
 
        /* set plugin flags */
        gs_plugin_add_flags (plugin, GS_PLUGIN_FLAGS_GLOBAL_CACHE);
@@ -54,6 +54,10 @@
 
        /* prioritize over packages */
        gs_plugin_add_rule (plugin, GS_PLUGIN_RULE_BETTER_THAN, "packagekit");
+
+       /* prefer system-wide handling of local files */
+       if (g_settings_get_boolean (settings, "install-bundles-system-wide"))
+               gs_plugin_add_rule (plugin, GS_PLUGIN_RULE_RUN_BEFORE, 
"flatpak-user");
 }
 
 void
@@ -61,7 +65,6 @@
 {
        GsPluginData *priv = gs_plugin_get_data (plugin);
        g_clear_object (&priv->flatpak);
-       g_clear_object (&priv->settings);
 }
 
 void
@@ -214,10 +217,9 @@
 {
        GsPluginData *priv = gs_plugin_get_data (plugin);
 
-       /* only handle when installing bundles system-wide */
-       if (!g_settings_get_boolean (priv->settings,
-                                    "install-bundles-system-wide")) {
-               g_debug ("not handling bundle as per-user specified");
+       /* only handle when nothing yet has added this */
+       if (gs_app_list_length (list) > 0) {
+               g_debug ("not handling bundle as already added");
                return TRUE;
        }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gnome-software-3.22.2/src/plugins/gs-plugin-flatpak-user.c 
new/gnome-software-3.22.3/src/plugins/gs-plugin-flatpak-user.c
--- old/gnome-software-3.22.2/src/plugins/gs-plugin-flatpak-user.c      
2016-11-07 20:42:06.000000000 +0100
+++ new/gnome-software-3.22.3/src/plugins/gs-plugin-flatpak-user.c      
2016-12-01 14:52:56.000000000 +0100
@@ -36,15 +36,15 @@
 
 struct GsPluginData {
        GsFlatpak               *flatpak;
-       GSettings               *settings;
 };
 
 void
 gs_plugin_initialize (GsPlugin *plugin)
 {
        GsPluginData *priv = gs_plugin_alloc_data (plugin, 
sizeof(GsPluginData));
+       g_autoptr(GSettings) settings = g_settings_new ("org.gnome.software");
+
        priv->flatpak = gs_flatpak_new (plugin, AS_APP_SCOPE_USER);
-       priv->settings = g_settings_new ("org.gnome.software");
 
        /* set plugin flags */
        gs_plugin_add_flags (plugin, GS_PLUGIN_FLAGS_GLOBAL_CACHE);
@@ -54,14 +54,18 @@
 
        /* prioritize over packages */
        gs_plugin_add_rule (plugin, GS_PLUGIN_RULE_BETTER_THAN, "packagekit");
+
+       /* prefer user-specific handling of local files */
+       if (!g_settings_get_boolean (settings, "install-bundles-system-wide"))
+               gs_plugin_add_rule (plugin, GS_PLUGIN_RULE_RUN_BEFORE, 
"flatpak-system");
 }
 
+
 void
 gs_plugin_destroy (GsPlugin *plugin)
 {
        GsPluginData *priv = gs_plugin_get_data (plugin);
        g_clear_object (&priv->flatpak);
-       g_clear_object (&priv->settings);
 }
 
 void
@@ -197,11 +201,9 @@
 {
        GsPluginData *priv = gs_plugin_get_data (plugin);
 
-       /* only handle when installing bundles user-wide */
-       if (g_getenv ("GS_SELF_TEST_FLATPACK_DATADIR") == NULL &&
-           g_settings_get_boolean (priv->settings,
-                                   "install-bundles-system-wide")) {
-               g_debug ("not handling bundle as per-system specified");
+       /* only handle when nothing yet has added this */
+       if (gs_app_list_length (list) > 0) {
+               g_debug ("not handling bundle as already added");
                return TRUE;
        }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gnome-software-3.22.2/src/plugins/gs-plugin-fwupd.c 
new/gnome-software-3.22.3/src/plugins/gs-plugin-fwupd.c
--- old/gnome-software-3.22.2/src/plugins/gs-plugin-fwupd.c     2016-11-07 
20:42:06.000000000 +0100
+++ new/gnome-software-3.22.3/src/plugins/gs-plugin-fwupd.c     2016-12-01 
14:52:56.000000000 +0100
@@ -495,6 +495,10 @@
        gs_app_set_local_file (app, file);
        gs_app_list_add (list, app);
 
+       /* schedule for download */
+       if (!g_file_test (filename_cache, G_FILE_TEST_EXISTS))
+               gs_plugin_fwupd_add_required_location (plugin, update_uri);
+
        return TRUE;
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gnome-software-3.22.2/src/plugins/gs-plugin-packagekit-refine.c 
new/gnome-software-3.22.3/src/plugins/gs-plugin-packagekit-refine.c
--- old/gnome-software-3.22.2/src/plugins/gs-plugin-packagekit-refine.c 
2016-11-07 14:35:25.000000000 +0100
+++ new/gnome-software-3.22.3/src/plugins/gs-plugin-packagekit-refine.c 
2016-12-01 13:35:47.000000000 +0100
@@ -485,7 +485,7 @@
        }
 
        /* the size is the size of all sources */
-       if (gs_app_get_state (app) == AS_APP_STATE_INSTALLED) {
+       if (gs_app_is_installed (app)) {
                gs_app_set_size_download (app, GS_APP_SIZE_UNKNOWABLE);
                if (size > 0 && gs_app_get_size_installed (app) == 0)
                        gs_app_set_size_installed (app, size);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gnome-software-3.22.2/src/plugins/gs-plugin-shell-extensions.c 
new/gnome-software-3.22.3/src/plugins/gs-plugin-shell-extensions.c
--- old/gnome-software-3.22.2/src/plugins/gs-plugin-shell-extensions.c  
2016-11-07 20:42:06.000000000 +0100
+++ new/gnome-software-3.22.3/src/plugins/gs-plugin-shell-extensions.c  
2016-12-01 14:52:56.000000000 +0100
@@ -31,7 +31,6 @@
 /*
  * Things we want from the API:
  *
- *  - Screenshots
  *  - Size on disk/download
  *  - Existing review data for each extension?
  *  - A local icon for an installed shell extension
@@ -432,7 +431,6 @@
        AsApp *app;
        JsonObject *json_ver_map;
        const gchar *tmp;
-       gint64 pk;
 
        app = as_app_new ();
        as_app_set_kind (app, AS_APP_KIND_SHELL_EXTENSION);
@@ -446,6 +444,20 @@
                        return NULL;
                as_app_set_description (app, NULL, desc);
        }
+       tmp = json_object_get_string_member (json_app, "screenshot");
+       if (tmp != NULL) {
+               g_autoptr(AsScreenshot) ss = NULL;
+               g_autoptr(AsImage) im = NULL;
+               g_autofree gchar *uri = NULL;
+               uri = g_build_path ("/", SHELL_EXTENSIONS_API_URI, tmp, NULL);
+               im = as_image_new ();
+               as_image_set_kind (im, AS_IMAGE_KIND_SOURCE);
+               as_image_set_url (im, uri);
+               ss = as_screenshot_new ();
+               as_screenshot_set_kind (ss, AS_SCREENSHOT_KIND_DEFAULT);
+               as_screenshot_add_image (ss, im);
+               as_app_add_screenshot (app, ss);
+       }
        tmp = json_object_get_string_member (json_app, "name");
        if (tmp != NULL)
                as_app_set_name (app, NULL, tmp);
@@ -483,25 +495,6 @@
                        return NULL;
        }
 
-       /* add a screenshot, which curiously isn't in the json */
-       pk = json_object_get_int_member (json_app, "pk");
-       if (1) {
-               g_autoptr(AsScreenshot) ss = NULL;
-               g_autoptr(AsImage) im = NULL;
-               g_autofree gchar *uri = NULL;
-               uri = g_strdup_printf ("%s/static/extension-data/"
-                                      "screenshots/"
-                                      "screenshot_%" G_GINT64_FORMAT ".png",
-                                      SHELL_EXTENSIONS_API_URI, pk);
-               im = as_image_new ();
-               as_image_set_kind (im, AS_IMAGE_KIND_SOURCE);
-               as_image_set_url (im, uri);
-               ss = as_screenshot_new ();
-               as_screenshot_set_kind (ss, AS_SCREENSHOT_KIND_DEFAULT);
-               as_screenshot_add_image (ss, im);
-               as_app_add_screenshot (app, ss);
-       }
-
        /* required to match categories in gnome-software */
        as_app_add_category (app, "Addons");
        as_app_add_category (app, "ShellExtensions");


Reply via email to