Преглед изворни кода

Don't show ctkPopupWidget if the base widget is hidden

Julien Finet пре 13 година
родитељ
комит
20f67abbce
2 измењених фајлова са 15 додато и 6 уклоњено
  1. 12 0
      Libs/Widgets/Testing/Cpp/ctkPopupWidgetTest1.cpp
  2. 3 6
      Libs/Widgets/ctkPopupWidget.cpp

+ 12 - 0
Libs/Widgets/Testing/Cpp/ctkPopupWidgetTest1.cpp

@@ -57,6 +57,18 @@ int ctkPopupWidgetTest1(int argc, char * argv [] )
   //QObject::connect(&base, SIGNAL(clicked()), &popup, SLOT(showPopup()));
   base.show();
 
+  QPushButton hiddenButton("Hidden button");
+  
+  ctkPopupWidget hiddenPopup;
+  QPushButton hiddenPopupContent("Hidden popup");
+  QVBoxLayout* hiddenLayout = new QVBoxLayout;
+  hiddenLayout->addWidget(&hiddenPopupContent);
+  hiddenPopup.setLayout(hiddenLayout);
+  hiddenPopup.setBaseWidget(&hiddenButton);
+  hiddenPopup.setAutoHide(false);
+  
+  QTimer::singleShot(100, &hiddenPopup, SLOT(showPopup()));
+
   QWidget topLevel;
   QPushButton focusButton("Focus popup");
   QPushButton openButton("Open popup");

+ 3 - 6
Libs/Widgets/ctkPopupWidget.cpp

@@ -121,11 +121,6 @@ void ctkPopupWidgetPrivate::init()
   q->setAttribute(Qt::WA_NoSystemBackground);
   q->setAttribute(Qt::WA_OpaquePaintEvent, false);
   q->setAttribute(Qt::WA_TranslucentBackground);
-  //q->setAttribute(Qt::WA_PaintOnScreen);
-  // Already by default
-  //q->setAutoFillBackground(false);
-  // Obsolete
-  //q->setAttribute(Qt::WA_ContentsPropagated);
   this->Alpha = q->style()->styleHint(QStyle::SH_ToolTipLabel_Opacity);
   this->Timer = new QTimer(q);
   QObject::connect(this->Timer, SIGNAL(timeout()), q, SLOT(animatePopup()));
@@ -322,7 +317,9 @@ void ctkPopupWidget::updatePopup()
 void ctkPopupWidget::showPopup()
 {
   Q_D(ctkPopupWidget);
-  if (this->isVisible() && d->OpenState == ctkPopupWidgetPrivate::Open)
+  if ((this->isVisible() &&
+       d->OpenState == ctkPopupWidgetPrivate::Open) ||
+      (d->BaseWidget && !d->BaseWidget->isVisible()))
     {
     return;
     }