597445e2a6
Summary: Such an option would be useful for people that are used to watch videos in the fullscreen mode. By default, we still dim fullscreen windows because watching videos in fullscreen mode is not the only one use-case. One could have a text editor in fullscreen mode on one screen and Konsole on another screen. In that case, it would be desired to dim the text editor if the latter is active. Also, because we don't have stats of how the fullscreen mode is used by KDE Plasma users. BUG: 399822 FIXED-IN: 5.15.0 Test Plan: * Unchecked the "Fullscreen windows" checkbox; * Opened Konsole; * Opened Firefox in the fullscreen mode; * Pressed Alt+Tab; * (Firefox stayed bright) Reviewers: #kwin, #plasma, davidedmundson Reviewed By: #kwin, #plasma, davidedmundson Subscribers: kwin Tags: #kwin Differential Revision: https://phabricator.kde.org/D16216
138 lines
3.7 KiB
C++
138 lines
3.7 KiB
C++
/********************************************************************
|
|
KWin - the KDE window manager
|
|
This file is part of the KDE project.
|
|
|
|
Copyright (C) 2007 Lubos Lunak <l.lunak@kde.org>
|
|
Copyright (C) 2007 Christian Nitschkowski <christian.nitschkowski@kdemail.net>
|
|
Copyright (C) 2018 Vlad Zagorodniy <vladzzag@gmail.com>
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation; either version 2 of the License, or
|
|
(at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*********************************************************************/
|
|
|
|
#ifndef KWIN_DIMINACTIVE_H
|
|
#define KWIN_DIMINACTIVE_H
|
|
|
|
// kwineffects
|
|
#include <kwineffects.h>
|
|
|
|
namespace KWin
|
|
{
|
|
|
|
class DimInactiveEffect : public Effect
|
|
{
|
|
Q_OBJECT
|
|
Q_PROPERTY(int dimStrength READ dimStrength)
|
|
Q_PROPERTY(bool dimPanels READ dimPanels)
|
|
Q_PROPERTY(bool dimDesktop READ dimDesktop)
|
|
Q_PROPERTY(bool dimKeepAbove READ dimKeepAbove)
|
|
Q_PROPERTY(bool dimByGroup READ dimByGroup)
|
|
Q_PROPERTY(bool dimFullScreen READ dimFullScreen)
|
|
|
|
public:
|
|
DimInactiveEffect();
|
|
~DimInactiveEffect() override;
|
|
|
|
void reconfigure(ReconfigureFlags flags) override;
|
|
|
|
void prePaintScreen(ScreenPrePaintData &data, int time) override;
|
|
void paintWindow(EffectWindow *w, int mask, QRegion region, WindowPaintData &data) override;
|
|
void postPaintScreen() override;
|
|
|
|
int requestedEffectChainPosition() const override;
|
|
bool isActive() const override;
|
|
|
|
int dimStrength() const;
|
|
bool dimPanels() const;
|
|
bool dimDesktop() const;
|
|
bool dimKeepAbove() const;
|
|
bool dimByGroup() const;
|
|
bool dimFullScreen() const;
|
|
|
|
private Q_SLOTS:
|
|
void windowActivated(EffectWindow *w);
|
|
void windowClosed(EffectWindow *w);
|
|
void windowDeleted(EffectWindow *w);
|
|
void activeFullScreenEffectChanged();
|
|
|
|
private:
|
|
void dimWindow(WindowPaintData &data, qreal strength);
|
|
bool canDimWindow(const EffectWindow *w) const;
|
|
void scheduleInTransition(EffectWindow *w);
|
|
void scheduleGroupInTransition(EffectWindow *w);
|
|
void scheduleOutTransition(EffectWindow *w);
|
|
void scheduleGroupOutTransition(EffectWindow *w);
|
|
void scheduleRepaint(EffectWindow *w);
|
|
|
|
private:
|
|
qreal m_dimStrength;
|
|
bool m_dimPanels;
|
|
bool m_dimDesktop;
|
|
bool m_dimKeepAbove;
|
|
bool m_dimByGroup;
|
|
bool m_dimFullScreen;
|
|
|
|
EffectWindow *m_activeWindow;
|
|
const EffectWindowGroup *m_activeWindowGroup;
|
|
QHash<EffectWindow*, TimeLine> m_transitions;
|
|
QHash<EffectWindow*, qreal> m_forceDim;
|
|
|
|
struct {
|
|
bool active = false;
|
|
TimeLine timeLine;
|
|
} m_fullScreenTransition;
|
|
};
|
|
|
|
inline int DimInactiveEffect::requestedEffectChainPosition() const
|
|
{
|
|
return 50;
|
|
}
|
|
|
|
inline bool DimInactiveEffect::isActive() const
|
|
{
|
|
return true;
|
|
}
|
|
|
|
inline int DimInactiveEffect::dimStrength() const
|
|
{
|
|
return qRound(m_dimStrength * 100.0);
|
|
}
|
|
|
|
inline bool DimInactiveEffect::dimPanels() const
|
|
{
|
|
return m_dimPanels;
|
|
}
|
|
|
|
inline bool DimInactiveEffect::dimDesktop() const
|
|
{
|
|
return m_dimDesktop;
|
|
}
|
|
|
|
inline bool DimInactiveEffect::dimKeepAbove() const
|
|
{
|
|
return m_dimKeepAbove;
|
|
}
|
|
|
|
inline bool DimInactiveEffect::dimByGroup() const
|
|
{
|
|
return m_dimByGroup;
|
|
}
|
|
|
|
inline bool DimInactiveEffect::dimFullScreen() const
|
|
{
|
|
return m_dimFullScreen;
|
|
}
|
|
|
|
} // namespace KWin
|
|
|
|
#endif
|