]> Dogcows Code - chaz/openbox/blobdiff - otk/widget.cc
widget update fix
[chaz/openbox] / otk / widget.cc
index 4522a1c0c2f3037fbd8771f593f0f1145e375f6b..ea90a32fcdd7ccaac9811cbfe0d27edf959d95b5 100644 (file)
@@ -262,7 +262,7 @@ void OtkWidget::adjustHorz(void)
 
     for (; str_it != str_end; ++str_it) {
       (*str_it)->setWidth(str_width - _bevel_width);
-      (*str_it)->update();
+      //(*str_it)->update();
     }
   }
 
@@ -296,11 +296,29 @@ void OtkWidget::adjustVert(void)
 
   int widest = 0;
   int height = _bevel_width;
+  OtkWidgetList stretchable;
+
   for (it = _children.begin(); it != end; ++it) {
     tmp = *it;
+    if (tmp->isStretchableVert() && _fixed_height)
+      stretchable.push_back(tmp);
+    else
+      height += tmp->_rect.height() + _bevel_width;
+
     if (tmp->_rect.width() > widest)
       widest = tmp->_rect.width();
-    height += tmp->_rect.height() + _bevel_width;
+  }
+
+  if (stretchable.size() > 0) {
+    OtkWidgetList::iterator str_it = stretchable.begin(),
+      str_end = stretchable.end();
+
+    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();
+    }
   }
 
   OtkWidget *prev_widget = 0;
@@ -325,11 +343,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);
   }
+
   _dirty = false;
 }
 
This page took 0.023386 seconds and 4 git commands to generate.