2002-06-17 Jody Goldberg <jody@gnome.org> http://bugzilla.gnome.org/show_bug.cgi?id=85327 * gnome-settings-xsettings.c (translate_string_string) : These strings do look wrong. The capplet is setting the keys from the schema. we were not mapping them to the write xsettings. It did not really matter because we were not using xsettings to communicate these values.
211 lines
5.3 KiB
C
211 lines
5.3 KiB
C
#include <config.h>
|
|
#include <string.h>
|
|
#include <stdio.h>
|
|
#include <glib.h>
|
|
#include <libgnome/gnome-i18n.h>
|
|
|
|
#include "gnome-settings-daemon.h"
|
|
#include "gnome-settings-xsettings.h"
|
|
#include "xsettings-manager.h"
|
|
|
|
extern XSettingsManager *manager;
|
|
|
|
|
|
typedef struct _TranslationEntry TranslationEntry;
|
|
typedef void (* TranslationFunc) (TranslationEntry *trans,
|
|
GConfValue *value);
|
|
struct _TranslationEntry
|
|
{
|
|
const char *gconf_key;
|
|
const char *xsetting_name;
|
|
|
|
GConfValueType gconf_type;
|
|
TranslationFunc translate;
|
|
};
|
|
|
|
|
|
static void
|
|
translate_bool_int (TranslationEntry *trans,
|
|
GConfValue *value)
|
|
{
|
|
g_assert (value->type == trans->gconf_type);
|
|
|
|
xsettings_manager_set_int (manager, trans->xsetting_name,
|
|
gconf_value_get_bool (value));
|
|
}
|
|
|
|
static void
|
|
translate_int_int (TranslationEntry *trans,
|
|
GConfValue *value)
|
|
{
|
|
g_assert (value->type == trans->gconf_type);
|
|
|
|
xsettings_manager_set_int (manager, trans->xsetting_name,
|
|
gconf_value_get_int (value));
|
|
}
|
|
|
|
static void
|
|
translate_string_string (TranslationEntry *trans,
|
|
GConfValue *value)
|
|
{
|
|
g_assert (value->type == trans->gconf_type);
|
|
|
|
xsettings_manager_set_string (manager,
|
|
trans->xsetting_name,
|
|
gconf_value_get_string (value));
|
|
}
|
|
|
|
static TranslationEntry translations [] = {
|
|
{ "/desktop/gnome/peripherals/mouse/double_click", "Net/DoubleClickTime",
|
|
GCONF_VALUE_INT, translate_int_int },
|
|
{ "/desktop/gnome/peripherals/mouse/drag_threshold", "Net/DndDragThreshold",
|
|
GCONF_VALUE_INT, translate_int_int },
|
|
{ "/desktop/gnome/gtk-color-palette", "Gtk/ColorPalette",
|
|
GCONF_VALUE_STRING, translate_string_string },
|
|
{ "/desktop/gnome/interface/font_name", "Gtk/FontName",
|
|
GCONF_VALUE_STRING, translate_string_string },
|
|
{ "/desktop/gnome/interface/gtk_key_theme", "Gtk/KeyThemeName",
|
|
GCONF_VALUE_STRING, translate_string_string },
|
|
{ "/desktop/gnome/interface/toolbar_style", "Gtk/ToolbarStyle",
|
|
GCONF_VALUE_STRING, translate_string_string },
|
|
{ "/desktop/gnome/interface/toolbar_icon_size", "Gtk/ToolbarIconSize",
|
|
GCONF_VALUE_STRING, translate_string_string },
|
|
{ "/desktop/gnome/interface/cursor_blink", "Net/CursorBlink",
|
|
GCONF_VALUE_BOOL, translate_bool_int },
|
|
{ "/desktop/gnome/interface/cursor_blink_time", "Net/CursorBlinkTime",
|
|
GCONF_VALUE_INT, translate_int_int },
|
|
{ "/desktop/gnome/interface/gtk_theme", "Net/ThemeName",
|
|
GCONF_VALUE_STRING, translate_string_string }
|
|
};
|
|
|
|
static TranslationEntry*
|
|
find_translation_entry (const char *gconf_key)
|
|
{
|
|
int i;
|
|
|
|
i = 0;
|
|
while (i < G_N_ELEMENTS (translations))
|
|
{
|
|
if (strcmp (translations[i].gconf_key, gconf_key) == 0)
|
|
return &translations[i];
|
|
|
|
++i;
|
|
}
|
|
|
|
return NULL;
|
|
}
|
|
|
|
static const gchar*
|
|
type_to_string (GConfValueType type)
|
|
{
|
|
switch (type)
|
|
{
|
|
case GCONF_VALUE_INT:
|
|
return "int";
|
|
break;
|
|
case GCONF_VALUE_STRING:
|
|
return "string";
|
|
break;
|
|
case GCONF_VALUE_FLOAT:
|
|
return "float";
|
|
break;
|
|
case GCONF_VALUE_BOOL:
|
|
return "bool";
|
|
break;
|
|
case GCONF_VALUE_SCHEMA:
|
|
return "schema";
|
|
break;
|
|
case GCONF_VALUE_LIST:
|
|
return "list";
|
|
break;
|
|
case GCONF_VALUE_PAIR:
|
|
return "pair";
|
|
break;
|
|
case GCONF_VALUE_INVALID:
|
|
return "*invalid*";
|
|
break;
|
|
default:
|
|
g_assert_not_reached();
|
|
return NULL; /* for warnings */
|
|
break;
|
|
}
|
|
}
|
|
|
|
static void
|
|
process_value (TranslationEntry *trans,
|
|
GConfValue *val)
|
|
{
|
|
if (val == NULL)
|
|
{
|
|
xsettings_manager_delete_setting (manager, trans->xsetting_name);
|
|
}
|
|
else
|
|
{
|
|
if (val->type == trans->gconf_type)
|
|
{
|
|
(* trans->translate) (trans, val);
|
|
}
|
|
else
|
|
{
|
|
g_warning (_("GConf key %s set to type %s but its expected type was %s\n"),
|
|
trans->gconf_key,
|
|
type_to_string (val->type),
|
|
type_to_string (trans->gconf_type));
|
|
}
|
|
}
|
|
}
|
|
|
|
static void
|
|
xsettings_callback (GConfEntry *entry)
|
|
{
|
|
TranslationEntry *trans;
|
|
trans = find_translation_entry (entry->key);
|
|
|
|
if (trans == NULL)
|
|
return;
|
|
|
|
process_value (trans, entry->value);
|
|
|
|
xsettings_manager_notify (manager);
|
|
}
|
|
|
|
void
|
|
gnome_settings_xsettings_init (GConfClient *client)
|
|
{
|
|
gnome_settings_daemon_register_callback ("/desktop/gnome/peripherals/mouse", xsettings_callback);
|
|
gnome_settings_daemon_register_callback ("/desktop/gtk", xsettings_callback);
|
|
gnome_settings_daemon_register_callback ("/desktop/gnome/interface", xsettings_callback);
|
|
}
|
|
|
|
void
|
|
gnome_settings_xsettings_load (GConfClient *client)
|
|
{
|
|
int i;
|
|
|
|
i = 0;
|
|
while (i < G_N_ELEMENTS (translations))
|
|
{
|
|
GConfValue *val;
|
|
GError *err;
|
|
|
|
err = NULL;
|
|
val = gconf_client_get (client,
|
|
translations[i].gconf_key,
|
|
&err);
|
|
|
|
if (err != NULL)
|
|
{
|
|
fprintf (stderr, "Error getting value for %s: %s\n",
|
|
translations[i].gconf_key, err->message);
|
|
g_error_free (err);
|
|
}
|
|
else
|
|
{
|
|
process_value (&translations[i], val);
|
|
}
|
|
|
|
++i;
|
|
}
|
|
|
|
xsettings_manager_notify (manager);
|
|
}
|