summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDana Jansens <danakj@orodu.net>2002-12-27 08:52:16 +0000
committerDana Jansens <danakj@orodu.net>2002-12-27 08:52:16 +0000
commitcb718e2ad931928389ab95cc71564ea8358e92fd (patch)
treef9cde6a943b7118997f8f4702789ffb10f8cac41 /src
parentc645416035d64cc959d1dd0e937b31b07489e54b (diff)
handle reparent events..hopefully :>
Diffstat (limited to 'src')
-rw-r--r--src/client.cc22
-rw-r--r--src/client.hh1
-rw-r--r--src/openbox_wrap.cc66
3 files changed, 69 insertions, 20 deletions
diff --git a/src/client.cc b/src/client.cc
index 38364432..2461eff9 100644
--- a/src/client.cc
+++ b/src/client.cc
@@ -1002,4 +1002,26 @@ void OBClient::destroyHandler(const XDestroyWindowEvent &e)
}
+void OBClient::reparentHandler(const XReparentEvent &e)
+{
+#ifdef DEBUG
+ printf("ReparentNotify for 0x%lx\n", e.window);
+#endif // DEBUG
+
+ OtkEventHandler::reparentHandler(e);
+
+ // this is when the client is first taken captive in the frame
+ if (e.parent == frame->plate()) return;
+
+ /*
+ This event is quite rare and is usually handled in unmapHandler.
+ However, if the window is unmapped when the reparent event occurs,
+ the window manager never sees it because an unmap event is not sent
+ to an already unmapped window.
+ */
+
+ // this deletes us etc
+ Openbox::instance->screen(_screen)->unmanageWindow(this);
+}
+
}
diff --git a/src/client.hh b/src/client.hh
index 8f0dc4f1..d2a41dd7 100644
--- a/src/client.hh
+++ b/src/client.hh
@@ -448,6 +448,7 @@ public:
virtual void configureRequestHandler(const XConfigureRequestEvent &e);
virtual void unmapHandler(const XUnmapEvent &e);
virtual void destroyHandler(const XDestroyWindowEvent &e);
+ virtual void reparentHandler(const XReparentEvent &e);
};
}
diff --git a/src/openbox_wrap.cc b/src/openbox_wrap.cc
index 7f0d015f..8337d1ee 100644
--- a/src/openbox_wrap.cc
+++ b/src/openbox_wrap.cc
@@ -650,26 +650,27 @@ SWIG_InstallConstants(PyObject *d, swig_const_info constants[]) {
#define SWIGTYPE_p_ob__OBScreen swig_types[2]
#define SWIGTYPE_p_otk__Style swig_types[3]
#define SWIGTYPE_p_ob__OBFrame swig_types[4]
-#define SWIGTYPE_p_ob__OBClient swig_types[5]
-#define SWIGTYPE_p_ob__Openbox swig_types[6]
-#define SWIGTYPE_p_otk__Strut swig_types[7]
-#define SWIGTYPE_p_XShapeEvent swig_types[8]
-#define SWIGTYPE_p_XConfigureRequestEvent swig_types[9]
-#define SWIGTYPE_p_otk__OtkEventHandler swig_types[10]
-#define SWIGTYPE_p_otk__Rect swig_types[11]
-#define SWIGTYPE_p_ob__OBWidget swig_types[12]
-#define SWIGTYPE_p_XFocusChangeEvent swig_types[13]
-#define SWIGTYPE_p_XClientMessageEvent swig_types[14]
-#define SWIGTYPE_p_otk__OBProperty swig_types[15]
-#define SWIGTYPE_p_otk__OtkEventDispatcher swig_types[16]
-#define SWIGTYPE_p_XPropertyEvent swig_types[17]
-#define SWIGTYPE_p_XDestroyWindowEvent swig_types[18]
-#define SWIGTYPE_p_otk__BImageControl swig_types[19]
-#define SWIGTYPE_p_PyObject swig_types[20]
-#define SWIGTYPE_p_ob__MwmHints swig_types[21]
-#define SWIGTYPE_p_otk__Configuration swig_types[22]
-#define SWIGTYPE_p_XUnmapEvent swig_types[23]
-static swig_type_info *swig_types[25];
+#define SWIGTYPE_p_XReparentEvent swig_types[5]
+#define SWIGTYPE_p_ob__OBClient swig_types[6]
+#define SWIGTYPE_p_ob__Openbox swig_types[7]
+#define SWIGTYPE_p_otk__Strut swig_types[8]
+#define SWIGTYPE_p_XShapeEvent swig_types[9]
+#define SWIGTYPE_p_XConfigureRequestEvent swig_types[10]
+#define SWIGTYPE_p_otk__OtkEventHandler swig_types[11]
+#define SWIGTYPE_p_otk__Rect swig_types[12]
+#define SWIGTYPE_p_ob__OBWidget swig_types[13]
+#define SWIGTYPE_p_XFocusChangeEvent swig_types[14]
+#define SWIGTYPE_p_XClientMessageEvent swig_types[15]
+#define SWIGTYPE_p_otk__OBProperty swig_types[16]
+#define SWIGTYPE_p_otk__OtkEventDispatcher swig_types[17]
+#define SWIGTYPE_p_XPropertyEvent swig_types[18]
+#define SWIGTYPE_p_XDestroyWindowEvent swig_types[19]
+#define SWIGTYPE_p_otk__BImageControl swig_types[20]
+#define SWIGTYPE_p_PyObject swig_types[21]
+#define SWIGTYPE_p_ob__MwmHints swig_types[22]
+#define SWIGTYPE_p_otk__Configuration swig_types[23]
+#define SWIGTYPE_p_XUnmapEvent swig_types[24]
+static swig_type_info *swig_types[26];
/* -------- TYPES TABLE (END) -------- */
@@ -2452,6 +2453,28 @@ static PyObject *_wrap_OBClient_destroyHandler(PyObject *self, PyObject *args) {
}
+static PyObject *_wrap_OBClient_reparentHandler(PyObject *self, PyObject *args) {
+ PyObject *resultobj;
+ ob::OBClient *arg1 = (ob::OBClient *) 0 ;
+ XReparentEvent *arg2 = 0 ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+
+ if(!PyArg_ParseTuple(args,(char *)"OO:OBClient_reparentHandler",&obj0,&obj1)) goto fail;
+ if ((SWIG_ConvertPtr(obj0,(void **) &arg1, SWIGTYPE_p_ob__OBClient,SWIG_POINTER_EXCEPTION | 0 )) == -1) SWIG_fail;
+ if ((SWIG_ConvertPtr(obj1,(void **) &arg2, SWIGTYPE_p_XReparentEvent,SWIG_POINTER_EXCEPTION | 0 )) == -1) SWIG_fail;
+ if (arg2 == NULL) {
+ PyErr_SetString(PyExc_TypeError,"null reference"); SWIG_fail;
+ }
+ (arg1)->reparentHandler((XReparentEvent const &)*arg2);
+
+ Py_INCREF(Py_None); resultobj = Py_None;
+ return resultobj;
+ fail:
+ return NULL;
+}
+
+
static PyObject * OBClient_swigregister(PyObject *self, PyObject *args) {
PyObject *obj;
if (!PyArg_ParseTuple(args,(char*)"O", &obj)) return NULL;
@@ -2620,6 +2643,7 @@ static PyMethodDef SwigMethods[] = {
{ (char *)"OBClient_configureRequestHandler", _wrap_OBClient_configureRequestHandler, METH_VARARGS },
{ (char *)"OBClient_unmapHandler", _wrap_OBClient_unmapHandler, METH_VARARGS },
{ (char *)"OBClient_destroyHandler", _wrap_OBClient_destroyHandler, METH_VARARGS },
+ { (char *)"OBClient_reparentHandler", _wrap_OBClient_reparentHandler, METH_VARARGS },
{ (char *)"OBClient_swigregister", OBClient_swigregister, METH_VARARGS },
{ (char *)"register", _wrap_register, METH_VARARGS },
{ (char *)"preregister", _wrap_preregister, METH_VARARGS },
@@ -2648,6 +2672,7 @@ static swig_type_info _swigt__p_ob__Cursors[] = {{"_p_ob__Cursors", 0, "ob::Curs
static swig_type_info _swigt__p_ob__OBScreen[] = {{"_p_ob__OBScreen", 0, "ob::OBScreen *", 0},{"_p_ob__OBScreen"},{0}};
static swig_type_info _swigt__p_otk__Style[] = {{"_p_otk__Style", 0, "otk::Style *", 0},{"_p_otk__Style"},{0}};
static swig_type_info _swigt__p_ob__OBFrame[] = {{"_p_ob__OBFrame", 0, "ob::OBFrame *", 0},{"_p_ob__OBFrame"},{0}};
+static swig_type_info _swigt__p_XReparentEvent[] = {{"_p_XReparentEvent", 0, "XReparentEvent *", 0},{"_p_XReparentEvent"},{0}};
static swig_type_info _swigt__p_ob__OBClient[] = {{"_p_ob__OBClient", 0, "ob::OBClient *", 0},{"_p_ob__OBClient"},{0}};
static swig_type_info _swigt__p_ob__Openbox[] = {{"_p_ob__Openbox", 0, "ob::Openbox *", 0},{"_p_ob__Openbox"},{0}};
static swig_type_info _swigt__p_otk__Strut[] = {{"_p_otk__Strut", 0, "otk::Strut *", 0},{"_p_otk__Strut"},{0}};
@@ -2674,6 +2699,7 @@ _swigt__p_ob__Cursors,
_swigt__p_ob__OBScreen,
_swigt__p_otk__Style,
_swigt__p_ob__OBFrame,
+_swigt__p_XReparentEvent,
_swigt__p_ob__OBClient,
_swigt__p_ob__Openbox,
_swigt__p_otk__Strut,