]> Dogcows Code - chaz/openbox/blobdiff - src/screen.cc
Added color reduction for 16bpp displays
[chaz/openbox] / src / screen.cc
index b95c1908a1b8aae6e51cc5ffb5a47dd53c13202b..6525150bc478e4af53ea5cc07cde2908c5f835d2 100644 (file)
@@ -48,7 +48,8 @@ namespace ob {
 
 Screen::Screen(int screen)
   : WidgetBase(WidgetBase::Type_Root),
-    _number(screen)
+    _number(screen),
+    _style(screen, "")
 {
   assert(screen >= 0); assert(screen < ScreenCount(**otk::display));
   _info = otk::display->screenInfo(screen);
@@ -73,13 +74,8 @@ Screen::Screen(int screen)
   XDefineCursor(**otk::display, _info->rootWindow(),
                 openbox->cursors().session);
 
-  // initialize the shit that is used for all drawing on the screen
-  _image_control = new otk::ImageControl(_info, true);
-  _image_control->installRootColormap();
-  _root_cmap_installed = True;
-
-  // initialize the screen's style
-  _style.setImageControl(_image_control);
+  // XXX: initialize the screen's style
+  /*
   otk::ustring stylepath;
   python_get_string("theme", &stylepath);
   otk::Configuration sconfig(false);
@@ -92,6 +88,8 @@ Screen::Screen(int screen)
     }
   }
   _style.load(sconfig);
+  */
+  otk::display->renderControl(_number)->drawRoot(*_style.rootColor());
 
   // set up notification of netwm support
   changeSupportedAtoms();
@@ -157,8 +155,6 @@ Screen::~Screen()
 
   XDestroyWindow(**otk::display, _focuswindow);
   XDestroyWindow(**otk::display, _supportwindow);
-
-  delete _image_control;
 }
 
 
@@ -328,16 +324,18 @@ void Screen::changeSupportedAtoms()
     otk::Property::atoms.net_wm_moveresize_size_bottomright,
     otk::Property::atoms.net_wm_moveresize_move,
 */
-/*
     otk::Property::atoms.net_wm_allowed_actions,
     otk::Property::atoms.net_wm_action_move,
     otk::Property::atoms.net_wm_action_resize,
+    otk::Property::atoms.net_wm_action_minimize,
     otk::Property::atoms.net_wm_action_shade,
+/*    otk::Property::atoms.net_wm_action_stick,*/
     otk::Property::atoms.net_wm_action_maximize_horz,
     otk::Property::atoms.net_wm_action_maximize_vert,
+    otk::Property::atoms.net_wm_action_fullscreen,
     otk::Property::atoms.net_wm_action_change_desktop,
     otk::Property::atoms.net_wm_action_close,
-*/
+
     otk::Property::atoms.net_wm_state,
     otk::Property::atoms.net_wm_state_modal,
     otk::Property::atoms.net_wm_state_maximized_vert,
@@ -473,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);
@@ -481,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);
@@ -503,8 +507,8 @@ void Screen::manageWindow(Window window)
       client->desktop() == (signed)0xffffffff) {
     client->frame->show();
   }
-  // XXX: handle any requested states such as maximized
+
+  client->applyStartupState();
 
   otk::display->ungrab();
 
@@ -546,7 +550,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());
@@ -597,7 +601,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
@@ -622,7 +626,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);
@@ -767,30 +771,7 @@ 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);
-  } else
-    manageWindow(e.window);
+  manageWindow(e.window);
 }
+
 }
This page took 0.028929 seconds and 4 git commands to generate.