[gnome-software] Show core packages as installed, but don't allow them to be removed



commit 91c11bc61acef41d8582948cf8f477f3fb08f693
Author: Richard Hughes <richard hughsie com>
Date:   Mon Mar 4 17:25:36 2013 +0000

    Show core packages as installed, but don't allow them to be removed

 src/core-apps.txt   |    1 +
 src/gs-app-widget.c |   36 ++++++++++++++++++++------------
 src/gs-app-widget.h |    1 +
 src/gs-main.c       |   56 ++++++++++++++++++++++++--------------------------
 4 files changed, 51 insertions(+), 43 deletions(-)
---
diff --git a/src/core-apps.txt b/src/core-apps.txt
index ef3e7f4..7ba29af 100644
--- a/src/core-apps.txt
+++ b/src/core-apps.txt
@@ -2,6 +2,7 @@ baobab
 eog
 epiphany
 evince
+fedora-empathy
 gcalctool
 gedit
 gnome-bluetooth
diff --git a/src/gs-app-widget.c b/src/gs-app-widget.c
index 82e259a..165cbd4 100644
--- a/src/gs-app-widget.c
+++ b/src/gs-app-widget.c
@@ -1,6 +1,6 @@
 /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
  *
- * Copyright (C) 2012 Richard Hughes <richard hughsie com>
+ * Copyright (C) 2012-2013 Richard Hughes <richard hughsie com>
  *
  * Licensed under the GNU General Public License Version 2
  *
@@ -87,26 +87,34 @@ gs_app_widget_refresh (GsAppWidget *app_widget)
        gtk_widget_set_visible (priv->widget_more,
                                !priv->expanded && app_widget->priv->description_more != NULL);
 
-       if (app_widget->priv->kind == GS_APP_WIDGET_KIND_INSTALL) {
+       /* show / hide widgets depending on kind */
+       switch (app_widget->priv->kind) {
+       case GS_APP_WIDGET_KIND_INSTALL:
+               gtk_widget_set_visible (priv->widget_spinner, FALSE);
+               gtk_widget_set_visible (priv->widget_button, TRUE);
                gtk_button_set_label (GTK_BUTTON (priv->widget_button),
                                      _("Install"));
-       } else if (app_widget->priv->kind == GS_APP_WIDGET_KIND_REMOVE) {
+               break;
+       case GS_APP_WIDGET_KIND_REMOVE:
+               gtk_widget_set_visible (priv->widget_spinner, FALSE);
+               gtk_widget_set_visible (priv->widget_button, TRUE);
                gtk_button_set_label (GTK_BUTTON (priv->widget_button),
                                      _("Remove"));
-       } else if (app_widget->priv->kind == GS_APP_WIDGET_KIND_UPDATE) {
+               break;
+       case GS_APP_WIDGET_KIND_UPDATE:
+               gtk_widget_set_visible (priv->widget_spinner, FALSE);
+               gtk_widget_set_visible (priv->widget_button, TRUE);
                gtk_button_set_label (GTK_BUTTON (priv->widget_button),
                                      _("Update"));
-       }
-
-       /* show / hide widgets */
-       if (app_widget->priv->kind == GS_APP_WIDGET_KIND_BUSY) {
-               gtk_widget_set_visible (priv->widget_button, FALSE);
-               gtk_widget_set_visible (priv->widget_spinner, TRUE);
+               break;
+       case GS_APP_WIDGET_KIND_BUSY:
                gtk_spinner_start (GTK_SPINNER (priv->widget_spinner));
-       } else {
-               gtk_widget_set_visible (priv->widget_button, TRUE);
-               gtk_widget_set_visible (priv->widget_spinner, FALSE);
-               gtk_spinner_stop (GTK_SPINNER (priv->widget_spinner));
+               gtk_widget_set_visible (priv->widget_spinner, TRUE);
+               gtk_widget_set_visible (priv->widget_button, FALSE);
+               break;
+       default:
+               gtk_widget_set_visible (priv->widget_button, FALSE);
+               break;
        }
 }
 
diff --git a/src/gs-app-widget.h b/src/gs-app-widget.h
index 9207c23..d2d4256 100644
--- a/src/gs-app-widget.h
+++ b/src/gs-app-widget.h
@@ -56,6 +56,7 @@ typedef enum {
        GS_APP_WIDGET_KIND_UPDATE,
        GS_APP_WIDGET_KIND_REMOVE,
        GS_APP_WIDGET_KIND_BUSY,
+       GS_APP_WIDGET_KIND_BLANK,
        GS_APP_WIDGET_KIND_LAST
 } GsAppWidgetKind;
 
diff --git a/src/gs-main.c b/src/gs-main.c
index 8336e1d..5b17ef8 100644
--- a/src/gs-main.c
+++ b/src/gs-main.c
@@ -496,6 +496,30 @@ gs_main_installed_add_package (GsMainPrivate *priv, PkPackage *pkg)
 }
 
 /**
+ * gs_main_installed_is_blacklisted:
+ **/
+static gboolean
+gs_main_installed_is_blacklisted (GsMainPrivate *priv,
+                                 const gchar *desktop_file)
+{
+       gboolean ret = FALSE;
+       gchar *app_id;
+       guint i;
+
+       app_id = g_path_get_basename (desktop_file);
+       g_strdelimit (app_id, ".", '\0');
+       for (i = 0; priv->blacklisted_remove[i] != NULL; i++) {
+               if (g_strcmp0 (app_id, priv->blacklisted_remove[i]) == 0) {
+                       g_debug ("%s is blacklisted, not showing", app_id);
+                       ret = TRUE;
+                       break;
+               }
+       }
+       g_free (app_id);
+       return ret;
+}
+
+/**
  * gs_main_installed_add_desktop_file:
  **/
 static void
@@ -505,6 +529,7 @@ gs_main_installed_add_desktop_file (GsMainPrivate *priv,
 {
        EggListBox *list_box = NULL;
        gboolean ret;
+       gboolean blacklisted;
        gchar *comment = NULL;
        gchar *icon = NULL;
        gchar *name = NULL;
@@ -613,8 +638,9 @@ gs_main_installed_add_desktop_file (GsMainPrivate *priv,
                target = gs_main_get_pkg_target (pkg);
                if (target == GS_MAIN_TARGET_INSTALLED) {
                        list_box = priv->list_box_installed;
+                       blacklisted = gs_main_installed_is_blacklisted (priv, desktop_file);
                        gs_app_widget_set_kind (GS_APP_WIDGET (widget),
-                                               GS_APP_WIDGET_KIND_REMOVE);
+                                               blacklisted ? GS_APP_WIDGET_KIND_BLANK : 
GS_APP_WIDGET_KIND_REMOVE);
                } else if (target == GS_MAIN_TARGET_UPDATES) {
                        list_box = priv->list_box_updates;
                        gs_app_widget_set_kind (GS_APP_WIDGET (widget),
@@ -691,37 +717,12 @@ out:
 }
 
 /**
- * gs_main_installed_is_blacklisted:
- **/
-static gboolean
-gs_main_installed_is_blacklisted (GsMainPrivate *priv,
-                                 const gchar *desktop_file)
-{
-       gboolean ret = FALSE;
-       gchar *app_id;
-       guint i;
-
-       app_id = g_path_get_basename (desktop_file);
-       g_strdelimit (app_id, ".", '\0');
-       for (i = 0; priv->blacklisted_remove[i] != NULL; i++) {
-               if (g_strcmp0 (app_id, priv->blacklisted_remove[i]) == 0) {
-                       g_debug ("%s is blacklisted, not showing", app_id);
-                       ret = TRUE;
-                       break;
-               }
-       }
-       g_free (app_id);
-       return ret;
-}
-
-/**
  * gs_main_installed_add_package:
  **/
 static void
 gs_main_installed_add_item (GsMainPrivate *priv, PkPackage *pkg)
 {
        const gchar *desktop_file;
-       gboolean ret;
        GError *error = NULL;
        GPtrArray *files = NULL;
        GsMainTarget target;
@@ -751,9 +752,6 @@ gs_main_installed_add_item (GsMainPrivate *priv, PkPackage *pkg)
        /* add each of the desktop files */
        for (i = 0; i < files->len; i++) {
                desktop_file = g_ptr_array_index (files, i);
-               ret = gs_main_installed_is_blacklisted (priv, desktop_file);
-               if (ret)
-                       continue;
                gs_main_installed_add_desktop_file (priv,
                                                    pkg,
                                                    desktop_file);


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