]> Dogcows Code - chaz/openbox/commitdiff
parse a mouserc file for mouse bindings
authorDana Jansens <danakj@orodu.net>
Wed, 26 Mar 2003 04:25:41 +0000 (04:25 +0000)
committerDana Jansens <danakj@orodu.net>
Wed, 26 Mar 2003 04:25:41 +0000 (04:25 +0000)
plugins/mouse/Makefile.am
plugins/mouse/mouse.c
plugins/mouse/mouse.h
plugins/mouse/mouserc [new file with mode: 0644]
plugins/mouse/mouserc_parse.c [new file with mode: 0644]
plugins/mouse/mouserc_parse.h [new file with mode: 0644]

index dabf85324804fb5e6786c13f9042fcc58cfc92df..e52421236a75f1f10dedd3eacac7454d80629ec8 100644 (file)
@@ -1,15 +1,22 @@
 plugindir=$(libdir)/openbox/plugins
+rcdir=$(datadir)/openbox
 
 CPPFLAGS=$(XFT_CFLAGS) $(GLIB_CFLAGS) @CPPFLAGS@ \
 -DPLUGINDIR=\"$(plugindir)\" \
+-DRCDIR=\"$(rcdir)\" \
 -DG_LOG_DOMAIN=\"Plugin-Mouse\"
 
 plugin_LTLIBRARIES=mouse.la
 
 mouse_la_LDFLAGS=-module -avoid-version
-mouse_la_SOURCES=mouse.c translate.c
+mouse_la_SOURCES=mouse.c translate.c lex.mparse.c
 
-noinst_HEADERS=mouse.h translate.h
+lex.mparse.c: mouserc_parse.l
+       $(FLEX) -Pmparse $^
+
+rc_DATA=mouserc
+
+noinst_HEADERS=mouse.h translate.h mouserc_parse.h
 
 MAINTAINERCLEANFILES= Makefile.in
 
index e6c9b71332a886aed991bf7952d105f36b33d2e9..0a9672058902c23728a69c65ffdec11359453e47 100644 (file)
@@ -7,6 +7,7 @@
 #include "../../kernel/engine.h"
 #include "translate.h"
 #include "mouse.h"
+#include "mouserc_parse.h"
 #include <glib.h>
 
 void plugin_setup_config()
@@ -295,27 +296,27 @@ static void event(ObEvent *e, void *foo)
     }
 }
 
-static gboolean mbind(char *buttonstr, char *contextstr, MouseAction mact,
-                      Action *action)
+gboolean mbind(char *buttonstr, char *contextstr, MouseAction mact,
+               Action *action)
 {
     guint state, button;
     GQuark context;
     MouseBinding *b;
     GSList *it;
-    guint i;
 
     if (!translate_button(buttonstr, &state, &button)) {
-        g_warning("invalid button");
+        g_warning("invalid button '%s'", buttonstr);
         return FALSE;
     }
 
     contextstr = g_ascii_strdown(contextstr, -1);
     context = g_quark_try_string(contextstr);
-    g_free(contextstr);
     if (!context) {
-        g_warning("invalid context");
+        g_warning("invalid context '%s'", contextstr);
+        g_free(contextstr);
         return FALSE;
     }
+    g_free(contextstr);
 
     for (it = g_datalist_id_get_data(&bound_contexts, context);
         it != NULL; it = it->next){
@@ -334,11 +335,9 @@ static gboolean mbind(char *buttonstr, char *contextstr, MouseAction mact,
     grab_all_clients(FALSE);
 
     /* add the binding */
-    b = g_new(MouseBinding, 1);
+    b = g_new0(MouseBinding, 1);
     b->state = state;
     b->button = button;
-    for (i = 0; i < NUM_MOUSEACTION; ++i)
-        b->action[i] = NULL;
     b->action[mact] = action;
     g_datalist_id_set_data(&bound_contexts, context, 
         g_slist_append(g_datalist_id_get_data(&bound_contexts, context), b));
@@ -348,104 +347,13 @@ static gboolean mbind(char *buttonstr, char *contextstr, MouseAction mact,
     return TRUE;
 }
 
-static void binddef()
-{
-    Action *a;
-
-    /* When creating an Action struct, all of the data elements in the
-       appropriate struct need to be set, except the Client*, which will be set
-       at call-time when then action function is used.
-
-       For action_move and action_resize, the 'x', 'y', and 'final' data
-       elements should not be set, as they are set at call-time.       
-    */
-
-    a = action_new(action_move);
-    mbind("1", "titlebar", MouseAction_Motion, a);
-    a = action_new(action_move);
-    mbind("1", "handle", MouseAction_Motion, a);
-    a = action_new(action_move);
-    mbind("A-1", "frame", MouseAction_Motion, a);
-
-    a = action_new(action_resize);
-    mbind("1", "blcorner", MouseAction_Motion, a);
-    a = action_new(action_resize);
-    mbind("1", "brcorner", MouseAction_Motion, a);
-    a = action_new(action_resize);
-    mbind("A-3", "frame", MouseAction_Motion, a);
-
-    a = action_new(action_focus);
-    mbind("1", "titlebar", MouseAction_Press, a);
-    a = action_new(action_focus);
-    mbind("1", "handle", MouseAction_Press, a);
-    a = action_new(action_focusraise);
-    mbind("1", "titlebar", MouseAction_Click, a);
-    a = action_new(action_focusraise);
-    mbind("1", "handle", MouseAction_Click, a);
-    a = action_new(action_lower);
-    mbind("2", "titlebar", MouseAction_Press, a);
-    a = action_new(action_lower);
-    mbind("2", "handle", MouseAction_Press, a);
-    a = action_new(action_focusraise);
-    mbind("A-1", "frame", MouseAction_Click, a);
-    a = action_new(action_lower);
-    mbind("A-3", "frame", MouseAction_Click, a);
-
-    a = action_new(action_focus);
-    mbind("1", "client", MouseAction_Press, a);
-
-    a = action_new(action_toggle_shade);
-    mbind("1", "titlebar", MouseAction_DClick, a);
-    a = action_new(action_shade);
-    mbind("4", "titlebar", MouseAction_Press, a);
-    a = action_new(action_unshade);
-    mbind("5", "titlebar", MouseAction_Press, a);
-
-    a = action_new(action_toggle_maximize_full);
-    mbind("1", "maximize", MouseAction_Click, a);
-    a = action_new(action_toggle_maximize_vert);
-    mbind("2", "maximize", MouseAction_Click, a);
-    a = action_new(action_toggle_maximize_horz);
-    mbind("3", "maximize", MouseAction_Click, a);
-    a = action_new(action_iconify);
-    mbind("1", "iconify", MouseAction_Click, a);
-    a = action_new(action_close);
-    mbind("1", "icon", MouseAction_DClick, a);
-    a = action_new(action_close);
-    mbind("1", "close", MouseAction_Click, a);
-    a = action_new(action_kill);
-    mbind("2", "close", MouseAction_Click, a);
-    a = action_new(action_toggle_omnipresent);
-    mbind("1", "alldesktops", MouseAction_Click, a);
-
-    a = action_new(action_next_desktop);
-    a->data.nextprevdesktop.wrap = TRUE;
-    mbind("4", "root", MouseAction_Click, a);
-    a = action_new(action_previous_desktop);
-    a->data.nextprevdesktop.wrap = TRUE;
-    mbind("5", "root", MouseAction_Click, a);
-    a = action_new(action_next_desktop);
-    a->data.nextprevdesktop.wrap = TRUE;
-    mbind("A-4", "root", MouseAction_Click, a);
-    a = action_new(action_previous_desktop);
-    a->data.nextprevdesktop.wrap = TRUE;
-    mbind("A-5", "root", MouseAction_Click, a);
-    a = action_new(action_next_desktop);
-    a->data.nextprevdesktop.wrap = TRUE;
-    mbind("A-4", "frame", MouseAction_Click, a);
-    a = action_new(action_previous_desktop);
-    a->data.nextprevdesktop.wrap = TRUE;
-    mbind("A-5", "frame", MouseAction_Click, a);
-}
-
 void plugin_startup()
 {
     dispatch_register(Event_Client_Mapped | Event_Client_Destroy |
                       Event_X_ButtonPress | Event_X_ButtonRelease |
                       Event_X_MotionNotify, (EventHandler)event, NULL);
 
-    /* XXX parse a config */
-    binddef();
+    mouserc_parse();
 }
 
 void plugin_shutdown()
index 04984886ba8d79861c14ad0d7b6e1430c2de5cd3..832ada1f1bebd9a5724ddc5a5581e7f2bc774a19 100644 (file)
@@ -18,4 +18,7 @@ typedef struct {
     Action *action[NUM_MOUSEACTION];
 } MouseBinding;
 
+gboolean mbind(char *buttonstr, char *contextstr, MouseAction mact,
+               Action *action);
+
 #endif
diff --git a/plugins/mouse/mouserc b/plugins/mouse/mouserc
new file mode 100644 (file)
index 0000000..1f119a0
--- /dev/null
@@ -0,0 +1,40 @@
+#Context       Event           Button  Action
+
+Titlebar       Drag            Left    Move
+Handle         Drag            Left    Move
+Frame          Drag            A-Left  Move
+
+BLCorner       Drag            Left    Resize
+BRCorner       Drag            Left    Resize
+Frame          Drag            A-Right Resize
+
+Titlebar       Click           Left    Raise
+Titlebar       Press           Middle  Lower
+Handle         Click           Left    Raise
+Handle         Press           Middle  Lower
+Frame          Click           A-Left  Raise
+Frame          Click           A-Right Lower
+
+Titlebar       Press           Left    Focus
+Handle         Press           Left    Focus
+Client         Press           Left    Focus
+
+Titlebar       DoubleClick     Left    ToggleShade
+Titlebar       Click           Up      Shade
+Titlebar       Click           Down    UnShade
+
+Maximize       Click           Left    ToggleMaximizeFull
+Maximize       Click           Middle  ToggleMaximizeVert
+Maximize       Click           Right   ToggleMaximizeHorz
+Iconify                Click           Left    Iconify
+Icon           DoubleClick     Left    Close
+Close          Click           Left    Close
+Close          Click           Middle  Kill
+AllDesktops    Click           Left    ToggleOmnipresent
+
+Root           Click           Up      NextDesktopWrap
+Root           Click           Down    PreviousDesktopWrap
+Root           Click           A-Up    NextDesktopWrap
+Root           Click           A-Down  PreviousDesktopWrap
+Frame          Click           A-Up    NextDesktopWrap
+Frame          Click           A-Down  PreviousDesktopWrap
diff --git a/plugins/mouse/mouserc_parse.c b/plugins/mouse/mouserc_parse.c
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/plugins/mouse/mouserc_parse.h b/plugins/mouse/mouserc_parse.h
new file mode 100644 (file)
index 0000000..0a924e4
--- /dev/null
@@ -0,0 +1,6 @@
+#ifndef __plugin_mouse_mouserc_parse_h
+#define __plugin_mouse_mouserc_parse_h
+
+void mouserc_parse();
+
+#endif
This page took 0.029925 seconds and 4 git commands to generate.