X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=plugins%2Fmouse%2Fmouserc_parse.l;h=1f2d19705d8b08af3dfbd931ff88b688c6babd8f;hb=28a4456c46976ba5c58a300dfa67109227bc1583;hp=7563c6f3b044bd963bf18d15438a5326ebd05f4f;hpb=01d92ca2b2b71b0a0cd7fd866f9f08c464ef5757;p=chaz%2Fopenbox diff --git a/plugins/mouse/mouserc_parse.l b/plugins/mouse/mouserc_parse.l index 7563c6f3..1f2d1970 100644 --- a/plugins/mouse/mouserc_parse.l +++ b/plugins/mouse/mouserc_parse.l @@ -21,12 +21,11 @@ static void addbinding(); %} field [A-Za-z0-9][-A-Za-z0-9]* -sep [ \t]+ white [ \t]* %% -^{white}\#.+\n lineno++; +^{white}#.*\n lineno++; {field} gotfield(); \n endofline(); [ \t] @@ -64,7 +63,7 @@ static void endofline() static void addbinding() { - Action *a; + Action *a = NULL; MouseAction mact; if (!g_ascii_strcasecmp(event, "press")) @@ -83,107 +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") && - mact == MouseAction_Motion) { - a = action_new(action_move); - } else if (!g_ascii_strcasecmp(action, "resize") && - mact == MouseAction_Motion) { - 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;