From 909a678e13783bd3d3e4edf14f12bad9bf82f7cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Gr=C3=A4=C3=9Flin?= Date: Sun, 13 Mar 2011 09:48:51 +0100 Subject: [PATCH] New signal for maximize state changed The signal includes the state for horizontal and vertical maximize state. It would be better to use the enum fro, KDecorationDefines but we don't want to depend on decorations library. Wobbly windows is adjusted to use this new signal - it is the only effect interested in maximize state change. --- effects.cpp | 20 +++++++++++++++++++- effects/wobblywindows/wobblywindows.cpp | 19 +++++++++++++++++++ effects/wobblywindows/wobblywindows.h | 1 + libkwineffects/kwineffects.h | 13 +++++++++++++ 4 files changed, 52 insertions(+), 1 deletion(-) diff --git a/effects.cpp b/effects.cpp index a3ae537444..1f4e87eb52 100644 --- a/effects.cpp +++ b/effects.cpp @@ -302,7 +302,25 @@ void EffectsHandlerImpl::startPaint() void EffectsHandlerImpl::slotClientMaximized(KWin::Client *c, KDecorationDefines::MaximizeMode maxMode) { - emit windowUserMovedResized(c->effectWindow(), true, true); + bool horizontal = false; + bool vertical = false; + switch (maxMode) { + case KDecorationDefines::MaximizeHorizontal: + horizontal = true; + break; + case KDecorationDefines::MaximizeVertical: + vertical = true; + break; + case KDecorationDefines::MaximizeFull: + horizontal = true; + vertical = true; + break; + case KDecorationDefines::MaximizeRestore: // fall through + default: + // default - nothing to do + break; + } + emit windowMaximizedStateChanged(c->effectWindow(), horizontal, vertical); } void EffectsHandlerImpl::slotWindowUserMovedResized(EffectWindow* c, bool first, bool last) diff --git a/effects/wobblywindows/wobblywindows.cpp b/effects/wobblywindows/wobblywindows.cpp index 529ab644fd..223e7bb54a 100644 --- a/effects/wobblywindows/wobblywindows.cpp +++ b/effects/wobblywindows/wobblywindows.cpp @@ -168,6 +168,7 @@ WobblyWindowsEffect::WobblyWindowsEffect() connect(effects, SIGNAL(windowAdded(EffectWindow*)), this, SLOT(slotWindowAdded(EffectWindow*))); connect(effects, SIGNAL(windowClosed(EffectWindow*)), this, SLOT(slotWindowClosed(EffectWindow*))); connect(effects, SIGNAL(windowUserMovedResized(EffectWindow*,bool,bool)), this, SLOT(slotWindowUserMovedResized(EffectWindow*,bool,bool))); + connect(effects, SIGNAL(windowMaximizedStateChanged(EffectWindow*,bool,bool)), this, SLOT(slotWindowMaximizeStateChanged(EffectWindow*,bool,bool))); } WobblyWindowsEffect::~WobblyWindowsEffect() @@ -390,6 +391,24 @@ void WobblyWindowsEffect::slotWindowUserMovedResized(EffectWindow* w, bool first } } +void WobblyWindowsEffect::slotWindowMaximizeStateChanged(EffectWindow *w, bool horizontal, bool vertical) +{ + if (!m_moveEffectEnabled || w->isSpecialWindow()) + return; + + if (m_moveWobble && m_resizeWobble) { + stepMovedResized(w); + } + + if (windows.contains(w)) { + WindowWobblyInfos& wwi = windows[w]; + QRect rect = w->geometry(); + if (rect.y() != wwi.resize_original_rect.y()) wwi.can_wobble_top = true; + if (rect.x() != wwi.resize_original_rect.x()) wwi.can_wobble_left = true; + if (rect.right() != wwi.resize_original_rect.right()) wwi.can_wobble_right = true; + if (rect.bottom() != wwi.resize_original_rect.bottom()) wwi.can_wobble_bottom = true; + } +} void WobblyWindowsEffect::startMovedResized(EffectWindow* w) { diff --git a/effects/wobblywindows/wobblywindows.h b/effects/wobblywindows/wobblywindows.h index 8e5bb4d2fa..0a469377a3 100644 --- a/effects/wobblywindows/wobblywindows.h +++ b/effects/wobblywindows/wobblywindows.h @@ -60,6 +60,7 @@ public Q_SLOTS: void slotWindowAdded(EffectWindow *w); void slotWindowClosed(EffectWindow *w); void slotWindowUserMovedResized(EffectWindow *w, bool first, bool last); + void slotWindowMaximizeStateChanged(EffectWindow *w, bool horizontal, bool vertical); private: diff --git a/libkwineffects/kwineffects.h b/libkwineffects/kwineffects.h index a6b5e5ff67..bdfc69f160 100644 --- a/libkwineffects/kwineffects.h +++ b/libkwineffects/kwineffects.h @@ -855,6 +855,19 @@ Q_SIGNALS: * @since 4.7 **/ void windowUserMovedResized(EffectWindow *w, bool first, bool last); + /** + * Signal emitted when the maximized state of the window @p w changed. + * A window can be in one of four states: + * @li restored: both @p horizontal and @p vertical are @c false + * @li horizontally maximized: @p horizontal is @c true and @p vertical is @c false + * @li vertically maximized: @p horizontal is @c false and @p vertical is @c true + * @li completely maximized: both @p horizontal and @p vertical are @C true + * @param w The window whose maximized state changed + * @param horizontal If @c true maximized horizontally + * @param vertical If @c true maximized vertically + * @since 4.7 + **/ + void windowMaximizedStateChanged(EffectWindow *w, bool horizontal, bool vertical); /** * Signal emitted when the geometry or shape of a window changed. * This is caused if the window changes geometry without user interaction.