]> Dogcows Code - chaz/openbox/blobdiff - plugins/mouse/mouserc_parse.l
prefix key bindnigs with 'kbind'
[chaz/openbox] / plugins / mouse / mouserc_parse.l
index 1a3233c0f92d815a30adaf40db3f38d0d4ef70e8..1f2d19705d8b08af3dfbd931ff88b688c6babd8f 100644 (file)
@@ -7,7 +7,6 @@
 
 static int lineno;
 static char *path;
-static gboolean comment;
 static gboolean error;
 
 static char *context;
@@ -21,13 +20,12 @@ static void gotfield();
 static void addbinding();
 %}
 
-field [-A-Za-z0-9]+
-sep [ \t]+
+field [A-Za-z0-9][-A-Za-z0-9]*
 white [ \t]*
 
 %%
 
-^{white}# comment = TRUE;
+^{white}#.*\n lineno++;
 {field} gotfield();
 \n endofline();
 [ \t]
@@ -51,14 +49,12 @@ static void gotfield()
 
 static void endofline()
 {
-    if (!comment) {
-        if (!error && context && event && button && action)
-            addbinding();
-        else if (error || context || event || button || action)
-            g_warning("Parser error in '%s' on line %d", path, lineno);
-    }
+    if (!error && context && event && button && action)
+        addbinding();
+    else if (error || context || event || button || action)
+        g_warning("Parser error in '%s' on line %d", path, lineno);
 
-    comment = error = FALSE;
+    error = FALSE;
     g_free(context); g_free(event); g_free(button); g_free(action);
     context = event = button = action = NULL;
 
@@ -67,7 +63,7 @@ static void endofline()
 
 static void addbinding()
 {
-    Action *a;
+    Action *a = NULL;
     MouseAction mact;
 
     if (!g_ascii_strcasecmp(event, "press"))
@@ -86,105 +82,25 @@ static void addbinding()
         return;
     }
 
-    if (!g_ascii_strcasecmp(action, "focus")) {
-        a = action_new(action_focus);
-    } else if (!g_ascii_strcasecmp(action, "unfocus")) {
-        a = action_new(action_unfocus);
-    } else if (!g_ascii_strcasecmp(action, "iconify")) {
-        a = action_new(action_iconify);
-    } else if (!g_ascii_strcasecmp(action, "raise")) {
-        a = action_new(action_raise);
-    } else if (!g_ascii_strcasecmp(action, "lower")) {
-        a = action_new(action_lower);
-    } else if (!g_ascii_strcasecmp(action, "focusraise")) {
-        a = action_new(action_focusraise);
-    } else if (!g_ascii_strcasecmp(action, "close")) {
-        a = action_new(action_close);
-    } else if (!g_ascii_strcasecmp(action, "kill")) {
-        a = action_new(action_kill);
-    } else if (!g_ascii_strcasecmp(action, "shade")) {
-        a = action_new(action_shade);
-    } else if (!g_ascii_strcasecmp(action, "unshade")) {
-        a = action_new(action_unshade);
-    } else if (!g_ascii_strcasecmp(action, "toggleshade")) {
-        a = action_new(action_toggle_shade);
-    } else if (!g_ascii_strcasecmp(action, "toggleomnipresent")) {
-        a = action_new(action_toggle_omnipresent);
-    } else if (!g_ascii_strcasecmp(action, "maximizefull")) {
-        a = action_new(action_maximize_full);
-    } else if (!g_ascii_strcasecmp(action, "unmaximizefull")) {
-        a = action_new(action_unmaximize_full);
-    } else if (!g_ascii_strcasecmp(action, "togglemaximizefull")) {
-        a = action_new(action_toggle_maximize_full);
-    } else if (!g_ascii_strcasecmp(action, "maximizehorz")) {
-        a = action_new(action_maximize_horz);
-    } else if (!g_ascii_strcasecmp(action, "unmaximizehorz")) {
-        a = action_new(action_unmaximize_horz);
-    } else if (!g_ascii_strcasecmp(action, "togglemaximizehorz")) {
-        a = action_new(action_toggle_maximize_horz);
-    } else if (!g_ascii_strcasecmp(action, "maximizevert")) {
-        a = action_new(action_maximize_vert);
-    } else if (!g_ascii_strcasecmp(action, "unmaximizevert")) {
-        a = action_new(action_unmaximize_vert);
-    } else if (!g_ascii_strcasecmp(action, "togglemaximizevert")) {
-        a = action_new(action_toggle_maximize_vert);
-    } else if (!g_ascii_strcasecmp(action, "sendtonextdesktop")) {
-        a = action_new(action_send_to_next_desktop);
-        a->data.sendtonextprev.wrap = FALSE;
-        a->data.sendtonextprev.follow = TRUE;
-    } else if (!g_ascii_strcasecmp(action, "sendtonextdesktopwrap")) {
-        a = action_new(action_send_to_next_desktop);
-        a->data.sendtonextprev.wrap = TRUE;
-        a->data.sendtonextprev.follow = TRUE;
-    } else if (!g_ascii_strcasecmp(action, "sendtopreviousdesktop")) {
-        a = action_new(action_send_to_previous_desktop);
-        a->data.sendtonextprev.wrap = FALSE;
-        a->data.sendtonextprev.follow = TRUE;
-    } else if (!g_ascii_strcasecmp(action, "sendtopreviousdesktopwrap")) {
-        a = action_new(action_send_to_previous_desktop);
-        a->data.sendtonextprev.wrap = TRUE;
-        a->data.sendtonextprev.follow = TRUE;
-    } else if (!g_ascii_strcasecmp(action, "nextdesktop")) {
-        a = action_new(action_next_desktop);
-        a->data.nextprevdesktop.wrap = FALSE;
-    } else if (!g_ascii_strcasecmp(action, "nextdesktopwrap")) {
-        a = action_new(action_next_desktop);
-        a->data.nextprevdesktop.wrap = TRUE;
-    } else if (!g_ascii_strcasecmp(action, "previousdesktop")) {
-        a = action_new(action_previous_desktop);
-        a->data.nextprevdesktop.wrap = FALSE;
-    } else if (!g_ascii_strcasecmp(action, "previousdesktopwrap")) {
-        a = action_new(action_previous_desktop);
-        a->data.nextprevdesktop.wrap = TRUE;
-    } else if (!g_ascii_strcasecmp(action, "nextdesktopcolumn")) {
-        a = action_new(action_next_desktop_column);
-        a->data.nextprevdesktop.wrap = FALSE;
-    } else if (!g_ascii_strcasecmp(action, "nextdesktopcolumnwrap")) {
-        a = action_new(action_next_desktop_column);
-        a->data.nextprevdesktop.wrap = TRUE;
-    } else if (!g_ascii_strcasecmp(action, "previousdesktopcolumn")) {
-        a = action_new(action_previous_desktop_column);
-        a->data.nextprevdesktop.wrap = FALSE;
-    } else if (!g_ascii_strcasecmp(action, "previousdesktopcolumnwrap")) {
-        a = action_new(action_previous_desktop_column);
-        a->data.nextprevdesktop.wrap = TRUE;
-    } else if (!g_ascii_strcasecmp(action, "nextdesktoprow")) {
-        a = action_new(action_next_desktop_row);
-        a->data.nextprevdesktop.wrap = FALSE;
-    } else if (!g_ascii_strcasecmp(action, "nextdesktoprowwrap")) {
-        a = action_new(action_next_desktop_row);
-        a->data.nextprevdesktop.wrap = TRUE;
-    } else if (!g_ascii_strcasecmp(action, "previousdesktoprow")) {
-        a = action_new(action_previous_desktop_row);
-        a->data.nextprevdesktop.wrap = FALSE;
-    } else if (!g_ascii_strcasecmp(action, "previousdesktoprowwrap")) {
-        a = action_new(action_previous_desktop_row);
-        a->data.nextprevdesktop.wrap = TRUE;
-    } else if (!g_ascii_strcasecmp(action, "move")) {
-        a = action_new(action_move);
-    } else if (!g_ascii_strcasecmp(action, "resize")) {
-        a = action_new(action_resize);
-    } else {
+    a = action_from_string(action);
+    if (mact == MouseAction_Motion) {
+        if (a && !(a->func == action_move || a->func == action_resize)) {
+            action_free(a);
+            a = NULL;
+        }
+        /* the below types cannot be used with !motion events, or at all with
+           mouse bindings */
+    } else if (a && (a->func == action_move || a->func == action_resize ||
+                     a->func == action_execute || a->func == action_desktop ||
+                     a->func == action_move_relative_horz ||
+                     a->func == action_move_relative_vert ||
+                     a->func == action_resize_relative_horz ||
+                     a->func == action_resize_relative_vert)) {
+        action_free(a);
+        a = NULL;
+    }
+    if (a == NULL) {
         g_warning("Invalid action '%s' in '%s' on line %d", action, path,
                   lineno);
         return;
@@ -218,7 +134,6 @@ void mouserc_parse()
     }
 
     lineno = 1;
-    comment = FALSE;
     error = FALSE;
     context = event = button = action = NULL;
 
This page took 0.027482 seconds and 4 git commands to generate.