handle mouse clicks in the python scripts now

This commit is contained in:
Dana Jansens 2002-12-25 05:46:02 +00:00
parent b34824a4e2
commit 0816364a03
7 changed files with 109 additions and 7 deletions

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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