X-Git-Url: https://git.brokenzipper.com/gitweb?a=blobdiff_plain;f=src%2Fscreen.cc;h=49d63409b23de7a7240304414efd9a88107e5d44;hb=4c768d5d63154e416e1282396dc48492d0585d42;hp=a7c72e2c4fff2fd956bb982fd8570d7d6e43d5a1;hpb=d7cc09cebd23e052f230414f0ad7fb385e3cd2ef;p=chaz%2Fopenbox diff --git a/src/screen.cc b/src/screen.cc index a7c72e2c..49d63409 100644 --- a/src/screen.cc +++ b/src/screen.cc @@ -138,6 +138,11 @@ OBScreen::OBScreen(int screen) // 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); } @@ -151,6 +156,11 @@ OBScreen::~OBScreen() 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); @@ -532,7 +542,7 @@ void OBScreen::manageWindow(Window window) } // 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); @@ -545,7 +555,8 @@ void OBScreen::unmanageWindow(OBClient *client) 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); @@ -553,19 +564,9 @@ void OBScreen::unmanageWindow(OBClient *client) // remove from the stacking order _stacking.remove(client); - - // pass around focus if this window was focused XXX do this better! - if (Openbox::instance->focusedClient() == client) { - OBClient *newfocus = 0; - OBClient::List::iterator it, end = _stacking.end(); - for (it = _stacking.begin(); it != end; ++it) - if ((*it)->desktop() == _desktop && (*it)->normal() && (*it)->focus()) { - newfocus = *it; - break; - } - if (!newfocus) - client->unfocus(); - } + + // unfocus the client + client->unfocus(); // remove from the wm's map Openbox::instance->removeClient(client->window()); @@ -658,6 +659,10 @@ void OBScreen::changeDesktop(long desktop) (*it)->frame->show(); } } + + // if nothing is focused, force the callbacks to fire +// if (!Openbox::instance->focusedClient()) +// Openbox::instance->setFocusedClient(0); } void OBScreen::changeNumDesktops(long num)