From 84d7db019508c1185f513e864483fd1fd608c05c Mon Sep 17 00:00:00 2001 From: Timothy Pearson Date: Fri, 21 Nov 2014 14:11:16 -0600 Subject: Call setActive if new focus window is found and set when rotating focus to next available window This resolves Bug 2189 --- twin/activation.cpp | 15 +++++++++++++-- twin/bridge.cpp | 4 ++++ twin/bridge.h | 2 ++ twin/client.cpp | 6 ++---- twin/events.cpp | 2 +- 5 files changed, 22 insertions(+), 7 deletions(-) (limited to 'twin') diff --git a/twin/activation.cpp b/twin/activation.cpp index 6f79c47cc..d00efc3d6 100644 --- a/twin/activation.cpp +++ b/twin/activation.cpp @@ -408,7 +408,9 @@ bool Workspace::activateNextClient( Client* c ) if( c != NULL ) { if( c == active_client ) + { setActiveClient( NULL, Allowed ); + } should_get_focus.remove( c ); } if( focusChangeEnabled()) @@ -442,7 +444,10 @@ bool Workspace::activateNextClient( Client* c ) if( get_focus == NULL ) get_focus = findDesktop( true, currentDesktop()); if( get_focus != NULL ) + { requestFocus( get_focus ); + get_focus->setActive( true, true ); + } else focusToNull(); } @@ -855,7 +860,7 @@ void Client::setActive( bool act, bool updateOpacity_) return; active = act; workspace()->setActiveClient( act ? this : NULL, Allowed ); - + if (updateOpacity_) updateOpacity(); if (isModal() && transientFor()) { @@ -863,7 +868,7 @@ void Client::setActive( bool act, bool updateOpacity_) else if (!transientFor()->custom_opacity) transientFor()->setOpacity(options->translucentActiveWindows, options->activeWindowOpacity); } updateShadowSize(); - + if ( active ) { Notify::raise( Notify::Activate ); @@ -891,6 +896,7 @@ void Client::setActive( bool act, bool updateOpacity_) removeShadow(); if (options->shadowEnabled(false)) + { if (this == workspace()->topClientOnDesktop(desktop())) { /* If the newly deactivated window is the top client on the @@ -899,10 +905,15 @@ void Client::setActive( bool act, bool updateOpacity_) * activated window's shadow. */ if ((shadowAfterClient = workspace()->activeClient())) + { drawShadowAfter(shadowAfterClient); + } } else + { drawDelayedShadow(); + } + } } if( !active ) diff --git a/twin/bridge.cpp b/twin/bridge.cpp index 49840e248..f79382457 100644 --- a/twin/bridge.cpp +++ b/twin/bridge.cpp @@ -21,6 +21,10 @@ Bridge::Bridge( Client* cl ) { } +Bridge::~Bridge() + { + } + #define BRIDGE_HELPER( rettype, prototype, args1, args2, cst ) \ rettype Bridge::prototype ( args1 ) cst \ { \ diff --git a/twin/bridge.h b/twin/bridge.h index 0989a64b5..3208b3192 100644 --- a/twin/bridge.h +++ b/twin/bridge.h @@ -22,6 +22,8 @@ class Bridge : public KDecorationBridge { public: Bridge( Client* cl ); + virtual ~Bridge(); + virtual bool isActive() const; virtual bool isCloseable() const; virtual bool isMaximizable() const; diff --git a/twin/client.cpp b/twin/client.cpp index a5b5e808b..f32c5064b 100644 --- a/twin/client.cpp +++ b/twin/client.cpp @@ -1429,7 +1429,7 @@ void Client::imposeCachedShadow(TQPixmap &pixmap, TQRegion exposed) QRgb pixel; double opacity; int red, green, blue, pixelRed, pixelGreen, pixelBlue; - int subW, subH, w, h, x, y, zeroX, zeroY; + int subW, subH, w, x, y, zeroX, zeroY; TQImage image; TQMemArray::Iterator it, itEnd; TQMemArray rectangles; @@ -1446,7 +1446,6 @@ void Client::imposeCachedShadow(TQPixmap &pixmap, TQRegion exposed) yOffset = options->shadowYOffset(isActive()); options->shadowColour(isActive()).rgb(&red, &green, &blue); w = pixmap.width(); - h = pixmap.height(); itEnd = rectangles.end(); for (it = rectangles.begin(); it != itEnd; ++it) { @@ -1487,7 +1486,7 @@ void Client::imposeRegionShadow(TQPixmap &pixmap, TQRegion occluded, QRgb pixel; double decay, factor, opacity; int red, green, blue, pixelRed, pixelGreen, pixelBlue; - int halfMaxIntersects, lineIntersects, maxIntersects, maxY; + int lineIntersects, maxIntersects, maxY; int irBottom, irLeft, irRight, irTop, yIncrement; int subW, subH, w, h, zeroX, zeroY; TQImage image; @@ -1505,7 +1504,6 @@ void Client::imposeRegionShadow(TQPixmap &pixmap, TQRegion occluded, yOffset = options->shadowYOffset(isActive()); options->shadowColour(isActive()).rgb(&red, &green, &blue); maxIntersects = thickness * thickness * 4 + (thickness * 4) + 1; - halfMaxIntersects = maxIntersects / 2; lineIntersects = thickness * 2 + 1; factor = maxIntersects / maxOpacity; decay = (lineIntersects / 0.0125 - factor) / pow((double)maxIntersects, 3.0); diff --git a/twin/events.cpp b/twin/events.cpp index c7472cdaf..68c4be55c 100644 --- a/twin/events.cpp +++ b/twin/events.cpp @@ -1584,7 +1584,7 @@ bool Client::motionNotifyEvent( Window w, int /*state*/, int x, int y, int x_roo handleMoveResize( x, y, x_root, y_root ); return true; } - + void Client::focusInEvent( XFocusInEvent* e ) { if( e->window != window()) -- cgit v1.2.3