parse a mouserc file for mouse bindings
This commit is contained in:
parent
72ee5557c2
commit
edf98ba134
6 changed files with 67 additions and 103 deletions
|
@ -1,15 +1,22 @@
|
||||||
plugindir=$(libdir)/openbox/plugins
|
plugindir=$(libdir)/openbox/plugins
|
||||||
|
rcdir=$(datadir)/openbox
|
||||||
|
|
||||||
CPPFLAGS=$(XFT_CFLAGS) $(GLIB_CFLAGS) @CPPFLAGS@ \
|
CPPFLAGS=$(XFT_CFLAGS) $(GLIB_CFLAGS) @CPPFLAGS@ \
|
||||||
-DPLUGINDIR=\"$(plugindir)\" \
|
-DPLUGINDIR=\"$(plugindir)\" \
|
||||||
|
-DRCDIR=\"$(rcdir)\" \
|
||||||
-DG_LOG_DOMAIN=\"Plugin-Mouse\"
|
-DG_LOG_DOMAIN=\"Plugin-Mouse\"
|
||||||
|
|
||||||
plugin_LTLIBRARIES=mouse.la
|
plugin_LTLIBRARIES=mouse.la
|
||||||
|
|
||||||
mouse_la_LDFLAGS=-module -avoid-version
|
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
|
MAINTAINERCLEANFILES= Makefile.in
|
||||||
|
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
#include "../../kernel/engine.h"
|
#include "../../kernel/engine.h"
|
||||||
#include "translate.h"
|
#include "translate.h"
|
||||||
#include "mouse.h"
|
#include "mouse.h"
|
||||||
|
#include "mouserc_parse.h"
|
||||||
#include <glib.h>
|
#include <glib.h>
|
||||||
|
|
||||||
void plugin_setup_config()
|
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)
|
Action *action)
|
||||||
{
|
{
|
||||||
guint state, button;
|
guint state, button;
|
||||||
GQuark context;
|
GQuark context;
|
||||||
MouseBinding *b;
|
MouseBinding *b;
|
||||||
GSList *it;
|
GSList *it;
|
||||||
guint i;
|
|
||||||
|
|
||||||
if (!translate_button(buttonstr, &state, &button)) {
|
if (!translate_button(buttonstr, &state, &button)) {
|
||||||
g_warning("invalid button");
|
g_warning("invalid button '%s'", buttonstr);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
contextstr = g_ascii_strdown(contextstr, -1);
|
contextstr = g_ascii_strdown(contextstr, -1);
|
||||||
context = g_quark_try_string(contextstr);
|
context = g_quark_try_string(contextstr);
|
||||||
g_free(contextstr);
|
|
||||||
if (!context) {
|
if (!context) {
|
||||||
g_warning("invalid context");
|
g_warning("invalid context '%s'", contextstr);
|
||||||
|
g_free(contextstr);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
g_free(contextstr);
|
||||||
|
|
||||||
for (it = g_datalist_id_get_data(&bound_contexts, context);
|
for (it = g_datalist_id_get_data(&bound_contexts, context);
|
||||||
it != NULL; it = it->next){
|
it != NULL; it = it->next){
|
||||||
|
@ -334,11 +335,9 @@ static gboolean mbind(char *buttonstr, char *contextstr, MouseAction mact,
|
||||||
grab_all_clients(FALSE);
|
grab_all_clients(FALSE);
|
||||||
|
|
||||||
/* add the binding */
|
/* add the binding */
|
||||||
b = g_new(MouseBinding, 1);
|
b = g_new0(MouseBinding, 1);
|
||||||
b->state = state;
|
b->state = state;
|
||||||
b->button = button;
|
b->button = button;
|
||||||
for (i = 0; i < NUM_MOUSEACTION; ++i)
|
|
||||||
b->action[i] = NULL;
|
|
||||||
b->action[mact] = action;
|
b->action[mact] = action;
|
||||||
g_datalist_id_set_data(&bound_contexts, context,
|
g_datalist_id_set_data(&bound_contexts, context,
|
||||||
g_slist_append(g_datalist_id_get_data(&bound_contexts, context), b));
|
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;
|
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()
|
void plugin_startup()
|
||||||
{
|
{
|
||||||
dispatch_register(Event_Client_Mapped | Event_Client_Destroy |
|
dispatch_register(Event_Client_Mapped | Event_Client_Destroy |
|
||||||
Event_X_ButtonPress | Event_X_ButtonRelease |
|
Event_X_ButtonPress | Event_X_ButtonRelease |
|
||||||
Event_X_MotionNotify, (EventHandler)event, NULL);
|
Event_X_MotionNotify, (EventHandler)event, NULL);
|
||||||
|
|
||||||
/* XXX parse a config */
|
mouserc_parse();
|
||||||
binddef();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void plugin_shutdown()
|
void plugin_shutdown()
|
||||||
|
|
|
@ -18,4 +18,7 @@ typedef struct {
|
||||||
Action *action[NUM_MOUSEACTION];
|
Action *action[NUM_MOUSEACTION];
|
||||||
} MouseBinding;
|
} MouseBinding;
|
||||||
|
|
||||||
|
gboolean mbind(char *buttonstr, char *contextstr, MouseAction mact,
|
||||||
|
Action *action);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
40
plugins/mouse/mouserc
Normal file
40
plugins/mouse/mouserc
Normal 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
|
0
plugins/mouse/mouserc_parse.c
Normal file
0
plugins/mouse/mouserc_parse.c
Normal file
6
plugins/mouse/mouserc_parse.h
Normal file
6
plugins/mouse/mouserc_parse.h
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
#ifndef __plugin_mouse_mouserc_parse_h
|
||||||
|
#define __plugin_mouse_mouserc_parse_h
|
||||||
|
|
||||||
|
void mouserc_parse();
|
||||||
|
|
||||||
|
#endif
|
Loading…
Reference in a new issue