]> Dogcows Code - chaz/openbox/blobdiff - src/screen.cc
use otk objects in the ob scripts by importing otk
[chaz/openbox] / src / screen.cc
index 6bc04ad133382f3cb93109ee23d32a9ef7aac668..6c1551b5153dd0ef0990b7992859441895656c1a 100644 (file)
@@ -89,6 +89,7 @@ Screen::Screen(int screen)
   }
   _style.load(sconfig);
   */
+  otk::display->renderControl(_number)->drawRoot(*_style.rootColor());
 
   // set up notification of netwm support
   changeSupportedAtoms();
@@ -133,7 +134,7 @@ Screen::Screen(int screen)
   openbox->registerHandler(_info->rootWindow(), this);
 
   // call the python Startup callbacks
-  EventData data(_number, 0, EventShutdown, 0);
+  EventData data(_number, 0, EventAction::Shutdown, 0);
   openbox->bindings()->fireEvent(&data);
 }
 
@@ -149,7 +150,7 @@ Screen::~Screen()
     unmanageWindow(clients.front());
 
   // call the python Shutdown callbacks
-  EventData data(_number, 0, EventShutdown, 0);
+  EventData data(_number, 0, EventAction::Shutdown, 0);
   openbox->bindings()->fireEvent(&data);
 
   XDestroyWindow(**otk::display, _focuswindow);
@@ -260,7 +261,7 @@ void Screen::calcArea()
 #endif // XINERAMA
 */
   
-  if (old_area != _area)
+  //if (old_area != _area)
     // XXX: re-maximize windows
 
   changeWorkArea();
@@ -470,6 +471,12 @@ void Screen::manageWindow(Window window)
 
   // create the decoration frame for the client window
   client->frame = new Frame(client, &_style);
+  // register the plate for events (map req's)
+  // this involves removing itself from the handler list first, since it is
+  // auto added to the list, being a widget. we won't get any events on the
+  // plate except for events for the client (SubstructureRedirectMask)
+  openbox->clearHandler(client->frame->plate());
+  openbox->registerHandler(client->frame->plate(), client);
 
   // add to the wm's map
   openbox->addClient(client->frame->window(), client);
@@ -478,7 +485,7 @@ void Screen::manageWindow(Window window)
   openbox->addClient(client->frame->label(), client);
   openbox->addClient(client->frame->button_max(), client);
   openbox->addClient(client->frame->button_iconify(), client);
-  openbox->addClient(client->frame->button_stick(), client);
+  openbox->addClient(client->frame->button_alldesk(), client);
   openbox->addClient(client->frame->button_close(), client);
   openbox->addClient(client->frame->handle(), client);
   openbox->addClient(client->frame->grip_left(), client);
@@ -491,7 +498,7 @@ void Screen::manageWindow(Window window)
         client->positionRequested())) {
     // position the window intelligenty .. hopefully :)
     // call the python PLACEWINDOW binding
-    EventData data(_number, client, EventPlaceWindow, 0);
+    EventData data(_number, client, EventAction::PlaceWindow, 0);
     openbox->bindings()->fireEvent(&data);
   }
 
@@ -516,11 +523,12 @@ void Screen::manageWindow(Window window)
   openbox->bindings()->grabButtons(true, client);
 
   // call the python NEWWINDOW binding
-  EventData data(_number, client, EventNewWindow, 0);
+  EventData data(_number, client, EventAction::NewWindow, 0);
   openbox->bindings()->fireEvent(&data);
 
 #ifdef DEBUG
-  printf("Managed window 0x%lx\n", window);
+  printf("Managed window 0x%lx frame 0x%lx\n",
+         window, client->frame->window());
 #endif
 }
 
@@ -530,7 +538,7 @@ void Screen::unmanageWindow(Client *client)
   Frame *frame = client->frame;
 
   // call the python CLOSEWINDOW binding 
-  EventData data(_number, client, EventCloseWindow, 0);
+  EventData data(_number, client, EventAction::CloseWindow, 0);
   openbox->bindings()->fireEvent(&data);
 
   openbox->bindings()->grabButtons(false, client);
@@ -543,7 +551,7 @@ void Screen::unmanageWindow(Client *client)
   openbox->removeClient(frame->label());
   openbox->removeClient(frame->button_max());
   openbox->removeClient(frame->button_iconify());
-  openbox->removeClient(frame->button_stick());
+  openbox->removeClient(frame->button_alldesk());
   openbox->removeClient(frame->button_close());
   openbox->removeClient(frame->handle());
   openbox->removeClient(frame->grip_left());
@@ -565,6 +573,9 @@ void Screen::unmanageWindow(Client *client)
   // reparent the window out of the frame
   frame->releaseClient();
 
+#ifdef DEBUG
+  Window framewin = client->frame->window();
+#endif
   delete client->frame;
   client->frame = 0;
 
@@ -578,7 +589,7 @@ void Screen::unmanageWindow(Client *client)
   client->unfocus();
 
 #ifdef DEBUG
-  printf("Unmanaged window 0x%lx\n", client->window());
+  printf("Unmanaged window 0x%lx frame 0x%lx\n", client->window(), framewin);
 #endif
   
   delete client;
@@ -594,7 +605,7 @@ void Screen::lowerWindow(Client *client)
   assert(!_stacking.empty()); // this would be bad
 
   Client::List::iterator it = --_stacking.end();
-  Client::List::const_iterator end = _stacking.begin();
+  const Client::List::iterator end = _stacking.begin();
 
   for (; it != end && (*it)->layer() < client->layer(); --it);
   if (*it == client) return;          // already the bottom, return
@@ -619,7 +630,7 @@ void Screen::raiseWindow(Client *client)
   _stacking.remove(client);
   
   Client::List::iterator it = _stacking.begin();
-  Client::List::const_iterator end = _stacking.end();
+  const Client::List::iterator end = _stacking.end();
 
   // the stacking list is from highest to lowest
   for (; it != end && (*it)->layer() > client->layer(); ++it);
@@ -764,30 +775,13 @@ void Screen::mapRequestHandler(const XMapRequestEvent &e)
   printf("MapRequest for 0x%lx\n", e.window);
 #endif // DEBUG
 
-  /*
-    MapRequest events come here even after the window exists instead of going
-    right to the client window, because of how they are sent and their struct
-    layout.
-  */
   Client *c = openbox->findClient(e.window);
-
   if (c) {
-    // send a net_active_window message
-    XEvent ce;
-    ce.xclient.type = ClientMessage;
-    ce.xclient.message_type = otk::Property::atoms.net_active_window;
-    ce.xclient.display = **otk::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::display, _info->rootWindow(), false,
-               SubstructureRedirectMask | SubstructureNotifyMask,
-               &ce);
+#ifdef DEBUG
+    printf("DEBUG: MAP REQUEST CAUGHT IN SCREEN. IGNORED.\n");
+#endif
   } else
     manageWindow(e.window);
 }
+
 }
This page took 0.028566 seconds and 4 git commands to generate.