]> Dogcows Code - chaz/openbox/blobdiff - src/screen.cc
fix \'s
[chaz/openbox] / src / screen.cc
index 09f57d64ebde4200b24e0593844da1b4cded300e..e97c05b295236b7e2bde13a0e1e4b8275ec6ed55 100644 (file)
@@ -140,9 +140,8 @@ OBScreen::OBScreen(int screen)
   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);
+  EventData data(_number, 0, EventShutdown, 0);
+  Openbox::instance->bindings()->fireEvent(&data);
 }
 
 
@@ -157,9 +156,8 @@ OBScreen::~OBScreen()
     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);
+  EventData data(_number, 0, EventShutdown, 0);
+  Openbox::instance->bindings()->fireEvent(&data);
 
   XDestroyWindow(otk::OBDisplay::display, _focuswindow);
   XDestroyWindow(otk::OBDisplay::display, _supportwindow);
@@ -284,7 +282,6 @@ void OBScreen::changeSupportedAtoms()
   _supportwindow = XCreateSimpleWindow(otk::OBDisplay::display,
                                        _info->rootWindow(),
                                        0, 0, 1, 1, 0, 0, 0);
-  assert(_supportwindow != None);
 
   // set supporting window
   Openbox::instance->property()->set(_info->rootWindow(),
@@ -498,9 +495,8 @@ void OBScreen::manageWindow(Window window)
         client->positionRequested())) {
     // position the window intelligenty .. hopefully :)
     // call the python PLACEWINDOW binding
-    EventData *data = new_event_data(_number, window, EventPlaceWindow, 0);
-    Openbox::instance->bindings()->fireEvent(data);
-    Py_DECREF((PyObject*)data);
+    EventData data(_number, client, EventPlaceWindow, 0);
+    Openbox::instance->bindings()->fireEvent(&data);
   }
 
   // create the decoration frame for the client window
@@ -543,23 +539,22 @@ void OBScreen::manageWindow(Window window)
   Openbox::instance->bindings()->grabButtons(true, client);
 
   // call the python NEWWINDOW binding
-  EventData *data = new_event_data(_number, window, EventNewWindow, 0);
-  Openbox::instance->bindings()->fireEvent(data);
-  Py_DECREF((PyObject*)data);
+  EventData data(_number, client, EventNewWindow, 0);
+  Openbox::instance->bindings()->fireEvent(&data);
 
+#ifdef DEBUG
   printf("Managed window 0x%lx\n", window);
+#endif
 }
 
 
-void OBScreen::unmanageWindow(OBClient *client, bool reparented)
+void OBScreen::unmanageWindow(OBClient *client)
 {
   OBFrame *frame = client->frame;
 
   // call the python CLOSEWINDOW binding 
-  EventData *data = new_event_data(_number, client->window(),
-                                   EventCloseWindow, 0);
-  Openbox::instance->bindings()->fireEvent(data);
-  Py_DECREF((PyObject*)data);
+  EventData data(_number, client, EventCloseWindow, 0);
+  Openbox::instance->bindings()->fireEvent(&data);
 
   Openbox::instance->bindings()->grabButtons(false, client);
 
@@ -590,14 +585,9 @@ void OBScreen::unmanageWindow(OBClient *client, bool reparented)
   // give the client its border back
   client->toggleClientBorder(true);
 
-  if (!reparented)
-    // reparent the window out of the frame
-    frame->releaseClient();
-  else
-    // the client is already reparented, so, since we unmapped the window
-    // above, we remap it here. aren't we nice? :)
-    XMapWindow(otk::OBDisplay::display, client->window());
-  
+  // reparent the window out of the frame
+  frame->releaseClient();
+
   delete client->frame;
   client->frame = 0;
 
@@ -610,6 +600,10 @@ void OBScreen::unmanageWindow(OBClient *client, bool reparented)
   // unfocus the client (calls the focus callbacks)
   client->unfocus();
 
+#ifdef DEBUG
+  printf("Unmanaged window 0x%lx\n", client->window());
+#endif
+  
   delete client;
 
   // update the root properties
@@ -789,10 +783,22 @@ void OBScreen::mapRequestHandler(const XMapRequestEvent &e)
   OBClient *c = Openbox::instance->findClient(e.window);
 
   if (c) {
-    if (c->shaded())
-      c->shade(false);
-    // XXX: uniconify the window
-    c->focus();
+    // send a net_active_window message
+    XEvent ce;
+    ce.xclient.type = ClientMessage;
+    ce.xclient.message_type =
+      Openbox::instance->property()->atom(otk::OBProperty::net_active_window);
+    ce.xclient.display = otk::OBDisplay::display;
+    ce.xclient.window = c->window();
+    ce.xclient.format = 32;
+    ce.xclient.data.l[0] = 0l;
+    ce.xclient.data.l[1] = 0l;
+    ce.xclient.data.l[2] = 0l;
+    ce.xclient.data.l[3] = 0l;
+    ce.xclient.data.l[4] = 0l;
+    XSendEvent(otk::OBDisplay::display, _info->rootWindow(), false,
+               SubstructureRedirectMask | SubstructureNotifyMask,
+               &ce);
   } else
     manageWindow(e.window);
 }
This page took 0.022809 seconds and 4 git commands to generate.