add support for wm_window_role

This commit is contained in:
Dana Jansens 2003-01-04 19:09:52 +00:00
parent 69c257faa9
commit d13f021b8b
8 changed files with 56 additions and 19 deletions

View file

@ -13577,6 +13577,7 @@ static swig_const_info swig_const_table[] = {
{ SWIG_PY_INT, (char *)"OBProperty_wm_name", (long) otk::OBProperty::wm_name, 0, 0, 0},
{ SWIG_PY_INT, (char *)"OBProperty_wm_icon_name", (long) otk::OBProperty::wm_icon_name, 0, 0, 0},
{ SWIG_PY_INT, (char *)"OBProperty_wm_class", (long) otk::OBProperty::wm_class, 0, 0, 0},
{ SWIG_PY_INT, (char *)"OBProperty_wm_window_role", (long) otk::OBProperty::wm_window_role, 0, 0, 0},
{ SWIG_PY_INT, (char *)"OBProperty_motif_wm_hints", (long) otk::OBProperty::motif_wm_hints, 0, 0, 0},
{ SWIG_PY_INT, (char *)"OBProperty_blackbox_attributes", (long) otk::OBProperty::blackbox_attributes, 0, 0, 0},
{ SWIG_PY_INT, (char *)"OBProperty_blackbox_change_attributes", (long) otk::OBProperty::blackbox_change_attributes, 0, 0, 0},

View file

@ -40,6 +40,7 @@ OBProperty::OBProperty()
_atoms[wm_name] = create("WM_NAME");
_atoms[wm_icon_name] = create("WM_ICON_NAME");
_atoms[wm_class] = create("WM_CLASS");
_atoms[wm_window_role] = create("WM_WINDOW_ROLE");
_atoms[motif_wm_hints] = create("_MOTIF_WM_HINTS");
_atoms[blackbox_hints] = create("_BLACKBOX_HINTS");
_atoms[blackbox_attributes] = create("_BLACKBOX_ATTRIBUTES");

View file

@ -45,6 +45,7 @@ public:
wm_name,
wm_icon_name,
wm_class,
wm_window_role,
motif_wm_hints,
blackbox_attributes,
blackbox_change_attributes,

View file

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

View file

@ -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];
}
}

View file

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

View file

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

View file

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