new files
2007-06-14 Jens Granseuer <jensgr@gmx.net> * Makefile.am: * theme-util.c: (theme_delete), (theme_model_iter_last): * theme-util.h: new files * appearance.glade: default delete buttons to insensitive, change label for "Custom" key, adjust column ids for icon view * appearance-style.c: (style_init), (prepare_list), (update_color_buttons_from_settings), (theme_name_changed), (color_button_clicked_cb), (color_scheme_defaults_button_clicked_cb): * appearance-themes.c: (theme_get_selected_name), (theme_get_selected), (theme_select_iter), (theme_select_name), (theme_is_equal), (theme_set_custom_from_theme), (theme_changed_on_disk_cb), (theme_custom_cb), (theme_delete_cb), (theme_details_changed_cb), (theme_color_scheme_changed_cb), (theme_gconf_changed), (theme_postinit), (themes_init), (themes_shutdown): * appearance.h: improvements all around the block (metatheme deletion now working, and custom theme working much better) svn path=/trunk/; revision=7725
This commit is contained in:
parent
0eb282cfa1
commit
48dca61dd7
8 changed files with 405 additions and 159 deletions
|
@ -22,36 +22,12 @@
|
|||
#include <string.h>
|
||||
#include <pango/pango.h>
|
||||
|
||||
#include "theme-util.h"
|
||||
#include "gtkrc-utils.h"
|
||||
#include "gnome-theme-info.h"
|
||||
#include "gconf-property-editor.h"
|
||||
#include "theme-thumbnail.h"
|
||||
|
||||
enum ThemeType {
|
||||
GTK_THEMES,
|
||||
METACITY_THEMES,
|
||||
ICON_THEMES,
|
||||
CURSOR_THEMES,
|
||||
COLOR_SCHEME
|
||||
};
|
||||
|
||||
enum {
|
||||
COL_THUMBNAIL,
|
||||
COL_LABEL,
|
||||
COL_NAME,
|
||||
NUM_COLS
|
||||
};
|
||||
|
||||
static const gchar *gconf_keys[] = {
|
||||
"/desktop/gnome/interface/gtk_theme",
|
||||
"/apps/metacity/general/theme",
|
||||
"/desktop/gnome/interface/icon_theme",
|
||||
"/desktop/gnome/peripherals/mouse/cursor_theme",
|
||||
"/desktop/gnome/interface/gtk_color_scheme"
|
||||
};
|
||||
|
||||
|
||||
static void prepare_list (AppearanceData *data, GtkWidget *list, enum ThemeType type);
|
||||
static void prepare_list (AppearanceData *data, GtkWidget *list, ThemeType type);
|
||||
static void update_color_buttons_from_string (const gchar *color_scheme, AppearanceData *data);
|
||||
static void update_color_buttons_from_settings (GtkSettings *settings, AppearanceData *data);
|
||||
static void check_color_schemes_enabled (GtkSettings *settings, AppearanceData *data);
|
||||
|
@ -86,9 +62,9 @@ style_init (AppearanceData *data)
|
|||
g_signal_connect (w, "response", (GCallback) style_response_cb, NULL);
|
||||
g_signal_connect (w, "delete_event", (GCallback) gtk_true, NULL);
|
||||
|
||||
prepare_list (data, glade_xml_get_widget (data->xml, "gtk_themes_list"), GTK_THEMES);
|
||||
prepare_list (data, glade_xml_get_widget (data->xml, "window_themes_list"), METACITY_THEMES);
|
||||
prepare_list (data, glade_xml_get_widget (data->xml, "icon_themes_list"), ICON_THEMES);
|
||||
prepare_list (data, glade_xml_get_widget (data->xml, "gtk_themes_list"), THEME_TYPE_GTK);
|
||||
prepare_list (data, glade_xml_get_widget (data->xml, "window_themes_list"), THEME_TYPE_WINDOW);
|
||||
prepare_list (data, glade_xml_get_widget (data->xml, "icon_themes_list"), THEME_TYPE_ICON);
|
||||
|
||||
w = glade_xml_get_widget (data->xml, "color_scheme_message_hbox");
|
||||
gtk_widget_set_no_show_all (w, TRUE);
|
||||
|
@ -113,34 +89,39 @@ style_init (AppearanceData *data)
|
|||
g_signal_connect (G_OBJECT (glade_xml_get_widget (data->xml, "selected_fg_colorbutton")), "color-set", (GCallback) color_button_clicked_cb, data);
|
||||
g_signal_connect (G_OBJECT (glade_xml_get_widget (data->xml, "selected_bg_colorbutton")), "color-set", (GCallback) color_button_clicked_cb, data);
|
||||
/* "Reset To Defaults" button */
|
||||
g_signal_connect (G_OBJECT (glade_xml_get_widget (data->xml, "color_scheme_defaults_button")), "clicked", (GCallback) color_scheme_defaults_button_clicked_cb, data);
|
||||
g_signal_connect (G_OBJECT (glade_xml_get_widget (data->xml, "color_scheme_defaults_button")), "clicked", (GCallback) color_scheme_defaults_button_clicked_cb, data);
|
||||
}
|
||||
|
||||
static void
|
||||
prepare_list (AppearanceData *data, GtkWidget *list, enum ThemeType type)
|
||||
prepare_list (AppearanceData *data, GtkWidget *list, ThemeType type)
|
||||
{
|
||||
GtkListStore *store;
|
||||
GList *l, *themes = NULL;
|
||||
GtkCellRenderer *renderer;
|
||||
GtkTreeViewColumn *column;
|
||||
GtkTreeModel *sort_model;
|
||||
const gchar *key;
|
||||
|
||||
switch (type)
|
||||
{
|
||||
case GTK_THEMES:
|
||||
case THEME_TYPE_GTK:
|
||||
themes = gnome_theme_info_find_by_type (GNOME_THEME_GTK_2);
|
||||
key = GTK_THEME_KEY;
|
||||
break;
|
||||
|
||||
case METACITY_THEMES:
|
||||
case THEME_TYPE_WINDOW:
|
||||
themes = gnome_theme_info_find_by_type (GNOME_THEME_METACITY);
|
||||
key = METACITY_THEME_KEY;
|
||||
break;
|
||||
|
||||
case ICON_THEMES:
|
||||
case THEME_TYPE_ICON:
|
||||
themes = gnome_theme_icon_info_find_all ();
|
||||
key = ICON_THEME_KEY;
|
||||
break;
|
||||
|
||||
case CURSOR_THEMES:
|
||||
case THEME_TYPE_CURSOR:
|
||||
themes = NULL; /* don't know what to do yet */
|
||||
key = CURSOR_THEME_KEY;
|
||||
|
||||
default:
|
||||
/* we don't deal with any other type of themes here */
|
||||
|
@ -158,9 +139,9 @@ prepare_list (AppearanceData *data, GtkWidget *list, enum ThemeType type)
|
|||
GdkPixbuf *thumbnail;
|
||||
GtkTreeIter i;
|
||||
|
||||
if (type == GTK_THEMES || type == METACITY_THEMES) {
|
||||
if (type == THEME_TYPE_GTK || type == THEME_TYPE_WINDOW) {
|
||||
name = ((GnomeThemeInfo *) l->data)->name;
|
||||
} else if (type == ICON_THEMES) {
|
||||
} else if (type == THEME_TYPE_ICON) {
|
||||
name = ((GnomeThemeIconInfo *) l->data)->name;
|
||||
label = ((GnomeThemeIconInfo *) l->data)->readable_name;
|
||||
}
|
||||
|
@ -170,21 +151,21 @@ prepare_list (AppearanceData *data, GtkWidget *list, enum ThemeType type)
|
|||
|
||||
switch (type)
|
||||
{
|
||||
case GTK_THEMES:
|
||||
case THEME_TYPE_GTK:
|
||||
thumbnail = generate_gtk_theme_thumbnail ((GnomeThemeInfo *) l->data);
|
||||
break;
|
||||
|
||||
case ICON_THEMES:
|
||||
case THEME_TYPE_ICON:
|
||||
thumbnail = generate_icon_theme_thumbnail ((GnomeThemeIconInfo *) l->data);
|
||||
break;
|
||||
|
||||
case METACITY_THEMES:
|
||||
|
||||
case THEME_TYPE_WINDOW:
|
||||
thumbnail = generate_metacity_theme_thumbnail ((GnomeThemeInfo *) l->data);
|
||||
break;
|
||||
|
||||
default:
|
||||
thumbnail = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
gtk_list_store_insert_with_values (store, &i, 0,
|
||||
COL_THUMBNAIL, thumbnail,
|
||||
|
@ -193,6 +174,7 @@ prepare_list (AppearanceData *data, GtkWidget *list, enum ThemeType type)
|
|||
if (thumbnail)
|
||||
g_object_unref (thumbnail);
|
||||
}
|
||||
g_list_free (themes);
|
||||
|
||||
sort_model = gtk_tree_model_sort_new_with_model (GTK_TREE_MODEL (store));
|
||||
gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (sort_model),
|
||||
|
@ -207,7 +189,7 @@ prepare_list (AppearanceData *data, GtkWidget *list, enum ThemeType type)
|
|||
NULL);
|
||||
|
||||
column = gtk_tree_view_column_new ();
|
||||
gtk_tree_view_column_pack_start (column, renderer, FALSE);
|
||||
gtk_tree_view_column_pack_start (column, renderer, FALSE);
|
||||
gtk_tree_view_column_add_attribute (column, renderer, "pixbuf", COL_THUMBNAIL);
|
||||
gtk_tree_view_append_column (GTK_TREE_VIEW (list), column);
|
||||
|
||||
|
@ -218,11 +200,11 @@ prepare_list (AppearanceData *data, GtkWidget *list, enum ThemeType type)
|
|||
NULL);
|
||||
|
||||
column = gtk_tree_view_column_new ();
|
||||
gtk_tree_view_column_pack_start (column, renderer, FALSE);
|
||||
gtk_tree_view_column_pack_start (column, renderer, FALSE);
|
||||
gtk_tree_view_column_add_attribute (column, renderer, "text", COL_LABEL);
|
||||
gtk_tree_view_append_column (GTK_TREE_VIEW (list), column);
|
||||
|
||||
gconf_peditor_new_tree_view (NULL, gconf_keys[type], list,
|
||||
gconf_peditor_new_tree_view (NULL, key, list,
|
||||
"conv-to-widget-cb", conv_to_widget_cb,
|
||||
"conv-from-widget-cb", conv_from_widget_cb,
|
||||
NULL);
|
||||
|
@ -395,17 +377,17 @@ static void
|
|||
update_color_buttons_from_settings (GtkSettings *settings,
|
||||
AppearanceData *data)
|
||||
{
|
||||
gchar *theme;
|
||||
theme = gconf_client_get_string (data->client, gconf_keys[COLOR_SCHEME], NULL);
|
||||
if (theme == NULL || strcmp (theme, "") == 0)
|
||||
gchar *scheme;
|
||||
scheme = gconf_client_get_string (data->client, COLOR_SCHEME_KEY, NULL);
|
||||
if (scheme == NULL || strcmp (scheme, "") == 0)
|
||||
{
|
||||
g_free (theme);
|
||||
gtk_widget_set_sensitive (glade_xml_get_widget (data->xml, "color_scheme_defaults_button"), FALSE);
|
||||
g_object_get (G_OBJECT (settings), "gtk-color-scheme", &theme, NULL);
|
||||
g_free (scheme);
|
||||
g_object_get (G_OBJECT (settings), "gtk-color-scheme", &scheme, NULL);
|
||||
}
|
||||
|
||||
update_color_buttons_from_string (theme, data);
|
||||
g_free (theme);
|
||||
update_color_buttons_from_string (scheme, data);
|
||||
g_free (scheme);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -461,8 +443,8 @@ theme_name_changed (GObject *settings,
|
|||
|
||||
/* manually update GtkSettings to new gtk+ theme. */
|
||||
g_object_get (settings, "gtk-theme-name", ¤t_theme, NULL);
|
||||
new_theme = gconf_client_get_string (data->client, gconf_keys[GTK_THEMES], NULL);
|
||||
|
||||
new_theme = gconf_client_get_string (data->client, GTK_THEME_KEY, NULL);
|
||||
|
||||
if (strcmp (current_theme, new_theme) != 0)
|
||||
g_object_set (settings, "gtk-theme-name", new_theme, NULL);
|
||||
|
||||
|
@ -504,9 +486,8 @@ color_button_clicked_cb (GtkWidget *colorbutton, AppearanceData *data)
|
|||
new_scheme = g_strconcat (fg, bg, text, base, selected_fg, selected_bg, NULL);
|
||||
|
||||
/* Currently we assume this has only been called when one of the colours has
|
||||
* actually changed, so we don't check the original key first
|
||||
*/
|
||||
gconf_client_set_string (data->client, gconf_keys[COLOR_SCHEME], new_scheme, NULL);
|
||||
* actually changed, so we don't check the original key first */
|
||||
gconf_client_set_string (data->client, COLOR_SCHEME_KEY, new_scheme, NULL);
|
||||
|
||||
gtk_widget_set_sensitive (glade_xml_get_widget (data->xml, "color_scheme_defaults_button"), TRUE);
|
||||
|
||||
|
@ -522,6 +503,6 @@ color_button_clicked_cb (GtkWidget *colorbutton, AppearanceData *data)
|
|||
static void
|
||||
color_scheme_defaults_button_clicked_cb (GtkWidget *button, AppearanceData *data)
|
||||
{
|
||||
gconf_client_set_string (data->client, gconf_keys[COLOR_SCHEME], "", NULL);
|
||||
gconf_client_set_string (data->client, COLOR_SCHEME_KEY, "", NULL);
|
||||
gtk_widget_set_sensitive (glade_xml_get_widget (data->xml, "color_scheme_defaults_button"), FALSE);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue