diff --git a/src/GUI/WaypointList.cxx b/src/GUI/WaypointList.cxx index 1c1014e03..31c5e480c 100644 --- a/src/GUI/WaypointList.cxx +++ b/src/GUI/WaypointList.cxx @@ -818,6 +818,7 @@ void ScrolledWaypointList::setScrollPercent(float v) void ScrolledWaypointList::setSize(int w, int h) { updateWantsScroll(w, h); + puGroup::setSize(w, h); } void ScrolledWaypointList::updateWantsScroll(int w, int h) diff --git a/src/GUI/dialog.cxx b/src/GUI/dialog.cxx index 71852fbc7..8a4160499 100644 --- a/src/GUI/dialog.cxx +++ b/src/GUI/dialog.cxx @@ -1376,4 +1376,36 @@ int fgComboBox::checkHit(int b, int up, int x, int y) return r; } +void fgComboBox::setSize(int w, int h) +{ + puaComboBox::setSize(w, h); + recalc_bbox(); +} + +void fgComboBox::recalc_bbox() +{ +// bug-fix for issue #192 +// http://code.google.com/p/flightgear-bugs/issues/detail?id=192 +// puaComboBox is including the height of its popupMenu in the height +// computation, which breaks layout computations. +// this implementation skips popup-menus + + puBox contents; + contents.empty(); + + for (puObject *bo = dlist; bo != NULL; bo = bo -> getNextObject()) { + if (bo->getType() & PUCLASS_POPUPMENU) { + continue; + } + + contents.extend (bo -> getBBox()) ; + } + + abox.max[0] = abox.min[0] + contents.max[0] ; + abox.max[1] = abox.min[1] + contents.max[1] ; + + puObject::recalc_bbox () ; + +} + // end of dialog.cxx diff --git a/src/GUI/dialog.hxx b/src/GUI/dialog.hxx index 10739280d..497e07104 100644 --- a/src/GUI/dialog.hxx +++ b/src/GUI/dialog.hxx @@ -266,8 +266,11 @@ public: void update(); + virtual void setSize(int w, int h); + virtual int checkHit(int b, int up, int x, int y); - + + virtual void recalc_bbox(); private: bool _inHit; }; diff --git a/src/GUI/layout.cxx b/src/GUI/layout.cxx index f9581b3d5..b6fa5ab8f 100644 --- a/src/GUI/layout.cxx +++ b/src/GUI/layout.cxx @@ -80,7 +80,7 @@ void LayoutWidget::calcPrefSize(int* w, int* h) if(getBool("vertical")) *w = 4*UNIT; else *h = 4*UNIT; } else if (isType("list") || isType("airport-list") - || isType("property-list") || isType("dial")) { + || isType("property-list") || isType("dial") || isType("waypointlist")) { *w = *h = 12*UNIT; } else if (isType("hrule")) { *h = 1;