bool QDesignerToolBar::eventFilter( QObject *o, QEvent *e ) { if ( !o || !e || o->inherits( "QDockWindowHandle" ) || o->inherits( "QDockWindowTitleBar" ) ) return QToolBar::eventFilter( o, e ); if ( o == this && e->type() == QEvent::MouseButtonPress && ( ( QMouseEvent*)e )->button() == LeftButton ) { mousePressEvent( (QMouseEvent*)e ); return TRUE; } if ( o == this ) return QToolBar::eventFilter( o, e ); if ( e->type() == QEvent::MouseButtonPress ) { QMouseEvent *ke = (QMouseEvent*)e; fixObject( o ); if ( !o ) return FALSE; buttonMousePressEvent( ke, o ); return TRUE; } else if(e->type() == QEvent::ContextMenu ) { QContextMenuEvent *ce = (QContextMenuEvent*)e; fixObject( o ); if( !o ) return FALSE; buttonContextMenuEvent( ce, o ); return TRUE; } else if ( e->type() == QEvent::MouseMove ) { QMouseEvent *ke = (QMouseEvent*)e; fixObject( o ); if ( !o ) return FALSE; buttonMouseMoveEvent( ke, o ); return TRUE; } else if ( e->type() == QEvent::MouseButtonRelease ) { QMouseEvent *ke = (QMouseEvent*)e; fixObject( o ); if ( !o ) return FALSE; buttonMouseReleaseEvent( ke, o ); return TRUE; } else if ( e->type() == QEvent::DragEnter ) { QDragEnterEvent *de = (QDragEnterEvent*)e; if ( de->provides( "application/x-designer-actions" ) || de->provides( "application/x-designer-actiongroup" ) || de->provides( "application/x-designer-separator" ) ) de->accept(); } else if ( e->type() == QEvent::DragMove ) { QDragMoveEvent *de = (QDragMoveEvent*)e; if ( de->provides( "application/x-designer-actions" ) || de->provides( "application/x-designer-actiongroup" ) || de->provides( "application/x-designer-separator" ) ) de->accept(); } return QToolBar::eventFilter( o, e ); }
bool BookmarkToolBar::eventFilter(QObject *watched, QEvent *event) { if (m_currentMenu && m_currentMenu->isVisible() && !m_currentMenu->rect().contains(m_currentMenu->mapFromGlobal(QCursor::pos()))) { // To switch root folders as in a menubar KBookmarkActionMenu* act = dynamic_cast<KBookmarkActionMenu *>(actionAt(mapFromGlobal(QCursor::pos()))); if (event->type() == QEvent::MouseMove && act && act->menu() != m_currentMenu) { m_currentMenu->hide(); QPoint pos = mapToGlobal(widgetForAction(act)->pos()); act->menu()->popup(QPoint(pos.x(), pos.y() + widgetForAction(act)->height())); } else if (event->type() == QEvent::MouseButtonPress && act) { m_currentMenu->hide(); } return QObject::eventFilter(watched, event); } switch (event->type()) { case QEvent::Show: { if (!m_filled) { BookmarkManager::self()->fillBookmarkBar(this); m_filled = true; } } break; case QEvent::ActionRemoved: { QActionEvent *actionEvent = static_cast<QActionEvent*>(event); if (actionEvent && actionEvent->action() != m_dropAction) { QWidget *widget = widgetForAction(actionEvent->action()); if (widget) { widget->removeEventFilter(this); } } } break; case QEvent::ParentChange: { QActionEvent *actionEvent = static_cast<QActionEvent*>(event); if (actionEvent && actionEvent->action() != m_dropAction) { QWidget *widget = widgetForAction(actionEvent->action()); if (widget) { widget->removeEventFilter(this); } } } break; case QEvent::DragEnter: { QDragEnterEvent *dragEvent = static_cast<QDragEnterEvent*>(event); if (dragEvent->mimeData()->hasFormat(BookmarkManager::bookmark_mime_type()) || dragEvent->mimeData()->hasFormat("text/uri-list") || dragEvent->mimeData()->hasFormat("text/plain")) { QFrame* dropIndicatorWidget = new QFrame(this); dropIndicatorWidget->setFrameShape(QFrame::VLine); m_dropAction = insertWidget(actionAt(dragEvent->pos()), dropIndicatorWidget); dragEvent->accept(); } } break; case QEvent::DragLeave: { QDragLeaveEvent *dragEvent = static_cast<QDragLeaveEvent*>(event); if (m_checkedAction) { m_checkedAction->setCheckable(false); m_checkedAction->setChecked(false); } delete m_dropAction; m_dropAction = 0; dragEvent->accept(); } break; case QEvent::DragMove: { QDragMoveEvent *dragEvent = static_cast<QDragMoveEvent*>(event); if (dragEvent->mimeData()->hasFormat(BookmarkManager::bookmark_mime_type()) || dragEvent->mimeData()->hasFormat("text/uri-list") || dragEvent->mimeData()->hasFormat("text/plain")) { QAction *overAction = actionAt(dragEvent->pos()); KBookmarkActionInterface *overActionBK = dynamic_cast<KBookmarkActionInterface*>(overAction); QWidget *widgetAction = widgetForAction(overAction); if (overAction != m_dropAction && overActionBK && widgetAction && m_dropAction) { removeAction(m_dropAction); if (m_checkedAction) { m_checkedAction->setCheckable(false); m_checkedAction->setChecked(false); } if (!overActionBK->bookmark().isGroup()) { if ((dragEvent->pos().x() - widgetAction->pos().x()) > (widgetAction->width() / 2)) { if (actions().count() > actions().indexOf(overAction) + 1) { insertAction(actions().at(actions().indexOf(overAction) + 1), m_dropAction); } else { addAction(m_dropAction); } } else { insertAction(overAction, m_dropAction); } } else { if ((dragEvent->pos().x() - widgetAction->pos().x()) >= (widgetAction->width() * 0.75)) { if (actions().count() > actions().indexOf(overAction) + 1) { insertAction(actions().at(actions().indexOf(overAction) + 1), m_dropAction); } else { addAction(m_dropAction); } } else if ((dragEvent->pos().x() - widgetAction->pos().x()) <= (widgetAction->width() * 0.25)) { insertAction(overAction, m_dropAction); } else { overAction->setCheckable(true); overAction->setChecked(true); m_checkedAction = overAction; } } dragEvent->accept(); } } } break; case QEvent::Drop: { QDropEvent *dropEvent = static_cast<QDropEvent*>(event); KBookmark bookmark; KBookmarkGroup root = BookmarkManager::self()->manager()->toolbar(); if (m_checkedAction) { m_checkedAction->setCheckable(false); m_checkedAction->setChecked(false); } if (dropEvent->mimeData()->hasFormat(BookmarkManager::bookmark_mime_type())) { QByteArray addresses = dropEvent->mimeData()->data(BookmarkManager::bookmark_mime_type()); bookmark = BookmarkManager::self()->findByAddress(QString::fromLatin1(addresses.data())); if (bookmark.isNull()) return false; } else if (dropEvent->mimeData()->hasFormat("text/uri-list")) { // DROP is URL QString url = dropEvent->mimeData()->urls().at(0).toString(); WebWindow *w = qobject_cast<WebWindow *>(parent()); QString title = url.contains(w->url().url()) ? w->title() : url; bookmark = root.addBookmark(title, url); } else if (dropEvent->mimeData()->hasFormat("text/plain")) { // DROP is TEXT QString url = dropEvent->mimeData()->text(); KUrl u(url); if (u.isValid()) { WebWindow *w = qobject_cast<WebWindow *>(parent()); QString title = url.contains(w->url().url()) ? w->title() : url; bookmark = root.addBookmark(title, url); } } else { return false; } QAction *destAction = actionAt(dropEvent->pos()); if (destAction && destAction == m_dropAction) { if (actions().indexOf(m_dropAction) > 0) { destAction = actions().at(actions().indexOf(m_dropAction) - 1); } else { destAction = actions().at(1); } } if (destAction) { KBookmarkActionInterface *destBookmarkAction = dynamic_cast<KBookmarkActionInterface *>(destAction); QWidget *widgetAction = widgetForAction(destAction); if (destBookmarkAction && !destBookmarkAction->bookmark().isNull() && widgetAction && bookmark.address() != destBookmarkAction->bookmark().address()) { KBookmark destBookmark = destBookmarkAction->bookmark(); if (!destBookmark.isGroup()) { if ((dropEvent->pos().x() - widgetAction->pos().x()) >= (widgetAction->width() / 2)) { root.moveBookmark(bookmark, destBookmark); } else { root.moveBookmark(bookmark, destBookmark.parentGroup().previous(destBookmark)); } } else { if ((dropEvent->pos().x() - widgetAction->pos().x()) >= (widgetAction->width() * 0.75)) { root.moveBookmark(bookmark, destBookmark); } else if ((dropEvent->pos().x() - widgetAction->pos().x()) <= (widgetAction->width() * 0.25)) { root.moveBookmark(bookmark, destBookmark.parentGroup().previous(destBookmark)); } else { destBookmark.toGroup().addBookmark(bookmark); } } BookmarkManager::self()->emitChanged(); } } else { root.deleteBookmark(bookmark); bookmark = root.addBookmark(bookmark); if (dropEvent->pos().x() < widgetForAction(actions().first())->pos().x()) { root.moveBookmark(bookmark, KBookmark()); } BookmarkManager::self()->emitChanged(); } dropEvent->accept(); } break; default: break; } QMouseEvent *mouseEvent = static_cast<QMouseEvent *>(event); // These events need to be handled only for Bookmark actions and not the bar if (watched != this && mouseEvent) { switch (event->type()) { case QEvent::MouseButtonPress: // drag handling { QPoint pos = mapFromGlobal(QCursor::pos()); KBookmarkActionInterface *action = dynamic_cast<KBookmarkActionInterface *>(actionAt(pos)); if (action && mouseEvent->button() != Qt::MiddleButton) { m_dragAction = actionAt(pos); m_startDragPos = pos; // The menu is displayed only when the mouse button is released if (action->bookmark().isGroup()) return true; } } break; case QEvent::MouseMove: { int distance = (mapFromGlobal(QCursor::pos()) - m_startDragPos).manhattanLength(); if (!m_currentMenu && distance >= QApplication::startDragDistance()) { startDrag(); } } break; case QEvent::MouseButtonRelease: { QPoint destPos = mapFromGlobal(QCursor::pos()); int distance = (destPos - m_startDragPos).manhattanLength(); KBookmarkActionInterface *action = dynamic_cast<KBookmarkActionInterface *>(actionAt(destPos)); if (action) { if (action->bookmark().isGroup()) { if (mouseEvent->button() == Qt::MiddleButton) { BookmarkManager::self()->owner()->loadBookmarkFolder(action->bookmark()); } else if (distance < QApplication::startDragDistance()) { KBookmarkActionMenu *menu = dynamic_cast<KBookmarkActionMenu *>(actionAt(m_startDragPos)); QPoint actionPos = mapToGlobal(widgetForAction(menu)->pos()); menu->menu()->popup(QPoint(actionPos.x(), actionPos.y() + widgetForAction(menu)->height())); } } else { if (!action->bookmark().isNull() && !action->bookmark().isSeparator()) { if (mouseEvent->button() == Qt::MiddleButton) { BookmarkManager::self()->owner()->loadBookmarkInNewTab(action->bookmark()); } } } } } break; default: break; } } return QObject::eventFilter(watched, event); }
bool PlayerWidget::eventFilter(QObject *object, QEvent *event) { if(object == m_layeredWidget) { if(event->type() == QEvent::DragEnter) { QDragEnterEvent *dragEnterEvent = static_cast<QDragEnterEvent *>(event); KUrl::List urls = KUrl::List::fromMimeData(dragEnterEvent->mimeData()); if(!urls.isEmpty()) dragEnterEvent->accept(); else dragEnterEvent->ignore(); return true; } else if(event->type() == QEvent::DragMove) { return true; // eat event } else if(event->type() == QEvent::Drop) { QDropEvent *dropEvent = static_cast<QDropEvent *>(event); KUrl::List urls = KUrl::List::fromMimeData(dropEvent->mimeData()); if(!urls.isEmpty()) { for(KUrl::List::ConstIterator it = urls.begin(), end = urls.end(); it != end; ++it) { const KUrl &url = *it; if(url.protocol() != "file") continue; app()->openVideo(url); break; } } return true; // eat event } else if(event->type() == QEvent::KeyPress) { // NOTE: when on full screen mode, the keyboard input is received but // for some reason it doesn't trigger the correct actions automatically // so we process the event and handle the issue ourselves. QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event); return app()->triggerAction(QKeySequence((keyEvent->modifiers() & ~Qt::KeypadModifier) + keyEvent->key())); } else if(event->type() == QEvent::MouseMove) { QMouseEvent *mouseEvent = static_cast<QMouseEvent *>(event); if(mouseEvent->globalPos() != m_currentCursorPos) { m_currentCursorPos = mouseEvent->globalPos(); if(m_layeredWidget->cursor().shape() == Qt::BlankCursor) m_layeredWidget->unsetCursor(); if(m_fullScreenControls->isAttached()) m_fullScreenControls->toggleVisible(true); } } } else if(object == m_infoControlsGroupBox || object->parent() == m_infoControlsGroupBox) { if(event->type() != QEvent::MouseButtonRelease) return QWidget::eventFilter(object, event); QMouseEvent *mouseEvent = static_cast<QMouseEvent *>(event); if(mouseEvent->button() != Qt::RightButton) return QWidget::eventFilter(object, event); KMenu menu; QAction *action = menu.addAction(i18n("Show editable position control")); action->setCheckable(true); action->setChecked(app()->playerConfig()->showPositionTimeEdit()); if(menu.exec(mouseEvent->globalPos()) == action) app()->playerConfig()->toggleShowPositionTimeEdit(); return true; // eat event } return QWidget::eventFilter(object, event); }