[Xfce4-commits] r27046 - xfce-mcs-plugins/branches/xfce-plugins-stephan/dialogs/appearance-settings

Stephan Arts stephan at xfce.org
Mon Jun 9 22:24:14 CEST 2008


Author: stephan
Date: 2008-06-09 20:24:14 +0000 (Mon, 09 Jun 2008)
New Revision: 27046

Added:
   xfce-mcs-plugins/branches/xfce-plugins-stephan/dialogs/appearance-settings/xfce4-appearance-settings.desktop.in
Modified:
   xfce-mcs-plugins/branches/xfce-plugins-stephan/dialogs/appearance-settings/Makefile.am
   xfce-mcs-plugins/branches/xfce-plugins-stephan/dialogs/appearance-settings/main.c
Log:
Add .desktop file
Remove duplicate entries
Remove cursor-themes



Modified: xfce-mcs-plugins/branches/xfce-plugins-stephan/dialogs/appearance-settings/Makefile.am
===================================================================
--- xfce-mcs-plugins/branches/xfce-plugins-stephan/dialogs/appearance-settings/Makefile.am	2008-06-09 19:32:09 UTC (rev 27045)
+++ xfce-mcs-plugins/branches/xfce-plugins-stephan/dialogs/appearance-settings/Makefile.am	2008-06-09 20:24:14 UTC (rev 27046)
@@ -36,6 +36,12 @@
 
 endif
 
+desktopdir = $(datadir)/applications
+desktop_in_files = xfce4-appearance-settings.desktop.in
+desktop_DATA = $(desktop_in_files:.desktop.in=.desktop)
+ at INTLTOOL_DESKTOP_RULE@
+
 EXTRA_DIST = \
+	$(desktop_in_files)							\
 	appearance-dialog.glade
 

Modified: xfce-mcs-plugins/branches/xfce-plugins-stephan/dialogs/appearance-settings/main.c
===================================================================
--- xfce-mcs-plugins/branches/xfce-plugins-stephan/dialogs/appearance-settings/main.c	2008-06-09 19:32:09 UTC (rev 27045)
+++ xfce-mcs-plugins/branches/xfce-plugins-stephan/dialogs/appearance-settings/main.c	2008-06-09 20:24:14 UTC (rev 27046)
@@ -17,6 +17,7 @@
  */
 
 #include <config.h>
+#include <string.h>
 
 #include <glib.h>
 
@@ -82,9 +83,8 @@
 }
 
 void
-cb_gtk_theme_treeview_row_activated (GtkTreeView *tree_view, GtkTreePath *path, GtkTreeViewColumn *column, XfconfChannel *channel)
+cb_gtk_theme_treeselection_changed (GtkTreeSelection *selection, XfconfChannel *channel)
 {
-    GtkTreeSelection *selection = gtk_tree_view_get_selection (tree_view);
     GtkTreeModel *model = NULL;
     GList *list = gtk_tree_selection_get_selected_rows (selection, &model);
     GtkTreeIter iter;
@@ -271,11 +271,20 @@
 
                     if (g_file_test (theme_index, G_FILE_TEST_EXISTS))
                     {
-                        /* unfortunately, need to strdup here because the 
-                         * resources allocated to the dir get released once 
-                         * the dir is closed at the end of this function
-                         */ 
-                        theme_list = g_list_append (theme_list, g_strdup(theme_name));
+                        g_free (theme_index);
+                        theme_index = g_build_filename (dir_name, theme_name, "icon-theme.cache", NULL);
+
+                        /* check for the icon-theme cache,
+                         * this does not exist for cursor-themes so we can filter those out...
+                         */
+                        if (g_file_test (theme_index, G_FILE_TEST_EXISTS))
+                        {
+                            /* unfortunately, need to strdup here because the 
+                             * resources allocated to the dir get released once 
+                             * the dir is closed at the end of this function
+                             */ 
+                            theme_list = g_list_append (theme_list, g_strdup(theme_name));
+                        }
                     }
 
                     g_free (theme_index);
@@ -366,8 +375,11 @@
     GList *user_theme_list = NULL;
     GList *xdg_user_theme_list = NULL;
     GList *xdg_system_theme_list = NULL;
+    GList *theme_list = NULL;
     GList *list_iter = NULL;
+    GList *temp_iter = NULL;
     GtkTreeIter iter;
+    GtkTreeSelection *selection = gtk_tree_view_get_selection (tree_view);
 
     dir_name = g_build_filename (g_get_home_dir (), ".themes", NULL);
     user_theme_list = read_themes_from_dir (dir_name, THEME_TYPE_GTK);
@@ -380,31 +392,80 @@
     while (*xdg_system_data_dirs)
     {
         dir_name = g_build_filename (*xdg_system_data_dirs, "themes", NULL);
-        xdg_system_theme_list = g_list_concat (xdg_system_theme_list, read_themes_from_dir (dir_name, THEME_TYPE_ICONS));
+        xdg_system_theme_list = g_list_concat (xdg_system_theme_list, read_themes_from_dir (dir_name, THEME_TYPE_GTK));
         g_free (dir_name);
 
         xdg_system_data_dirs++;
     }
 
-    for (list_iter = user_theme_list; list_iter != NULL; list_iter = g_list_next (list_iter))
+    list_iter = user_theme_list;
+    while (user_theme_list && list_iter != NULL)
     {
-        gtk_list_store_insert (list_store, &iter, 0);
-        gtk_list_store_set (list_store, &iter, 0, list_iter->data, -1);
+        temp_iter = g_list_find_custom (theme_list, list_iter->data, (GCompareFunc)strcmp);
+        if (temp_iter == NULL)
+        {
+            user_theme_list = g_list_remove_link (user_theme_list, list_iter);
+            theme_list = g_list_concat (theme_list, list_iter);
+
+            list_iter = user_theme_list;
+        }
+        else
+            list_iter = g_list_next (list_iter);
     }
 
+#if 0
+    /** Gtk does not adhere to the xdg_basedir_spec yet */
     for (list_iter = xdg_user_theme_list; list_iter != NULL; list_iter = g_list_next (list_iter))
     {
-        gtk_list_store_insert (list_store, &iter, 0);
-        gtk_list_store_set (list_store, &iter, 0, list_iter->data, -1);
     }
+#endif
 
-    for (list_iter = xdg_system_theme_list; list_iter != NULL; list_iter = g_list_next (list_iter))
+    list_iter = xdg_system_theme_list;
+    while (xdg_system_theme_list && list_iter != NULL)
     {
+        temp_iter = g_list_find_custom (theme_list, list_iter->data, (GCompareFunc)strcmp);
+        if (temp_iter == NULL)
+        {
+            xdg_system_theme_list = g_list_remove_link (xdg_system_theme_list, list_iter);
+            theme_list = g_list_concat (theme_list, list_iter);
+
+            list_iter = xdg_system_theme_list;
+        }
+        else
+            list_iter = g_list_next (list_iter);
+    }
+
+    /* Add all unique themes to the liststore */
+    for (list_iter = theme_list; list_iter != NULL; list_iter = g_list_next (list_iter))
+    {
         gtk_list_store_insert (list_store, &iter, 0);
         gtk_list_store_set (list_store, &iter, 0, list_iter->data, -1);
+
+        if (strcmp (list_iter->data, active_theme_name) == 0)
+        {
+            GtkTreePath *path = gtk_tree_model_get_path (GTK_TREE_MODEL (list_store), &iter);
+            gtk_tree_selection_select_path (selection, path);
+        }
     }
-    
 
+    /* cleanup */
+    if (xdg_system_theme_list)
+    {
+        g_list_foreach (xdg_system_theme_list, (GFunc)g_free, NULL);
+        g_list_free (xdg_system_theme_list);   
+    }
+    if (xdg_user_theme_list)
+    {
+        g_list_foreach (xdg_user_theme_list, (GFunc)g_free, NULL);
+        g_list_free (xdg_user_theme_list);   
+    }
+    if (user_theme_list)
+    {
+        g_list_foreach (user_theme_list, (GFunc)g_free, NULL);
+        g_list_free (user_theme_list);   
+    }
+
+
 }
 
 GtkWidget *
@@ -623,7 +684,7 @@
         }
     }
 
-    g_signal_connect (G_OBJECT(gtk_theme_treeview), "row-activated", G_CALLBACK (cb_gtk_theme_treeview_row_activated), xsettings_channel);
+    g_signal_connect (G_OBJECT(selection), "changed", G_CALLBACK (cb_gtk_theme_treeselection_changed), xsettings_channel);
     g_signal_connect (G_OBJECT(icon_theme_iconview), "selection_changed", G_CALLBACK (cb_icon_theme_iconview_selection_changed), xsettings_channel);
 
     g_signal_connect (G_OBJECT(toolbar_style_combo), "changed", G_CALLBACK(cb_toolbar_style_combo_changed), xsettings_channel);

Added: xfce-mcs-plugins/branches/xfce-plugins-stephan/dialogs/appearance-settings/xfce4-appearance-settings.desktop.in
===================================================================
--- xfce-mcs-plugins/branches/xfce-plugins-stephan/dialogs/appearance-settings/xfce4-appearance-settings.desktop.in	                        (rev 0)
+++ xfce-mcs-plugins/branches/xfce-plugins-stephan/dialogs/appearance-settings/xfce4-appearance-settings.desktop.in	2008-06-09 20:24:14 UTC (rev 27046)
@@ -0,0 +1,12 @@
+[Desktop Entry]
+Version=1.0
+_Name=Xfce 4 Appearance Settings
+_GenericName=Appearance Settings
+_Comment= Appearance Settings (themes and fonts)
+Exec=xfce4-appearance-settings
+Icon=preferences-desktop-theme
+Terminal=false
+Type=Application
+Categories=X-XFCE;Settings;DesktopSettings;
+StartupNotify=true
+OnlyShowIn=XFCE;



More information about the Xfce4-commits mailing list