Pārlūkot izejas kodu

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 gadi atpakaļ
vecāks
revīzija
3bb81c7705
1 mainītis faili ar 22 papildinājumiem un 27 dzēšanām
  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 )
         {