2002-12-03 16:16:45 +00:00
# include <config.h>
# include <string.h>
# include <gtk/gtk.h>
# include <gconf/gconf-client.h>
# include <glade/glade.h>
# include <libgnomevfs/gnome-vfs-async-ops.h>
# include <libgnomevfs/gnome-vfs-ops.h>
# include <libgnomevfs/gnome-vfs-utils.h>
# include <libwindow-settings/gnome-wm-manager.h>
# include "capplet-util.h"
# include "gnome-theme-manager.h"
# include "gnome-theme-details.h"
# include "gnome-theme-installer.h"
# include "gnome-theme-info.h"
2007-01-07 22:08:02 +00:00
# include "gtkrc-utils.h"
2002-12-03 16:16:45 +00:00
# define MAX_ELEMENTS_BEFORE_SCROLLING 12
static gboolean theme_details_initted = FALSE ;
static gboolean setting_model = FALSE ;
2005-11-21 11:26:28 +00:00
enum {
THEME_GTK ,
THEME_WINDOW ,
THEME_ICON
} ;
2002-12-03 16:16:45 +00:00
/* Function Prototypes */
static void cb_dialog_response ( GtkDialog * dialog ,
gint response_id ) ;
static void setup_tree_view ( GtkTreeView * tree_view ,
GCallback changed_callback ,
GladeXML * dialog ) ;
static void gtk_theme_selection_changed ( GtkTreeSelection * selection ,
gpointer data ) ;
static void window_theme_selection_changed ( GtkTreeSelection * selection ,
gpointer data ) ;
static void icon_theme_selection_changed ( GtkTreeSelection * selection ,
gpointer data ) ;
static void update_gconf_key_from_selection ( GtkTreeSelection * selection ,
const gchar * gconf_key ) ;
static void load_theme_names ( GtkTreeView * tree_view ,
GList * theme_list ,
2003-02-05 22:20:09 +00:00
const gchar * default_theme ) ;
2002-12-29 02:24:34 +00:00
static char * path_to_theme_id ( const char * path ) ;
2006-11-13 16:01:42 +00:00
static void update_color_buttons_from_string ( gchar * color_scheme ) ;
2007-02-08 00:23:12 +00:00
static void color_scheme_changed ( GObject * settings ,
GParamSpec * pspec ,
gpointer data ) ;
2002-12-03 16:16:45 +00:00
2007-01-19 17:54:55 +00:00
void revert_color_scheme_key ( GtkWidget * checkbutton , gpointer * data ) ;
2002-12-03 16:16:45 +00:00
2002-12-29 02:24:34 +00:00
static char *
path_to_theme_id ( const char * path )
{
char * dirname ;
char * result ;
2002-12-03 16:16:45 +00:00
2002-12-29 02:24:34 +00:00
dirname = g_path_get_dirname ( path ) ;
result = g_path_get_basename ( dirname ) ;
g_free ( dirname ) ;
2002-12-03 16:16:45 +00:00
2002-12-29 02:24:34 +00:00
return result ;
}
2002-12-03 16:16:45 +00:00
static void
cb_dialog_response ( GtkDialog * dialog , gint response_id )
{
if ( response_id = = GTK_RESPONSE_HELP )
2004-02-12 14:23:03 +00:00
capplet_help ( GTK_WINDOW ( dialog ) , " user-guide.xml " , " goscustdesk-12 " ) ;
2002-12-03 16:16:45 +00:00
else
gtk_widget_hide ( GTK_WIDGET ( dialog ) ) ;
}
2003-01-16 01:16:36 +00:00
static gint
details_tree_sort_func ( GtkTreeModel * model ,
GtkTreeIter * a ,
GtkTreeIter * b ,
gpointer user_data )
{
gchar * a_name = NULL ;
gchar * b_name = NULL ;
guint a_flag = FALSE ;
guint b_flag = FALSE ;
gint retval ;
gtk_tree_model_get ( model , a ,
THEME_NAME_COLUMN , & a_name ,
THEME_FLAG_COLUMN , & a_flag ,
- 1 ) ;
gtk_tree_model_get ( model , b ,
THEME_NAME_COLUMN , & b_name ,
THEME_FLAG_COLUMN , & b_flag ,
- 1 ) ;
retval = gnome_theme_manager_sort_func ( a_name , b_name , a_flag , b_flag ) ;
g_free ( a_name ) ;
g_free ( b_name ) ;
return retval ;
}
2002-12-03 16:16:45 +00:00
static void
setup_tree_view ( GtkTreeView * tree_view ,
GCallback changed_callback ,
GladeXML * dialog )
{
GtkTreeModel * model ;
GtkTreeSelection * selection ;
GtkCellRenderer * renderer ;
model = ( GtkTreeModel * ) gtk_list_store_new ( N_COLUMNS , G_TYPE_STRING , G_TYPE_STRING , G_TYPE_UINT ) ;
2003-01-16 01:16:36 +00:00
gtk_tree_sortable_set_sort_func ( GTK_TREE_SORTABLE ( model ) , 0 , details_tree_sort_func , NULL , NULL ) ;
2002-12-03 16:16:45 +00:00
gtk_tree_sortable_set_sort_column_id ( GTK_TREE_SORTABLE ( model ) , 0 , GTK_SORT_ASCENDING ) ;
gtk_tree_view_set_model ( tree_view , model ) ;
2003-01-16 07:40:29 +00:00
2002-12-03 16:16:45 +00:00
selection = gtk_tree_view_get_selection ( tree_view ) ;
gtk_tree_selection_set_mode ( selection , GTK_SELECTION_BROWSE ) ;
g_signal_connect ( G_OBJECT ( selection ) , " changed " , changed_callback , dialog ) ;
renderer = gtk_cell_renderer_text_new ( ) ;
gtk_tree_view_insert_column_with_attributes ( tree_view ,
- 1 , NULL ,
renderer ,
2003-01-16 01:16:36 +00:00
" text " , THEME_NAME_COLUMN ,
2002-12-03 16:16:45 +00:00
NULL ) ;
2006-09-30 16:17:46 +00:00
g_object_set ( renderer , " ellipsize " , PANGO_ELLIPSIZE_END , NULL ) ;
2002-12-03 16:16:45 +00:00
}
2005-11-21 11:26:28 +00:00
static void
gtk_theme_update_remove_button ( GtkTreeSelection * selection ,
GtkWidget * remove_button ,
gint theme_type )
{
gchar * theme_selected ;
GtkTreeModel * model ;
GtkTreeIter iter ;
2007-01-07 13:36:19 +00:00
GList * theme_list = NULL , * list ;
gchar * theme_base = NULL ;
2005-11-21 11:26:28 +00:00
GnomeVFSResult vfs_result ;
GnomeVFSFileInfo * vfs_info ;
if ( gtk_tree_selection_get_selected ( selection , & model , & iter ) )
gtk_tree_model_get ( model , & iter ,
THEME_NAME_COLUMN , & theme_selected ,
- 1 ) ;
else
theme_selected = NULL ;
if ( theme_selected ! = NULL )
{
switch ( theme_type ) {
2007-01-07 13:36:19 +00:00
case THEME_GTK : theme_base = g_strdup ( " /gtk-2.0/ " ) ;
2005-11-21 11:26:28 +00:00
theme_list = gnome_theme_info_find_by_type ( GNOME_THEME_GTK_2 ) ;
break ;
case THEME_ICON : theme_list = gnome_theme_icon_info_find_all ( ) ;
break ;
2007-01-07 13:36:19 +00:00
case THEME_WINDOW : theme_base = g_strdup ( " /metacity-1/ " ) ;
2005-11-21 11:26:28 +00:00
theme_list = gnome_theme_info_find_by_type ( GNOME_THEME_METACITY ) ;
break ;
default : theme_list = NULL ;
break ;
}
}
2007-01-07 13:36:19 +00:00
vfs_info = gnome_vfs_file_info_new ( ) ;
2005-11-21 11:26:28 +00:00
for ( list = theme_list ; list ; list = list - > next )
{
GnomeThemeInfo * info = list - > data ;
2007-01-07 13:36:19 +00:00
gchar * theme_dir = NULL ;
2005-11-21 11:26:28 +00:00
if ( ! strcmp ( info - > name , theme_selected ) )
{
if ( theme_type = = THEME_ICON )
theme_dir = g_strdup ( info - > path ) ;
else
2007-01-07 13:36:19 +00:00
theme_dir = g_strdup_printf ( " %s/%s " , info - > path , theme_base ) ;
2005-11-21 11:26:28 +00:00
vfs_result = gnome_vfs_get_file_info ( theme_dir ,
vfs_info ,
GNOME_VFS_FILE_INFO_GET_ACCESS_RIGHTS ) ;
2007-01-07 13:36:19 +00:00
g_free ( theme_dir ) ;
2005-11-21 11:26:28 +00:00
if ( vfs_result = = GNOME_VFS_OK )
{
if ( ( vfs_info - > valid_fields & GNOME_VFS_FILE_INFO_FIELDS_ACCESS ) & &
! ( vfs_info - > permissions & GNOME_VFS_PERM_ACCESS_WRITABLE ) )
gtk_widget_set_sensitive ( remove_button , FALSE ) ;
else
gtk_widget_set_sensitive ( remove_button , TRUE ) ;
} else {
gtk_widget_set_sensitive ( remove_button , FALSE ) ;
}
2007-01-05 13:12:09 +00:00
2005-11-21 11:26:28 +00:00
}
}
2007-01-07 13:36:19 +00:00
gnome_vfs_file_info_unref ( vfs_info ) ;
g_free ( theme_base ) ;
g_free ( theme_selected ) ;
2005-11-21 11:26:28 +00:00
}
2002-12-03 16:16:45 +00:00
2007-01-07 22:08:02 +00:00
static void
2007-02-08 00:23:12 +00:00
update_color_scheme_tab ( const gchar * theme )
2007-01-07 22:08:02 +00:00
{
GSList * symbolic_colors = NULL ;
GSList * engines = NULL ;
gboolean fg , bg , base , text , fg_s , bg_s , enable_colors ;
2007-02-08 00:23:12 +00:00
gchar * filename ;
gchar * theme_name = NULL ;
2007-01-07 22:08:02 +00:00
GtkSettings * settings ;
GladeXML * dialog ;
dialog = gnome_theme_manager_get_theme_dialog ( ) ;
2007-02-08 00:23:12 +00:00
if ( theme = = NULL ) {
settings = gtk_settings_get_default ( ) ;
g_object_get ( G_OBJECT ( settings ) , " gtk-theme-name " , & theme_name , NULL ) ;
theme = theme_name ;
}
filename = gtkrc_find_named ( theme ) ;
2007-01-07 22:08:02 +00:00
settings = gtk_settings_get_default ( ) ;
g_object_get ( G_OBJECT ( settings ) , " gtk-theme-name " , & theme_name , NULL ) ;
filename = gtkrc_find_named ( theme_name ) ;
gtkrc_get_details ( filename , & engines , & symbolic_colors ) ;
fg = ( g_slist_find_custom ( symbolic_colors , " fg_color " , g_str_equal ) ! = NULL ) ;
bg = ( g_slist_find_custom ( symbolic_colors , " bg_color " , g_str_equal ) ! = NULL ) ;
base = ( g_slist_find_custom ( symbolic_colors , " base_color " , g_str_equal ) ! = NULL ) ;
text = ( g_slist_find_custom ( symbolic_colors , " text_color " , g_str_equal ) ! = NULL ) ;
fg_s = ( g_slist_find_custom ( symbolic_colors , " selected_fg_color " , g_str_equal ) ! = NULL ) ;
bg_s = ( g_slist_find_custom ( symbolic_colors , " selected_bg_color " , g_str_equal ) ! = NULL ) ;
enable_colors = ( fg & & bg & & base & & text & & fg_s & & bg_s ) ;
2007-01-19 17:54:55 +00:00
gtk_widget_set_sensitive ( WID ( " color_scheme_table " ) , enable_colors ) ;
gtk_widget_set_sensitive ( WID ( " color_scheme_revert_button " ) , enable_colors ) ;
2007-01-08 11:23:37 +00:00
2007-01-07 22:08:02 +00:00
if ( enable_colors )
gtk_widget_hide ( WID ( " color_scheme_message_hbox " ) ) ;
else
gtk_widget_show ( WID ( " color_scheme_message_hbox " ) ) ;
g_free ( filename ) ;
g_free ( theme_name ) ;
}
2002-12-03 16:16:45 +00:00
static void
gtk_theme_selection_changed ( GtkTreeSelection * selection ,
gpointer data )
{
2005-11-21 11:26:28 +00:00
GladeXML * dialog ;
2007-02-08 00:23:12 +00:00
GtkTreeModel * model ;
GtkTreeIter iter ;
2007-01-07 22:08:02 +00:00
2005-11-21 11:26:28 +00:00
dialog = gnome_theme_manager_get_theme_dialog ( ) ;
2007-01-07 22:08:02 +00:00
2002-12-03 16:16:45 +00:00
update_gconf_key_from_selection ( selection , GTK_THEME_KEY ) ;
2005-11-21 11:26:28 +00:00
gtk_theme_update_remove_button ( selection , WID ( " control_remove_button " ) , THEME_GTK ) ;
2007-01-19 17:54:55 +00:00
2007-02-08 00:23:12 +00:00
if ( gtk_tree_selection_get_selected ( selection , & model , & iter ) )
{
gchar * theme ;
gtk_tree_model_get ( model , & iter ,
THEME_ID_COLUMN , & theme ,
- 1 ) ;
update_color_scheme_tab ( theme ) ;
g_free ( theme ) ;
}
2002-12-03 16:16:45 +00:00
}
static void
window_theme_selection_changed ( GtkTreeSelection * selection ,
gpointer data )
{
2006-07-25 09:39:35 +00:00
GnomeWindowManager * window_manager = NULL ;
2002-12-03 16:16:45 +00:00
GnomeWMSettings wm_settings ;
GtkTreeIter iter ;
gchar * window_theme_name ;
GtkTreeModel * model ;
if ( setting_model )
return ;
if ( gtk_tree_selection_get_selected ( selection , & model , & iter ) )
{
gtk_tree_model_get ( model , & iter ,
THEME_ID_COLUMN , & window_theme_name ,
- 1 ) ;
}
else
2002-12-03 19:23:47 +00:00
{
return ;
}
2002-12-03 16:16:45 +00:00
window_manager = gnome_wm_manager_get_current ( gdk_display_get_default_screen ( gdk_display_get_default ( ) ) ) ;
2006-07-25 09:39:35 +00:00
if ( window_manager ! = NULL & & strcmp ( gnome_window_manager_get_name ( window_manager ) , " No name " ) ) {
2003-01-08 08:05:47 +00:00
wm_settings . flags = GNOME_WM_SETTING_THEME ;
wm_settings . theme = window_theme_name ;
gnome_window_manager_change_settings ( window_manager , & wm_settings ) ;
}
Patch from Kjartan Maraas to fix a bunch of leaks.
Thu Feb 13 18:51:37 2003 Jonathan Blandford <jrb@redhat.com>
* capplets/common/gconf-property-editor.c: (gconf_peditor_new):
* capplets/common/gnome-theme-info.c: (read_meta_theme),
(update_theme_index), (update_common_theme_dir_index),
(top_theme_dir_changed), (top_icon_theme_dir_changed),
(add_common_theme_dir_monitor), (real_add_top_theme_dir_monitor):
* capplets/default-applications/gnome-default-applications-properti
es.c: (initialize_default_applications), (read_editor),
(read_terminal):
* capplets/file-types/mime-edit-dialog.c: (fill_dialog):
* capplets/file-types/mime-type-info.c: (load_all_mime_types):
* capplets/file-types/mime-types-model.c:
(mime_types_model_get_value):
* capplets/font/main.c: (font_render_get_gconf), (enum_group_load):
* capplets/mouse/gnome-mouse-properties.c: (read_cursor_font),
(cursor_changed):
* capplets/theme-switcher/gnome-theme-details.c:
(window_theme_selection_changed):
* capplets/theme-switcher/gnome-theme-manager.c:
(meta_theme_selection_changed):
* capplets/theme-switcher/theme-thumbnail.c:
(generate_theme_thumbnail):
* libsounds/sound-properties.c: (sound_properties_add_directory),
(sound_properties_add_file):
* libsounds/sound-view.c: (compare_func):
* libwindow-settings/gnome-window-manager.c:
(gnome_window_manager_new): Patch from Kjartan Maraas to fix a
bunch of leaks.
2003-02-14 00:02:50 +00:00
g_free ( window_theme_name ) ;
2002-12-03 16:16:45 +00:00
}
static void
icon_theme_selection_changed ( GtkTreeSelection * selection ,
gpointer data )
{
2005-11-21 11:26:28 +00:00
GladeXML * dialog ;
dialog = gnome_theme_manager_get_theme_dialog ( ) ;
2002-12-03 16:16:45 +00:00
update_gconf_key_from_selection ( selection , ICON_THEME_KEY ) ;
2005-11-21 11:26:28 +00:00
gtk_theme_update_remove_button ( selection , WID ( " icon_remove_button " ) , THEME_ICON ) ;
2002-12-03 16:16:45 +00:00
}
static void
load_theme_names ( GtkTreeView * tree_view ,
GList * theme_list ,
2003-02-05 22:20:09 +00:00
const gchar * default_theme )
2002-12-03 16:16:45 +00:00
{
GList * list ;
GtkTreeModel * model ;
GtkWidget * swindow ;
gint i = 0 ;
swindow = GTK_WIDGET ( tree_view ) - > parent ;
model = gtk_tree_view_get_model ( tree_view ) ;
g_assert ( model ) ;
setting_model = TRUE ;
gtk_list_store_clear ( GTK_LIST_STORE ( model ) ) ;
gtk_scrolled_window_set_policy ( GTK_SCROLLED_WINDOW ( swindow ) ,
GTK_POLICY_NEVER , GTK_POLICY_NEVER ) ;
gtk_widget_set_usize ( swindow , - 1 , - 1 ) ;
2002-12-29 02:24:34 +00:00
for ( list = theme_list ; list ; list = list - > next - > next )
2002-12-03 16:16:45 +00:00
{
const char * name = list - > data ;
2002-12-29 02:24:34 +00:00
const char * id = list - > next - > data ;
2002-12-03 16:16:45 +00:00
GtkTreeIter iter ;
gboolean is_default ;
gtk_list_store_prepend ( GTK_LIST_STORE ( model ) , & iter ) ;
2003-02-05 22:20:09 +00:00
if ( default_theme & & strcmp ( default_theme , name ) = = 0 )
2002-12-03 16:16:45 +00:00
is_default = TRUE ;
else
is_default = FALSE ;
gtk_list_store_set ( GTK_LIST_STORE ( model ) , & iter ,
THEME_NAME_COLUMN , name ,
2002-12-29 02:24:34 +00:00
THEME_ID_COLUMN , id ,
2002-12-03 16:16:45 +00:00
THEME_FLAG_COLUMN , is_default ,
- 1 ) ;
if ( i = = MAX_ELEMENTS_BEFORE_SCROLLING )
{
GtkRequisition rectangle ;
gtk_widget_size_request ( GTK_WIDGET ( tree_view ) , & rectangle ) ;
gtk_widget_set_usize ( swindow , - 1 , rectangle . height ) ;
gtk_scrolled_window_set_policy ( GTK_SCROLLED_WINDOW ( swindow ) ,
GTK_POLICY_NEVER , GTK_POLICY_AUTOMATIC ) ;
}
i + + ;
}
setting_model = FALSE ;
}
/* Shared by icons and gtk+ */
static void
update_gconf_key_from_selection ( GtkTreeSelection * selection ,
const gchar * gconf_key )
{
GtkTreeModel * model ;
gchar * new_key ;
GConfClient * client ;
GtkTreeIter iter ;
if ( setting_model )
return ;
client = gconf_client_get_default ( ) ;
if ( gtk_tree_selection_get_selected ( selection , & model , & iter ) )
{
gtk_tree_model_get ( model , & iter ,
THEME_ID_COLUMN , & new_key ,
- 1 ) ;
}
else
/* This shouldn't happen */
{
new_key = NULL ;
}
if ( new_key ! = NULL )
{
gchar * old_key ;
old_key = gconf_client_get_string ( client , gconf_key , NULL ) ;
if ( old_key & & strcmp ( old_key , new_key ) )
{
gconf_client_set_string ( client , gconf_key , new_key , NULL ) ;
}
g_free ( old_key ) ;
}
else
{
gconf_client_unset ( client , gconf_key , NULL ) ;
}
g_free ( new_key ) ;
g_object_unref ( client ) ;
}
2005-11-21 11:26:28 +00:00
static void
remove_theme ( GtkWidget * button , gpointer data )
{
GladeXML * dialog ;
GtkWidget * confirm_dialog , * info_dialog ;
GList * theme_list , * string_list , * list ;
GtkTreeSelection * selection ;
GtkTreeModel * model ;
GtkTreeIter iter ;
gchar * theme_dir , * theme_selected , * treeview ;
gint response , theme_type ;
GList * uri_list ;
GnomeVFSResult result ;
confirm_dialog = gtk_message_dialog_new ( NULL ,
GTK_DIALOG_MODAL ,
GTK_MESSAGE_QUESTION ,
GTK_BUTTONS_OK_CANCEL ,
_ ( " Would you like to remove this theme? " ) ) ;
response = gtk_dialog_run ( GTK_DIALOG ( confirm_dialog ) ) ;
gtk_widget_destroy ( confirm_dialog ) ;
if ( response = = GTK_RESPONSE_CANCEL )
return ;
theme_type = ( gint ) data ;
switch ( theme_type ) {
case THEME_GTK : theme_dir = g_strdup ( " /gtk-2.0/ " ) ;
theme_list = gnome_theme_info_find_by_type ( GNOME_THEME_GTK_2 ) ;
treeview = g_strdup ( " control_theme_treeview " ) ;
break ;
case THEME_ICON : theme_list = gnome_theme_icon_info_find_all ( ) ;
treeview = g_strdup ( " icon_theme_treeview " ) ;
theme_dir = NULL ;
break ;
case THEME_WINDOW : theme_dir = g_strdup ( " /metacity-1/ " ) ;
theme_list = gnome_theme_info_find_by_type ( GNOME_THEME_METACITY ) ;
treeview = g_strdup ( " window_theme_treeview " ) ;
break ;
default : theme_list = NULL ;
theme_dir = NULL ;
treeview = NULL ;
break ;
}
if ( treeview ! = NULL ) {
dialog = gnome_theme_manager_get_theme_dialog ( ) ;
selection = gtk_tree_view_get_selection ( GTK_TREE_VIEW ( WID ( treeview ) ) ) ;
if ( gtk_tree_selection_get_selected ( selection , & model , & iter ) )
{
gtk_tree_model_get ( model , & iter ,
THEME_NAME_COLUMN , & theme_selected ,
- 1 ) ;
} else {
theme_selected = NULL ;
}
if ( theme_selected ! = NULL )
{
string_list = NULL ;
for ( list = theme_list ; list ; list = list - > next )
{
GnomeThemeInfo * info = list - > data ;
if ( ! strcmp ( info - > name , theme_selected ) )
{
if ( theme_type = = THEME_ICON )
theme_dir = g_strdup ( g_path_get_dirname ( info - > path ) ) ;
else
theme_dir = g_strdup_printf ( " %s/%s " , info - > path , theme_dir ) ;
uri_list = g_list_prepend ( NULL , gnome_vfs_uri_new ( theme_dir ) ) ;
2007-01-29 09:20:09 +00:00
result = gnome_vfs_xfer_delete_list ( uri_list , GNOME_VFS_XFER_ERROR_MODE_ABORT ,
GNOME_VFS_XFER_RECURSIVE ,
2005-11-21 11:26:28 +00:00
NULL , NULL ) ;
if ( result = = GNOME_VFS_OK )
{
info_dialog = gtk_message_dialog_new ( NULL ,
GTK_DIALOG_MODAL ,
GTK_MESSAGE_INFO ,
GTK_BUTTONS_OK_CANCEL ,
_ ( " Theme deleted succesfully. Please select another theme. " ) ) ;
gtk_list_store_remove ( GTK_LIST_STORE ( model ) , & iter ) ;
2006-11-13 16:01:42 +00:00
gtk_dialog_run ( GTK_DIALOG ( info_dialog ) ) ;
2005-11-21 11:26:28 +00:00
} else {
info_dialog = gtk_message_dialog_new ( NULL ,
GTK_DIALOG_MODAL ,
GTK_MESSAGE_ERROR ,
GTK_BUTTONS_OK ,
_ ( " Theme can not be deleted " ) ) ;
2006-11-13 16:01:42 +00:00
gtk_dialog_run ( GTK_DIALOG ( info_dialog ) ) ;
2005-11-21 11:26:28 +00:00
}
gtk_widget_destroy ( info_dialog ) ;
gnome_vfs_uri_list_free ( uri_list ) ;
}
}
}
}
}
2007-01-29 09:20:09 +00:00
static void
2007-01-07 22:08:02 +00:00
color_select ( GtkWidget * colorbutton , GladeXML * dialog )
2006-11-13 16:01:42 +00:00
{
GConfClient * client = NULL ;
gchar * new_scheme ;
GdkColor colors [ 6 ] ;
gchar * bg , * fg , * text , * base , * selected_fg , * selected_bg ;
GtkWidget * widget ;
widget = WID ( " fg_colorbutton " ) ;
gtk_color_button_get_color ( GTK_COLOR_BUTTON ( widget ) , & colors [ 0 ] ) ;
widget = WID ( " bg_colorbutton " ) ;
gtk_color_button_get_color ( GTK_COLOR_BUTTON ( widget ) , & colors [ 1 ] ) ;
widget = WID ( " text_colorbutton " ) ;
gtk_color_button_get_color ( GTK_COLOR_BUTTON ( widget ) , & colors [ 2 ] ) ;
widget = WID ( " base_colorbutton " ) ;
gtk_color_button_get_color ( GTK_COLOR_BUTTON ( widget ) , & colors [ 3 ] ) ;
widget = WID ( " selected_fg_colorbutton " ) ;
gtk_color_button_get_color ( GTK_COLOR_BUTTON ( widget ) , & colors [ 4 ] ) ;
widget = WID ( " selected_bg_colorbutton " ) ;
gtk_color_button_get_color ( GTK_COLOR_BUTTON ( widget ) , & colors [ 5 ] ) ;
- Remove seperate color scheme saving UI - Add support for
2007-01-19 Thomas Wood <thos@gnome.org>
* gnome-theme-details.c: (update_color_scheme_tab), (color_select),
(toggle_color_scheme_key):
* gnome-theme-manager.c: (free_all), (load_meta_themes),
(meta_theme_setup_info), (meta_theme_selection_changed),
(update_themes_from_disk), (add_custom_row_to_meta_theme),
(themes_equal), (update_settings_from_gconf_idle),
(update_settings_from_gconf), (gtk_theme_key_changed),
(setup_dialog):
* gnome-theme-save.c: (write_theme_to_disk):
* theme-properties.glade:
- Remove seperate color scheme saving UI
- Add support for gtk-color-scheme key in metatheme info
2007-01-19 Thomas Wood <thos@gnome.org>
* gnome-theme-apply.c: (gnome_meta_theme_set):
* gnome-theme-info.c: (gnome_theme_read_meta_theme),
(gnome_theme_meta_info_new), (gnome_theme_meta_info_free),
(gnome_theme_meta_info_print), (gnome_theme_meta_info_compare):
* gnome-theme-info.h:
Add support for saving and applying the gtk-color-scheme key
svn path=/trunk/; revision=7152
2007-01-19 01:33:26 +00:00
fg = g_strdup_printf ( " fg_color:#%.2x%.2x%.2x \n " , colors [ 0 ] . red , colors [ 0 ] . green , colors [ 0 ] . blue ) ;
bg = g_strdup_printf ( " bg_color:#%.2x%.2x%.2x \n " , colors [ 1 ] . red , colors [ 1 ] . green , colors [ 1 ] . blue ) ;
text = g_strdup_printf ( " text_color:#%.2x%.2x%.2x \n " , colors [ 2 ] . red , colors [ 2 ] . green , colors [ 2 ] . blue ) ;
base = g_strdup_printf ( " base_color:#%.2x%.2x%.2x \n " , colors [ 3 ] . red , colors [ 3 ] . green , colors [ 3 ] . blue ) ;
2007-02-22 19:11:24 +00:00
selected_fg = g_strdup_printf ( " selected_fg_color:#%.2x%.2x%.2x \n " , colors [ 4 ] . red , colors [ 4 ] . green , colors [ 4 ] . blue ) ;
- Remove seperate color scheme saving UI - Add support for
2007-01-19 Thomas Wood <thos@gnome.org>
* gnome-theme-details.c: (update_color_scheme_tab), (color_select),
(toggle_color_scheme_key):
* gnome-theme-manager.c: (free_all), (load_meta_themes),
(meta_theme_setup_info), (meta_theme_selection_changed),
(update_themes_from_disk), (add_custom_row_to_meta_theme),
(themes_equal), (update_settings_from_gconf_idle),
(update_settings_from_gconf), (gtk_theme_key_changed),
(setup_dialog):
* gnome-theme-save.c: (write_theme_to_disk):
* theme-properties.glade:
- Remove seperate color scheme saving UI
- Add support for gtk-color-scheme key in metatheme info
2007-01-19 Thomas Wood <thos@gnome.org>
* gnome-theme-apply.c: (gnome_meta_theme_set):
* gnome-theme-info.c: (gnome_theme_read_meta_theme),
(gnome_theme_meta_info_new), (gnome_theme_meta_info_free),
(gnome_theme_meta_info_print), (gnome_theme_meta_info_compare):
* gnome-theme-info.h:
Add support for saving and applying the gtk-color-scheme key
svn path=/trunk/; revision=7152
2007-01-19 01:33:26 +00:00
selected_bg = g_strdup_printf ( " selected_bg_color:#%.2x%.2x%.2x " , colors [ 5 ] . red , colors [ 5 ] . green , colors [ 5 ] . blue ) ;
2006-11-13 16:01:42 +00:00
new_scheme = g_strconcat ( fg , bg , text , base , selected_fg , selected_bg , NULL ) ;
client = gconf_client_get_default ( ) ;
/* 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 ( client , COLOR_SCHEME_KEY , new_scheme , NULL ) ;
g_object_unref ( G_OBJECT ( client ) ) ;
free_all ( fg , bg , text , base , selected_fg , selected_bg , new_scheme , NULL ) ;
}
void
2007-01-19 17:54:55 +00:00
revert_color_scheme_key ( GtkWidget * checkbutton , gpointer * data )
2006-11-13 16:01:42 +00:00
{
GConfClient * client = NULL ;
GladeXML * dialog ;
dialog = gnome_theme_manager_get_theme_dialog ( ) ;
2007-01-19 17:54:55 +00:00
client = gconf_client_get_default ( ) ;
gconf_client_set_string ( client , COLOR_SCHEME_KEY , " " , NULL ) ;
g_object_unref ( G_OBJECT ( client ) ) ;
2007-01-07 22:08:02 +00:00
}
2002-12-03 16:16:45 +00:00
void
gnome_theme_details_init ( void )
{
GtkWidget * parent , * widget ;
GladeXML * dialog ;
2007-01-19 17:54:55 +00:00
gchar * theme ;
2002-12-03 16:16:45 +00:00
if ( theme_details_initted )
return ;
theme_details_initted = TRUE ;
dialog = gnome_theme_manager_get_theme_dialog ( ) ;
parent = WID ( " theme_details_dialog " ) ;
setup_tree_view ( GTK_TREE_VIEW ( WID ( " control_theme_treeview " ) ) ,
( GCallback ) gtk_theme_selection_changed ,
dialog ) ;
setup_tree_view ( GTK_TREE_VIEW ( WID ( " window_theme_treeview " ) ) ,
( GCallback ) window_theme_selection_changed ,
dialog ) ;
setup_tree_view ( GTK_TREE_VIEW ( WID ( " icon_theme_treeview " ) ) ,
( GCallback ) icon_theme_selection_changed ,
dialog ) ;
/* gtk themes */
2005-11-21 11:26:28 +00:00
widget = WID ( " control_remove_button " ) ;
2007-01-29 09:20:09 +00:00
g_signal_connect ( G_OBJECT ( widget ) , " clicked " , G_CALLBACK ( remove_theme ) , ( gint * ) THEME_GTK ) ;
2006-04-19 10:48:04 +00:00
widget = WID ( " control_install_button " ) ;
g_signal_connect ( G_OBJECT ( widget ) , " clicked " , G_CALLBACK ( gnome_theme_installer_run_cb ) , parent ) ;
2002-12-03 16:16:45 +00:00
/* window manager themes */
2005-11-21 11:26:28 +00:00
widget = WID ( " window_remove_button " ) ;
g_signal_connect ( G_OBJECT ( widget ) , " clicked " , G_CALLBACK ( remove_theme ) , ( gint * ) THEME_WINDOW ) ;
2006-04-19 10:48:04 +00:00
widget = WID ( " window_install_button " ) ;
g_signal_connect ( G_OBJECT ( widget ) , " clicked " , G_CALLBACK ( gnome_theme_installer_run_cb ) , parent ) ;
2002-12-03 16:16:45 +00:00
/* icon themes */
2005-11-21 11:26:28 +00:00
widget = WID ( " icon_remove_button " ) ;
g_signal_connect ( G_OBJECT ( widget ) , " clicked " , G_CALLBACK ( remove_theme ) , ( gint * ) THEME_ICON ) ;
2006-04-19 10:48:04 +00:00
widget = WID ( " icon_install_button " ) ;
g_signal_connect ( G_OBJECT ( widget ) , " clicked " , G_CALLBACK ( gnome_theme_installer_run_cb ) , parent ) ;
2002-12-03 16:16:45 +00:00
2006-11-13 16:01:42 +00:00
/* color preferences */
widget = WID ( " fg_colorbutton " ) ;
g_signal_connect ( G_OBJECT ( widget ) , " color_set " , G_CALLBACK ( color_select ) , dialog ) ;
widget = WID ( " bg_colorbutton " ) ;
g_signal_connect ( G_OBJECT ( widget ) , " color_set " , G_CALLBACK ( color_select ) , dialog ) ;
widget = WID ( " text_colorbutton " ) ;
g_signal_connect ( G_OBJECT ( widget ) , " color_set " , G_CALLBACK ( color_select ) , dialog ) ;
widget = WID ( " base_colorbutton " ) ;
g_signal_connect ( G_OBJECT ( widget ) , " color_set " , G_CALLBACK ( color_select ) , dialog ) ;
widget = WID ( " selected_fg_colorbutton " ) ;
g_signal_connect ( G_OBJECT ( widget ) , " color_set " , G_CALLBACK ( color_select ) , dialog ) ;
widget = WID ( " selected_bg_colorbutton " ) ;
g_signal_connect ( G_OBJECT ( widget ) , " color_set " , G_CALLBACK ( color_select ) , dialog ) ;
2007-01-19 17:54:55 +00:00
widget = WID ( " color_scheme_revert_button " ) ;
g_signal_connect ( G_OBJECT ( widget ) , " clicked " , G_CALLBACK ( revert_color_scheme_key ) , parent ) ;
2006-11-13 16:01:42 +00:00
2007-01-19 17:54:55 +00:00
g_object_get ( G_OBJECT ( gtk_settings_get_default ( ) ) , " gtk-color-scheme " , & theme , NULL ) ;
update_color_buttons_from_string ( theme ) ;
2006-11-13 16:01:42 +00:00
2007-02-08 00:23:12 +00:00
g_signal_connect ( gtk_settings_get_default ( ) , " notify::gtk-color-scheme " ,
G_CALLBACK ( color_scheme_changed ) , NULL ) ;
2007-01-07 22:08:02 +00:00
/* general signals */
2002-12-03 16:16:45 +00:00
g_signal_connect ( G_OBJECT ( parent ) , " response " , G_CALLBACK ( cb_dialog_response ) , NULL ) ;
g_signal_connect ( G_OBJECT ( parent ) , " delete-event " , G_CALLBACK ( gtk_true ) , NULL ) ;
gtk_drag_dest_set ( parent , GTK_DEST_DEFAULT_ALL ,
drop_types , n_drop_types ,
GDK_ACTION_COPY | GDK_ACTION_LINK | GDK_ACTION_MOVE ) ;
g_signal_connect ( G_OBJECT ( parent ) , " drag-motion " , G_CALLBACK ( gnome_theme_manager_drag_motion_cb ) , NULL ) ;
g_signal_connect ( G_OBJECT ( parent ) , " drag-leave " , G_CALLBACK ( gnome_theme_manager_drag_leave_cb ) , NULL ) ;
g_signal_connect ( G_OBJECT ( parent ) , " drag-data-received " , G_CALLBACK ( gnome_theme_manager_drag_data_received_cb ) , NULL ) ;
2004-08-20 16:50:57 +00:00
capplet_set_icon ( parent , " gnome-settings-theme " ) ;
2002-12-03 16:16:45 +00:00
gnome_theme_details_reread_themes_from_disk ( ) ;
}
void
gnome_theme_details_show ( void )
{
GladeXML * dialog ;
GtkWidget * parent ;
gnome_theme_details_init ( ) ;
dialog = gnome_theme_manager_get_theme_dialog ( ) ;
parent = WID ( " theme_details_dialog " ) ;
gtk_widget_show ( parent ) ;
gtk_window_present ( GTK_WINDOW ( parent ) ) ;
}
static void
warn_about_no_themes ( void )
{
static GtkWidget * dialog ;
if ( dialog = = NULL )
{
dialog = gtk_message_dialog_new ( NULL ,
GTK_DIALOG_MODAL ,
GTK_MESSAGE_ERROR ,
GTK_BUTTONS_OK ,
_ ( " No themes could be found on your system. This probably means that your \" Theme Preferences \" dialog was improperly installed, or you haven't installed the \" gnome-themes \" package. " ) ) ;
gtk_dialog_run ( GTK_DIALOG ( dialog ) ) ;
gtk_widget_destroy ( dialog ) ;
exit ( 0 ) ;
}
}
void
gnome_theme_details_reread_themes_from_disk ( void )
{
GladeXML * dialog ;
GList * theme_list ;
GList * string_list ;
GList * list ;
GnomeWindowManager * window_manager ;
gboolean have_gtk_theme ;
gboolean have_window_theme ;
gboolean have_icon_theme ;
2003-01-16 07:40:29 +00:00
gnome_theme_details_init ( ) ;
2002-12-03 16:16:45 +00:00
dialog = gnome_theme_manager_get_theme_dialog ( ) ;
window_manager = gnome_wm_manager_get_current ( gdk_display_get_default_screen ( gdk_display_get_default ( ) ) ) ;
/* First, we update the GTK+ themes page */
theme_list = gnome_theme_info_find_by_type ( GNOME_THEME_GTK_2 ) ;
string_list = NULL ;
for ( list = theme_list ; list ; list = list - > next )
{
GnomeThemeInfo * info = list - > data ;
2002-12-29 02:24:34 +00:00
/* Use same string for ID as for name with GTK themes */
string_list = g_list_prepend ( string_list , info - > name ) ;
2002-12-03 16:16:45 +00:00
string_list = g_list_prepend ( string_list , info - > name ) ;
}
if ( string_list = = NULL )
{
have_gtk_theme = FALSE ;
2006-04-19 10:48:04 +00:00
gtk_widget_hide ( WID ( " control_theme_hbox " ) ) ;
2002-12-03 16:16:45 +00:00
}
else
{
have_gtk_theme = TRUE ;
2006-04-19 10:48:04 +00:00
gtk_widget_show ( WID ( " control_theme_hbox " ) ) ;
2003-02-05 22:20:09 +00:00
load_theme_names ( GTK_TREE_VIEW ( WID ( " control_theme_treeview " ) ) , string_list , gtk_theme_default_name ) ;
2002-12-03 16:16:45 +00:00
g_list_free ( string_list ) ;
}
g_list_free ( theme_list ) ;
/* Next, we do the window managers */
2003-01-08 08:05:47 +00:00
theme_list = window_manager ? gnome_window_manager_get_theme_list ( window_manager ) : NULL ;
2002-12-29 02:24:34 +00:00
string_list = NULL ;
for ( list = theme_list ; list ; list = list - > next )
{
/* Use same string for ID as for name with Window themes */
string_list = g_list_prepend ( string_list , list - > data ) ;
string_list = g_list_prepend ( string_list , list - > data ) ;
}
2002-12-03 16:16:45 +00:00
if ( string_list = = NULL )
{
have_window_theme = FALSE ;
2006-04-19 10:48:04 +00:00
gtk_widget_hide ( WID ( " window_theme_hbox " ) ) ;
2002-12-03 16:16:45 +00:00
}
else
{
have_window_theme = TRUE ;
2006-04-19 10:48:04 +00:00
gtk_widget_show ( WID ( " window_theme_hbox " ) ) ;
2003-02-05 22:20:09 +00:00
load_theme_names ( GTK_TREE_VIEW ( WID ( " window_theme_treeview " ) ) , string_list , window_theme_default_name ) ;
2002-12-03 16:16:45 +00:00
g_list_free ( string_list ) ;
}
2002-12-29 02:24:34 +00:00
g_list_free ( theme_list ) ;
2002-12-03 16:16:45 +00:00
/* Third, we do the icon theme */
theme_list = gnome_theme_icon_info_find_all ( ) ;
string_list = NULL ;
for ( list = theme_list ; list ; list = list - > next )
{
GnomeThemeIconInfo * info = list - > data ;
2002-12-29 02:24:34 +00:00
string_list = g_list_prepend ( string_list , path_to_theme_id ( info - > path ) ) ;
2002-12-03 16:16:45 +00:00
string_list = g_list_prepend ( string_list , info - > name ) ;
}
if ( string_list = = NULL )
{
have_icon_theme = FALSE ;
2006-04-19 10:48:04 +00:00
gtk_widget_hide ( WID ( " icon_theme_hbox " ) ) ;
2002-12-03 16:16:45 +00:00
}
else
{
have_icon_theme = TRUE ;
2006-04-19 10:48:04 +00:00
gtk_widget_show ( WID ( " icon_theme_hbox " ) ) ;
2003-02-05 22:20:09 +00:00
load_theme_names ( GTK_TREE_VIEW ( WID ( " icon_theme_treeview " ) ) , string_list , icon_theme_default_name ) ;
2002-12-03 16:16:45 +00:00
g_list_free ( string_list ) ;
}
g_list_free ( theme_list ) ;
if ( ! have_gtk_theme & & ! have_window_theme & & ! have_icon_theme )
warn_about_no_themes ( ) ;
gnome_theme_details_update_from_gconf ( ) ;
}
static void
update_list_something ( GtkWidget * tree_view , const gchar * theme )
{
GtkTreeModel * model ;
GtkTreeIter iter ;
GtkTreeIter next_iter ;
gboolean valid ;
gboolean theme_found ;
model = gtk_tree_view_get_model ( GTK_TREE_VIEW ( tree_view ) ) ;
g_assert ( model ) ;
valid = gtk_tree_model_get_iter_first ( model , & iter ) ;
theme_found = FALSE ;
while ( valid )
{
gchar * theme_id ;
guint flags = 0 ;
next_iter = iter ;
valid = gtk_tree_model_iter_next ( model , & next_iter ) ;
gtk_tree_model_get ( model , & iter ,
THEME_ID_COLUMN , & theme_id ,
THEME_FLAG_COLUMN , & flags ,
- 1 ) ;
if ( ! strcmp ( theme , theme_id ) )
{
GtkTreePath * path ;
2004-04-02 14:33:59 +00:00
GtkTreePath * cursor_path ;
gboolean cursor_same = FALSE ;
gtk_tree_view_get_cursor ( GTK_TREE_VIEW ( tree_view ) , & cursor_path , NULL ) ;
2002-12-03 16:16:45 +00:00
path = gtk_tree_model_get_path ( model , & iter ) ;
2004-04-02 14:33:59 +00:00
if ( cursor_path & & gtk_tree_path_compare ( path , cursor_path ) = = 0 )
cursor_same = TRUE ;
gtk_tree_path_free ( cursor_path ) ;
if ( ! cursor_same )
{
gtk_tree_view_set_cursor ( GTK_TREE_VIEW ( tree_view ) , path , NULL , FALSE ) ;
}
2002-12-03 16:16:45 +00:00
gtk_tree_path_free ( path ) ;
theme_found = TRUE ;
}
else
{
if ( flags & THEME_FLAG_CUSTOM )
{
gtk_list_store_remove ( GTK_LIST_STORE ( model ) , & iter ) ;
}
}
g_free ( theme_id ) ;
iter = next_iter ;
if ( theme_found )
break ;
}
if ( theme_found = = FALSE )
/* Never found the theme. */
{
GtkTreePath * path ;
gtk_list_store_prepend ( GTK_LIST_STORE ( model ) , & iter ) ;
gtk_list_store_set ( GTK_LIST_STORE ( model ) , & iter ,
THEME_NAME_COLUMN , theme ,
THEME_ID_COLUMN , theme ,
THEME_FLAG_COLUMN , THEME_FLAG_CUSTOM ,
- 1 ) ;
path = gtk_tree_model_get_path ( model , & iter ) ;
gtk_tree_view_set_cursor ( GTK_TREE_VIEW ( tree_view ) , path , NULL , FALSE ) ;
gtk_tree_path_free ( path ) ;
}
}
2007-01-29 09:20:09 +00:00
static void
2006-11-13 16:01:42 +00:00
update_color_buttons_from_string ( gchar * color_scheme )
{
GdkColor color_scheme_colors [ 6 ] ;
gchar * * color_scheme_strings , * * color_scheme_pair , * current_string ;
gint i ;
GtkWidget * widget ;
GladeXML * dialog ;
if ( ! color_scheme ) return ;
if ( ! strcmp ( color_scheme , " " ) ) return ;
dialog = gnome_theme_manager_get_theme_dialog ( ) ;
/* The color scheme string consists of name:color pairs, seperated by
* newlines , so first we split the string up by new line */
color_scheme_strings = g_strsplit ( color_scheme , " \n " , 0 ) ;
/* loop through the name:color pairs, and save the colour if we recognise the name */
i = 0 ;
while ( ( current_string = color_scheme_strings [ i + + ] ) )
{
color_scheme_pair = g_strsplit ( current_string , " : " , 0 ) ;
if ( color_scheme_pair [ 0 ] = = NULL )
continue ;
g_strstrip ( color_scheme_pair [ 0 ] ) ;
g_strstrip ( color_scheme_pair [ 1 ] ) ;
if ( ! strcmp ( " fg_color " , color_scheme_pair [ 0 ] ) )
gdk_color_parse ( color_scheme_pair [ 1 ] , & color_scheme_colors [ 0 ] ) ;
else if ( ! strcmp ( " bg_color " , color_scheme_pair [ 0 ] ) )
gdk_color_parse ( color_scheme_pair [ 1 ] , & color_scheme_colors [ 1 ] ) ;
else if ( ! strcmp ( " text_color " , color_scheme_pair [ 0 ] ) )
gdk_color_parse ( color_scheme_pair [ 1 ] , & color_scheme_colors [ 2 ] ) ;
else if ( ! strcmp ( " base_color " , color_scheme_pair [ 0 ] ) )
gdk_color_parse ( color_scheme_pair [ 1 ] , & color_scheme_colors [ 3 ] ) ;
else if ( ! strcmp ( " selected_fg_color " , color_scheme_pair [ 0 ] ) )
gdk_color_parse ( color_scheme_pair [ 1 ] , & color_scheme_colors [ 4 ] ) ;
else if ( ! strcmp ( " selected_bg_color " , color_scheme_pair [ 0 ] ) )
gdk_color_parse ( color_scheme_pair [ 1 ] , & color_scheme_colors [ 5 ] ) ;
g_strfreev ( color_scheme_pair ) ;
}
g_strfreev ( color_scheme_strings ) ;
/* not sure whether we need to do this, but it can't hurt */
for ( i = 0 ; i < 6 ; i + + )
gdk_colormap_alloc_color ( gdk_colormap_get_system ( ) , & color_scheme_colors [ i ] , FALSE , TRUE ) ;
/* now set all the buttons to the correct settings */
widget = WID ( " fg_colorbutton " ) ;
gtk_color_button_set_color ( GTK_COLOR_BUTTON ( widget ) , & color_scheme_colors [ 0 ] ) ;
widget = WID ( " bg_colorbutton " ) ;
gtk_color_button_set_color ( GTK_COLOR_BUTTON ( widget ) , & color_scheme_colors [ 1 ] ) ;
widget = WID ( " text_colorbutton " ) ;
gtk_color_button_set_color ( GTK_COLOR_BUTTON ( widget ) , & color_scheme_colors [ 2 ] ) ;
widget = WID ( " base_colorbutton " ) ;
gtk_color_button_set_color ( GTK_COLOR_BUTTON ( widget ) , & color_scheme_colors [ 3 ] ) ;
widget = WID ( " selected_fg_colorbutton " ) ;
gtk_color_button_set_color ( GTK_COLOR_BUTTON ( widget ) , & color_scheme_colors [ 4 ] ) ;
widget = WID ( " selected_bg_colorbutton " ) ;
gtk_color_button_set_color ( GTK_COLOR_BUTTON ( widget ) , & color_scheme_colors [ 5 ] ) ;
2007-01-19 17:54:55 +00:00
2006-11-13 16:01:42 +00:00
}
2002-12-03 16:16:45 +00:00
void
gnome_theme_details_update_from_gconf ( void )
{
GConfClient * client ;
GladeXML * dialog ;
2007-01-19 17:54:55 +00:00
GtkWidget * tree_view ;
2006-11-13 16:01:42 +00:00
gchar * theme = NULL ;
2006-07-25 09:39:35 +00:00
GnomeWindowManager * window_manager = NULL ;
2002-12-03 16:16:45 +00:00
GnomeWMSettings wm_settings ;
2003-01-16 07:40:29 +00:00
gnome_theme_details_init ( ) ;
2002-12-03 16:16:45 +00:00
window_manager = gnome_wm_manager_get_current ( gdk_display_get_default_screen ( gdk_display_get_default ( ) ) ) ;
client = gconf_client_get_default ( ) ;
dialog = gnome_theme_manager_get_theme_dialog ( ) ;
/* FIXME: What do we really do when there is no theme? Ask Havoc here. */
tree_view = WID ( " control_theme_treeview " ) ;
theme = gconf_client_get_string ( client , GTK_THEME_KEY , NULL ) ;
update_list_something ( tree_view , theme ) ;
2007-02-08 00:23:12 +00:00
update_color_scheme_tab ( theme ) ;
2002-12-03 16:16:45 +00:00
g_free ( theme ) ;
tree_view = WID ( " window_theme_treeview " ) ;
wm_settings . flags = GNOME_WM_SETTING_THEME ;
2006-07-25 09:39:35 +00:00
if ( window_manager ! = NULL & & strcmp ( gnome_window_manager_get_name ( window_manager ) , " No name " ) ) {
2002-12-30 19:24:05 +00:00
gnome_window_manager_get_settings ( window_manager , & wm_settings ) ;
2003-01-08 08:05:47 +00:00
update_list_something ( tree_view , wm_settings . theme ) ;
}
2002-12-03 16:16:45 +00:00
2002-12-06 21:56:37 +00:00
tree_view = WID ( " icon_theme_treeview " ) ;
2002-12-03 16:16:45 +00:00
theme = gconf_client_get_string ( client , ICON_THEME_KEY , NULL ) ;
update_list_something ( tree_view , theme ) ;
g_free ( theme ) ;
2006-11-13 16:01:42 +00:00
2007-01-19 17:54:55 +00:00
/* update colour scheme tab */
2006-11-13 16:01:42 +00:00
theme = gconf_client_get_string ( client , COLOR_SCHEME_KEY , NULL ) ;
2007-01-19 17:54:55 +00:00
update_color_buttons_from_string ( theme ) ;
g_free ( theme ) ;
2006-11-13 16:01:42 +00:00
2007-02-08 00:23:12 +00:00
g_object_unref ( client ) ;
}
static void
color_scheme_changed ( GObject * settings ,
GParamSpec * pspec ,
gpointer data )
{
GConfClient * client ;
gchar * theme ;
client = gconf_client_get_default ( ) ;
theme = gconf_client_get_string ( client , COLOR_SCHEME_KEY , NULL ) ;
if ( theme = = NULL | | strcmp ( theme , " " ) = = 0 )
g_object_get ( settings , " gtk-color-scheme " , & theme , NULL ) ;
2006-11-13 16:01:42 +00:00
2007-02-08 00:23:12 +00:00
update_color_buttons_from_string ( theme ) ;
g_free ( theme ) ;
2006-11-13 16:01:42 +00:00
g_object_unref ( client ) ;
2002-12-03 16:16:45 +00:00
}