void FormWindowManager::setActiveFormWindow(QDesignerFormWindowInterface *w) { FormWindow *formWindow = qobject_cast<FormWindow*>(w); if (formWindow == m_activeFormWindow) return; FormWindow *old = m_activeFormWindow; m_activeFormWindow = formWindow; QtResourceSet *resourceSet = 0; if (formWindow) resourceSet = formWindow->resourceSet(); m_core->resourceModel()->setCurrentResourceSet(resourceSet); slotUpdateActions(); if (m_activeFormWindow) { m_activeFormWindow->repaintSelection(); if (old) old->repaintSelection(); } emit activeFormWindowChanged(m_activeFormWindow); if (m_activeFormWindow) { m_activeFormWindow->emitSelectionChanged(); m_activeFormWindow->commandHistory()->setActive(); // Trigger setActiveSubWindow on mdi area unless we are in toplevel mode QMdiSubWindow *mdiSubWindow = 0; if (QWidget *formwindow = m_activeFormWindow->parentWidget()) { mdiSubWindow = qobject_cast<QMdiSubWindow *>(formwindow->parentWidget()); } if (mdiSubWindow) { for (QWidget *parent = mdiSubWindow->parentWidget(); parent; parent = parent->parentWidget()) { if (QMdiArea *mdiArea = qobject_cast<QMdiArea*>(parent)) { mdiArea->setActiveSubWindow(mdiSubWindow); break; } } } } }
bool FormWindowManager::eventFilter(QObject *o, QEvent *e) { if (!o->isWidgetType()) return false; // If we don't have an active form, we only listen for WindowActivate to speed up integrations const QEvent::Type eventType = e->type(); if (m_activeFormWindow == 0 && eventType != QEvent::WindowActivate) return false; switch (eventType) { // Uninteresting events case QEvent::Create: case QEvent::Destroy: case QEvent::ActionAdded: case QEvent::ActionChanged: case QEvent::ActionRemoved: case QEvent::ChildAdded: case QEvent::ChildPolished: case QEvent::ChildRemoved: #ifndef QT_NO_CLIPBOARD case QEvent::Clipboard: #endif case QEvent::ContentsRectChange: case QEvent::DeferredDelete: case QEvent::FileOpen: case QEvent::LanguageChange: case QEvent::MetaCall: case QEvent::ModifiedChange: case QEvent::Paint: case QEvent::PaletteChange: case QEvent::ParentAboutToChange: case QEvent::ParentChange: case QEvent::Polish: case QEvent::PolishRequest: case QEvent::QueryWhatsThis: case QEvent::StatusTip: case QEvent::StyleChange: case QEvent::Timer: case QEvent::ToolBarChange: case QEvent::ToolTip: case QEvent::WhatsThis: case QEvent::WhatsThisClicked: case QEvent::WinIdChange: case QEvent::DynamicPropertyChange: case QEvent::HoverEnter: case QEvent::HoverLeave: case QEvent::HoverMove: case QEvent::AcceptDropsChange: return false; default: break; } QWidget *widget = static_cast<QWidget*>(o); if (qobject_cast<WidgetHandle*>(widget)) { // ### remove me return false; } FormWindow *fw = FormWindow::findFormWindow(widget); if (fw == 0) { return false; } if (QWidget *managedWidget = findManagedWidget(fw, widget)) { // Prevent MDI subwindows from being closed by clicking at the title bar if (managedWidget != widget && eventType == QEvent::Close) { e->ignore(); return true; } switch (eventType) { case QEvent::WindowActivate: { if (fw->parentWidget()->isWindow() && fw->isMainContainer(managedWidget) && activeFormWindow() != fw) { setActiveFormWindow(fw); } } break; case QEvent::WindowDeactivate: { if (o == fw && o == activeFormWindow()) fw->repaintSelection(); } break; case QEvent::KeyPress: { QKeyEvent *ke = static_cast<QKeyEvent*>(e); if (ke->key() == Qt::Key_Escape) { ke->accept(); return true; } } // don't break... // Embedded Design: Drop on different form: Make sure the right form // window/device is active before having the widget created by the factory case QEvent::Drop: if (activeFormWindow() != fw) setActiveFormWindow(fw); // don't break... default: { if (fw->handleEvent(widget, managedWidget, e)) { return true; } } break; } // end switch } return false; }