Forráskód Böngészése

Popup widget position recalculated if parent widget resized

The ctkPopupWidget resides in its own window that should follow the
application window while it is being moved or resized. (This matters
only if the pop-up widget is pinned to the application window,
otherwise it is not visible during moving or resizing.)

This commit corrects the calculation of the new window position.

Fixes #411.
Miklos Espak 11 éve
szülő
commit
3bb81c7705
1 módosított fájl, 22 hozzáadás és 27 törlés
  1. 22 27
      Libs/Widgets/ctkPopupWidget.cpp

+ 22 - 27
Libs/Widgets/ctkPopupWidget.cpp

@@ -20,7 +20,6 @@
 
 // Qt includes
 #include <QApplication>
-#include <QDebug>
 #include <QDesktopWidget>
 #include <QDir>
 #include <QEvent>
@@ -99,14 +98,7 @@ bool ctkPopupWidgetPrivate::eventFilter(QObject* obj, QEvent* event)
     {
     if (widget->isAncestorOf(this->BaseWidget))
       {
-      QMoveEvent* moveEvent = dynamic_cast<QMoveEvent*>(event);
-      QPoint topLeft = widget->parentWidget() ? widget->parentWidget()->mapToGlobal(moveEvent->pos()) : moveEvent->pos();
-      topLeft += this->BaseWidget->mapTo(widget, QPoint(0,0));
-      //q->move(q->pos() + moveEvent->pos() - moveEvent->oldPos());
-      QRect newBaseGeometry = this->baseGeometry();
-	    newBaseGeometry.moveTopLeft(topLeft);
-	    QRect desiredGeometry = this->desiredOpenGeometry(newBaseGeometry);
-	    q->move(desiredGeometry.topLeft());
+      q->setGeometry(this->desiredOpenGeometry());
       }
     else if (widget->isWindow() &&
              widget->windowType() != Qt::ToolTip &&
@@ -117,8 +109,11 @@ bool ctkPopupWidgetPrivate::eventFilter(QObject* obj, QEvent* event)
     }
   else if (event->type() == QEvent::Resize)
     {
-    if (widget->isWindow() &&
-        widget != this->BaseWidget->window() &&
+    if (widget->isAncestorOf(this->BaseWidget))
+      {
+      q->setGeometry(this->desiredOpenGeometry());
+      }
+    else if (widget->isWindow() &&
         widget->windowType() != Qt::ToolTip &&
         widget->windowType() != Qt::Popup)
       {
@@ -446,22 +441,22 @@ bool ctkPopupWidget::eventFilter(QObject* obj, QEvent* event)
     case QEvent::Show:
       if (obj != d->BaseWidget)
         {
-	      break;
-	      }
-	    this->setGeometry(d->desiredOpenGeometry());
-	    d->temporarilyHiddenOff();
-	    break;
-	  case QEvent::Resize:
-	    if (obj != d->BaseWidget ||
-	        !(d->Alignment & Qt::AlignJustify ||
-	         (d->Alignment & Qt::AlignTop && d->Alignment & Qt::AlignBottom)) ||
-	         !(d->isOpening() || this->isVisible()))
-	      {
-	      break;
-	      }
-	    // TODO: bug when the effect is WindowOpacityFadeEffect
-	    this->setGeometry(d->desiredOpenGeometry());
-	    break;
+        break;
+        }
+      this->setGeometry(d->desiredOpenGeometry());
+      d->temporarilyHiddenOff();
+      break;
+    case QEvent::Resize:
+      if (obj != d->BaseWidget ||
+          !(d->Alignment & Qt::AlignJustify ||
+           (d->Alignment & Qt::AlignTop && d->Alignment & Qt::AlignBottom)) ||
+           !(d->isOpening() || this->isVisible()))
+        {
+        break;
+        }
+      // TODO: bug when the effect is WindowOpacityFadeEffect
+      this->setGeometry(d->desiredOpenGeometry());
+      break;
     case QEvent::Enter:
       if ( d->currentAnimation()->state() == QAbstractAnimation::Stopped )
         {