commit 7e5368f6d02d9d34863cf5f5427141693d237ad4 Author: Hugo Pereira Da Costa Date: Tue Aug 28 09:26:04 2012 +0200 Fixed positioning of tabs when manually reordering with right mouse button Made 'drop target' animation consistent with where tab is actually dropped Cleanup code. CCBUG: 305443 diff --git a/kwin/clients/oxygen/oxygenclient.cpp b/kwin/clients/oxygen/oxygenclient.cpp index 5fbb4fb..0b39d7d 100644 --- a/kwin/clients/oxygen/oxygenclient.cpp +++ b/kwin/clients/oxygen/oxygenclient.cpp @@ -1620,7 +1620,8 @@ namespace Oxygen const int clickedIndex( tabIndexAt( point ) ); _mouseButton = Qt::NoButton; if ( tabIndexAt( point ) > -1) - showWindowMenu( widget()->mapToGlobal( event->pos() ), tabId(clickedIndex) ); + { showWindowMenu( widget()->mapToGlobal( event->pos() ), tabId(clickedIndex) ); } + accepted = true; // displayClientMenu can possibly destroy the deco... } @@ -1632,8 +1633,7 @@ namespace Oxygen { bool accepted( false ); - if( _mouseButton == event->button() && - buttonToWindowOperation( _mouseButton ) != OperationsOp ) + if( _mouseButton == event->button() && buttonToWindowOperation( _mouseButton ) != OperationsOp ) { const QPoint point = event->pos(); @@ -1755,19 +1755,18 @@ namespace Oxygen // check if drag enter is allowed if( !event->mimeData()->hasFormat( tabDragMimeType() ) || hideTitleBar() ) return false; - // + // accept event event->acceptProposedAction(); + + // animate if( event->source() != widget() ) { - const QPoint position( event->pos() ); - _itemData.animate( AnimationEnter, tabIndexAt( position, true ) ); + _itemData.animate( AnimationEnter, tabIndexAt( event->pos(), true ) ); } else if( _itemData.count() > 1 ) { - const QPoint position( event->pos() ); - const int clickedIndex( tabIndexAt( position, false ) ); - _itemData.animate( AnimationEnter|AnimationSameTarget, clickedIndex ); + _itemData.animate( AnimationEnter|AnimationSameTarget, tabIndexAt( event->pos(), true ) ); } @@ -1791,7 +1790,6 @@ namespace Oxygen } - return true; } @@ -1802,19 +1800,17 @@ namespace Oxygen // check format if( !event->mimeData()->hasFormat( tabDragMimeType() ) ) return false; + + // animate if( event->source() != widget() ) { - const QPoint position( event->pos() ); - _itemData.animate( AnimationMove, tabIndexAt( position, true ) ); + _itemData.animate( AnimationMove, tabIndexAt( event->pos(), true ) ); } else if( _itemData.count() > 1 ) { if( _dragStartTimer.isActive() ) _dragStartTimer.stop(); - - const QPoint position( event->pos() ); - const int clickedIndex( tabIndexAt( position, false ) ); - _itemData.animate( AnimationMove|AnimationSameTarget, clickedIndex ); + _itemData.animate( AnimationMove|AnimationSameTarget, tabIndexAt( event->pos(), true ) ); } @@ -1834,20 +1830,15 @@ namespace Oxygen _itemData.setDirty( true ); - if( widget() != event->source() ) - setForceActive( true ); + if( widget() != event->source() ) setForceActive( true ); const long source = QString( groupData->data( tabDragMimeType() ) ).toLong(); - int clickedIndex( tabIndexAt( point, true ) ); - if (clickedIndex < 0) - tab_A_behind_B(source, tabId(_itemData.count() - 1)); - else if (clickedIndex) - tab_A_behind_B(source, tabId(clickedIndex)); - else - tab_A_before_B(source, tabId(clickedIndex)); - - if( widget() == event->source() ) - updateTitleRect(); + const int clickedIndex( tabIndexAt( point, true ) ); + if( clickedIndex < 0 ) tab_A_behind_B( source, tabId(_itemData.count()-1) ); + else tab_A_before_B( source, tabId(clickedIndex) ); + + // update title + if( widget() == event->source() ) updateTitleRect(); _titleAnimationData->reset(); return true;