[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