From 67d3e2e302fd397f03675c61e36e78fa90ad6beb Mon Sep 17 00:00:00 2001 From: Saif Date: Fri, 6 May 2016 04:30:42 +0500 Subject: Added propagateSetVisible() diff --git a/src/Wt/WCompositeWidget b/src/Wt/WCompositeWidget index 47d4516..9d0168a 100644 --- a/src/Wt/WCompositeWidget +++ b/src/Wt/WCompositeWidget @@ -149,6 +149,7 @@ public: virtual void setSelectable(bool selectable); virtual void doJavaScript(const std::string& js); virtual void propagateSetEnabled(bool enabled); + virtual void propagateSetVisible(bool visible); static WFormWidget *getFormWidget(WWidget *widget); WFormWidget* formWidgetImpl() { return fwImpl_; }; diff --git a/src/Wt/WCompositeWidget.C b/src/Wt/WCompositeWidget.C index 39bdf67..cf633bc 100644 --- a/src/Wt/WCompositeWidget.C +++ b/src/Wt/WCompositeWidget.C @@ -602,4 +602,9 @@ void WCompositeWidget::propagateSetEnabled(bool enabled) impl_->webWidget()->propagateSetEnabled(enabled); } +void WCompositeWidget::propagateSetVisible(bool visible) +{ + impl_->webWidget()->propagateSetVisible(visible); +} + } diff --git a/src/Wt/WWebWidget b/src/Wt/WWebWidget index f6e1a22..c6032ac 100644 --- a/src/Wt/WWebWidget +++ b/src/Wt/WWebWidget @@ -328,6 +328,7 @@ protected: virtual std::string renderRemoveJs(bool recursive); virtual void propagateSetEnabled(bool enabled); + virtual void propagateSetVisible(bool visible); virtual bool isStubbed() const; virtual void enableAjax(); diff --git a/src/Wt/WWebWidget.C b/src/Wt/WWebWidget.C index 702c70e..3c09d97 100644 --- a/src/Wt/WWebWidget.C +++ b/src/Wt/WWebWidget.C @@ -1057,6 +1057,8 @@ void WWebWidget::setHidden(bool hidden, const WAnimation& animation) if (canOptimizeUpdates() && (animation.empty() && hidden == isHidden())) return; + bool wasVisible = isVisible(); + flags_.set(BIT_HIDDEN, hidden); flags_.set(BIT_HIDDEN_CHANGED); @@ -1068,6 +1070,13 @@ void WWebWidget::setHidden(bool hidden, const WAnimation& animation) transientImpl_->animation_ = animation; } + bool shouldBeVisible = !hidden; + if(shouldBeVisible && parent()) + shouldBeVisible = parent()->isVisible(); + + if(shouldBeVisible != wasVisible) + propagateSetVisible(shouldBeVisible); + WApplication::instance() ->session()->renderer().updateFormObjects(this, true); @@ -1145,6 +1154,16 @@ void WWebWidget::propagateSetEnabled(bool enabled) } } +void WWebWidget::propagateSetVisible(bool visible) +{ + if (children_) + for (unsigned i = 0; i < children_->size(); ++i) { + WWidget *c = (*children_)[i]; + if (!c->isHidden()) + c->webWidget()->propagateSetVisible(visible); + } +} + bool WWebWidget::isDisabled() const { return flags_.test(BIT_DISABLED); diff --git a/src/Wt/WWidget b/src/Wt/WWidget index 54884bb..2bbf104 100644 --- a/src/Wt/WWidget +++ b/src/Wt/WWidget @@ -1154,6 +1154,8 @@ protected: */ virtual void propagateSetEnabled(bool enabled) = 0; + virtual void propagateSetVisible(bool visible) = 0; + void getDrop(const std::string sourceId, const std::string mimeType, WMouseEvent event);