diff --git a/effects.cpp b/effects.cpp index f9fadb48cc..32811fcd07 100644 --- a/effects.cpp +++ b/effects.cpp @@ -1159,6 +1159,16 @@ EffectFrame* EffectsHandlerImpl::effectFrame(EffectFrameStyle style, bool static return new EffectFrameImpl(style, staticSize, position, alignment); } +void EffectsHandlerImpl::slotShowOutline(const QRect& geometry) +{ + emit showOutline(geometry); +} + +void EffectsHandlerImpl::slotHideOutline() +{ + emit hideOutline(); +} + //**************************************** // EffectWindowImpl //**************************************** diff --git a/effects.h b/effects.h index 66b9ad66f5..382d60ab41 100644 --- a/effects.h +++ b/effects.h @@ -171,6 +171,8 @@ public Q_SLOTS: void slotClientGroupItemSwitched(EffectWindow* from, EffectWindow* to); void slotClientGroupItemAdded(EffectWindow* from, EffectWindow* to); void slotClientGroupItemRemoved(EffectWindow* c, EffectWindow* group); + void slotShowOutline(const QRect &geometry); + void slotHideOutline(); protected Q_SLOTS: void slotDesktopChanged(int old); diff --git a/libkwineffects/kwineffects.h b/libkwineffects/kwineffects.h index 61a5c2099f..44079b4d49 100644 --- a/libkwineffects/kwineffects.h +++ b/libkwineffects/kwineffects.h @@ -330,7 +330,8 @@ public: }; enum Feature { - Nothing = 0, Resize, GeometryTip + Nothing = 0, Resize, GeometryTip, + Outline }; /** @@ -980,6 +981,22 @@ Q_SIGNALS: * @since 4.7 */ void propertyNotify(EffectWindow* w, long atom); + /** + * Requests to show an outline. An effect providing to show an outline should + * connect to the signal and render an outline. + * The outline should be shown till the signal is emitted again with a new + * geometry or the @link hideOutline signal is emitted. + * @param outline The geometry of the outline to render. + * @see hideOutline + * @since 4.7 + **/ + void showOutline(const QRect& outline); + /** + * Signal emitted when the outline should no longer be shown. + * @see showOutline + * @since 4.7 + **/ + void hideOutline(); protected: QVector< EffectPair > loaded_effects; diff --git a/outline.cpp b/outline.cpp index 9b5581c436..1654cfc54a 100644 --- a/outline.cpp +++ b/outline.cpp @@ -19,6 +19,7 @@ along with this program. If not, see . *********************************************************************/ #include "outline.h" +#include "effects.h" #include #include #include @@ -43,11 +44,19 @@ Outline::~Outline() void Outline::show() { + if (effects && static_cast(effects)->provides(Effect::Outline)) { + static_cast(effects)->slotShowOutline(m_outlineGeometry); + return; // done by effect + } showWithX(); } void Outline::hide() { + if (effects && static_cast(effects)->provides(Effect::Outline)) { + static_cast(effects)->slotHideOutline(); + return; // done by effect + } hideWithX(); }