parse a mouserc file for mouse bindings

This commit is contained in:
Dana Jansens 2003-03-26 04:25:41 +00:00
parent 72ee5557c2
commit edf98ba134
6 changed files with 67 additions and 103 deletions

View 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

View 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,
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()

View file

@ -18,4 +18,7 @@ typedef struct {
Action *action[NUM_MOUSEACTION];
} MouseBinding;
gboolean mbind(char *buttonstr, char *contextstr, MouseAction mact,
Action *action);
#endif

40
plugins/mouse/mouserc Normal file
View file

@ -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

View file

View file

@ -0,0 +1,6 @@
#ifndef __plugin_mouse_mouserc_parse_h
#define __plugin_mouse_mouserc_parse_h
void mouserc_parse();
#endif