gnome-session r5178 - in trunk: . capplet



Author: lucasr
Date: Thu Jan  8 01:29:01 2009
New Revision: 5178
URL: http://svn.gnome.org/viewvc/gnome-session?rev=5178&view=rev

Log:
2009-01-08  Lucas Rocha  <lucasr gnome org>

	Bug 555369 â gnome-session-properties work improperly when key
	X-GNOME-Autostart-enabled=false in .desktop

	* capplet/gsm-properties-dialog.c (toggle_app, enable_app,
	disable_app): move app enabling/disabling logic into toggle_app and
	fix handling of X-GNOME-Autostart-enabled in .desktop files.
	Patch by Halton Huo.

Modified:
   trunk/ChangeLog
   trunk/capplet/gsm-properties-dialog.c

Modified: trunk/capplet/gsm-properties-dialog.c
==============================================================================
--- trunk/capplet/gsm-properties-dialog.c	(original)
+++ trunk/capplet/gsm-properties-dialog.c	Thu Jan  8 01:29:01 2009
@@ -582,8 +582,9 @@
 }
 
 static gboolean
-enable_app (GsmPropertiesDialog *dialog,
-            GtkTreeIter         *iter)
+toggle_app (GsmPropertiesDialog *dialog,
+            GtkTreeIter         *iter,
+            gboolean             enabled)
 {
         EggDesktopFile *desktop_file;
         GFile          *source;
@@ -592,20 +593,14 @@
         char           *path;
         char           *name;
         char           *comment;
-        gboolean        enabled;
 
         gtk_tree_model_get (GTK_TREE_MODEL (dialog->priv->list_store),
                             iter,
-                            STORE_COL_ENABLED, &enabled,
                             STORE_COL_NAME, &name,
                             STORE_COL_COMMENT, &comment,
                             STORE_COL_DESKTOP_FILE, &desktop_file,
                             -1);
 
-        if (enabled) {
-                return TRUE;
-        }
-
         source = g_file_new_for_uri (egg_desktop_file_get_source (desktop_file));
 
         path = g_file_get_path (source);
@@ -616,6 +611,7 @@
                 EggDesktopFile *system_desktop_file;
                 char           *original_name;
                 char           *original_comment;
+                gboolean        original_enabled;
 
                 system_desktop_file = egg_desktop_file_new (system_path, NULL);
 
@@ -625,8 +621,17 @@
                 original_comment = egg_desktop_file_get_locale_string (system_desktop_file,
                                                                        "Comment", NULL, NULL);
 
+                if (egg_desktop_file_has_key (system_desktop_file,
+                                              "X-GNOME-Autostart-enabled", NULL)) {
+                        original_enabled = egg_desktop_file_get_boolean (system_desktop_file,
+                                                                         "X-GNOME-Autostart-enabled", NULL);
+                } else {
+                        original_enabled = TRUE;
+                }
+
                 if (REALLY_IDENTICAL_STRING (name, original_name) &&
-                    REALLY_IDENTICAL_STRING (comment, original_comment)) {
+                    REALLY_IDENTICAL_STRING (comment, original_comment) &&
+                    (enabled == original_enabled)) {
                         char *user_file =
                                 g_build_filename (g_get_user_config_dir (),
                                                   "autostart", basename, NULL);
@@ -639,14 +644,14 @@
 
                         update_desktop_file (dialog->priv->list_store, iter, system_desktop_file);
                 } else {
-                        write_desktop_file (desktop_file, dialog->priv->list_store, iter, TRUE);
+                        write_desktop_file (desktop_file, dialog->priv->list_store, iter, enabled);
                         egg_desktop_file_free (system_desktop_file);
                 }
 
                 g_free (original_name);
                 g_free (original_comment);
         } else {
-                write_desktop_file (desktop_file, dialog->priv->list_store, iter, TRUE);
+                write_desktop_file (desktop_file, dialog->priv->list_store, iter, enabled);
         }
 
         g_free (name);
@@ -656,35 +661,6 @@
         return TRUE;
 }
 
-static gboolean
-disable_app (GsmPropertiesDialog *dialog,
-             GtkTreeIter         *iter)
-{
-        EggDesktopFile *desktop_file;
-        const char     *source;
-        char           *basename;
-        gboolean        enabled;
-
-        gtk_tree_model_get (GTK_TREE_MODEL (dialog->priv->list_store), iter,
-                            STORE_COL_ENABLED, &enabled,
-                            STORE_COL_DESKTOP_FILE, &desktop_file,
-                            -1);
-
-        if (!enabled) {
-                return TRUE;
-        }
-
-        source = egg_desktop_file_get_source (desktop_file);
-
-        basename = g_path_get_basename (source);
-
-        write_desktop_file (desktop_file, dialog->priv->list_store, iter, FALSE);
-
-        g_free (basename);
-
-        return TRUE;
-}
-
 static void
 on_startup_enabled_toggled (GtkCellRendererToggle *cell_renderer,
                             char                  *path,
@@ -708,20 +684,11 @@
         active = !active;
         gtk_cell_renderer_toggle_set_active (cell_renderer, active);
 
-        if (active) {
-                if (enable_app (dialog, &iter)) {
-                        gtk_list_store_set (dialog->priv->list_store,
-                                            &iter,
-                                            STORE_COL_ENABLED, TRUE,
-                                            -1);
-                }
-        } else {
-                if (disable_app (dialog, &iter)) {
-                        gtk_list_store_set (dialog->priv->list_store,
-                                            &iter,
-                                            STORE_COL_ENABLED, FALSE,
-                                            -1);
-                }
+        if (toggle_app (dialog, &iter, active)) {
+                gtk_list_store_set (dialog->priv->list_store,
+                                    &iter,
+                                    STORE_COL_ENABLED, active,
+                                    -1);
         }
 }
 



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