[Xfce4-commits] r27048 - xfconf/trunk/xfsettingsd
Stephan Arts
stephan at xfce.org
Wed Jun 11 00:27:19 CEST 2008
Author: stephan
Date: 2008-06-10 22:27:18 +0000 (Tue, 10 Jun 2008)
New Revision: 27048
Modified:
xfconf/trunk/xfsettingsd/registry.c
xfconf/trunk/xfsettingsd/registry.h
Log:
Improve registry behaviour...
Modified: xfconf/trunk/xfsettingsd/registry.c
===================================================================
--- xfconf/trunk/xfsettingsd/registry.c 2008-06-09 20:27:01 UTC (rev 27047)
+++ xfconf/trunk/xfsettingsd/registry.c 2008-06-10 22:27:18 UTC (rev 27048)
@@ -70,10 +70,72 @@
G_DEFINE_TYPE(XSettingsRegistry, xsettings_registry, G_TYPE_OBJECT);
+enum
+{
+ XSETTING_ENTRY_NET_DOUBLECLICKTIME,
+ XSETTING_ENTRY_NET_DOUBLECLICKDISTANCE,
+ XSETTING_ENTRY_NET_DNDDRAGTRESHOLD,
+ XSETTING_ENTRY_NET_CURSORBLINK,
+ XSETTING_ENTRY_NET_CURSORBLINKTIME,
+ XSETTING_ENTRY_NET_THEMENAME,
+ XSETTING_ENTRY_NET_ICONTHEMENAME,
+ XSETTING_ENTRY_XFT_ANTIALIAS,
+ XSETTING_ENTRY_XFT_HINTING,
+ XSETTING_ENTRY_XFT_HINTSTYLE,
+ XSETTING_ENTRY_XFT_RGBA,
+ XSETTING_ENTRY_XFT_DPI,
+ XSETTING_ENTRY_GTK_CANCHANGEACCELS,
+ XSETTING_ENTRY_GTK_COLORPALETTE,
+ XSETTING_ENTRY_GTK_FONTNAME,
+ XSETTING_ENTRY_GTK_ICONSIZES,
+ XSETTING_ENTRY_GTK_KEYTHEMENAME,
+ XSETTING_ENTRY_GTK_TOOLBARSTYLE,
+ XSETTING_ENTRY_GTK_TOOLBARICONSIZE,
+ XSETTING_ENTRY_GTK_IMPREEDITSTYLE,
+ XSETTING_ENTRY_GTK_IMSTATUSSTYLE,
+ XSETTING_ENTRY_GTK_MENUIMAGES,
+ XSETTING_ENTRY_GTK_BUTTONIMAGES,
+ XSETTING_ENTRY_GTK_MENUBARACCEL,
+ XSETTING_ENTRY_GTK_CURSORTHEMENAME,
+ XSETTING_ENTRY_GTK_CURSORTHEMESIZE,
+} XSettingType;
+
+static XSettingsRegistryEntry properties[] = {
+{ "Net/DoubleClickTime", G_TYPE_INT, },
+{ "Net/DoubleClickDistance", G_TYPE_INT, },
+{ "Net/DndDragThreshold", G_TYPE_INT, },
+{ "Net/CursorBlink", G_TYPE_BOOLEAN, },
+{ "Net/CursorBlinkTime", G_TYPE_INT, },
+{ "Net/ThemeName", G_TYPE_STRING, },
+{ "Net/IconThemeName", G_TYPE_STRING, },
+
+{ "Xft/Antialias", G_TYPE_INT, },
+{ "Xft/Hinting", G_TYPE_INT, },
+{ "Xft/HintStyle", G_TYPE_STRING, },
+{ "Xft/RGBA", G_TYPE_STRING, },
+{ "Xft/DPI", G_TYPE_INT, },
+
+{ "Gtk/CanChangeAccels", G_TYPE_BOOLEAN, },
+{ "Gtk/ColorPalette", G_TYPE_STRING, },
+{ "Gtk/FontName", G_TYPE_STRING, },
+{ "Gtk/IconSizes", G_TYPE_STRING, },
+{ "Gtk/KeyThemeName", G_TYPE_STRING, },
+{ "Gtk/ToolbarStyle", G_TYPE_STRING, },
+{ "Gtk/ToolbarIconSize", G_TYPE_INT, },
+{ "Gtk/IMPreeditStyle", G_TYPE_STRING, },
+{ "Gtk/IMStatusStyle", G_TYPE_STRING, },
+{ "Gtk/MenuImages", G_TYPE_BOOLEAN, },
+{ "Gtk/ButtonImages", G_TYPE_BOOLEAN, },
+{ "Gtk/MenuBarAccel", G_TYPE_STRING, },
+{ "Gtk/CursorThemeName", G_TYPE_STRING, },
+{ "Gtk/CursorThemeSize", G_TYPE_INT, },
+
+{ NULL, 0,},
+};
+
+
struct _XSettingsRegistryPriv
{
- XSettingsRegistryEntry **properties;
-
gint serial;
gint last_change_serial;
@@ -107,15 +169,6 @@
return FALSE;
}
-static XSettingsRegistryEntry *
-xsettings_registry_entry_new_string(const gchar *name, const gchar *value);
-static XSettingsRegistryEntry *
-xsettings_registry_entry_new_int(const gchar *name, gint value);
-static XSettingsRegistryEntry *
-xsettings_registry_entry_new_bool(const gchar *name, gboolean value);
-
-#define XSETTINGS_REGISTRY_SIZE 24
-
enum {
XSETTINGS_REGISTRY_PROPERTY_CHANNEL = 1,
XSETTINGS_REGISTRY_PROPERTY_DISPLAY,
@@ -159,45 +212,40 @@
xsettings_registry_init(XSettingsRegistry *registry)
{
registry->priv = g_new0(XSettingsRegistryPriv, 1);
- registry->priv->properties = g_new0(XSettingsRegistryEntry *, XSETTINGS_REGISTRY_SIZE);
- gint i = XSETTINGS_REGISTRY_SIZE;
/* Net settings */
- registry->priv->properties[--i] = xsettings_registry_entry_new_int("Net/DoubleClickTime", 250);
- registry->priv->properties[--i] = xsettings_registry_entry_new_int("Net/DoubleClickDistance", 5);
- registry->priv->properties[--i] = xsettings_registry_entry_new_int("Net/DndDragThreshold", 8);
- registry->priv->properties[--i] = xsettings_registry_entry_new_bool("Net/CursorBlink", TRUE);
- registry->priv->properties[--i] = xsettings_registry_entry_new_int("Net/CursorBlinkTime", 1200);
- registry->priv->properties[--i] = xsettings_registry_entry_new_string("Net/ThemeName", "Default");
- registry->priv->properties[--i] = xsettings_registry_entry_new_string("Net/IconThemeName", "hicolor");
+ g_value_set_int (&properties[XSETTING_ENTRY_NET_DOUBLECLICKTIME].value, 250);
+ g_value_set_int (&properties[XSETTING_ENTRY_NET_DOUBLECLICKDISTANCE].value, 5);
+ g_value_set_int (&properties[XSETTING_ENTRY_NET_DNDDRAGTRESHOLD].value, 8);
+ g_value_set_boolean (&properties[XSETTING_ENTRY_NET_CURSORBLINK].value, TRUE);
+ g_value_set_int (&properties[XSETTING_ENTRY_NET_CURSORBLINKTIME].value, 1200);
+ g_value_set_string (&properties[XSETTING_ENTRY_NET_THEMENAME].value, "Default");
+ g_value_set_string (&properties[XSETTING_ENTRY_NET_ICONTHEMENAME].value, "hicolor");
/* Xft settings */
- registry->priv->properties[--i] = xsettings_registry_entry_new_int("Xft/Antialias", -1);
- registry->priv->properties[--i] = xsettings_registry_entry_new_int("Xft/Hinting", -1);
- registry->priv->properties[--i] = xsettings_registry_entry_new_string("Xft/HintStyle", "hintnone");
- registry->priv->properties[--i] = xsettings_registry_entry_new_string("Xft/RGBA", "none");
- registry->priv->properties[--i] = xsettings_registry_entry_new_int("Xft/DPI", -1);
+ g_value_set_int (&properties[XSETTING_ENTRY_XFT_ANTIALIAS].value, -1);
+ g_value_set_int (&properties[XSETTING_ENTRY_XFT_HINTING].value, -1);
+ g_value_set_string (&properties[XSETTING_ENTRY_XFT_HINTSTYLE].value, "hintnone");
+ g_value_set_string (&properties[XSETTING_ENTRY_XFT_RGBA].value, "none");
+ g_value_set_int (&properties[XSETTING_ENTRY_XFT_DPI].value, -1);
/* GTK settings */
- registry->priv->properties[--i] = xsettings_registry_entry_new_bool("Gtk/CanChangeAccels", FALSE);
- registry->priv->properties[--i] = xsettings_registry_entry_new_string("Gtk/ColorPalette",
+ g_value_set_boolean (&properties[XSETTING_ENTRY_GTK_CANCHANGEACCELS].value, FALSE);
+ g_value_set_string (&properties[XSETTING_ENTRY_GTK_COLORPALETTE].value,
"black:white:gray50:red:purple:blue:light "
"blue:green:yellow:orange:lavender:brown:goldenrod4:dodger "
"blue:pink:light green:gray10:gray30:gray75:gray90");
- registry->priv->properties[--i] = xsettings_registry_entry_new_string("Gtk/FontName", "Sans 10");
- registry->priv->properties[--i] = xsettings_registry_entry_new_string("Gtk/IconSizes", NULL);
- registry->priv->properties[--i] = xsettings_registry_entry_new_string("Gtk/KeyThemeName", NULL);
- registry->priv->properties[--i] = xsettings_registry_entry_new_string("Gtk/ToolbarStyle", "Icons");
- registry->priv->properties[--i] = xsettings_registry_entry_new_int("Gtk/ToolbarIconSize", 3);
- registry->priv->properties[--i] = xsettings_registry_entry_new_string("Gtk/IMPreeditStyle", "");
- registry->priv->properties[--i] = xsettings_registry_entry_new_string("Gtk/IMStatusStyle", "");
- registry->priv->properties[--i] = xsettings_registry_entry_new_bool("Gtk/MenuImages", TRUE);
- registry->priv->properties[--i] = xsettings_registry_entry_new_bool("Gtk/ButtonImages", TRUE);
- registry->priv->properties[--i] = xsettings_registry_entry_new_string("Gtk/MenuBarAccel", "F10");
+ g_value_set_string (&properties[XSETTING_ENTRY_GTK_FONTNAME].value, "Sans 10");
+ g_value_set_string (&properties[XSETTING_ENTRY_GTK_ICONSIZES].value, NULL);
+ g_value_set_string (&properties[XSETTING_ENTRY_GTK_KEYTHEMENAME].value, NULL);
+ g_value_set_string (&properties[XSETTING_ENTRY_GTK_TOOLBARSTYLE].value, "Icons");
+ g_value_set_int (&properties[XSETTING_ENTRY_GTK_TOOLBARICONSIZE].value, 3);
+ g_value_set_string (&properties[XSETTING_ENTRY_GTK_IMPREEDITSTYLE].value, "");
+ g_value_set_string (&properties[XSETTING_ENTRY_GTK_IMSTATUSSTYLE].value, "");
+ g_value_set_boolean (&properties[XSETTING_ENTRY_GTK_MENUIMAGES].value, TRUE);
+ g_value_set_boolean (&properties[XSETTING_ENTRY_GTK_BUTTONIMAGES].value, TRUE);
+ g_value_set_string (&properties[XSETTING_ENTRY_GTK_MENUBARACCEL].value, "F10");
-#ifdef DEBUG
- if (i != 0)
- g_critical ("XSETTINGS_REGISTRY_SIZE != number of registry items");
-#endif
-
+ g_value_set_string (&properties[XSETTING_ENTRY_GTK_CURSORTHEMENAME].value, NULL);
+ g_value_set_int (&properties[XSETTING_ENTRY_GTK_CURSORTHEMESIZE].value, 0);
}
static void
@@ -205,13 +253,14 @@
{
gint i;
- for (i = 0; i < XSETTINGS_REGISTRY_SIZE; ++i)
+ XSettingsRegistryEntry *entry = properties;
+
+ for(; entry->name != NULL; ++entry)
{
- XSettingsRegistryEntry *entry = registry->priv->properties[i];
if (!strcmp(entry->name, &name[1]))
{
- g_value_reset(entry->value);
- g_value_copy(value, entry->value);
+ g_value_reset(&entry->value);
+ g_value_copy(value, &entry->value);
break;
}
}
@@ -223,12 +272,6 @@
void
xsettings_registry_store_xrdb(XSettingsRegistry *registry)
{
- XSettingsRegistryEntry *xft_antialias = registry->priv->properties[16];
- XSettingsRegistryEntry *xft_hinting = registry->priv->properties[15];
- XSettingsRegistryEntry *xft_hintstyle = registry->priv->properties[14];
- XSettingsRegistryEntry *xft_rgba = registry->priv->properties[13];
- XSettingsRegistryEntry *xft_dpi = registry->priv->properties[12];
-
gchar *cmd;
FILE *fp;
gchar *path = xfce_resource_save_location(XFCE_RESOURCE_CONFIG,
@@ -245,15 +288,15 @@
fp = fopen(path, "w");
if(fp != NULL)
{
- fprintf(fp, "Xft.antialias: %d\n", g_value_get_int(xft_antialias->value));
- fprintf(fp, "Xft.hinting: %d\n", g_value_get_int(xft_hinting->value));
- if(g_value_get_int(xft_hinting->value))
- fprintf(fp, "Xft.hintstyle: %s\n", g_value_get_string(xft_hintstyle->value));
+ fprintf(fp, "Xft.antialias: %d\n", g_value_get_int(&properties[XSETTING_ENTRY_XFT_ANTIALIAS].value));
+ fprintf(fp, "Xft.hinting: %d\n", g_value_get_int(&properties[XSETTING_ENTRY_XFT_HINTING].value));
+ if(g_value_get_int(&properties[XSETTING_ENTRY_XFT_HINTING].value))
+ fprintf(fp, "Xft.hintstyle: %s\n", g_value_get_string(&properties[XSETTING_ENTRY_XFT_HINTSTYLE].value));
else
fprintf(fp, "Xft.hintstyle: hintnone\n");
- fprintf(fp, "Xft.rgba: %s\n", g_value_get_string(xft_rgba->value));
- if(g_value_get_int (xft_dpi->value) > 0)
- fprintf(fp, "Xft.dpi: %d\n", g_value_get_int(xft_dpi->value));
+ fprintf(fp, "Xft.rgba: %s\n", g_value_get_string(&properties[XSETTING_ENTRY_XFT_RGBA].value));
+ if(g_value_get_int (&properties[XSETTING_ENTRY_XFT_DPI].value) > 0)
+ fprintf(fp, "Xft.dpi: %d\n", g_value_get_int(&properties[XSETTING_ENTRY_XFT_DPI].value));
fclose(fp);
/* run xrdb to merge the new settings */
@@ -261,7 +304,7 @@
g_spawn_command_line_async(cmd, NULL);
g_free(cmd);
- if(!g_value_get_int(xft_dpi->value)) {
+ if(!g_value_get_int(&properties[XSETTING_ENTRY_XFT_DPI].value)) {
/* filter out Xft.dpi from xrdb */
g_spawn_command_line_async("sh -c \"xrdb -query | grep -i -v '^Xft.dpi:' | xrdb\"",
NULL);
@@ -269,6 +312,28 @@
}
g_free(path);
}
+ path = xfce_resource_save_location(XFCE_RESOURCE_CONFIG,
+ "xfce4" G_DIR_SEPARATOR_S "Xcursor.xrdb",
+ TRUE);
+ if (G_LIKELY (path != NULL))
+ {
+
+ if(!g_file_test(path, G_FILE_TEST_IS_REGULAR))
+ {
+ }
+
+ fp = fopen(path, "w");
+ if(fp != NULL)
+ {
+ fprintf(fp, "Xcursor.theme: %s\n"
+ "Xcursor.theme_core: true\n"
+ "Xcursor.size: %d\n",
+ g_value_get_string (&properties[XSETTING_ENTRY_GTK_CURSORTHEMENAME].value),
+ g_value_get_int (&properties[XSETTING_ENTRY_GTK_CURSORTHEMESIZE].value));
+ fclose(fp);
+ }
+ g_free(path);
+ }
}
void
@@ -277,18 +342,19 @@
guchar *buffer, *pos;
gint buf_len, i;
+ gint prop_count = 0;
registry->priv->last_change_serial = registry->priv->serial;
- XSettingsRegistryEntry *entry = NULL;
+ XSettingsRegistryEntry *entry = properties;
buf_len = 12;
/** Calculate buffer size */
- for(i = 0; i < XSETTINGS_REGISTRY_SIZE; ++i)
+ for(; entry->name != NULL; ++entry)
{
- entry = registry->priv->properties[i];
+ prop_count++;
buf_len += 8 + XSETTINGS_PAD(strlen(entry->name), 4);
- switch (G_VALUE_TYPE(entry->value))
+ switch (G_VALUE_TYPE(&entry->value))
{
case G_TYPE_INT:
case G_TYPE_BOOLEAN:
@@ -297,7 +363,7 @@
case G_TYPE_STRING:
{
buf_len += 4;
- const gchar *value = g_value_get_string(entry->value);
+ const gchar *value = g_value_get_string(&entry->value);
if(value)
{
buf_len += XSETTINGS_PAD(strlen(value), 4);
@@ -324,20 +390,20 @@
*(CARD32 *)pos = registry->priv->serial++;
pos += 4;
- *(CARD32 *)pos = XSETTINGS_REGISTRY_SIZE;
+ *(CARD32 *)pos = prop_count; /* nr of props */
pos += 4;
/** Fill the buffer */
- for(i = 0; i < XSETTINGS_REGISTRY_SIZE; ++i)
+ entry = properties;
+ for(; entry->name != NULL; ++entry)
{
gint name_len, value_len = 0, str_length;
- entry = registry->priv->properties[i];
name_len = XSETTINGS_PAD(strlen(entry->name), 4);
value_len = 0;
- switch (G_VALUE_TYPE(entry->value))
+ switch (G_VALUE_TYPE(&entry->value))
{
case G_TYPE_INT:
case G_TYPE_BOOLEAN:
@@ -346,7 +412,7 @@
case G_TYPE_STRING:
*pos++ = 1; // String
{
- const gchar *value = g_value_get_string(entry->value);
+ const gchar *value = g_value_get_string(&entry->value);
if(value)
{
value_len = XSETTINGS_PAD(strlen(value), 4);
@@ -379,11 +445,11 @@
*(CARD32 *)pos = registry->priv->last_change_serial;
pos+= 4;
- switch (G_VALUE_TYPE(entry->value))
+ switch (G_VALUE_TYPE(&entry->value))
{
case G_TYPE_STRING:
{
- const gchar *val = g_value_get_string(entry->value);
+ const gchar *val = g_value_get_string(&entry->value);
if (val)
{
@@ -407,11 +473,11 @@
}
break;
case G_TYPE_INT:
- *(CARD32 *)pos = g_value_get_int(entry->value);
+ *(CARD32 *)pos = g_value_get_int(&entry->value);
pos += 4;
break;
case G_TYPE_BOOLEAN:
- *(CARD32 *)pos = g_value_get_boolean(entry->value);
+ *(CARD32 *)pos = g_value_get_boolean(&entry->value);
pos += 4;
break;
case G_TYPE_UINT64:
@@ -431,44 +497,6 @@
registry->priv->last_change_serial = registry->priv->serial;
}
-static XSettingsRegistryEntry *
-xsettings_registry_entry_new_string(const gchar *name, const gchar *value)
-{
- XSettingsRegistryEntry *entry = g_new0(XSettingsRegistryEntry, 1);
- entry->name = g_strdup(name);
-
- entry->value = g_new0(GValue, 1);
- entry->value = g_value_init(entry->value, G_TYPE_STRING);
- g_value_set_string(entry->value, value);
-
- return entry;
-}
-
-static XSettingsRegistryEntry *
-xsettings_registry_entry_new_int(const gchar *name, gint value)
-{
- XSettingsRegistryEntry *entry = g_new0(XSettingsRegistryEntry, 1);
- entry->name = g_strdup(name);
- entry->value = g_new0(GValue, 1);
- entry->value = g_value_init(entry->value, G_TYPE_INT);
- g_value_set_int(entry->value, value);
-
- return entry;
-}
-
-static XSettingsRegistryEntry *
-xsettings_registry_entry_new_bool(const gchar *name, gboolean value)
-{
- XSettingsRegistryEntry *entry = g_new0(XSettingsRegistryEntry, 1);
- entry->name = g_strdup(name);
-
- entry->value = g_new0(GValue, 1);
- entry->value = g_value_init(entry->value, G_TYPE_BOOLEAN);
- g_value_set_boolean(entry->value, value);
-
- return entry;
-}
-
XSettingsRegistry *
xsettings_registry_new (XfconfChannel *channel, Display *dpy, gint screen)
{
@@ -637,26 +665,25 @@
{
gint i;
XfconfChannel *channel = registry->priv->channel;
+ XSettingsRegistryEntry *entry = properties;
- for(i = 0; i < XSETTINGS_REGISTRY_SIZE ; ++i)
+ while (entry->name)
{
- XSettingsRegistryEntry *entry = registry->priv->properties[i];
-
gchar *name = g_strconcat("/", entry->name, NULL);
if (xfconf_channel_has_property(channel, name) == TRUE)
{
XSETTINGS_DEBUG_LOAD(entry->name);
- switch (G_VALUE_TYPE(entry->value))
+ switch (G_VALUE_TYPE(&entry->value))
{
case G_TYPE_INT:
- g_value_set_int(entry->value, xfconf_channel_get_int(channel, name, g_value_get_int(entry->value)));
+ g_value_set_int(&entry->value, xfconf_channel_get_int(channel, name, g_value_get_int(&entry->value)));
break;
case G_TYPE_STRING:
- g_value_set_string(entry->value, xfconf_channel_get_string(channel, name, g_value_get_string(entry->value)));
+ g_value_set_string(&entry->value, xfconf_channel_get_string(channel, name, g_value_get_string(&entry->value)));
break;
case G_TYPE_BOOLEAN:
- g_value_set_boolean(entry->value, xfconf_channel_get_bool(channel, name, g_value_get_boolean(entry->value)));
+ g_value_set_boolean(&entry->value, xfconf_channel_get_bool(channel, name, g_value_get_boolean(&entry->value)));
break;
}
}
@@ -664,7 +691,7 @@
{
XSETTINGS_DEBUG_CREATE(entry->name);
- if(xfconf_channel_set_property(channel, name, entry->value))
+ if(xfconf_channel_set_property(channel, name, &entry->value))
{
XSETTINGS_DEBUG("... OK\n");
}
@@ -675,7 +702,7 @@
}
g_free(name);
-
+ entry++;
}
return TRUE;
Modified: xfconf/trunk/xfsettingsd/registry.h
===================================================================
--- xfconf/trunk/xfsettingsd/registry.h 2008-06-09 20:27:01 UTC (rev 27047)
+++ xfconf/trunk/xfsettingsd/registry.h 2008-06-10 22:27:18 UTC (rev 27048)
@@ -23,8 +23,7 @@
struct _XSettingsRegistryEntry {
gchar *name;
- GValue *value;
- Atom atom;
+ GValue value;
};
#define XSETTINGS_REGISTRY_TYPE xsettings_registry_get_type()
More information about the Xfce4-commits
mailing list