Blame SOURCES/0004-stop-using-gsm_util_get_current_desktop.patch

d379a5
From 6bb533cf0a1bd0eb8b60f26ad022753608e519e8 Mon Sep 17 00:00:00 2001
5d36d8
From: Ray Strode <rstrode@redhat.com>
5d36d8
Date: Wed, 13 May 2015 10:56:09 -0400
5d36d8
Subject: [PATCH 04/19] stop using gsm_util_get_current_desktop
5d36d8
5d36d8
It no longer exists.
5d36d8
---
d379a5
 capplet/gsp-app.c | 111 +++++++++++++++++++++++++---------------------
5d36d8
 1 file changed, 60 insertions(+), 51 deletions(-)
5d36d8
5d36d8
diff --git a/capplet/gsp-app.c b/capplet/gsp-app.c
5d36d8
index c92b8dad..123ab217 100644
5d36d8
--- a/capplet/gsp-app.c
5d36d8
+++ b/capplet/gsp-app.c
5d36d8
@@ -3,60 +3,61 @@
5d36d8
  * Copyright (C) 1999 Free Software Foundation, Inc.
5d36d8
  * Copyright (C) 2007, 2009 Vincent Untz.
5d36d8
  * Copyright (C) 2008 Lucas Rocha.
5d36d8
  * Copyright (C) 2008 William Jon McCann <jmccann@redhat.com>
5d36d8
  *
5d36d8
  * This program is free software; you can redistribute it and/or modify
5d36d8
  * it under the terms of the GNU General Public License as published by
5d36d8
  * the Free Software Foundation; either version 2 of the License, or
5d36d8
  * (at your option) any later version.
5d36d8
  *
5d36d8
  * This program is distributed in the hope that it will be useful,
5d36d8
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
5d36d8
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
5d36d8
  * GNU General Public License for more details.
5d36d8
  *
5d36d8
  * You should have received a copy of the GNU General Public License
5d36d8
  * along with this program; if not, write to the Free Software
5d36d8
  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
5d36d8
  *
5d36d8
  */
5d36d8
 
5d36d8
 #ifdef HAVE_CONFIG_H
5d36d8
 #include <config.h>
5d36d8
 #endif
5d36d8
 
5d36d8
 #include <string.h>
5d36d8
 #include <sys/stat.h>
5d36d8
 
5d36d8
 #include <glib/gi18n.h>
5d36d8
 #include <glib/gstdio.h>
5d36d8
+#include <gio/gdesktopappinfo.h>
5d36d8
 
5d36d8
 #include "gsm-app-dialog.h"
5d36d8
 #include "gsm-properties-dialog.h"
5d36d8
 #include "gsm-util.h"
5d36d8
 #include "gsp-app-manager.h"
5d36d8
 #include "gsp-keyfile.h"
5d36d8
 
5d36d8
 #include "gsp-app.h"
5d36d8
 
5d36d8
 #define GSP_APP_SAVE_DELAY 2
5d36d8
 
5d36d8
 #define GSP_ASP_SAVE_MASK_HIDDEN     0x0001
5d36d8
 #define GSP_ASP_SAVE_MASK_ENABLED    0x0002
5d36d8
 #define GSP_ASP_SAVE_MASK_NAME       0x0004
5d36d8
 #define GSP_ASP_SAVE_MASK_EXEC       0x0008
5d36d8
 #define GSP_ASP_SAVE_MASK_COMMENT    0x0010
5d36d8
 #define GSP_ASP_SAVE_MASK_NO_DISPLAY 0x0020
5d36d8
 #define GSP_ASP_SAVE_MASK_ALL        0xffff
5d36d8
 
5d36d8
 struct _GspAppPrivate {
5d36d8
         char         *basename;
5d36d8
         char         *path;
5d36d8
 
5d36d8
         gboolean      hidden;
5d36d8
         gboolean      no_display;
5d36d8
         gboolean      enabled;
5d36d8
         gboolean      shown;
5d36d8
 
5d36d8
         char         *name;
5d36d8
         char         *exec;
5d36d8
@@ -281,148 +282,145 @@ _gsp_app_update_description (GspApp *app)
5d36d8
         } else {
5d36d8
                 secondary = _("No description");
5d36d8
         }
5d36d8
 
5d36d8
         g_free (app->priv->description);
5d36d8
         app->priv->description = g_markup_printf_escaped ("%s\n%s",
5d36d8
                                                           primary,
5d36d8
                                                           secondary);
5d36d8
 }
5d36d8
 
5d36d8
 /*
5d36d8
  * Saving
5d36d8
  */
5d36d8
 
5d36d8
 static void
5d36d8
 _gsp_ensure_user_autostart_dir (void)
5d36d8
 {
5d36d8
         char *dir;
5d36d8
 
5d36d8
         dir = g_build_filename (g_get_user_config_dir (), "autostart", NULL);
5d36d8
         g_mkdir_with_parents (dir, S_IRWXU);
5d36d8
 
5d36d8
         g_free (dir);
5d36d8
 }
5d36d8
 
5d36d8
 static gboolean
5d36d8
 _gsp_app_user_equal_system (GspApp  *app,
5d36d8
                             char   **system_path)
5d36d8
 {
5d36d8
         GspAppManager *manager;
5d36d8
-        const char    *system_dir;
5d36d8
-        char          *path;
5d36d8
-        char          *str;
5d36d8
-        GKeyFile      *keyfile;
5d36d8
+        gboolean       return_value = FALSE;
5d36d8
+        const char    *system_dir = NULL;
5d36d8
+        char          *path = NULL;
5d36d8
+        char          *str = NULL;
5d36d8
+        GKeyFile      *keyfile = NULL;
5d36d8
+        GDesktopAppInfo *app_info = NULL;
5d36d8
 
5d36d8
         manager = gsp_app_manager_get ();
5d36d8
         system_dir = gsp_app_manager_get_dir (manager,
5d36d8
                                               app->priv->xdg_system_position);
5d36d8
         g_object_unref (manager);
5d36d8
         if (!system_dir) {
5d36d8
-                return FALSE;
5d36d8
+                goto out;
5d36d8
         }
5d36d8
 
5d36d8
         path = g_build_filename (system_dir, app->priv->basename, NULL);
5d36d8
 
5d36d8
         keyfile = g_key_file_new ();
5d36d8
         if (!g_key_file_load_from_file (keyfile, path, G_KEY_FILE_NONE, NULL)) {
5d36d8
-                g_free (path);
5d36d8
-                g_key_file_free (keyfile);
5d36d8
-                return FALSE;
5d36d8
+                goto out;
5d36d8
         }
5d36d8
 
5d36d8
-        if (gsp_key_file_get_boolean (keyfile,
5d36d8
-                                      G_KEY_FILE_DESKTOP_KEY_HIDDEN,
5d36d8
-                                      FALSE) != app->priv->hidden ||
5d36d8
-            gsp_key_file_get_boolean (keyfile,
5d36d8
-                                      GSP_KEY_FILE_DESKTOP_KEY_AUTOSTART_ENABLED,
5d36d8
-                                      TRUE) != app->priv->enabled ||
5d36d8
-            gsp_key_file_get_shown (keyfile,
5d36d8
-                                    gsm_util_get_current_desktop ()) != app->priv->shown) {
5d36d8
-                g_free (path);
5d36d8
-                g_key_file_free (keyfile);
5d36d8
-                return FALSE;
5d36d8
+        app_info = g_desktop_app_info_new_from_keyfile (keyfile);
5d36d8
+
5d36d8
+        if (!app_info) {
5d36d8
+                goto out;
5d36d8
         }
5d36d8
 
5d36d8
-        if (gsp_key_file_get_boolean (keyfile,
5d36d8
-                                      G_KEY_FILE_DESKTOP_KEY_NO_DISPLAY,
5d36d8
-                                      FALSE) != app->priv->no_display) {
5d36d8
-                g_free (path);
5d36d8
-                g_key_file_free (keyfile);
5d36d8
-                return FALSE;
5d36d8
+        if (g_desktop_app_info_get_is_hidden (app_info)) {
5d36d8
+                goto out;
5d36d8
+        }
5d36d8
+
5d36d8
+        if (g_desktop_app_info_has_key (app_info,
5d36d8
+                                        GSP_KEY_FILE_DESKTOP_KEY_AUTOSTART_ENABLED) &&
5d36d8
+            !g_desktop_app_info_get_boolean (app_info,
5d36d8
+                                             GSP_KEY_FILE_DESKTOP_KEY_AUTOSTART_ENABLED)) {
5d36d8
+                goto out;
5d36d8
+        }
5d36d8
+
5d36d8
+        if (!g_desktop_app_info_get_show_in (app_info, NULL)) {
5d36d8
+                goto out;
5d36d8
+        }
5d36d8
+
5d36d8
+        if (g_desktop_app_info_get_nodisplay (app_info)) {
5d36d8
+                goto out;
5d36d8
         }
5d36d8
 
5d36d8
         str = gsp_key_file_get_locale_string (keyfile,
5d36d8
                                               G_KEY_FILE_DESKTOP_KEY_NAME);
5d36d8
         if (!_gsp_str_equal (str, app->priv->name)) {
5d36d8
-                g_free (str);
5d36d8
-                g_free (path);
5d36d8
-                g_key_file_free (keyfile);
5d36d8
-                return FALSE;
5d36d8
+                goto out;
5d36d8
         }
5d36d8
-        g_free (str);
5d36d8
+        g_clear_pointer (&str, g_free);
5d36d8
 
5d36d8
         str = gsp_key_file_get_locale_string (keyfile,
5d36d8
                                               G_KEY_FILE_DESKTOP_KEY_COMMENT);
5d36d8
         if (!_gsp_str_equal (str, app->priv->comment)) {
5d36d8
-                g_free (str);
5d36d8
-                g_free (path);
5d36d8
-                g_key_file_free (keyfile);
5d36d8
-                return FALSE;
5d36d8
+                goto out;
5d36d8
         }
5d36d8
-        g_free (str);
5d36d8
+        g_clear_pointer (&str, g_free);
5d36d8
 
5d36d8
         str = gsp_key_file_get_string (keyfile,
5d36d8
                                        G_KEY_FILE_DESKTOP_KEY_EXEC);
5d36d8
         if (!_gsp_str_equal (str, app->priv->exec)) {
5d36d8
-                g_free (str);
5d36d8
-                g_free (path);
5d36d8
-                g_key_file_free (keyfile);
5d36d8
-                return FALSE;
5d36d8
+                goto out;
5d36d8
         }
5d36d8
-        g_free (str);
5d36d8
+        g_clear_pointer (&str, g_free);
5d36d8
 
5d36d8
         str = gsp_key_file_get_locale_string (keyfile,
5d36d8
                                               G_KEY_FILE_DESKTOP_KEY_ICON);
5d36d8
         if (!_gsp_str_equal (str, app->priv->icon)) {
5d36d8
-                g_free (str);
5d36d8
-                g_free (path);
5d36d8
-                g_key_file_free (keyfile);
5d36d8
-                return FALSE;
5d36d8
+                goto out;
5d36d8
         }
5d36d8
-        g_free (str);
5d36d8
-
5d36d8
-        g_key_file_free (keyfile);
5d36d8
+        g_clear_pointer (&str, g_free);
5d36d8
 
5d36d8
         *system_path = path;
5d36d8
-
5d36d8
-        return TRUE;
5d36d8
+        path = NULL;
5d36d8
+        return_value = TRUE;
5d36d8
+out:
5d36d8
+        g_clear_pointer (&path, g_free);
5d36d8
+        g_clear_pointer (&str, g_free);
5d36d8
+        g_clear_object (&app_info);
5d36d8
+        g_clear_pointer (&keyfile, g_key_file_free);
5d36d8
+
5d36d8
+        return return_value;
5d36d8
 }
5d36d8
 
5d36d8
 static inline void
5d36d8
 _gsp_app_save_done_success (GspApp *app)
5d36d8
 {
5d36d8
         app->priv->save_mask = 0;
5d36d8
 
5d36d8
         if (app->priv->old_system_path) {
5d36d8
                 g_free (app->priv->old_system_path);
5d36d8
                 app->priv->old_system_path = NULL;
5d36d8
         }
5d36d8
 }
5d36d8
 
5d36d8
 static gboolean
5d36d8
 _gsp_app_save (gpointer data)
5d36d8
 {
5d36d8
         GspApp   *app;
5d36d8
         char     *use_path;
5d36d8
         GKeyFile *keyfile;
5d36d8
         GError   *error;
5d36d8
 
5d36d8
         app = GSP_APP (data);
5d36d8
 
5d36d8
         /* first check if removing the data from the user dir and using the
5d36d8
          * data from the system dir is enough -- this helps us keep clean the
5d36d8
          * user config dir by removing unneeded files */
5d36d8
         if (_gsp_app_user_equal_system (app, &use_path)) {
5d36d8
                 if (g_file_test (app->priv->path, G_FILE_TEST_EXISTS)) {
5d36d8
                         g_remove (app->priv->path);
5d36d8
                 }
5d36d8
@@ -748,153 +746,164 @@ gsp_app_delete (GspApp *app)
5d36d8
                 app->priv->hidden = TRUE;
5d36d8
                 app->priv->save_mask |= GSP_ASP_SAVE_MASK_HIDDEN;
5d36d8
 
5d36d8
                 _gsp_app_queue_save (app);
5d36d8
                 _gsp_app_emit_changed (app);
5d36d8
         }
5d36d8
 }
5d36d8
 
5d36d8
 /*
5d36d8
  * New autostart app
5d36d8
  */
5d36d8
 
5d36d8
 void
5d36d8
 gsp_app_reload_at (GspApp       *app,
5d36d8
                    const char   *path,
5d36d8
                    unsigned int  xdg_position)
5d36d8
 {
5d36d8
         g_return_if_fail (GSP_IS_APP (app));
5d36d8
 
5d36d8
         app->priv->xdg_position = G_MAXUINT;
5d36d8
         gsp_app_new (path, xdg_position);
5d36d8
 }
5d36d8
 
5d36d8
 GspApp *
5d36d8
 gsp_app_new (const char   *path,
5d36d8
              unsigned int  xdg_position)
5d36d8
 {
5d36d8
         GspAppManager *manager;
5d36d8
         GspApp        *app;
5d36d8
         GKeyFile      *keyfile;
5d36d8
+        GDesktopAppInfo *app_info;
5d36d8
         char          *basename;
5d36d8
         gboolean       new;
5d36d8
 
5d36d8
         basename = g_path_get_basename (path);
5d36d8
 
5d36d8
         manager = gsp_app_manager_get ();
5d36d8
         app = gsp_app_manager_find_app_with_basename (manager, basename);
5d36d8
         g_object_unref (manager);
5d36d8
 
5d36d8
         new = (app == NULL);
5d36d8
 
5d36d8
         if (!new) {
5d36d8
                 if (app->priv->xdg_position == xdg_position) {
5d36d8
                         if (app->priv->skip_next_monitor_event) {
5d36d8
                                 app->priv->skip_next_monitor_event = FALSE;
5d36d8
                                 return NULL;
5d36d8
                         }
5d36d8
                         /* else: the file got changed but not by us, we'll
5d36d8
                          * update our data from disk */
5d36d8
                 }
5d36d8
 
5d36d8
                 if (app->priv->xdg_position < xdg_position ||
5d36d8
                     app->priv->save_timeout != 0) {
5d36d8
                         /* we don't really care about this file, since we
5d36d8
                          * already have something with a higher priority, or
5d36d8
                          * we're going to write something in the user config
5d36d8
                          * anyway.
5d36d8
                          * Note: xdg_position >= 1 so it's a system dir */
5d36d8
                         app->priv->xdg_system_position = MIN (xdg_position,
5d36d8
                                                               app->priv->xdg_system_position);
5d36d8
                         return NULL;
5d36d8
                 }
5d36d8
         }
5d36d8
 
5d36d8
         keyfile = g_key_file_new ();
5d36d8
         if (!g_key_file_load_from_file (keyfile, path, G_KEY_FILE_NONE, NULL)) {
5d36d8
                 g_key_file_free (keyfile);
5d36d8
                 g_free (basename);
5d36d8
                 return NULL;
5d36d8
         }
5d36d8
 
5d36d8
+        app_info = g_desktop_app_info_new_from_keyfile (keyfile);
5d36d8
+
5d36d8
+        if (!app_info) {
5d36d8
+                g_object_unref (app_info);
5d36d8
+                g_key_file_free (keyfile);
5d36d8
+                g_free (basename);
5d36d8
+                return NULL;
5d36d8
+        }
5d36d8
+
5d36d8
         if (new) {
5d36d8
                 app = g_object_new (GSP_TYPE_APP, NULL);
5d36d8
                 app->priv->basename = basename;
5d36d8
         } else {
5d36d8
                 g_free (basename);
5d36d8
                 _gsp_app_free_reusable_data (app);
5d36d8
         }
5d36d8
 
5d36d8
+
5d36d8
         app->priv->path = g_strdup (path);
5d36d8
 
5d36d8
         app->priv->hidden = gsp_key_file_get_boolean (keyfile,
5d36d8
                                                       G_KEY_FILE_DESKTOP_KEY_HIDDEN,
5d36d8
                                                       FALSE);
5d36d8
         app->priv->no_display = gsp_key_file_get_boolean (keyfile,
5d36d8
                                                           G_KEY_FILE_DESKTOP_KEY_NO_DISPLAY,
5d36d8
                                                           FALSE);
5d36d8
         app->priv->enabled = gsp_key_file_get_boolean (keyfile,
5d36d8
                                                        GSP_KEY_FILE_DESKTOP_KEY_AUTOSTART_ENABLED,
5d36d8
                                                        TRUE);
5d36d8
-        app->priv->shown = gsp_key_file_get_shown (keyfile,
5d36d8
-                                                   gsm_util_get_current_desktop ());
5d36d8
+        app->priv->shown = g_desktop_app_info_get_show_in (app_info, NULL);
5d36d8
 
5d36d8
         app->priv->name = gsp_key_file_get_locale_string (keyfile,
5d36d8
                                                           G_KEY_FILE_DESKTOP_KEY_NAME);
5d36d8
         app->priv->exec = gsp_key_file_get_string (keyfile,
5d36d8
                                                    G_KEY_FILE_DESKTOP_KEY_EXEC);
5d36d8
         app->priv->comment = gsp_key_file_get_locale_string (keyfile,
5d36d8
                                                              G_KEY_FILE_DESKTOP_KEY_COMMENT);
5d36d8
 
5d36d8
         if (gsm_util_text_is_blank (app->priv->name)) {
5d36d8
                 g_free (app->priv->name);
5d36d8
                 app->priv->name = g_strdup (app->priv->exec);
5d36d8
         }
5d36d8
 
5d36d8
         app->priv->icon = gsp_key_file_get_locale_string (keyfile,
5d36d8
                                                           G_KEY_FILE_DESKTOP_KEY_ICON);
5d36d8
 
5d36d8
         if (app->priv->icon) {
5d36d8
                 /* look at icon and see if it's a themed icon or not */
5d36d8
                 if (g_path_is_absolute (app->priv->icon)) {
5d36d8
                         GFile *iconfile;
5d36d8
 
5d36d8
                         iconfile = g_file_new_for_path (app->priv->icon);
5d36d8
                         app->priv->gicon = g_file_icon_new (iconfile);
5d36d8
                         g_object_unref (iconfile);
5d36d8
                 } else {
5d36d8
                         app->priv->gicon = g_themed_icon_new (app->priv->icon);
5d36d8
                 }
5d36d8
         } else {
5d36d8
                 app->priv->gicon = NULL;
5d36d8
         }
5d36d8
 
5d36d8
+        g_object_unref (app_info);
5d36d8
         g_key_file_free (keyfile);
5d36d8
 
5d36d8
         _gsp_app_update_description (app);
5d36d8
 
5d36d8
         if (xdg_position > 0) {
5d36d8
                 g_assert (xdg_position <= app->priv->xdg_system_position);
5d36d8
                 app->priv->xdg_system_position = xdg_position;
5d36d8
         }
5d36d8
         /* else we keep the old value (which is G_MAXUINT if it wasn't set) */
5d36d8
         app->priv->xdg_position = xdg_position;
5d36d8
 
5d36d8
         g_assert (!new || app->priv->save_timeout == 0);
5d36d8
         app->priv->save_timeout = 0;
5d36d8
         app->priv->old_system_path = NULL;
5d36d8
         app->priv->skip_next_monitor_event = FALSE;
5d36d8
 
5d36d8
         if (!new) {
5d36d8
                 _gsp_app_emit_changed (app);
5d36d8
         }
5d36d8
 
5d36d8
         return app;
5d36d8
 }
5d36d8
 
5d36d8
 static char *
5d36d8
 _gsp_find_free_basename (const char *suggested_basename)
5d36d8
 {
5d36d8
         GspAppManager *manager;
5d36d8
         char          *base_path;
5d36d8
         char          *filename;
5d36d8
         char          *basename;
5d36d8
-- 
d379a5
2.17.0
5d36d8