[beryl-commits] r1521 - in trunk/beryl-core: include libberylsettings
svn at server.beryl-project.org
svn at server.beryl-project.org
Mon Dec 4 03:04:02 CET 2006
Author: svn
Date: 2006-12-04 03:04:02 +0100 (Mon, 04 Dec 2006)
New Revision: 1521
Modified:
trunk/beryl-core/include/beryl-settings.h
trunk/beryl-core/libberylsettings/main.c
Log:
Modified: trunk/beryl-core/include/beryl-settings.h
===================================================================
--- trunk/beryl-core/include/beryl-settings.h 2006-12-04 00:50:21 UTC (rev 1520)
+++ trunk/beryl-core/include/beryl-settings.h 2006-12-04 02:04:02 UTC (rev 1521)
@@ -484,4 +484,8 @@
void beryl_settings_context_set_private(BerylSettingsContext * context, gpointer private_ptr);
void beryl_settings_plugin_set_private(BerylSettingsPlugin * plugin, gpointer private_ptr);
void beryl_setting_set_private(BerylSetting * setting, gpointer private_ptr);
+
+//utility functions
+unsigned int beryl_settings_get_mods_and_endptr(gchar * src, gchar ** ret);
+gchar * beryl_settings_mods_to_string(unsigned int mods);
#endif
Modified: trunk/beryl-core/libberylsettings/main.c
===================================================================
--- trunk/beryl-core/libberylsettings/main.c 2006-12-04 00:50:21 UTC (rev 1520)
+++ trunk/beryl-core/libberylsettings/main.c 2006-12-04 02:04:02 UTC (rev 1521)
@@ -15,6 +15,66 @@
#define NEW(a,b) \
a * b = malloc(sizeof(a)); memset((b),0,sizeof(a))
+struct _Modifier {
+ gchar *name;
+ gint modifier;
+} const static modifiers[] = {
+ { "<Shift>", ShiftMask },
+ { "<Control>", ControlMask },
+ { "<Mod1>", Mod1Mask },
+ { "<Mod2>", Mod2Mask },
+ { "<Mod3>", Mod3Mask },
+ { "<Mod4>", Mod4Mask },
+ { "<Mod5>", Mod5Mask },
+ { "<Alt>", CompAltMask },
+ { "<Meta>", CompMetaMask },
+ { "<Super>", CompSuperMask },
+ { "<Hyper>", CompHyperMask },
+ { "<ModeSwitch>", CompModeSwitchMask },
+};
+
+#define N_MODIFIERS (sizeof (modifiers) / sizeof (struct _Modifier))
+
+unsigned int beryl_settings_get_mods_and_endptr(gchar * src, gchar ** ret)
+{
+ unsigned int mods=0;
+ gchar * spos=src;
+ while((spos=strchr(spos,'<')) && *src)
+ {
+ int i;
+ for (i=0;i<N_MODIFIERS;i++)
+ if (strncasecmp(modifiers[i].name,
+ spos,strlen(modifiers[i].name))==0)
+ {
+ mods|=modifiers[i].modifier;
+ spos+=strlen(modifiers[i].name);
+ src=spos;
+ break;
+ }
+ if (i==N_MODIFIERS)
+ break;
+ }
+ *ret=src;
+ return mods;
+}
+
+gchar * beryl_settings_mods_to_string(unsigned int mods)
+{
+ gchar * retstr=g_strdup("");
+ gchar * tmpstr=retstr;
+ gint i;
+ for (i=0;i<N_MODIFIERS;i++)
+ {
+ if (mods & modifiers[i].modifier)
+ {
+ retstr=g_strconcat(retstr,modifiers[i].name,NULL);
+ g_free(tmpstr);
+ tmpstr=retstr;
+ }
+ }
+ return retstr;
+}
+
//STATIC FUNCTIONS
static void copy_value(BerylSettingValue * dest, BerylSettingValue * src)
{
More information about the commits
mailing list