diff --git a/src/rviz/display.cpp b/src/rviz/display.cpp index e483783691..d7302fad25 100644 --- a/src/rviz/display.cpp +++ b/src/rviz/display.cpp @@ -60,7 +60,7 @@ Display::Display() , visibility_bits_(0xFFFFFFFF) , associated_widget_(nullptr) , associated_widget_panel_(nullptr) - , associated_widget_visible_(false) + , suppress_hiding_associated_widget_panel_(false) { // Needed for timeSignal (see header) to work across threads qRegisterMetaType(); @@ -311,10 +311,7 @@ void Display::onEnableChanged() scene_node_->setVisible(true); if (associated_widget_panel_) - { - if (!associated_widget_visible_) - associated_widget_panel_->show(); - } + associated_widget_panel_->show(); else if (associated_widget_) associated_widget_->show(); @@ -327,7 +324,7 @@ void Display::onEnableChanged() if (associated_widget_panel_) { - if (associated_widget_visible_) + if (!suppress_hiding_associated_widget_panel_) associated_widget_panel_->hide(); } else if (associated_widget_) @@ -366,7 +363,6 @@ void Display::setAssociatedWidget(QWidget* widget) if (wm) { associated_widget_panel_ = wm->addPane(getName(), associated_widget_); - associated_widget_visible_ = true; connect(associated_widget_panel_, SIGNAL(visibilityChanged(bool)), this, SLOT(associatedPanelVisibilityChange(bool))); connect(associated_widget_panel_, SIGNAL(closed()), this, SLOT(disable())); @@ -386,9 +382,10 @@ void Display::setAssociatedWidget(QWidget* widget) void Display::associatedPanelVisibilityChange(bool visible) { - associated_widget_visible_ = visible; // If something external makes the panel visible/invisible, make sure to enable/disable the display + suppress_hiding_associated_widget_panel_ = true; setEnabled(visible); + suppress_hiding_associated_widget_panel_ = false; // Remark: vice versa, in Display::onEnableChanged(), // the panel is made visible/invisible when the display is enabled/disabled } diff --git a/src/rviz/display.h b/src/rviz/display.h index 72e841f214..ddff16256d 100644 --- a/src/rviz/display.h +++ b/src/rviz/display.h @@ -328,7 +328,7 @@ private Q_SLOTS: uint32_t visibility_bits_; QWidget* associated_widget_; PanelDockWidget* associated_widget_panel_; - bool associated_widget_visible_; + bool suppress_hiding_associated_widget_panel_; }; } // end namespace rviz