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); }