summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDana Jansens <danakj@orodu.net>2003-01-04 19:09:52 +0000
committerDana Jansens <danakj@orodu.net>2003-01-04 19:09:52 +0000
commitd13f021b8bb2a6b8e49f69a370409e79a7f02213 (patch)
tree7d1f157d2b72b5527c8913323531bbac97f3c853 /src
parent69c257faa94334b8d19fc97292622499c43929db (diff)
add support for wm_window_role
Diffstat (limited to 'src')
-rw-r--r--src/actions.cc15
-rw-r--r--src/client.cc18
-rw-r--r--src/client.hh6
-rw-r--r--src/openbox_wrap.cc23
-rw-r--r--src/screen.cc10
5 files changed, 53 insertions, 19 deletions
diff --git a/src/actions.cc b/src/actions.cc
index fba1eaf1..dec03e80 100644
--- a/src/actions.cc
+++ b/src/actions.cc
@@ -213,28 +213,19 @@ void OBActions::motionHandler(const XMotionEvent &e)
void OBActions::mapRequestHandler(const XMapRequestEvent &e)
{
OtkEventHandler::mapRequestHandler(e);
-
- EventData *data = new_event_data(e.window, EventNewWindow, 0);
- Openbox::instance->bindings()->fireEvent(data);
- Py_DECREF((PyObject*)data);
+ // do this in OBScreen::manageWindow
}
void OBActions::unmapHandler(const XUnmapEvent &e)
{
OtkEventHandler::unmapHandler(e);
-
- EventData *data = new_event_data(e.window, EventCloseWindow, 0);
- Openbox::instance->bindings()->fireEvent(data);
- Py_DECREF((PyObject*)data);
+ // do this in OBScreen::unmanageWindow
}
void OBActions::destroyHandler(const XDestroyWindowEvent &e)
{
OtkEventHandler::destroyHandler(e);
-
- EventData *data = new_event_data(e.window, EventCloseWindow, 0);
- Openbox::instance->bindings()->fireEvent(data);
- Py_DECREF((PyObject*)data);
+ // do this in OBScreen::unmanageWindow
}
}
diff --git a/src/client.cc b/src/client.cc
index a6990a8d..7b846729 100644
--- a/src/client.cc
+++ b/src/client.cc
@@ -478,17 +478,23 @@ void OBClient::updateClass()
const otk::OBProperty *property = Openbox::instance->property();
// set the defaults
- _app_name = _app_class = "";
+ _app_name = _app_class = _role = "";
otk::OBProperty::StringVect v;
unsigned long num = 2;
- if (! property->get(_window, otk::OBProperty::wm_class,
- otk::OBProperty::ascii, &num, &v))
- return;
+ if (property->get(_window, otk::OBProperty::wm_class,
+ otk::OBProperty::ascii, &num, &v)) {
+ if (num > 0) _app_name = v[0];
+ if (num > 1) _app_class = v[1];
+ }
- if (num > 0) _app_name = v[0];
- if (num > 1) _app_class = v[1];
+ v.clear();
+ num = 1;
+ if (property->get(_window, otk::OBProperty::wm_window_role,
+ otk::OBProperty::ascii, &num, &v)) {
+ if (num > 0) _role = v[0];
+ }
}
diff --git a/src/client.hh b/src/client.hh
index 41ca3dd2..724cf518 100644
--- a/src/client.hh
+++ b/src/client.hh
@@ -171,6 +171,8 @@ private:
std::string _app_name;
//! The class of the window, can used for grouping
std::string _app_class;
+ //! The specified role of the window, used for identification
+ std::string _role;
//! The type of window (what its function is)
WindowType _type;
@@ -376,9 +378,11 @@ public:
inline const std::string &appName() const { return _app_name; }
//! Returns the class of the window
inline const std::string &appClass() const { return _app_class; }
+ //! Returns the program-specified role of the window
+ inline const std::string &role() const { return _role; }
//! Returns if the window can be focused
/*!
- @return true if the window can receive focusl otherwise, false
+ @return true if the window can receive focus; otherwise, false
*/
inline bool canFocus() const { return _can_focus; }
//! Returns if the window has indicated that it needs urgent attention
diff --git a/src/openbox_wrap.cc b/src/openbox_wrap.cc
index c8e2e65d..6f269706 100644
--- a/src/openbox_wrap.cc
+++ b/src/openbox_wrap.cc
@@ -1976,6 +1976,28 @@ static PyObject *_wrap_OBClient_appClass(PyObject *self, PyObject *args) {
}
+static PyObject *_wrap_OBClient_role(PyObject *self, PyObject *args) {
+ PyObject *resultobj;
+ ob::OBClient *arg1 = (ob::OBClient *) 0 ;
+ std::string *result;
+ PyObject * obj0 = 0 ;
+
+ if(!PyArg_ParseTuple(args,(char *)"O:OBClient_role",&obj0)) goto fail;
+ if ((SWIG_ConvertPtr(obj0,(void **) &arg1, SWIGTYPE_p_ob__OBClient,SWIG_POINTER_EXCEPTION | 0 )) == -1) SWIG_fail;
+ {
+ std::string const &_result_ref = ((ob::OBClient const *)arg1)->role();
+ result = (std::string *) &_result_ref;
+ }
+
+ {
+ resultobj = PyString_FromString(result->c_str());
+ }
+ return resultobj;
+ fail:
+ return NULL;
+}
+
+
static PyObject *_wrap_OBClient_canFocus(PyObject *self, PyObject *args) {
PyObject *resultobj;
ob::OBClient *arg1 = (ob::OBClient *) 0 ;
@@ -2764,6 +2786,7 @@ static PyMethodDef SwigMethods[] = {
{ (char *)"OBClient_iconTitle", _wrap_OBClient_iconTitle, METH_VARARGS },
{ (char *)"OBClient_appName", _wrap_OBClient_appName, METH_VARARGS },
{ (char *)"OBClient_appClass", _wrap_OBClient_appClass, METH_VARARGS },
+ { (char *)"OBClient_role", _wrap_OBClient_role, METH_VARARGS },
{ (char *)"OBClient_canFocus", _wrap_OBClient_canFocus, METH_VARARGS },
{ (char *)"OBClient_urgent", _wrap_OBClient_urgent, METH_VARARGS },
{ (char *)"OBClient_focusNotify", _wrap_OBClient_focusNotify, METH_VARARGS },
diff --git a/src/screen.cc b/src/screen.cc
index d9067aa0..f44e291c 100644
--- a/src/screen.cc
+++ b/src/screen.cc
@@ -521,6 +521,11 @@ void OBScreen::manageWindow(Window window)
// XXX: make this optional or more intelligent
client->focus();
+
+ // call the python NEWWINDOW binding
+ EventData *data = new_event_data(window, EventNewWindow, 0);
+ Openbox::instance->bindings()->fireEvent(data);
+ Py_DECREF((PyObject*)data);
}
@@ -528,6 +533,11 @@ void OBScreen::unmanageWindow(OBClient *client)
{
OBFrame *frame = client->frame;
+ // call the python CLOSEWINDOW binding
+ EventData *data = new_event_data(client->window(), EventCloseWindow, 0);
+ Openbox::instance->bindings()->fireEvent(data);
+ Py_DECREF((PyObject*)data);
+
Openbox::instance->bindings()->grabButtons(false, client);
// remove from the stacking order