]> Dogcows Code - chaz/openbox/blobdiff - src/screen.cc
link in python not guile
[chaz/openbox] / src / screen.cc
index 3c6731c2c940ad5732bbd241bc88352922219d77..26347539a5d4abbbb3daed5b40be910ff99db191 100644 (file)
@@ -343,16 +343,19 @@ void OBScreen::manageWindow(Window window)
 
   // choose the events we want to receive on the CLIENT window
   attrib_set.event_mask = OBClient::event_mask;
-  attrib_set.do_not_propagate_mask = ButtonPressMask | ButtonReleaseMask |
-                                     ButtonMotionMask;
+  attrib_set.do_not_propagate_mask = OBClient::no_propagate_mask;
   XChangeWindowAttributes(otk::OBDisplay::display, window,
                           CWEventMask|CWDontPropagate, &attrib_set);
 
   // create the OBClient class, which gets all of the hints on the window
-  Openbox::instance->addClient(window, client = new OBClient(_number, window));
+  client = new OBClient(_number, window);
+  // register for events
+  Openbox::instance->registerHandler(window, client);
+  // add to the wm's map
+  Openbox::instance->addClient(window, client);
 
   // we dont want a border on the client
-  XSetWindowBorderWidth(otk::OBDisplay::display, window, 0);
+  client->toggleClientBorder(false);
   
   // specify that if we exit, the window should not be destroyed and should be
   // reparented back to root automatically
@@ -365,6 +368,19 @@ void OBScreen::manageWindow(Window window)
   // create the decoration frame for the client window
   client->frame = new OBFrame(client, &_style);
 
+  // add to the wm's map
+  Openbox::instance->addClient(client->frame->getWindow(), client);
+  Openbox::instance->addClient(client->frame->plate(), client);
+  Openbox::instance->addClient(client->frame->titlebar(), client);
+  Openbox::instance->addClient(client->frame->label(), client);
+  Openbox::instance->addClient(client->frame->button_max(), client);
+  Openbox::instance->addClient(client->frame->button_iconify(), client);
+  Openbox::instance->addClient(client->frame->button_stick(), client);
+  Openbox::instance->addClient(client->frame->button_close(), client);
+  Openbox::instance->addClient(client->frame->handle(), client);
+  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();
  
@@ -384,6 +400,22 @@ void OBScreen::unmanageWindow(OBClient *client)
   OBFrame *frame = client->frame;
 
   // XXX: pass around focus if this window was focused
+
+  // remove from the wm's map
+  Openbox::instance->removeClient(client->window());
+  Openbox::instance->removeClient(frame->getWindow());
+  Openbox::instance->removeClient(frame->plate());
+  Openbox::instance->removeClient(frame->titlebar());
+  Openbox::instance->removeClient(frame->label());
+  Openbox::instance->removeClient(frame->button_max());
+  Openbox::instance->removeClient(frame->button_iconify());
+  Openbox::instance->removeClient(frame->button_stick());
+  Openbox::instance->removeClient(frame->button_close());
+  Openbox::instance->removeClient(frame->handle());
+  Openbox::instance->removeClient(frame->grip_left());
+  Openbox::instance->removeClient(frame->grip_right());
+  // unregister for handling events
+  Openbox::instance->clearHandler(client->window());
   
   // remove the window from our save set
   XChangeSaveSet(otk::OBDisplay::display, client->window(), SetModeDelete);
@@ -392,10 +424,9 @@ void OBScreen::unmanageWindow(OBClient *client)
   XSelectInput(otk::OBDisplay::display, client->window(), NoEventMask);
 
   frame->hide();
-  
-  // we dont want a border on the client
-  XSetWindowBorderWidth(otk::OBDisplay::display, client->window(),
-                        client->borderWidth());
+
+  // give the client its border back
+  client->toggleClientBorder(true);
 
   delete client->frame;
   client->frame = 0;
This page took 0.0242 seconds and 4 git commands to generate.