// register this class as the event handler for the root window
Openbox::instance->registerHandler(_info->rootWindow(), this);
+
+ // call the python Startup callbacks
+ EventData *data = new_event_data(_number, 0, EventShutdown, 0);
+ Openbox::instance->bindings()->fireEvent(data);
+ Py_XDECREF((PyObject*)data);
}
while (!clients.empty())
unmanageWindow(clients.front());
+ // call the python Shutdown callbacks
+ EventData *data = new_event_data(_number, 0, EventShutdown, 0);
+ Openbox::instance->bindings()->fireEvent(data);
+ Py_XDECREF((PyObject*)data);
+
XDestroyWindow(otk::OBDisplay::display, _focuswindow);
XDestroyWindow(otk::OBDisplay::display, _supportwindow);
Openbox::instance->addClient(client->frame->grip_left(), client);
Openbox::instance->addClient(client->frame->grip_right(), client);
- // XXX: if on the current desktop..
- client->frame->show();
+ bool shown = false;
+
+ // if on the current desktop.. (or all desktops)
+ if (client->desktop() == _desktop ||
+ client->desktop() == (signed)0xffffffff) {
+ shown = true;
+ client->frame->show();
+ }
// XXX: handle any requested states such as maximized
Openbox::instance->bindings()->grabButtons(true, client);
- // XXX: make this optional or more intelligent
- if (client->normal())
- client->focus();
+ if (shown) {
+ // XXX: make this optional or more intelligent
+ if (client->normal())
+ client->focus();
+ }
// call the python NEWWINDOW binding
- EventData *data = new_event_data(window, EventNewWindow, 0);
+ EventData *data = new_event_data(_number, window, EventNewWindow, 0);
Openbox::instance->bindings()->fireEvent(data);
Py_DECREF((PyObject*)data);
OBFrame *frame = client->frame;
// call the python CLOSEWINDOW binding
- EventData *data = new_event_data(client->window(), EventCloseWindow, 0);
+ EventData *data = new_event_data(_number, client->window(),
+ EventCloseWindow, 0);
Openbox::instance->bindings()->fireEvent(data);
Py_DECREF((PyObject*)data);
OBClient *newfocus = 0;
OBClient::List::iterator it, end = _stacking.end();
for (it = _stacking.begin(); it != end; ++it)
- if ((*it)->normal() && (*it)->focus()) {
+ if ((*it)->desktop() == _desktop && (*it)->normal() && (*it)->focus()) {
newfocus = *it;
break;
}
if (!(desktop >= 0 && desktop < _num_desktops)) return;
+ printf("Moving to desktop %ld\n", desktop);
+
long old = _desktop;
_desktop = desktop;
otk::OBProperty::Atom_Cardinal,
_desktop);
+ if (old == _desktop) return;
+
OBClient::List::iterator it, end = clients.end();
for (it = clients.begin(); it != end; ++it) {
if ((*it)->desktop() == old) {
- // XXX hide
+ (*it)->frame->hide();
} else if ((*it)->desktop() == _desktop) {
- // XXX show
+ (*it)->frame->show();
}
}
}
if (!(num > 0)) return;
+ // XXX: move windows on desktops that will no longer exist!
+
_num_desktops = num;
Openbox::instance->property()->set(_info->rootWindow(),
otk::OBProperty::net_number_of_desktops,