[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