static PyObject *meth_QDragMoveEvent_accept(PyObject *sipSelf, PyObject *sipArgs) { PyObject *sipParseErr = NULL; { QDragMoveEvent *sipCpp; if (sipParseArgs(&sipParseErr, sipArgs, "B", &sipSelf, sipType_QDragMoveEvent, &sipCpp)) { sipCpp->accept(); Py_INCREF(Py_None); return Py_None; } } { const QRect* a0; QDragMoveEvent *sipCpp; if (sipParseArgs(&sipParseErr, sipArgs, "BJ9", &sipSelf, sipType_QDragMoveEvent, &sipCpp, sipType_QRect, &a0)) { sipCpp->accept(*a0); Py_INCREF(Py_None); return Py_None; } } /* Raise an exception if the arguments couldn't be parsed. */ sipNoMethod(sipParseErr, sipName_QDragMoveEvent, sipName_accept, doc_QDragMoveEvent_accept); return NULL; }
bool ToolsConfigWidget::eventFilter(QObject *o, QEvent *e) { if (e->type() == QEvent::DragEnter || e->type() == QEvent::DragMove) { QDragMoveEvent *dme = static_cast<QDragMoveEvent*>(e); if (KURLDrag::canDecode(dme)) dme->accept(); return true; } else if (e->type() == QEvent::Drop) { QDropEvent *de = static_cast<QDropEvent*>(e); KURL::List fileList; if (KURLDrag::decode(de, fileList)) { KURL::List::ConstIterator it; for (it = fileList.begin(); it != fileList.end(); ++it) { if ((*it).isLocalFile() && KDesktopFile::isDesktopFile((*it).path())) { KDesktopFile df((*it).path()); ToolsConfigEntry *entry = new ToolsConfigEntry; entry->menutext = df.readName(); entry->cmdline = (*it).path(); entry->isdesktopfile = true; entry->captured = false; addEntry(entry, &m_toolsmenuEntries); } } } return true; } return ToolsConfigWidgetBase::eventFilter(o, e); }
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); }
// TODO *** drop improvements *** // open submenus on drop interactions bool KBookmarkBar::eventFilter( QObject *, QEvent *e ) { if (d->m_filteredToolbar) return false; // todo: make this limit the actions if ( e->type() == QEvent::DragLeave ) { removeTempSep(); } else if ( e->type() == QEvent::Drop ) { removeTempSep(); QDropEvent *dev = static_cast<QDropEvent*>( e ); QDomDocument doc; QList<KBookmark> list = KBookmark::List::fromMimeData( dev->mimeData(), doc ); if ( list.isEmpty() ) return false; if (list.count() > 1) kWarning(7043) << "Sorry, currently you can only drop one address " "onto the bookmark bar!"; KBookmark toInsert = list.first(); KBookmarkGroup parentBookmark = getToolbar(); if(d->m_sepIndex == 0) { KBookmark newBookmark = parentBookmark.addBookmark(toInsert.fullText(), toInsert.url() ); parentBookmark.moveBookmark( newBookmark, KBookmark() ); m_pManager->emitChanged( parentBookmark ); return true; } else { KBookmark after = parentBookmark.first(); for(int i=0; i < d->m_sepIndex - 1 ; ++i) after = parentBookmark.next(after); KBookmark newBookmark = parentBookmark.addBookmark(toInsert.fullText(), toInsert.url() ); parentBookmark.moveBookmark( newBookmark, after ); m_pManager->emitChanged( parentBookmark ); return true; } } else if ( e->type() == QEvent::DragMove || e->type() == QEvent::DragEnter ) { QDragMoveEvent *dme = static_cast<QDragMoveEvent*>( e ); if (!KBookmark::List::canDecode( dme->mimeData() )) return false; //cache text, save positions (inserting the temporary widget changes the positions) if(e->type() == QEvent::DragEnter) { QDomDocument doc; const QList<KBookmark> list = KBookmark::List::fromMimeData( dme->mimeData(), doc ); if ( list.isEmpty() ) return false; d->tempLabel = list.first().url().pathOrUrl(); d->widgetPositions.clear(); for (int i = 0; i < m_toolBar->actions().count(); ++i) if (QWidget* button = m_toolBar->widgetForAction(m_toolBar->actions()[i])) { if(m_toolBar->orientation() == Qt::Horizontal) { if(QApplication::isLeftToRight()) { d->widgetPositions.push_back(button->geometry().right()); } else { d->widgetPositions.push_back(button->geometry().left()); } } else { d->widgetPositions.push_back(button->geometry().bottom()); } } } bool accept = handleToolbarDragMoveEvent(dme->pos(), d->m_actions, d->tempLabel); if (accept) { dme->accept(); return true; //Really? } } return false; }