]> git.0d.be Git - empathy.git/commitdiff
Store the theme name in the 'theme' gsettings key
authorGuillaume Desmottes <guillaume.desmottes@collabora.co.uk>
Mon, 2 Jul 2012 10:58:56 +0000 (12:58 +0200)
committerGuillaume Desmottes <guillaume.desmottes@collabora.co.uk>
Mon, 2 Jul 2012 11:00:56 +0000 (13:00 +0200)
The 'adium-path' key is now deprecated as we lookup the theme path from its
name.

data/org.gnome.Empathy.gschema.xml
libempathy-gtk/empathy-theme-manager.c
src/empathy-preferences.c
src/empathy-sanity-cleaning.c

index 9b653ccc603d2a7317436b633cfb9be6d9fc24f5..393e93322ee05c39bc2c2f805afd3c04fdeacfe4 100644 (file)
@@ -183,7 +183,7 @@ present them to the user immediately.</description>
     <key name="adium-path" type="s">
       <default>''</default>
       <summary>Path of the Adium theme to use</summary>
-      <description>Path of the Adium theme to use if the theme used for chat is Adium.</description>
+      <description>Path of the Adium theme to use if the theme used for chat is Adium. Deprecated.</description>
     </key>
     <key name="enable-webkit-developer-tools" type="b">
       <default>false</default>
index 1f6611663afb290b010ac85e56347692fb4207c5..c18ca56becc19c39caceff33eeab97d97e6a56a8 100644 (file)
@@ -132,48 +132,41 @@ theme_manager_create_adium_view (EmpathyThemeManager *self)
 }
 
 static void
-theme_manager_notify_adium_path_cb (GSettings *gsettings_chat,
+theme_manager_notify_theme_cb (GSettings *gsettings_chat,
     const gchar *key,
     gpointer user_data)
 {
   EmpathyThemeManager *self = EMPATHY_THEME_MANAGER (user_data);
-  const gchar *current_path = NULL;
-  gchar *new_path;
+  gchar *theme, *path;
 
-  new_path = g_settings_get_string (gsettings_chat, key);
+  theme = g_settings_get_string (gsettings_chat, key);
 
-  if (self->priv->adium_data != NULL)
-    current_path = empathy_adium_data_get_path (self->priv->adium_data);
-
-  /* If path did not really changed, ignore */
-  if (!tp_strdiff (current_path, new_path))
-    goto finally;
-
-  /* If path does not really contains an adium path, ignore */
-  if (empathy_adium_path_is_valid (new_path))
-    {
-      /* pass */
-    }
-  else if (empathy_theme_manager_find_theme (new_path) != NULL)
+  if (empathy_theme_manager_find_theme (theme) != NULL)
     {
-      new_path = empathy_theme_manager_find_theme (new_path);
+      path = empathy_theme_manager_find_theme (theme);
+      g_free (theme);
     }
   else
     {
-      g_warning ("Do not understand theme: %s", new_path);
-      goto finally;
+      g_warning ("Can't find theme: %s; fallback to 'Classic'",
+          theme);
+
+      g_free (theme);
+
+      path = empathy_theme_manager_find_theme ("Classic");
+      if (path == NULL)
+        g_critical ("Can't find 'Classic theme");
     }
 
   /* Load new theme data, we can stop tracking existing views since we
    * won't be able to change them live anymore */
   clear_list_of_views (&self->priv->adium_views);
   tp_clear_pointer (&self->priv->adium_data, empathy_adium_data_unref);
-  self->priv->adium_data = empathy_adium_data_new (new_path);
+  self->priv->adium_data = empathy_adium_data_new (path);
 
   theme_manager_emit_changed (self);
 
-finally:
-  g_free (new_path);
+  g_free (path);
 }
 
 static void
@@ -261,11 +254,11 @@ empathy_theme_manager_init (EmpathyThemeManager *self)
 
   /* Take the adium path/variant and track changes */
   g_signal_connect (self->priv->gsettings_chat,
-      "changed::" EMPATHY_PREFS_CHAT_ADIUM_PATH,
-      G_CALLBACK (theme_manager_notify_adium_path_cb), self);
+      "changed::" EMPATHY_PREFS_CHAT_THEME,
+      G_CALLBACK (theme_manager_notify_theme_cb), self);
 
-  theme_manager_notify_adium_path_cb (self->priv->gsettings_chat,
-      EMPATHY_PREFS_CHAT_ADIUM_PATH, self);
+  theme_manager_notify_theme_cb (self->priv->gsettings_chat,
+      EMPATHY_PREFS_CHAT_THEME, self);
 
   g_signal_connect (self->priv->gsettings_chat,
       "changed::" EMPATHY_PREFS_CHAT_THEME_VARIANT,
index c410affd196570f17b59984dea00b23f67086cfb..df5e39187bc3d45e1f1d501975e865f5670fc449 100644 (file)
@@ -115,7 +115,7 @@ enum {
 
 enum {
        COL_THEME_VISIBLE_NAME,
-       COL_THEME_ADIUM_PATH,
+       COL_THEME_ADIUM_NAME,
        COL_THEME_ADIUM_INFO,
        COL_THEME_COUNT
 };
@@ -834,24 +834,24 @@ preferences_theme_changed_cb (GtkComboBox        *combo,
 
        if (gtk_combo_box_get_active_iter (combo, &iter)) {
                GtkTreeModel *model;
-               gchar        *path;
+               gchar        *name;
                GHashTable   *info;
                gboolean variant;
 
                model = gtk_combo_box_get_model (combo);
                gtk_tree_model_get (model, &iter,
-                                   COL_THEME_ADIUM_PATH, &path,
+                                   COL_THEME_ADIUM_NAME, &name,
                                    COL_THEME_ADIUM_INFO, &info,
                                    -1);
 
                g_settings_set_string (priv->gsettings_chat,
-                                      EMPATHY_PREFS_CHAT_ADIUM_PATH,
-                                      path);
+                                      EMPATHY_PREFS_CHAT_THEME,
+                                      name);
 
                variant = preferences_theme_variants_fill (preferences, info);
                gtk_widget_set_visible (priv->hbox_chat_theme_variant, variant);
 
-               g_free (path);
+               g_free (name);
                tp_clear_pointer (&info, g_hash_table_unref);
        }
 }
@@ -864,31 +864,31 @@ preferences_theme_notify_cb (GSettings   *gsettings,
        EmpathyPreferences *preferences = user_data;
        EmpathyPreferencesPriv *priv = GET_PRIV (preferences);
        GtkComboBox        *combo;
-       gchar              *conf_path;
+       gchar              *theme;
        GtkTreeModel       *model;
        GtkTreeIter         iter;
        gboolean            found = FALSE;
        gboolean            ok;
 
-       conf_path = g_settings_get_string (gsettings, EMPATHY_PREFS_CHAT_ADIUM_PATH);
+       theme = g_settings_get_string (gsettings, key);
 
        combo = GTK_COMBO_BOX (priv->combobox_chat_theme);
        model = gtk_combo_box_get_model (combo);
        for (ok = gtk_tree_model_get_iter_first (model, &iter);
             ok && !found;
             ok = gtk_tree_model_iter_next (model, &iter)) {
-               gchar *path;
+               gchar *name;
 
                gtk_tree_model_get (model, &iter,
-                                   COL_THEME_ADIUM_PATH, &path,
+                                   COL_THEME_ADIUM_NAME, &name,
                                    -1);
 
-               if (!tp_strdiff (path, conf_path)) {
+               if (!tp_strdiff (name, theme)) {
                        found = TRUE;
                        gtk_combo_box_set_active_iter (combo, &iter);
                }
 
-               g_free (path);
+               g_free (name);
        }
 
        /* Fallback to the first one. */
@@ -898,7 +898,7 @@ preferences_theme_notify_cb (GSettings   *gsettings,
                }
        }
 
-       g_free (conf_path);
+       g_free (theme);
 }
 
 static void
@@ -928,21 +928,23 @@ preferences_themes_setup (EmpathyPreferences *preferences)
        adium_themes = empathy_theme_manager_get_adium_themes ();
        while (adium_themes != NULL) {
                GHashTable *info;
-               const gchar *name;
-               const gchar *path;
+               const gchar *visible_name;
+               gchar *name;
 
                info = adium_themes->data;
-               name = tp_asv_get_string (info, "CFBundleName");
-               path = tp_asv_get_string (info, "path");
+               visible_name = tp_asv_get_string (info, "CFBundleName");
+               name = empathy_theme_manager_dup_theme_name_from_path (
+                       tp_asv_get_string (info, "path"));
 
-               if (name != NULL && path != NULL) {
+               if (visible_name != NULL && name != NULL) {
                        gtk_list_store_insert_with_values (store, NULL, -1,
-                               COL_THEME_VISIBLE_NAME, name,
-                               COL_THEME_ADIUM_PATH, path,
+                               COL_THEME_VISIBLE_NAME, visible_name,
+                               COL_THEME_ADIUM_NAME, name,
                                COL_THEME_ADIUM_INFO, info,
                                -1);
                }
                g_hash_table_unref (info);
+               g_free (name);
                adium_themes = g_list_delete_link (adium_themes, adium_themes);
        }
 
@@ -961,11 +963,11 @@ preferences_themes_setup (EmpathyPreferences *preferences)
 
        /* Select the theme from the GSetting key and track changes */
        preferences_theme_notify_cb (priv->gsettings_chat,
-                                    EMPATHY_PREFS_CHAT_ADIUM_PATH,
+                                    EMPATHY_PREFS_CHAT_THEME,
                                     preferences);
 
        g_signal_connect (priv->gsettings_chat,
-                         "changed::" EMPATHY_PREFS_CHAT_ADIUM_PATH,
+                         "changed::" EMPATHY_PREFS_CHAT_THEME,
                          G_CALLBACK (preferences_theme_notify_cb),
                          preferences);
 }
index b14f4f527d66aef53c40883149b48270c7723308..8bc61b4cfb9093c297cf4711ce2c1e66543fc850 100644 (file)
@@ -144,8 +144,8 @@ static void
 upgrade_chat_theme_settings (void)
 {
   GSettings *gsettings_chat;
-  gchar *theme;
-  const char *adium_theme, *variant = "";
+  gchar *theme, *new_theme = NULL;
+  const char *variant = "";
 
   gsettings_chat = g_settings_new (EMPATHY_PREFS_CHAT_SCHEMA);
 
@@ -153,33 +153,56 @@ upgrade_chat_theme_settings (void)
       EMPATHY_PREFS_CHAT_THEME);
 
   if (!tp_strdiff (theme, "adium")) {
-    goto finally;
+    gchar *path, *fullname;
+
+    path = g_settings_get_string (gsettings_chat,
+        EMPATHY_PREFS_CHAT_ADIUM_PATH);
+
+    fullname = g_path_get_basename (path);
+    if (g_str_has_suffix (fullname, ".AdiumMessageStyle"))
+      {
+        gchar **tmp;
+
+        tmp = g_strsplit (fullname, ".AdiumMessageStyle", 0);
+        new_theme = g_strdup (tmp[0]);
+
+        g_strfreev (tmp);
+      }
+    else
+      {
+        /* Use the Classic theme as fallback */
+        new_theme = g_strdup ("Classic");
+      }
+
+    g_free (path);
+    g_free (fullname);
   } else if (!tp_strdiff (theme, "gnome")) {
-    adium_theme = "PlanetGNOME";
+    new_theme = g_strdup ("PlanetGNOME");
   } else if (!tp_strdiff (theme, "simple")) {
-    adium_theme = "Boxes";
+    new_theme = g_strdup ("Boxes");
     variant = "Simple";
   } else if (!tp_strdiff (theme, "clean")) {
-    adium_theme = "Boxes";
+    new_theme = g_strdup ("Boxes");
     variant = "Clean";
   } else if (!tp_strdiff (theme, "blue")) {
-    adium_theme = "Boxes";
+    new_theme = g_strdup ("Boxes");
     variant = "Blue";
   } else {
-    adium_theme = "Classic";
+    /* Assume that's an Adium theme name. The theme manager will fallback to
+     * 'Classic' if it can't find it. */
+    goto finally;
   }
 
-  DEBUG ("Migrating to '%s' variant '%s'", adium_theme, variant);
+  DEBUG ("Migrating to '%s' variant '%s'", new_theme, variant);
 
   g_settings_set_string (gsettings_chat,
-    EMPATHY_PREFS_CHAT_THEME, "adium");
-  g_settings_set_string (gsettings_chat,
-    EMPATHY_PREFS_CHAT_ADIUM_PATH, adium_theme);
+    EMPATHY_PREFS_CHAT_THEME, new_theme);
   g_settings_set_string (gsettings_chat,
     EMPATHY_PREFS_CHAT_THEME_VARIANT, variant);
 
 finally:
   g_free (theme);
+  g_free (new_theme);
   g_object_unref (gsettings_chat);
 }