]> Dogcows Code - chaz/openbox/blobdiff - src/screen.cc
clean up transient's parent's reference in destructor
[chaz/openbox] / src / screen.cc
index bebc82d17705d59763ed827038b478b4e4e3d9b4..307404ffce87aa48629f585a7b271100367f8880 100644 (file)
@@ -196,7 +196,7 @@ void OBScreen::updateStrut()
 {
   _strut.left = _strut.right = _strut.top = _strut.bottom = 0;
 
-  ClientList::iterator it, end = clients.end();
+  OBClient::List::iterator it, end = clients.end();
   for (it = clients.begin(); it != end; ++it) {
     const otk::Strut &s = (*it)->strut();
     _strut.left = std::max(_strut.left, s.left);
@@ -364,8 +364,8 @@ void OBScreen::setClientList()
     
     windows = new Window[size];
     win_it = windows;
-    ClientList::const_iterator it = clients.begin();
-    const ClientList::const_iterator end = clients.end();
+    OBClient::List::const_iterator it = clients.begin();
+    const OBClient::List::const_iterator end = clients.end();
     for (; it != end; ++it, ++win_it)
       *win_it = (*it)->window();
   } else
@@ -397,8 +397,8 @@ void OBScreen::setStackingList()
     
     windows = new Window[size];
     win_it = windows;
-    ClientList::const_iterator it = _stacking.begin();
-    const ClientList::const_iterator end = _stacking.end();
+    OBClient::List::const_iterator it = _stacking.begin();
+    const OBClient::List::const_iterator end = _stacking.end();
     for (; it != end; ++it, ++win_it)
       *win_it = (*it)->window();
   } else
@@ -518,6 +518,15 @@ void OBScreen::manageWindow(Window window)
   setClientList();
 
   Openbox::instance->bindings()->grabButtons(true, client);
+
+  // 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);
+  Openbox::instance->bindings()->fireEvent(data);
+  Py_DECREF((PyObject*)data);
 }
 
 
@@ -525,6 +534,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
@@ -533,9 +547,13 @@ void OBScreen::unmanageWindow(OBClient *client)
   // pass around focus if this window was focused XXX do this better!
   if (Openbox::instance->focusedClient() == client) {
     OBClient *newfocus = 0;
-    if (!_stacking.empty())
-      newfocus = _stacking.front();
-    if (! (newfocus && newfocus->focus()))
+    OBClient::List::iterator it, end = _stacking.end();
+    for (it = _stacking.begin(); it != end; ++it)
+      if ((*it)->normal() && (*it)->focus()) {
+        newfocus = *it;
+        break;
+      }
+    if (!newfocus)
       client->unfocus();
   }
 
@@ -586,7 +604,7 @@ void OBScreen::restack(bool raise, OBClient *client)
 
   // the stacking list is from highest to lowest
   
-  ClientList::iterator it = _stacking.begin(), end = _stacking.end();
+  OBClient::List::iterator it = _stacking.begin(), end = _stacking.end();
   // insert the windows above this window
   for (; it != end; ++it) {
     if ((*it)->layer() < layer || (raise && (*it)->layer() == layer))
This page took 0.022213 seconds and 4 git commands to generate.