[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