void PopupMenuEditor::dropEvent( QDropEvent * e ) { if ( !( e->provides( "qt/popupmenueditoritemptr" ) || e->provides( "application/x-designer-actions" ) || e->provides( "application/x-designer-actiongroup" ) ) ) return; // Hide the sub menu of the current item, but do it later if ( currentIndex < (int)itemList.count() ) { PopupMenuEditor *s = itemList.at( currentIndex )->s; QTimer::singleShot( 0, s, SLOT( hide() ) ); } draggedItem = 0; PopupMenuEditorItem * i = 0; if ( e->provides( "qt/popupmenueditoritemptr" ) ) { PopupMenuEditorItemPtrDrag::decode( e, &i ); } else { if ( e->provides( "application/x-designer-actiongroup" ) ) { QActionGroup * g = ::qt_cast<QDesignerActionGroup*>(ActionDrag::action()); if ( g->usesDropDown() ) { i = new PopupMenuEditorItem( g, this ); QString n = QString( g->name() ) + "Item"; formWindow()->unify( i, n, FALSE ); i->setName( n ); QObjectList *l = g->queryList( "QAction", 0, FALSE, FALSE ); QObjectListIterator it( *l ); for ( ; it.current(); ++it ) { g = ::qt_cast<QActionGroup*>(it.current()); if ( g ) i->s->insert( g ); else i->s->insert( (QAction*)it.current() ); } delete l; } else { dropInPlace( g, e->pos().y() ); } } else if ( e->provides( "application/x-designer-actions" ) ) { QAction *a = ::qt_cast<QDesignerAction*>(ActionDrag::action()); i = new PopupMenuEditorItem( a, this ); } } if ( i ) { dropInPlace( i, e->pos().y() ); QTimer::singleShot( 0, this, SLOT( resizeToContents() ) ); } QTimer::singleShot( 0, this, SLOT( showSubMenu() ) ); QTimer::singleShot( 0, this, SLOT( setFocus() ) ); dropLine->hide(); e->accept(); }