]> Dogcows Code - chaz/openbox/blobdiff - src/client.cc
mention that 2.9x is not supported
[chaz/openbox] / src / client.cc
index 68653c31f462a8a3e007f466f789fe186102b268..254345730a84e9bbf1c22dbb9b6113a139303d6a 100644 (file)
@@ -1,8 +1,6 @@
 // -*- mode: C++; indent-tabs-mode: nil; c-basic-offset: 2; -*-
 
-#ifdef HAVE_CONFIG_H
-# include "../config.h"
-#endif
+#include "config.h"
 
 #include "client.hh"
 #include "frame.hh"
@@ -29,7 +27,6 @@ namespace ob {
 
 Client::Client(int screen, Window window)
   : otk::EventHandler(),
-    WidgetBase(WidgetBase::Type_Client),
     frame(0), _screen(screen), _window(window)
 {
   assert(screen >= 0);
@@ -481,7 +478,7 @@ void Client::updateNormalHints()
   _size_inc = otk::Size(1, 1);
   _base_size = otk::Size(0, 0);
   _min_size = otk::Size(0, 0);
-  _max_size = otk::Size(UINT_MAX, UINT_MAX);
+  _max_size = otk::Size(INT_MAX, INT_MAX);
 
   // get the hints from the window
   if (XGetWMNormalHints(**otk::display, _window, &size, &ret)) {
@@ -581,7 +578,7 @@ void Client::updateTitle()
     _title = _("Unnamed Window");
 
   if (frame)
-    frame->setTitle(_title);
+    frame->adjustTitle();
 }
 
 
@@ -822,6 +819,7 @@ void Client::setModal(bool modal)
     Client *c = this;
     while (c->_transient_for) {
       c = c->_transient_for;
+      if (c == this) break; // circular?
       if (c->_modal_child) break; // already has a modal child
       c->_modal_child = this;
     }
@@ -833,11 +831,14 @@ void Client::setModal(bool modal)
     while (c->_transient_for) // go up the tree
       c = c->_transient_for;
     replacement = c->findModalChild(this); // find a modal child, skipping this
+    assert(replacement != this);
 
     c = this;
     while (c->_transient_for) {
       c = c->_transient_for;
+      if (c == this) break; // circular?
       if (c->_modal_child != this) break; // has a different modal child
+      if (c == replacement) break; // found the replacement itself
       c->_modal_child = replacement;
     }
   }
@@ -1118,27 +1119,26 @@ void Client::shapeHandler(const XShapeEvent &e)
 #endif
 
 
-void Client::resize(Corner anchor, unsigned int w, unsigned int h)
+void Client::resize(Corner anchor, int w, int h)
 {
   if (!(_functions & Func_Resize)) return;
   internal_resize(anchor, w, h);
 }
 
 
-void Client::internal_resize(Corner anchor, unsigned int w, unsigned int h,
+void Client::internal_resize(Corner anchor, int w, int h,
                              bool user, int x, int y)
 {
-  w -= _base_size.width(); 
+  w -= _base_size.width();
   h -= _base_size.height();
 
   if (user) {
     // for interactive resizing. have to move half an increment in each
     // direction.
-    unsigned int mw = w % _size_inc.width(); // how far we are towards the next
-                                             // size inc
-    unsigned int mh = h % _size_inc.height();
-    unsigned int aw = _size_inc.width() / 2; // amount to add
-    unsigned int ah = _size_inc.height() / 2;
+    int mw = w % _size_inc.width(); // how far we are towards the next size inc
+    int mh = h % _size_inc.height();
+    int aw = _size_inc.width() / 2; // amount to add
+    int ah = _size_inc.height() / 2;
     // don't let us move into a new size increment
     if (mw + aw >= _size_inc.width()) aw = _size_inc.width() - mw - 1;
     if (mh + ah >= _size_inc.height()) ah = _size_inc.height() - mh - 1;
@@ -1714,8 +1714,8 @@ void Client::focusHandler(const XFocusChangeEvent &e)
   
   otk::EventHandler::focusHandler(e);
 
-  frame->focus();
   _focused = true;
+  frame->adjustFocus();
 
   openbox->setFocusedClient(this);
 }
@@ -1729,26 +1729,29 @@ void Client::unfocusHandler(const XFocusChangeEvent &e)
   
   otk::EventHandler::unfocusHandler(e);
 
-  frame->unfocus();
   _focused = false;
+  frame->adjustFocus();
 
   if (openbox->focusedClient() == this)
     openbox->setFocusedClient(0);
 }
 
 
-void Client::configureRequestHandler(const XConfigureRequestEvent &e)
+void Client::configureRequestHandler(const XConfigureRequestEvent &ec)
 {
 #ifdef    DEBUG
-  printf("ConfigureRequest for 0x%lx\n", e.window);
+  printf("ConfigureRequest for 0x%lx\n", ec.window);
 #endif // DEBUG
   
-  otk::EventHandler::configureRequestHandler(e);
+  otk::EventHandler::configureRequestHandler(ec);
 
   // compress these
+  XConfigureRequestEvent e = ec;
   XEvent ev;
   while (XCheckTypedWindowEvent(**otk::display, window(), ConfigureRequest,
                                 &ev)) {
+    // XXX if this causes bad things.. we can compress config req's with the
+    //     same mask.
     e.value_mask |= ev.xconfigurerequest.value_mask;
     if (ev.xconfigurerequest.value_mask & CWX)
       e.x = ev.xconfigurerequest.x;
This page took 0.030322 seconds and 4 git commands to generate.