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
|
||||
MAINTAINERCLEANFILES = Makefile.in
|
||||
script_DATA = clientmotion.py
|
||||
script_DATA = clientmotion.py clicks.py
|
||||
EXTRA_DIST = $(script_DATA)
|
||||
|
||||
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 = [];
|
||||
|
||||
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)
|
||||
|
||||
global posqueue
|
||||
|
@ -21,7 +21,8 @@ def motion_press(action, win, type, modifiers, button, xroot, yroot, time):
|
|||
# // area would be meaningless anyways
|
||||
# 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
|
||||
for i in posqueue:
|
||||
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)
|
||||
|
||||
global posqueue
|
||||
|
@ -72,6 +73,8 @@ def motion(action, win, type, modifiers, xroot, yroot, time):
|
|||
# _posqueue[0]->clientarea.height() + _dy);
|
||||
|
||||
|
||||
register(Action_ButtonPress, motion_press)
|
||||
register(Action_ButtonRelease, motion_release)
|
||||
register(Action_MouseMotion, motion)
|
||||
register(Action_ButtonPress, def_motion_press)
|
||||
register(Action_ButtonRelease, def_motion_release)
|
||||
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)
|
||||
{
|
||||
OtkEventHandler::configureRequestHandler(e);
|
||||
|
|
|
@ -428,6 +428,9 @@ public:
|
|||
@param y The Y component of the new size for the client
|
||||
*/
|
||||
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 clientMessageHandler(const XClientMessageEvent &e);
|
||||
|
|
|
@ -163,6 +163,7 @@ Openbox::Openbox(int argc, char **argv)
|
|||
PyRun_SimpleString("openbox = Openbox_instance()");
|
||||
|
||||
runPython(SCRIPTDIR"/clientmotion.py"); // moving and resizing clients
|
||||
runPython(SCRIPTDIR"/clicks.py"); // titlebar/root clicks and dblclicks
|
||||
runPython(_scriptfilepath.c_str());
|
||||
|
||||
// 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) {
|
||||
PyObject *resultobj;
|
||||
ob::OBClient *arg1 = (ob::OBClient *) 0 ;
|
||||
|
@ -2408,6 +2424,7 @@ static PyMethodDef SwigMethods[] = {
|
|||
{ (char *)"OBClient_area", _wrap_OBClient_area, METH_VARARGS },
|
||||
{ (char *)"OBClient_move", _wrap_OBClient_move, 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_clientMessageHandler", _wrap_OBClient_clientMessageHandler, METH_VARARGS },
|
||||
{ (char *)"OBClient_shapeHandler", _wrap_OBClient_shapeHandler, METH_VARARGS },
|
||||
|
|
Loading…
Reference in a new issue