void AQWebApplication::handleWebEvent(const QString &msgEvent) { QStringList args(QStringList::split(AQ_MSG_SEP, msgEvent, true)); AQ::EventType evT = webEventTypeToAQEventType(args[0]); QWidget *w; AQWidgetInfo *wInfo; if (evT != AQ::XProgressDialog) { w = AQ_WIDGET(args[1].toULongLong(0, 36)); wInfo = createdWidgets_.find(w); if (!wInfo) return; } switch (evT) { case AQ::MouseButtonPress: { QWidget *popup = activePopupWidget(); if (popup && popup != w->topLevelWidget()) popup->close(); w->raise(); w->setActiveWindow(); QPoint local(args[2].toInt(), args[3].toInt()); QPoint global(w->mapToGlobal(local)); QCursor::setPos(global); QMouseEvent mev(QEvent::MouseButtonPress, local, global, toQtButton(args[4]), toQtButtonState(args[5])); qt_sendSpontaneousEvent(w, &mev); break; } case AQ::MouseButtonRelease: { QPoint local(args[2].toInt(), args[3].toInt()); QPoint global(w->mapToGlobal(local)); QCursor::setPos(global); QMouseEvent mev(QEvent::MouseButtonRelease, local, global, toQtButton(args[4]), toQtButtonState(args[5])); qt_sendSpontaneousEvent(w, &mev); break; } case AQ::MouseButtonDblClick: { QPoint local(args[2].toInt(), args[3].toInt()); QPoint global(w->mapToGlobal(local)); QCursor::setPos(global); QMouseEvent mev(QEvent::MouseButtonDblClick, local, global, toQtButton(args[4]), toQtButtonState(args[5])); qt_sendSpontaneousEvent(w, &mev); break; } case AQ::MouseMove: { QPoint local(args[2].toInt(), args[3].toInt()); QPoint global(w->mapToGlobal(local)); QCursor::setPos(global); QMouseEvent mev(QEvent::MouseMove, local, global, toQtButton(args[4]), toQtButtonState(args[5])); qt_sendSpontaneousEvent(w, &mev); break; } case AQ::KeyPress: case AQ::KeyRelease: { int keyCode = args[2].toInt(); QWidget *keywidget = QWidget::keyboardGrabber(); bool grabbed = false; if (keywidget) { grabbed = true; } else { keywidget = focusWidget(); if (!keywidget) { keywidget = activePopupWidget(); if (!keywidget) { keywidget = activeWindow(); if (!keywidget) keywidget = w->topLevelWidget(); } } } if (keyCode < 0) { QKeyEvent kev((QEvent::Type) evT, 0, keyCode, toQtButtonState(args[3]), QChar(-keyCode)); qt_sendSpontaneousEvent(keywidget, &kev); } else { if (evT == AQ::KeyPress && !grabbed) { QKeyEvent a((QEvent::Type) evT, toQtKey(keyCode), keyCode, toQtButtonState(args[3])); if (qt_tryAccelEvent(keywidget, &a)) return; } QKeyEvent kev((QEvent::Type) evT, toQtKey(keyCode), keyCode, toQtButtonState(args[3])); qt_sendSpontaneousEvent(keywidget, &kev); } break; } case AQ::Move: if (w != desktop_) { ignoreEvents_ = true; w->move(args[2].toInt(), args[3].toInt()); ignoreEvents_ = false; } break; case AQ::Resize: if (w != desktop_) { //ignoreEvents_ = true; w->resize(args[2].toInt(), args[3].toInt()); //ignoreEvents_ = false; } else { int wt = args[2].toInt(); int ht = args[3].toInt(); desktopGeometry_.setRect(0, 0, wt, ht); desktop()->resize(wt, ht); postAQEvent(new AQEvent(w, new QResizeEvent(QSize(wt, ht), QSize()))); emit desktop()->resized(0); if (!initDone_) QTimer::singleShot(0, this, SLOT(init())); } break; case AQ::XUpload: { QFileDialog *fd = ::qt_cast<QFileDialog *>(w); if (fd) fd->rereadDir(); break; } case AQ::XProgressDialog: { uint pid = args[1].toUInt(); if (args.size() == 2) { QProgressDialog *pd = progressDialogs_.take(pid); if (pd) { pd->close(); pd->deleteLater(); } } else { QProgressDialog *pd = progressDialogs_.find(pid); if (!pd) { pd = new QProgressDialog(args[2], QString(), args[3].section(';', 1, 1).toInt()); progressDialogs_.insert(pid, pd); } pd->setProgress(args[3].section(';', 0, 0).toInt()); } break; } case AQ::WindowStateChange: { w->setWindowState(args[2].toInt()); break; } default: { QEvent ev((QEvent::Type) evT); qt_sendSpontaneousEvent(w, &ev); } } }