Members of the KDE Community are recommended to subscribe to the kde-community mailing list at https://mail.kde.org/mailman/listinfo/kde-community to allow them to participate in important discussions and receive other important announcements

Commit defa1061 authored by Vlad Zahorodnii's avatar Vlad Zahorodnii

[effects/diminactive] Fix initialization of m_activeWindow on reconfigure

Summary:
The Dim Inactive effect sees the world a little bit differently.
m_activeWindow is currently active window that can be dimmed later on.
In most cases, it's the same as effects->activeWindow(). In rare cases,
it can be nullptr, even when effects->activeWindow() is not equal to nullptr
(e.g. when active window is a context menu popup).

canDimWindow is a helper that returns true if a given window should be
dimmed, otherwise it returns false. It has one special case: if a given
window is equal to m_activeWindow, return false. I.e. don't dim active
windows.

Currently, if user changes config of this effect, active window becomes
dimmed.

The reason for that is we hit that special case when deciding whether
effects->activeWindow() should be m_activeWindow.

This change addresses that problem by resetting m_activeWindow so we
don't hit that special case.

Test Plan:
* Opened KCM of this effect;
* Changed strength;
* (the KCM window stayed bright after I clicked "Apply" button).

(everything else works as expected)

Reviewers: #kwin, davidedmundson

Reviewed By: #kwin, davidedmundson

Subscribers: kwin

Tags: #kwin

Differential Revision: https://phabricator.kde.org/D14973
parent 5165ee45
......@@ -46,8 +46,6 @@ static inline bool belongToSameGroup(const EffectWindow *w1, const EffectWindow
DimInactiveEffect::DimInactiveEffect()
{
m_activeWindow = nullptr;
initConfig<DimInactiveConfig>();
reconfigure(ReconfigureAll);
......@@ -78,6 +76,10 @@ void DimInactiveEffect::reconfigure(ReconfigureFlags flags)
m_dimKeepAbove = DimInactiveConfig::dimKeepAbove();
m_dimByGroup = DimInactiveConfig::dimByGroup();
// Need to reset m_activeWindow becase canDimWindow returns false
// if m_activeWindow is equal to effects->activeWindow().
m_activeWindow = nullptr;
EffectWindow *activeWindow = effects->activeWindow();
m_activeWindow = (activeWindow && canDimWindow(activeWindow))
? activeWindow
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment