[Xfce4-commits] r27053 - xfce-mcs-plugins/branches/xfce-plugins-stephan/dialogs/appearance-settings
Stephan Arts
stephan at xfce.org
Sat Jun 14 09:06:18 CEST 2008
Author: stephan
Date: 2008-06-14 07:06:18 +0000 (Sat, 14 Jun 2008)
New Revision: 27053
Modified:
xfce-mcs-plugins/branches/xfce-plugins-stephan/dialogs/appearance-settings/appearance-dialog.glade
xfce-mcs-plugins/branches/xfce-plugins-stephan/dialogs/appearance-settings/main.c
Log:
Improve appearance of the appearance-settings dialog
Modified: xfce-mcs-plugins/branches/xfce-plugins-stephan/dialogs/appearance-settings/appearance-dialog.glade
===================================================================
--- xfce-mcs-plugins/branches/xfce-plugins-stephan/dialogs/appearance-settings/appearance-dialog.glade 2008-06-13 23:05:28 UTC (rev 27052)
+++ xfce-mcs-plugins/branches/xfce-plugins-stephan/dialogs/appearance-settings/appearance-dialog.glade 2008-06-14 07:06:18 UTC (rev 27053)
@@ -1,10 +1,11 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE glade-interface SYSTEM "glade-2.0.dtd">
-<!--Generated with glade3 3.4.5 on Mon Jun 9 21:06:28 2008 -->
+<!--Generated with glade3 3.4.5 on Sat Jun 14 09:04:56 2008 -->
<glade-interface>
<requires lib="xfce4"/>
<widget class="GtkDialog" id="appearance-settings-dialog">
<property name="border_width">5</property>
+ <property name="resizable">False</property>
<property name="window_position">GTK_WIN_POS_CENTER_ON_PARENT</property>
<property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
<property name="has_separator">False</property>
@@ -53,7 +54,7 @@
<property name="xalign">0</property>
<property name="xpad">6</property>
<property name="ypad">6</property>
- <property name="label" translatable="yes">Please select the gtk-theme you want to use</property>
+ <property name="label" translatable="yes">Please select the UI-theme you want to use</property>
</widget>
<packing>
<property name="expand">False</property>
@@ -84,7 +85,7 @@
<child>
<widget class="GtkLabel" id="label12">
<property name="visible">True</property>
- <property name="label" translatable="yes">Gtk Theme</property>
+ <property name="label" translatable="yes">UI Theme</property>
</widget>
<packing>
<property name="type">tab</property>
@@ -110,15 +111,14 @@
<widget class="GtkScrolledWindow" id="scrolledwindow2">
<property name="visible">True</property>
<property name="can_focus">True</property>
- <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+ <property name="hscrollbar_policy">GTK_POLICY_NEVER</property>
<property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
<property name="shadow_type">GTK_SHADOW_IN</property>
<child>
- <widget class="GtkIconView" id="icon_theme_iconview">
+ <widget class="GtkTreeView" id="icon_theme_treeview">
<property name="visible">True</property>
<property name="can_focus">True</property>
- <property name="pixbuf_column">0</property>
- <property name="text_column">1</property>
+ <property name="headers_visible">False</property>
</widget>
</child>
</widget>
@@ -256,19 +256,15 @@
<widget class="GtkHBox" id="hbox1">
<property name="visible">True</property>
<property name="spacing">8</property>
+ <property name="homogeneous">True</property>
<child>
- <widget class="GtkCheckButton" id="xft_hinting_check_button">
+ <widget class="GtkLabel" id="label16">
<property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">_Enable Hinting</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">_Hinting:</property>
<property name="use_underline">True</property>
- <property name="response_id">0</property>
- <property name="draw_indicator">True</property>
+ <property name="mnemonic_widget">xft_hinting_style_combo_box</property>
</widget>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
</child>
<child>
<widget class="GtkComboBox" id="xft_hinting_style_combo_box">
@@ -287,18 +283,15 @@
<widget class="GtkHBox" id="hbox3">
<property name="visible">True</property>
<property name="spacing">8</property>
+ <property name="homogeneous">True</property>
<child>
- <widget class="GtkCheckButton" id="xft_rgba_check_button">
+ <widget class="GtkLabel" id="label17">
<property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Subpixel Hinting</property>
- <property name="response_id">0</property>
- <property name="draw_indicator">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">_Subpixel hinting:</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">xft_hinting_style_combo_box</property>
</widget>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
</child>
<child>
<widget class="GtkComboBox" id="xft_rgba_combo_box">
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-13 23:05:28 UTC (rev 27052)
+++ xfce-mcs-plugins/branches/xfce-plugins-stephan/dialogs/appearance-settings/main.c 2008-06-14 07:06:18 UTC (rev 27053)
@@ -56,10 +56,10 @@
};
void
-cb_icon_theme_iconview_selection_changed (GtkIconView *icon_view, XfconfChannel *channel)
+cb_icon_theme_treeselection_changed (GtkTreeSelection *selection, XfconfChannel *channel)
{
- GList *list = gtk_icon_view_get_selected_items (icon_view);
- GtkTreeModel *model = gtk_icon_view_get_model (icon_view);
+ GtkTreeModel *model = NULL;
+ GList *list = gtk_tree_selection_get_selected_rows (selection, &model);
GtkTreeIter iter;
GValue value = {0,};
@@ -71,7 +71,7 @@
g_return_if_fail (g_list_length (list) == 1);
gtk_tree_model_get_iter (model, &iter, list->data);
- gtk_tree_model_get_value (model, &iter, 1, &value);
+ gtk_tree_model_get_value (model, &iter, 0, &value);
xfconf_channel_set_property (channel, "/Net/IconThemeName", &value);
@@ -83,7 +83,7 @@
}
void
-cb_gtk_theme_treeselection_changed (GtkTreeSelection *selection, XfconfChannel *channel)
+cb_ui_theme_treeselection_changed (GtkTreeSelection *selection, XfconfChannel *channel)
{
GtkTreeModel *model = NULL;
GList *list = gtk_tree_selection_get_selected_rows (selection, &model);
@@ -163,38 +163,24 @@
}
}
-
void
-cb_hinting_check_toggled (GtkToggleButton *toggle, PropertyPair *pair)
-{
- gtk_toggle_button_set_inconsistent(toggle, FALSE);
- if (gtk_toggle_button_get_active(toggle))
- {
- xfconf_channel_set_int (pair->channel, "/Xft/Hinting", 1);
- gtk_widget_set_sensitive(pair->slave, TRUE);
- }
- else
- {
- xfconf_channel_set_int (pair->channel, "/Xft/Hinting", 0);
- gtk_widget_set_sensitive(pair->slave, FALSE);
- }
-}
-
-void
cb_rgba_style_combo_changed (GtkComboBox *combo, XfconfChannel *channel)
{
switch (gtk_combo_box_get_active(combo))
{
case 0:
+ xfconf_channel_set_string (channel, "/Xft/RGBA", "none");
+ break;
+ case 1:
xfconf_channel_set_string (channel, "/Xft/RGBA", "rgb");
break;
- case 1:
+ case 2:
xfconf_channel_set_string (channel, "/Xft/RGBA", "bgr");
break;
- case 2:
+ case 3:
xfconf_channel_set_string (channel, "/Xft/RGBA", "vrgb");
break;
- case 3:
+ case 4:
xfconf_channel_set_string (channel, "/Xft/RGBA", "vbgr");
break;
}
@@ -221,35 +207,6 @@
xfconf_channel_set_int (channel, "/Xft/DPI", (gint)(gtk_spin_button_get_value(spin)*1024));
}
-void
-cb_rgba_check_toggled (GtkToggleButton *toggle, PropertyPair *pair)
-{
- if (gtk_toggle_button_get_active(toggle))
- {
- gtk_widget_set_sensitive(pair->slave, TRUE);
- switch (gtk_combo_box_get_active(GTK_COMBO_BOX(pair->slave)))
- {
- case 0:
- xfconf_channel_set_string (pair->channel, "/Xft/RGBA", "rgb");
- break;
- case 1:
- xfconf_channel_set_string (pair->channel, "/Xft/RGBA", "bgr");
- break;
- case 2:
- xfconf_channel_set_string (pair->channel, "/Xft/RGBA", "vrgb");
- break;
- case 3:
- xfconf_channel_set_string (pair->channel, "/Xft/RGBA", "vbgr");
- break;
- }
- }
- else
- {
- gtk_widget_set_sensitive(pair->slave, FALSE);
- xfconf_channel_set_string (pair->channel, "/Xft/RGBA", "none");
- }
-}
-
GList *
read_themes_from_dir (const gchar *dir_name, ThemeType type)
{
@@ -318,23 +275,26 @@
* TODO: Fix icon-theme-spec compliance
*/
void
-check_icon_themes (GtkListStore *list_store, GtkIconView *icon_view, XfconfChannel *channel)
+check_icon_themes (GtkListStore *list_store, GtkTreeView *tree_view, XfconfChannel *channel)
{
gchar *dir_name;
- gchar *active_theme_name = xfconf_channel_get_string (channel, "/Net/IconThemeName", "Default");
+ gchar *active_theme_name = xfconf_channel_get_string (channel, "/Net/IconThemeName", "hicolor");
const gchar * const *xdg_system_data_dirs = g_get_system_data_dirs();
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 (), ".icons", NULL);
- user_theme_list = read_themes_from_dir (dir_name, THEME_TYPE_ICONS);
+ user_theme_list = read_themes_from_dir (dir_name, THEME_TYPE_GTK);
g_free (dir_name);
- dir_name = g_build_filename (g_get_user_data_dir(), "icons", NULL);
- xdg_user_theme_list = read_themes_from_dir (dir_name, THEME_TYPE_ICONS);
+ dir_name = g_build_filename (g_get_user_data_dir(), "icons", NULL);
+ xdg_user_theme_list, read_themes_from_dir (dir_name, THEME_TYPE_ICONS);
g_free (dir_name);
while (*xdg_system_data_dirs)
@@ -346,28 +306,88 @@
xdg_system_data_dirs++;
}
- for (list_iter = user_theme_list; list_iter != NULL; list_iter = g_list_next (list_iter))
+ /* Legacy ~/.icons */
+ 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, NULL, 1, 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);
}
+ /* XDG_DATA_HOME */
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, NULL, 1, list_iter->data, -1);
+ temp_iter = g_list_find_custom (theme_list, list_iter->data, (GCompareFunc)strcmp);
+ if (temp_iter == NULL)
+ {
+ xdg_user_theme_list = g_list_remove_link (xdg_system_theme_list, list_iter);
+ theme_list = g_list_concat (theme_list, list_iter);
+
+ list_iter = xdg_user_theme_list;
+ }
+ else
+ list_iter = g_list_next (list_iter);
}
- for (list_iter = xdg_system_theme_list; list_iter != NULL; list_iter = g_list_next (list_iter))
+ /* XDG_DATA_DIRS */
+ 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, NULL, 1, list_iter->data, -1);
+ 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);
+ }
+
+
}
void
-check_gtk_themes (GtkListStore *list_store, GtkTreeView *tree_view, XfconfChannel *channel)
+check_ui_themes (GtkListStore *list_store, GtkTreeView *tree_view, XfconfChannel *channel)
{
gchar *dir_name;
gchar *active_theme_name = xfconf_channel_get_string (channel, "/Net/ThemeName", "Default");
@@ -487,33 +507,36 @@
GtkWidget *antialias_check_button = glade_xml_get_widget (gxml, "xft_antialias_check_button");
GtkWidget *hinting_style_combo = glade_xml_get_widget (gxml, "xft_hinting_style_combo_box");
- GtkWidget *hinting_check = glade_xml_get_widget (gxml, "xft_hinting_check_button");
GtkWidget *rgba_style_combo = glade_xml_get_widget (gxml, "xft_rgba_combo_box");
- GtkWidget *rgba_check = glade_xml_get_widget (gxml, "xft_rgba_check_button");
GtkWidget *custom_dpi_check = glade_xml_get_widget (gxml, "xft_custom_dpi_check_button");
GtkWidget *custom_dpi_spin = glade_xml_get_widget (gxml, "xft_custom_dpi_spin_button");
- GtkWidget *icon_theme_iconview = glade_xml_get_widget (gxml, "icon_theme_iconview");
- GtkWidget *gtk_theme_treeview = glade_xml_get_widget (gxml, "gtk_theme_treeview");
+ GtkWidget *icon_theme_treeview = glade_xml_get_widget (gxml, "icon_theme_treeview");
+ GtkWidget *ui_theme_treeview = glade_xml_get_widget (gxml, "gtk_theme_treeview");
/* Fill the theme-icons */
/* Check icon-themes */
- list_store = gtk_list_store_new(2, GDK_TYPE_PIXBUF, G_TYPE_STRING);
+ list_store = gtk_list_store_new(1, G_TYPE_STRING);
- gtk_icon_view_set_model (GTK_ICON_VIEW (icon_theme_iconview), GTK_TREE_MODEL (list_store));
+ renderer = gtk_cell_renderer_text_new();
+ gtk_tree_view_set_model (GTK_TREE_VIEW (icon_theme_treeview), GTK_TREE_MODEL (list_store));
+ gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (icon_theme_treeview), 0, _("Icon theme name"), renderer, "text", 0, NULL);
- check_icon_themes (list_store, GTK_ICON_VIEW (icon_theme_iconview), xsettings_channel);
+ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (icon_theme_treeview));
+ gtk_tree_selection_set_mode (selection, GTK_SELECTION_SINGLE);
+ check_icon_themes (list_store, GTK_TREE_VIEW (icon_theme_treeview), xsettings_channel);
+
/* Check gtk-themes */
list_store = gtk_list_store_new(1, G_TYPE_STRING);
renderer = gtk_cell_renderer_text_new();
- gtk_tree_view_set_model (GTK_TREE_VIEW (gtk_theme_treeview), GTK_TREE_MODEL (list_store));
- gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (gtk_theme_treeview), 0, _("Theme name"), renderer, "text", 0, NULL);
+ gtk_tree_view_set_model (GTK_TREE_VIEW (ui_theme_treeview), GTK_TREE_MODEL (list_store));
+ gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (ui_theme_treeview), 0, _("Theme name"), renderer, "text", 0, NULL);
- selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (gtk_theme_treeview));
+ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (ui_theme_treeview));
gtk_tree_selection_set_mode (selection, GTK_SELECTION_SINGLE);
- check_gtk_themes (list_store, GTK_TREE_VIEW (gtk_theme_treeview), xsettings_channel);
+ check_ui_themes (list_store, GTK_TREE_VIEW (ui_theme_treeview), xsettings_channel);
/* Fill the combo-boxes */
/* ToolbarStyle combo */
@@ -556,6 +579,8 @@
/* Subpixel (rgba) hinting Combo */
list_store = gtk_list_store_new(1, G_TYPE_STRING);
gtk_list_store_append(list_store, &iter);
+ gtk_list_store_set(list_store, &iter, 0, N_("none"), -1);
+ gtk_list_store_append(list_store, &iter);
gtk_list_store_set(list_store, &iter, 0, N_("rgb"), -1);
gtk_list_store_append(list_store, &iter);
gtk_list_store_set(list_store, &iter, 0, N_("bgr"), -1);
@@ -615,19 +640,16 @@
g_free (hinting_style_string);
}
{
- gint hinting = xfconf_channel_get_int (xsettings_channel, "/Xft/Hinting", -1);
+ gint hinting = xfconf_channel_get_int (xsettings_channel, "/Xft/Hinting", 1);
switch (hinting)
{
+ case -1:
case 1:
- gtk_widget_set_sensitive(hinting_style_combo, TRUE);
- gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(hinting_check), TRUE);
+ gtk_combo_box_set_active (GTK_COMBO_BOX(hinting_style_combo), 1);
+ hinting = 1;
break;
case 0:
- gtk_widget_set_sensitive(hinting_style_combo, FALSE);
- gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(hinting_check), FALSE);
- case -1:
- gtk_toggle_button_set_inconsistent (GTK_TOGGLE_BUTTON(hinting_check), TRUE);
- break;
+ gtk_combo_box_set_active (GTK_COMBO_BOX(hinting_style_combo), 0);
}
}
@@ -649,24 +671,15 @@
{
gchar *rgba_style_string = xfconf_channel_get_string (xsettings_channel, "/Xft/RGBA", "none");
if (!strcmp(rgba_style_string, "none"))
- {
- gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(rgba_check), FALSE);
- gtk_widget_set_sensitive(rgba_style_combo, FALSE);
gtk_combo_box_set_active (GTK_COMBO_BOX(rgba_style_combo), 0);
- }
- else
- {
- gtk_widget_set_sensitive(rgba_style_combo, TRUE);
- gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(rgba_check), TRUE);
- }
if (!strcmp(rgba_style_string, "rgb"))
- gtk_combo_box_set_active (GTK_COMBO_BOX(rgba_style_combo), 0);
+ gtk_combo_box_set_active (GTK_COMBO_BOX(rgba_style_combo), 1);
if (!strcmp(rgba_style_string, "bgr"))
- gtk_combo_box_set_active (GTK_COMBO_BOX(rgba_style_combo), 1);
+ gtk_combo_box_set_active (GTK_COMBO_BOX(rgba_style_combo), 2);
if (!strcmp(rgba_style_string, "vrgb"))
- gtk_combo_box_set_active (GTK_COMBO_BOX(rgba_style_combo), 2);
+ gtk_combo_box_set_active (GTK_COMBO_BOX(rgba_style_combo), 3);
if (!strcmp(rgba_style_string, "vbgr"))
- gtk_combo_box_set_active (GTK_COMBO_BOX(rgba_style_combo), 3);
+ gtk_combo_box_set_active (GTK_COMBO_BOX(rgba_style_combo), 4);
g_free (rgba_style_string);
}
{
@@ -684,8 +697,8 @@
}
}
- 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(selection), "changed", G_CALLBACK (cb_ui_theme_treeselection_changed), xsettings_channel);
+ g_signal_connect (G_OBJECT(selection), "changed", G_CALLBACK (cb_icon_theme_treeselection_changed), xsettings_channel);
g_signal_connect (G_OBJECT(toolbar_style_combo), "changed", G_CALLBACK(cb_toolbar_style_combo_changed), xsettings_channel);
g_signal_connect (G_OBJECT(hinting_style_combo), "changed", G_CALLBACK(cb_hinting_style_combo_changed), xsettings_channel);
@@ -698,17 +711,6 @@
g_signal_connect (G_OBJECT(custom_dpi_check), "toggled", G_CALLBACK(cb_custom_dpi_check_button_toggled), pair);
g_signal_connect (G_OBJECT(custom_dpi_spin), "value-changed", G_CALLBACK(cb_custom_dpi_spin_value_changed), xsettings_channel);
- pair = g_new0(PropertyPair, 1);
- pair->channel = xsettings_channel;
- pair->slave = hinting_style_combo;
- g_signal_connect (G_OBJECT(hinting_check), "toggled", G_CALLBACK(cb_hinting_check_toggled), pair);
-
- pair = g_new0(PropertyPair, 1);
- pair->channel = xsettings_channel;
- pair->slave = rgba_style_combo;
- g_signal_connect (G_OBJECT(rgba_check), "toggled", G_CALLBACK(cb_rgba_check_toggled), pair);
-
-
GtkWidget *dialog = glade_xml_get_widget (gxml, "appearance-settings-dialog");
return dialog;
}
More information about the Xfce4-commits
mailing list