]> Dogcows Code - chaz/openbox/blobdiff - otk/widget.cc
hopefully caught stupid assert
[chaz/openbox] / otk / widget.cc
index 9d8c37a0fd2976b0a89d51ad89bacfe8344000a1..691c0968e81eb6f408424ea7b8ecdf64153fd44c 100644 (file)
@@ -72,6 +72,7 @@ void OtkWidget::create(void)
                           _rect.y(), _rect.width(), _rect.height(), 0,
                           scr_info->getDepth(), InputOutput,
                           scr_info->getVisual(), create_mask, &attrib_create);
+  _ignore_config++;
 }
 
 void OtkWidget::setWidth(int w)
@@ -97,6 +98,7 @@ void OtkWidget::move(int x, int y)
 {
   _rect.setPos(x, y);
   XMoveWindow(otk::OBDisplay::display, _window, x, y);
+  _ignore_config++;
 }
 
 void OtkWidget::resize(const Point &to)
@@ -125,9 +127,9 @@ void OtkWidget::setGeometry(int x, int y, int width, int height)
 {
   _rect = Rect(x, y, width, height);
   _dirty = true;
-  _ignore_config++;
 
   XMoveResizeWindow(otk::OBDisplay::display, _window, x, y, width, height);
+  _ignore_config++;
 }
 
 void OtkWidget::show(void)
@@ -245,7 +247,10 @@ void OtkWidget::adjustHorz(void)
 
   for (it = _children.begin(); it != end; ++it) {
     tmp = *it;
-    if (tmp->isStretchableHorz() && _fixed_width)
+    if (tmp->isStretchableVert())
+      tmp->setHeight(_rect.height() > _bevel_width * 2 ?
+                     _rect.height() - _bevel_width * 2 : _bevel_width);
+    if (tmp->isStretchableHorz())
       stretchable.push_back(tmp);
     else
       width += tmp->_rect.width() + _bevel_width;
@@ -260,10 +265,9 @@ void OtkWidget::adjustHorz(void)
 
     int str_width = _rect.width() - width / stretchable.size();
 
-    for (; str_it != str_end; ++str_it) {
-      (*str_it)->setWidth(str_width - _bevel_width);
-      //(*str_it)->update();
-    }
+    for (; str_it != str_end; ++str_it)
+      (*str_it)->setWidth(str_width > _bevel_width ? str_width - _bevel_width
+                          : _bevel_width);
   }
 
   OtkWidget *prev_widget = 0;
@@ -300,7 +304,10 @@ void OtkWidget::adjustVert(void)
 
   for (it = _children.begin(); it != end; ++it) {
     tmp = *it;
-    if (tmp->isStretchableVert() && _fixed_height)
+    if (tmp->isStretchableHorz())
+      tmp->setWidth(_rect.width() > _bevel_width * 2 ?
+                    _rect.width() - _bevel_width * 2 : _bevel_width);
+    if (tmp->isStretchableVert())
       stretchable.push_back(tmp);
     else
       height += tmp->_rect.height() + _bevel_width;
@@ -315,10 +322,9 @@ void OtkWidget::adjustVert(void)
 
     int str_height = _rect.height() - height / stretchable.size();
 
-    for (; str_it != str_end; ++str_it) {
-      (*str_it)->setHeight(str_height - _bevel_width);
-      //(*str_it)->update();
-    }
+    for (; str_it != str_end; ++str_it)
+      (*str_it)->setHeight(str_height > _bevel_width ?
+                           str_height - _bevel_width : _bevel_width);
   }
 
   OtkWidget *prev_widget = 0;
@@ -343,16 +349,16 @@ void OtkWidget::adjustVert(void)
 
 void OtkWidget::update(void)
 {
-  OtkWidgetList::iterator it = _children.begin(), end = _children.end();
-  for (; it != end; ++it)
-    (*it)->update();
-
   if (_dirty) {
     adjust();
     render();
     XClearWindow(OBDisplay::display, _window);
   }
 
+  OtkWidgetList::iterator it = _children.begin(), end = _children.end();
+  for (; it != end; ++it)
+    (*it)->update();
+
   _dirty = false;
 }
 
@@ -411,8 +417,11 @@ bool OtkWidget::configure(const XConfigureEvent &e)
     if (_ignore_config) {
       _ignore_config--;
     } else {
-      _dirty = true;
-      _rect.setRect(e.x, e.y, e.width, e.height);
+      std::cout << "configure\n";
+      if (!(e.width == _rect.width() && e.height == _rect.height())) {
+        _dirty = true;
+        _rect.setSize(e.width, e.height);
+      }
       update();
     }
     return true;
This page took 0.026939 seconds and 4 git commands to generate.