gnome-control-center/capplets/appearance/appearance-ui.c
Jens Granseuer 5e58d70e8f shave off a number of unnecessary casts
2007-08-07  Jens Granseuer  <jensgr@gmx.net>

	* appearance-desktop.c: (wp_add_images), (wp_dragged_image),
	(desktop_init):
	* appearance-main.c: (main):
	* appearance-style.c: (update_color_buttons_from_settings),
	(check_color_schemes_enabled), (update_cursor_size_scale),
	(prepare_list), (style_init):
	* appearance-ui.c: (ui_init): shave off a number of unnecessary casts

svn path=/trunk/; revision=7975
2007-08-07 21:46:06 +00:00

239 lines
6.5 KiB
C

/*
* Copyright (C) 2007 The GNOME Foundation
* Written by Jonathan Blandford <jrb@gnome.org>
* Jens Granseuer <jensgr@gmx.net>
* All Rights Reserved
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#include "appearance.h"
#include "gconf-property-editor.h"
static GConfEnumStringPair toolbar_style_enums[] = {
{ 0, "both" },
{ 1, "both-horiz" },
{ 2, "icons" },
{ 3, "text" },
{ -1, NULL }
};
static void
show_handlebar (AppearanceData *data, gboolean show)
{
GtkWidget *handlebox = glade_xml_get_widget (data->xml, "toolbar_handlebox");
GtkWidget *toolbar = glade_xml_get_widget (data->xml, "toolbar_toolbar");
GtkWidget *align = glade_xml_get_widget (data->xml, "toolbar_align");
g_object_ref (handlebox);
g_object_ref (toolbar);
if (GTK_BIN (align)->child)
gtk_container_remove (GTK_CONTAINER (align), GTK_BIN (align)->child);
if (GTK_BIN (handlebox)->child)
gtk_container_remove (GTK_CONTAINER (handlebox), GTK_BIN (handlebox)->child);
if (show) {
gtk_container_add (GTK_CONTAINER (align), handlebox);
gtk_container_add (GTK_CONTAINER (handlebox), toolbar);
g_object_unref (handlebox);
} else {
gtk_container_add (GTK_CONTAINER (align), toolbar);
}
g_object_unref (toolbar);
}
static void
set_toolbar_style (AppearanceData *data, const char *value)
{
static const GtkToolbarStyle gtk_toolbar_styles[] =
{ GTK_TOOLBAR_BOTH, GTK_TOOLBAR_BOTH_HORIZ, GTK_TOOLBAR_ICONS, GTK_TOOLBAR_TEXT };
int enum_val;
if (!gconf_string_to_enum (toolbar_style_enums, value, &enum_val))
enum_val = 0;
gtk_toolbar_set_style (GTK_TOOLBAR (glade_xml_get_widget (data->xml, "toolbar_toolbar")),
gtk_toolbar_styles[enum_val]);
}
static void
set_have_icons (AppearanceData *data, gboolean value)
{
static const char *menu_item_names[] = {
"menu_item_1",
"menu_item_2",
"menu_item_3",
"menu_item_4",
"menu_item_5",
"cut",
"copy",
"paste",
NULL
};
const char **name;
for (name = menu_item_names; *name != NULL; name++) {
GtkImageMenuItem *item = GTK_IMAGE_MENU_ITEM (glade_xml_get_widget (data->xml, *name));
GtkWidget *image;
if (value) {
image = g_object_get_data (G_OBJECT (item), "image");
if (image) {
gtk_image_menu_item_set_image (item, image);
g_object_unref (image);
}
} else {
image = gtk_image_menu_item_get_image (item);
g_object_set_data (G_OBJECT (item), "image", image);
g_object_ref (image);
gtk_image_menu_item_set_image (item, NULL);
}
}
}
/** GConf Callbacks and Conversions **/
static GConfValue *
toolbar_from_widget (GConfPropertyEditor *peditor, GConfValue *value)
{
GConfValue *new_value;
new_value = gconf_value_new (GCONF_VALUE_STRING);
gconf_value_set_string (new_value,
gconf_enum_to_string (toolbar_style_enums,
gconf_value_get_int (value)));
return new_value;
}
static GConfValue *
toolbar_to_widget (GConfPropertyEditor *peditor, GConfValue *value)
{
GConfValue *new_value;
const gchar *str;
gint val;
str = (value && (value->type == GCONF_VALUE_STRING)) ?
gconf_value_get_string (value) : NULL;
if (!gconf_string_to_enum (toolbar_style_enums, str, &val))
val = 0;
new_value = gconf_value_new (GCONF_VALUE_INT);
gconf_value_set_int (new_value, val);
return new_value;
}
static void
toolbar_style_cb (GConfPropertyEditor *peditor,
gchar *key,
GConfValue *value,
AppearanceData *data)
{
set_toolbar_style (data, gconf_value_get_string (value));
}
static void
menus_have_icons_cb (GConfPropertyEditor *peditor,
gchar *key,
GConfValue *value,
AppearanceData *data)
{
set_have_icons (data, gconf_value_get_bool (value));
}
static void
toolbar_detachable_cb (GConfClient *client,
guint id,
GConfEntry *entry,
AppearanceData *data)
{
show_handlebar (data, gconf_value_get_bool (entry->value));
}
/** GUI Callbacks **/
static gint
button_press_block_cb (GtkWidget *toolbar,
GdkEvent *event,
gpointer data)
{
return TRUE;
}
/** Public Functions **/
void
ui_init (AppearanceData *data)
{
GObject *peditor;
char *toolbar_style;
gconf_client_add_dir (data->client, "/desktop/gnome/interface",
GCONF_CLIENT_PRELOAD_ONELEVEL, NULL);
peditor = gconf_peditor_new_boolean
(NULL, "/desktop/gnome/interface/can_change_accels",
glade_xml_get_widget (data->xml, "menu_accel_toggle"), NULL);
peditor = gconf_peditor_new_boolean
(NULL, "/desktop/gnome/interface/menus_have_icons",
glade_xml_get_widget (data->xml, "menu_icons_toggle"), NULL);
g_signal_connect (peditor, "value_changed",
(GCallback) menus_have_icons_cb, data);
set_have_icons (data,
gconf_client_get_bool (data->client,
"/desktop/gnome/interface/menus_have_icons",
NULL));
peditor = gconf_peditor_new_combo_box
(NULL, "/desktop/gnome/interface/toolbar_style",
glade_xml_get_widget (data->xml, "toolbar_style_select"),
"conv-to-widget-cb", toolbar_to_widget,
"conv-from-widget-cb", toolbar_from_widget,
NULL);
g_signal_connect (peditor, "value_changed",
(GCallback) toolbar_style_cb, data);
g_signal_connect (glade_xml_get_widget (data->xml, "toolbar_handlebox"),
"button_press_event",
(GCallback) button_press_block_cb, NULL);
show_handlebar (data,
gconf_client_get_bool (data->client,
"/desktop/gnome/interface/toolbar_detachable",
NULL));
toolbar_style = gconf_client_get_string
(data->client,
"/desktop/gnome/interface/toolbar_style",
NULL);
set_toolbar_style (data, toolbar_style);
g_free (toolbar_style);
/* no ui for detachable toolbars */
gconf_client_notify_add (data->client,
"/desktop/gnome/interface/toolbar_detachable",
(GConfClientNotifyFunc) toolbar_detachable_cb,
data, NULL, NULL);
}