SVN commit 779621 by mutz: Fix KTab{Widget,Bar}'s egoistic DnD behaviour. Patch as posted on k-c-d M +15 -2 ktabbar.cpp M +10 -2 ktabwidget.cpp --- branches/KDE/4.0/kdelibs/kdeui/widgets/ktabbar.cpp #779620:779621 @@ -279,7 +279,21 @@ void KTabBar::dragEnterEvent( QDragEnterEvent *event ) { - event->setAccepted( true ); + int tab = selectTab( event->pos() ); + if ( tab != -1 ) { + bool accept = false; + // The receivers of the testCanDecode() signal has to adjust + // 'accept' accordingly. + emit testCanDecode( event, accept ); + if ( accept && tab != currentIndex() ) { + d->mDragSwitchTab = tab; + d->mActivateDragSwitchTabTimer->start( QApplication::doubleClickInterval() * 2 ); + } + + event->setAccepted( accept ); + return; + } + QTabBar::dragEnterEvent( event ); } @@ -300,7 +314,6 @@ return; } - event->setAccepted( false ); QTabBar::dragMoveEvent( event ); } --- branches/KDE/4.0/kdelibs/kdeui/widgets/ktabwidget.cpp #779620:779621 @@ -312,7 +312,16 @@ void KTabWidget::dragEnterEvent( QDragEnterEvent *event ) { - event->setAccepted( true ); + if ( d->isEmptyTabbarSpace( event->pos() ) ) { + bool accept = false; + // The receivers of the testCanDecode() signal has to adjust + // 'accept' accordingly. + emit testCanDecode( event, accept); + + event->setAccepted( accept ); + return; + } + QTabWidget::dragEnterEvent( event ); } @@ -328,7 +337,6 @@ return; } - event->setAccepted( false ); QTabWidget::dragMoveEvent( event ); }