add support for wm_window_role
This commit is contained in:
parent
69c257faa9
commit
d13f021b8b
8 changed files with 56 additions and 19 deletions
|
@ -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},
|
||||
|
|
|
@ -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");
|
||||
|
|
|
@ -45,6 +45,7 @@ public:
|
|||
wm_name,
|
||||
wm_icon_name,
|
||||
wm_class,
|
||||
wm_window_role,
|
||||
motif_wm_hints,
|
||||
blackbox_attributes,
|
||||
blackbox_change_attributes,
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 },
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue