[gtk+/parasite2: 9/38] parasite: Don't show hicolor as an icon theme



commit 33c6f2139c9ca980073ba7efed57bb0b9b04b05c
Author: Matthias Clasen <mclasen redhat com>
Date:   Sun May 4 09:27:17 2014 -0400

    parasite: Don't show hicolor as an icon theme
    
    It really isn't.

 modules/other/parasite/themes.c |   87 +++++++++++++++++++++++++++++++++++++++
 1 files changed, 87 insertions(+), 0 deletions(-)
---
diff --git a/modules/other/parasite/themes.c b/modules/other/parasite/themes.c
index 1910c8c..25f15fb 100644
--- a/modules/other/parasite/themes.c
+++ b/modules/other/parasite/themes.c
@@ -148,6 +148,92 @@ create_gtk (ParasiteThemes *pt)
 }
 
 static void
+fill_icons (const char *path, GHashTable *t)
+{
+  const gchar *dir_entry;
+  GDir *dir = g_dir_open (path, 0, NULL);
+
+  if (!dir)
+    return;
+
+  while ((dir_entry = g_dir_read_name (dir)))
+    {
+      char *filename = g_build_filename (path, dir_entry, "index.theme", NULL);
+
+      if (g_file_test (filename, G_FILE_TEST_IS_REGULAR) &&
+          g_strcmp0 (dir_entry, "hicolor") != 0 &&
+          !g_hash_table_contains (t, dir_entry))
+        g_hash_table_add (t, g_strdup (dir_entry));
+
+      g_free (filename);
+    }
+}
+
+static void
+icons_changed (GtkComboBox *c, ParasiteThemes *pt)
+{
+  char *theme = gtk_combo_box_text_get_active_text (GTK_COMBO_BOX_TEXT (c));
+
+  g_object_set (gtk_settings_get_default (),
+                "gtk-icon-theme-name", theme,
+                NULL);
+  g_free (theme);
+}
+
+static GtkWidget *
+create_icons (ParasiteThemes *pt)
+{
+  GtkWidget *b, *l, *c;
+  GHashTable *t;
+  char *theme, *default_theme, *path;
+  GHashTableIter iter;
+  int i, pos;
+  GSettings *settings;
+
+  b = g_object_new (GTK_TYPE_BOX,
+                    "orientation", GTK_ORIENTATION_HORIZONTAL,
+                    "margin", 10,
+                    NULL);
+
+  l = g_object_new (GTK_TYPE_LABEL,
+                    "label", "Icon Theme",
+                    "hexpand", TRUE,
+                    "xalign", 0.0,
+                    NULL);
+  gtk_container_add (GTK_CONTAINER (b), l);
+
+  t = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL);
+
+  fill_icons (GTK_DATADIR "/icons", t);
+  path = g_build_filename (g_get_user_data_dir (), "icons", NULL);
+  fill_icons (path, t);
+  g_free (path);
+
+  c = gtk_combo_box_text_new ();
+  gtk_container_add (GTK_CONTAINER (b), c);
+
+  settings = g_settings_new ("org.gnome.desktop.interface");
+  default_theme = g_settings_get_string (settings, "icon-theme");
+  g_object_unref (settings);
+
+  g_hash_table_iter_init (&iter, t);
+  pos = i = 0;
+  while (g_hash_table_iter_next (&iter, (gpointer *)&theme, NULL))
+    {
+      gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (c), theme);
+      if (g_strcmp0 (theme, default_theme) == 0)
+        pos = i;
+      i++;
+    }
+  g_hash_table_destroy (t);
+
+  gtk_combo_box_set_active (GTK_COMBO_BOX (c), pos);
+  g_signal_connect (c, "changed", G_CALLBACK (icons_changed), pt);
+
+  return b;
+}
+
+static void
 constructed (GObject *object)
 {
   ParasiteThemes *pt = PARASITE_THEMES (object);
@@ -159,6 +245,7 @@ constructed (GObject *object)
 
   gtk_container_add (box, create_dark (pt));
   gtk_container_add (box, create_gtk (pt));
+  gtk_container_add (box, create_icons (pt));
 }
 
 static void


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