handle mouse clicks in the python scripts now
This commit is contained in:
parent
b34824a4e2
commit
0816364a03
7 changed files with 109 additions and 7 deletions
|
@ -1,6 +1,6 @@
|
||||||
scriptdir = $(libdir)/openbox/python
|
scriptdir = $(libdir)/openbox/python
|
||||||
MAINTAINERCLEANFILES = Makefile.in
|
MAINTAINERCLEANFILES = Makefile.in
|
||||||
script_DATA = clientmotion.py
|
script_DATA = clientmotion.py clicks.py
|
||||||
EXTRA_DIST = $(script_DATA)
|
EXTRA_DIST = $(script_DATA)
|
||||||
|
|
||||||
distclean-local:
|
distclean-local:
|
||||||
|
|
54
scripts/clicks.py
Normal file
54
scripts/clicks.py
Normal file
|
@ -0,0 +1,54 @@
|
||||||
|
def def_click_client(action, win, type, modifiers, button, time):
|
||||||
|
client = Openbox_findClient(openbox, win)
|
||||||
|
if not client: return
|
||||||
|
|
||||||
|
if button == Button1 and type == Type_CloseButton:
|
||||||
|
OBClient_close(client)
|
||||||
|
elif button <= Button3 and type == Type_MaximizeButton:
|
||||||
|
print "OBClient_maximize(client)"
|
||||||
|
elif button == Button1 and type == Type_IconifyButton:
|
||||||
|
print "OBClient_iconify(client)"
|
||||||
|
elif button == Button1 and type == Type_StickyButton:
|
||||||
|
print "OBClient_sendtodesktop(client, 0xffffffff)"
|
||||||
|
elif type == Type_Titlebar or type == Type_CloseButton or \
|
||||||
|
type == Type_MaximizeButton or type == Type_IconifyButton or \
|
||||||
|
type == Type_StickyButton or type == Type_Label:
|
||||||
|
if button == Button4:
|
||||||
|
print "OBClient_shade(client)"
|
||||||
|
elif button == Button5:
|
||||||
|
print "OBClient_unshade(client)"
|
||||||
|
|
||||||
|
def def_click_model(action, win, type, modifiers, button, time):
|
||||||
|
if button != Button1: return
|
||||||
|
client = Openbox_findClient(openbox, win)
|
||||||
|
if not client: return
|
||||||
|
print "OBClient_focus(client)"
|
||||||
|
print "OBClient_raise(client)"
|
||||||
|
|
||||||
|
def def_click_root(action, win, type, modifiers, button, time):
|
||||||
|
if type == Type_Root:
|
||||||
|
if button == Button1:
|
||||||
|
print "nothing probly.."
|
||||||
|
elif button == Button2:
|
||||||
|
print "workspace menu"
|
||||||
|
elif button == Button3:
|
||||||
|
print "root menu"
|
||||||
|
elif button == Button4:
|
||||||
|
print "next workspace"
|
||||||
|
elif button == Button5:
|
||||||
|
print "previous workspace"
|
||||||
|
|
||||||
|
def def_doubleclick_client(action, win, type, modifiers, button, time):
|
||||||
|
client = Openbox_findClient(openbox, win)
|
||||||
|
if not client: return
|
||||||
|
|
||||||
|
if button == Button1 and (type == Type_Titlebar or type == Type_Label):
|
||||||
|
print "OBClient_toggleshade(client)"
|
||||||
|
|
||||||
|
|
||||||
|
register(Action_Click, def_click_model)
|
||||||
|
register(Action_Click, def_click_client)
|
||||||
|
register(Action_Click, def_click_root)
|
||||||
|
register(Action_DoubleClick, def_doubleclick_client)
|
||||||
|
|
||||||
|
print "Loaded clicks.py"
|
|
@ -1,6 +1,6 @@
|
||||||
posqueue = [];
|
posqueue = [];
|
||||||
|
|
||||||
def motion_press(action, win, type, modifiers, button, xroot, yroot, time):
|
def def_motion_press(action, win, type, modifiers, button, xroot, yroot, time):
|
||||||
client = Openbox_findClient(openbox, win)
|
client = Openbox_findClient(openbox, win)
|
||||||
|
|
||||||
global posqueue
|
global posqueue
|
||||||
|
@ -21,7 +21,8 @@ def motion_press(action, win, type, modifiers, button, xroot, yroot, time):
|
||||||
# // area would be meaningless anyways
|
# // area would be meaningless anyways
|
||||||
# if (c) a->clientarea = c->area();
|
# if (c) a->clientarea = c->area();
|
||||||
|
|
||||||
def motion_release(action, win, type, modifiers, button, xroot, yroot, time):
|
def def_motion_release(action, win, type, modifiers, button, xroot, yroot,
|
||||||
|
time):
|
||||||
global posqueue
|
global posqueue
|
||||||
for i in posqueue:
|
for i in posqueue:
|
||||||
if i[0] == button:
|
if i[0] == button:
|
||||||
|
@ -42,7 +43,7 @@ def motion_release(action, win, type, modifiers, button, xroot, yroot, time):
|
||||||
# }
|
# }
|
||||||
|
|
||||||
|
|
||||||
def motion(action, win, type, modifiers, xroot, yroot, time):
|
def def_motion(action, win, type, modifiers, xroot, yroot, time):
|
||||||
client = Openbox_findClient(openbox, win)
|
client = Openbox_findClient(openbox, win)
|
||||||
|
|
||||||
global posqueue
|
global posqueue
|
||||||
|
@ -72,6 +73,8 @@ def motion(action, win, type, modifiers, xroot, yroot, time):
|
||||||
# _posqueue[0]->clientarea.height() + _dy);
|
# _posqueue[0]->clientarea.height() + _dy);
|
||||||
|
|
||||||
|
|
||||||
register(Action_ButtonPress, motion_press)
|
register(Action_ButtonPress, def_motion_press)
|
||||||
register(Action_ButtonRelease, motion_release)
|
register(Action_ButtonRelease, def_motion_release)
|
||||||
register(Action_MouseMotion, motion)
|
register(Action_MouseMotion, def_motion)
|
||||||
|
|
||||||
|
print "Loaded clientmotion.py"
|
||||||
|
|
|
@ -835,6 +835,30 @@ void OBClient::move(int x, int y)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void OBClient::close()
|
||||||
|
{
|
||||||
|
XEvent ce;
|
||||||
|
const otk::OBProperty *property = Openbox::instance->property();
|
||||||
|
|
||||||
|
if (!(_functions & Func_Close)) return;
|
||||||
|
|
||||||
|
// XXX: itd be cool to do timeouts and shit here for killing the client's
|
||||||
|
// process off
|
||||||
|
|
||||||
|
ce.xclient.type = ClientMessage;
|
||||||
|
ce.xclient.message_type = property->atom(otk::OBProperty::wm_protocols);
|
||||||
|
ce.xclient.display = otk::OBDisplay::display;
|
||||||
|
ce.xclient.window = _window;
|
||||||
|
ce.xclient.format = 32;
|
||||||
|
ce.xclient.data.l[0] = property->atom(otk::OBProperty::wm_delete_window);
|
||||||
|
ce.xclient.data.l[1] = CurrentTime;
|
||||||
|
ce.xclient.data.l[2] = 0l;
|
||||||
|
ce.xclient.data.l[3] = 0l;
|
||||||
|
ce.xclient.data.l[4] = 0l;
|
||||||
|
XSendEvent(otk::OBDisplay::display, _window, False, NoEventMask, &ce);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void OBClient::configureRequestHandler(const XConfigureRequestEvent &e)
|
void OBClient::configureRequestHandler(const XConfigureRequestEvent &e)
|
||||||
{
|
{
|
||||||
OtkEventHandler::configureRequestHandler(e);
|
OtkEventHandler::configureRequestHandler(e);
|
||||||
|
|
|
@ -428,6 +428,9 @@ public:
|
||||||
@param y The Y component of the new size for the client
|
@param y The Y component of the new size for the client
|
||||||
*/
|
*/
|
||||||
void resize(Corner anchor, int x, int y);
|
void resize(Corner anchor, int x, int y);
|
||||||
|
|
||||||
|
//! Request the client to close its window.
|
||||||
|
void close();
|
||||||
|
|
||||||
virtual void propertyHandler(const XPropertyEvent &e);
|
virtual void propertyHandler(const XPropertyEvent &e);
|
||||||
virtual void clientMessageHandler(const XClientMessageEvent &e);
|
virtual void clientMessageHandler(const XClientMessageEvent &e);
|
||||||
|
|
|
@ -163,6 +163,7 @@ Openbox::Openbox(int argc, char **argv)
|
||||||
PyRun_SimpleString("openbox = Openbox_instance()");
|
PyRun_SimpleString("openbox = Openbox_instance()");
|
||||||
|
|
||||||
runPython(SCRIPTDIR"/clientmotion.py"); // moving and resizing clients
|
runPython(SCRIPTDIR"/clientmotion.py"); // moving and resizing clients
|
||||||
|
runPython(SCRIPTDIR"/clicks.py"); // titlebar/root clicks and dblclicks
|
||||||
runPython(_scriptfilepath.c_str());
|
runPython(_scriptfilepath.c_str());
|
||||||
|
|
||||||
// initialize all the screens
|
// initialize all the screens
|
||||||
|
|
|
@ -2156,6 +2156,22 @@ static PyObject *_wrap_OBClient_resize(PyObject *self, PyObject *args) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static PyObject *_wrap_OBClient_close(PyObject *self, PyObject *args) {
|
||||||
|
PyObject *resultobj;
|
||||||
|
ob::OBClient *arg1 = (ob::OBClient *) 0 ;
|
||||||
|
PyObject * obj0 = 0 ;
|
||||||
|
|
||||||
|
if(!PyArg_ParseTuple(args,(char *)"O:OBClient_close",&obj0)) goto fail;
|
||||||
|
if ((SWIG_ConvertPtr(obj0,(void **) &arg1, SWIGTYPE_p_ob__OBClient,SWIG_POINTER_EXCEPTION | 0 )) == -1) SWIG_fail;
|
||||||
|
(arg1)->close();
|
||||||
|
|
||||||
|
Py_INCREF(Py_None); resultobj = Py_None;
|
||||||
|
return resultobj;
|
||||||
|
fail:
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static PyObject *_wrap_OBClient_propertyHandler(PyObject *self, PyObject *args) {
|
static PyObject *_wrap_OBClient_propertyHandler(PyObject *self, PyObject *args) {
|
||||||
PyObject *resultobj;
|
PyObject *resultobj;
|
||||||
ob::OBClient *arg1 = (ob::OBClient *) 0 ;
|
ob::OBClient *arg1 = (ob::OBClient *) 0 ;
|
||||||
|
@ -2408,6 +2424,7 @@ static PyMethodDef SwigMethods[] = {
|
||||||
{ (char *)"OBClient_area", _wrap_OBClient_area, METH_VARARGS },
|
{ (char *)"OBClient_area", _wrap_OBClient_area, METH_VARARGS },
|
||||||
{ (char *)"OBClient_move", _wrap_OBClient_move, METH_VARARGS },
|
{ (char *)"OBClient_move", _wrap_OBClient_move, METH_VARARGS },
|
||||||
{ (char *)"OBClient_resize", _wrap_OBClient_resize, METH_VARARGS },
|
{ (char *)"OBClient_resize", _wrap_OBClient_resize, METH_VARARGS },
|
||||||
|
{ (char *)"OBClient_close", _wrap_OBClient_close, METH_VARARGS },
|
||||||
{ (char *)"OBClient_propertyHandler", _wrap_OBClient_propertyHandler, METH_VARARGS },
|
{ (char *)"OBClient_propertyHandler", _wrap_OBClient_propertyHandler, METH_VARARGS },
|
||||||
{ (char *)"OBClient_clientMessageHandler", _wrap_OBClient_clientMessageHandler, METH_VARARGS },
|
{ (char *)"OBClient_clientMessageHandler", _wrap_OBClient_clientMessageHandler, METH_VARARGS },
|
||||||
{ (char *)"OBClient_shapeHandler", _wrap_OBClient_shapeHandler, METH_VARARGS },
|
{ (char *)"OBClient_shapeHandler", _wrap_OBClient_shapeHandler, METH_VARARGS },
|
||||||
|
|
Loading…
Reference in a new issue