[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    branches/KDE/4.4/kdebase/workspace/kwin
From:       Lucas Murray <lmurray () undefinedfire ! com>
Date:       2010-01-10 3:39:33
Message-ID: 1263094773.286388.14744.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 1072366 by lmurray:

Backport r1072365:
Display client menu on mouse press in the Tabstrip decoration; Correct
handling of tab close button events; Prevent a crash when a decoration
requests the client menu of an invalid tab index.


 M  +2 -0      clientgroup.cpp  
 M  +26 -26    clients/tabstrip/tabstripdecoration.cpp  


--- branches/KDE/4.4/kdebase/workspace/kwin/clientgroup.cpp #1072365:1072366
@@ -211,6 +211,8 @@
 
 void ClientGroup::displayClientMenu( int index, const QPoint& pos )
     {
+    if( index == -1 )
+        index = visible_;
     displayClientMenu( clients_[index], pos );
     }
 
--- branches/KDE/4.4/kdebase/workspace/kwin/clients/tabstrip/tabstripdecoration.cpp #1072365:1072366
@@ -223,37 +223,35 @@
 
 bool TabstripDecoration::eventFilter( QObject* o, QEvent* e )
     {
+    if( TabstripButton *btn = dynamic_cast< TabstripButton* >( o ))
+        {
+        if( e->type() == QEvent::MouseButtonPress )
+            return true; // No-op
+        else if( e->type() == QEvent::MouseButtonRelease )
+            {
+            const QMouseEvent* me = static_cast< QMouseEvent* >( e );
+            if( me->button() == Qt::LeftButton && btn->rect().contains( me->pos() ))
+                closeClientGroupItem( closeButtons.indexOf( btn ));
+            return true;
+            }
+        }
+
     bool state = false;
     if( e->type() == QEvent::MouseButtonPress )
-        state = mouseButtonPressEvent( static_cast< QMouseEvent* >( e ) );
-
+        state = mouseButtonPressEvent( static_cast< QMouseEvent* >( e ));
     else if( e->type() == QEvent::MouseButtonRelease && widget() == o )
-        state = mouseButtonReleaseEvent( static_cast< QMouseEvent* >( e ) );
-
+        state = mouseButtonReleaseEvent( static_cast< QMouseEvent* >( e ));
     else if( e->type() == QEvent::MouseMove )
-        state = mouseMoveEvent( static_cast< QMouseEvent* >( e ) );
-
+        state = mouseMoveEvent( static_cast< QMouseEvent* >( e ));
     else if( e->type() == QEvent::DragEnter && widget() == o )
-        state = dragEnterEvent( static_cast< QDragEnterEvent* >( e ) );
-
+        state = dragEnterEvent( static_cast< QDragEnterEvent* >( e ));
     else if( e->type() == QEvent::DragMove && widget() == o )
-        state = dragMoveEvent( static_cast< QDragMoveEvent* >( e ) );
-
+        state = dragMoveEvent( static_cast< QDragMoveEvent* >( e ));
     else if( e->type() == QEvent::DragLeave && widget() == o )
-        state = dragLeaveEvent( static_cast< QDragLeaveEvent* >( e ) );
-
+        state = dragLeaveEvent( static_cast< QDragLeaveEvent* >( e ));
     else if( e->type() == QEvent::Drop && widget() == o )
-        state = dropEvent( static_cast< QDropEvent* >( e ) );
+        state = dropEvent( static_cast< QDropEvent* >( e ));
 
-    if ( !state && e->type() == QEvent::MouseButtonRelease &&
-         static_cast<QMouseEvent*>(e)->button() ==  Qt::LeftButton )
-        {
-        if( TabstripButton *btn = dynamic_cast< TabstripButton* >( o ) )
-            {
-            closeClientGroupItem( closeButtons.indexOf( btn ) );
-            return true;
-            }
-        }
     return state || KCommonDecorationUnstable::eventFilter( o, e ); 
     }
 
@@ -261,6 +259,11 @@
     {
     click = widget()->mapToParent( e->pos() );
     int item = itemClicked( click );
+    if( buttonToWindowOperation( e->button() ) == OperationsOp )
+        {
+        displayClientMenu( item, widget()->mapToGlobal( click ));
+        return true;
+        }
     if( item >= 0 )
         {
         click_in_progress = true;
@@ -278,10 +281,7 @@
     if( click_in_progress && item >= 0 )
         {
         click_in_progress = false;
-        if( buttonToWindowOperation( e->button() ) != OperationsOp )
-            setVisibleClientGroupItem( item );
-        else
-            displayClientMenu( item, widget()->mapToGlobal( release ) );
+        setVisibleClientGroupItem( item );
         return true;
         }
     click_in_progress = false;
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic