Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
Plasma
Plasma Workspace
Commits
7db8d5ee
Commit
7db8d5ee
authored
Mar 01, 2021
by
Niccolò Venerandi
Browse files
Add support for adaptive opacity panels
Co-authored-by:
Jan Blackquill
<
uhhadd@gmail.com
>
parent
69d5de3e
Changes
8
Hide whitespace changes
Inline
Side-by-side
libtaskmanager/taskfilterproxymodel.cpp
View file @
7db8d5ee
...
...
@@ -40,6 +40,7 @@ public:
bool
filterByScreen
=
false
;
bool
filterByActivity
=
false
;
bool
filterNotMinimized
=
false
;
bool
filterNotMaximized
=
false
;
bool
filterSkipTaskbar
=
true
;
bool
filterSkipPager
=
false
;
...
...
@@ -185,6 +186,22 @@ void TaskFilterProxyModel::setFilterNotMinimized(bool filter)
}
}
bool
TaskFilterProxyModel
::
filterNotMaximized
()
const
{
return
d
->
filterNotMaximized
;
}
void
TaskFilterProxyModel
::
setFilterNotMaximized
(
bool
filter
)
{
if
(
d
->
filterNotMaximized
!=
filter
)
{
d
->
filterNotMaximized
=
filter
;
invalidateFilter
();
emit
filterNotMaximizedChanged
();
}
}
bool
TaskFilterProxyModel
::
filterSkipTaskbar
()
const
{
return
d
->
filterSkipTaskbar
;
...
...
@@ -301,6 +318,15 @@ bool TaskFilterProxyModel::acceptsRow(int sourceRow) const
}
}
// Filter not maximized.
if
(
d
->
filterNotMaximized
)
{
bool
isMaximized
=
sourceIdx
.
data
(
AbstractTasksModel
::
IsMaximized
).
toBool
();
if
(
!
isMaximized
)
{
return
false
;
}
}
return
true
;
}
...
...
libtaskmanager/taskfilterproxymodel.h
View file @
7db8d5ee
...
...
@@ -52,6 +52,7 @@ class TASKMANAGER_EXPORT TaskFilterProxyModel : public QSortFilterProxyModel, pu
Q_PROPERTY
(
bool
filterByScreen
READ
filterByScreen
WRITE
setFilterByScreen
NOTIFY
filterByScreenChanged
)
Q_PROPERTY
(
bool
filterByActivity
READ
filterByActivity
WRITE
setFilterByActivity
NOTIFY
filterByActivityChanged
)
Q_PROPERTY
(
bool
filterNotMinimized
READ
filterNotMinimized
WRITE
setFilterNotMinimized
NOTIFY
filterNotMinimizedChanged
)
Q_PROPERTY
(
bool
filterNotMaximized
READ
filterNotMaximized
WRITE
setFilterNotMaximized
NOTIFY
filterNotMaximizedChanged
)
Q_PROPERTY
(
bool
filterSkipTaskbar
READ
filterSkipTaskbar
WRITE
setFilterSkipTaskbar
NOTIFY
filterSkipTaskbarChanged
)
Q_PROPERTY
(
bool
filterSkipPager
READ
filterSkipPager
WRITE
setFilterSkipPager
NOTIFY
filterSkipPagerChanged
)
...
...
@@ -212,6 +213,23 @@ public:
**/
void
setFilterNotMinimized
(
bool
filter
);
/**
* Whether non-maximized tasks should be filtered. Defaults to
* @c false.
*
* @see setFilterNotMaximized
* @returns @c true if non-maximized tasks should be filtered.
**/
bool
filterNotMaximized
()
const
;
/**
* Set whether non-maximized tasks should be filtered.
*
* @see filterNotMaximized
* @param filter Whether non-maximized tasks should be filtered.
**/
void
setFilterNotMaximized
(
bool
filter
);
/**
* Whether tasks which should be omitted from 'task bars' should be
* filtered. Defaults to @c true.
...
...
@@ -285,6 +303,7 @@ Q_SIGNALS:
void
filterByScreenChanged
()
const
;
void
filterByActivityChanged
()
const
;
void
filterNotMinimizedChanged
()
const
;
void
filterNotMaximizedChanged
()
const
;
void
filterSkipTaskbarChanged
()
const
;
void
filterSkipPagerChanged
()
const
;
void
demandingAttentionSkipsFiltersChanged
()
const
;
...
...
libtaskmanager/tasksmodel.cpp
View file @
7db8d5ee
...
...
@@ -302,6 +302,7 @@ void TasksModel::Private::initModels()
QObject
::
connect
(
filterProxyModel
,
&
TaskFilterProxyModel
::
filterByScreenChanged
,
q
,
&
TasksModel
::
filterByScreenChanged
);
QObject
::
connect
(
filterProxyModel
,
&
TaskFilterProxyModel
::
filterByActivityChanged
,
q
,
&
TasksModel
::
filterByActivityChanged
);
QObject
::
connect
(
filterProxyModel
,
&
TaskFilterProxyModel
::
filterNotMinimizedChanged
,
q
,
&
TasksModel
::
filterNotMinimizedChanged
);
QObject
::
connect
(
filterProxyModel
,
&
TaskFilterProxyModel
::
filterNotMaximizedChanged
,
q
,
&
TasksModel
::
filterNotMaximizedChanged
);
groupingProxyModel
=
new
TaskGroupingProxyModel
(
q
);
groupingProxyModel
->
setSourceModel
(
filterProxyModel
);
...
...
@@ -1152,6 +1153,16 @@ void TasksModel::setFilterNotMinimized(bool filter)
d
->
filterProxyModel
->
setFilterNotMinimized
(
filter
);
}
bool
TasksModel
::
filterNotMaximized
()
const
{
return
d
->
filterProxyModel
->
filterNotMaximized
();
}
void
TasksModel
::
setFilterNotMaximized
(
bool
filter
)
{
d
->
filterProxyModel
->
setFilterNotMaximized
(
filter
);
}
TasksModel
::
SortMode
TasksModel
::
sortMode
()
const
{
return
d
->
sortMode
;
...
...
libtaskmanager/tasksmodel.h
View file @
7db8d5ee
...
...
@@ -73,6 +73,7 @@ class TASKMANAGER_EXPORT TasksModel : public QSortFilterProxyModel, public Abstr
Q_PROPERTY
(
bool
filterByScreen
READ
filterByScreen
WRITE
setFilterByScreen
NOTIFY
filterByScreenChanged
)
Q_PROPERTY
(
bool
filterByActivity
READ
filterByActivity
WRITE
setFilterByActivity
NOTIFY
filterByActivityChanged
)
Q_PROPERTY
(
bool
filterNotMinimized
READ
filterNotMinimized
WRITE
setFilterNotMinimized
NOTIFY
filterNotMinimizedChanged
)
Q_PROPERTY
(
bool
filterNotMaximized
READ
filterNotMaximized
WRITE
setFilterNotMaximized
NOTIFY
filterNotMaximized
)
David Redondo
🏎
@davidre
·
Mar 02, 2021
Developer
Wrong signal
Wrong signal
Nate Graham
@ngraham
·
Mar 02, 2021
Developer
Fixed in
db69eb09
Fixed in db69eb09d7e3078ac6a88ef44d7ca3b5624a350d
Please
register
or
sign in
to reply
Q_PROPERTY
(
SortMode
sortMode
READ
sortMode
WRITE
setSortMode
NOTIFY
sortModeChanged
)
Q_PROPERTY
(
bool
separateLaunchers
READ
separateLaunchers
WRITE
setSeparateLaunchers
NOTIFY
separateLaunchersChanged
)
...
...
@@ -295,6 +296,23 @@ public:
**/
void
setFilterNotMinimized
(
bool
filter
);
/**
* Whether non-maximized tasks should be filtered. Defaults to
* @c false.
*
* @see setFilterNotMaximized
* @returns @c true if non-maximized tasks should be filtered.
**/
bool
filterNotMaximized
()
const
;
/**
* Set whether non-maximized tasks should be filtered.
*
* @see filterNotMaximized
* @param filter Whether non-maximized tasks should be filtered.
**/
void
setFilterNotMaximized
(
bool
filter
);
/**
* The sort mode used in sorting tasks. Defaults to SortAlpha.
*
...
...
@@ -848,6 +866,7 @@ Q_SIGNALS:
void
filterByScreenChanged
()
const
;
void
filterByActivityChanged
()
const
;
void
filterNotMinimizedChanged
()
const
;
void
filterNotMaximizedChanged
()
const
;
void
sortModeChanged
()
const
;
void
separateLaunchersChanged
()
const
;
void
launchInPlaceChanged
()
const
;
...
...
shell/panelconfigview.cpp
View file @
7db8d5ee
...
...
@@ -289,6 +289,17 @@ PanelView::VisibilityMode PanelConfigView::visibilityMode() const
return
m_panelView
->
visibilityMode
();
}
void
PanelConfigView
::
setOpacityMode
(
PanelView
::
OpacityMode
mode
)
{
m_panelView
->
setOpacityMode
(
mode
);
emit
opacityModeChanged
();
}
PanelView
::
OpacityMode
PanelConfigView
::
opacityMode
()
const
{
return
m_panelView
->
opacityMode
();
}
Plasma
::
FrameSvg
::
EnabledBorders
PanelConfigView
::
enabledBorders
()
const
{
return
m_enabledBorders
;
...
...
shell/panelconfigview.h
View file @
7db8d5ee
...
...
@@ -51,6 +51,7 @@ class PanelConfigView : public PlasmaQuick::ConfigView
{
Q_OBJECT
Q_PROPERTY
(
PanelView
::
VisibilityMode
visibilityMode
READ
visibilityMode
WRITE
setVisibilityMode
NOTIFY
visibilityModeChanged
)
Q_PROPERTY
(
PanelView
::
OpacityMode
opacityMode
READ
opacityMode
WRITE
setOpacityMode
NOTIFY
opacityModeChanged
)
Q_PROPERTY
(
Plasma
::
FrameSvg
::
EnabledBorders
enabledBorders
READ
enabledBorders
NOTIFY
enabledBordersChanged
)
public:
...
...
@@ -62,6 +63,9 @@ public:
PanelView
::
VisibilityMode
visibilityMode
()
const
;
void
setVisibilityMode
(
PanelView
::
VisibilityMode
mode
);
PanelView
::
OpacityMode
opacityMode
()
const
;
void
setOpacityMode
(
PanelView
::
OpacityMode
mode
);
Plasma
::
FrameSvg
::
EnabledBorders
enabledBorders
()
const
;
protected:
...
...
@@ -84,6 +88,7 @@ private Q_SLOTS:
Q_SIGNALS:
void
visibilityModeChanged
();
void
opacityModeChanged
();
void
enabledBordersChanged
();
private:
...
...
shell/panelview.cpp
View file @
7db8d5ee
...
...
@@ -64,6 +64,7 @@ PanelView::PanelView(ShellCorona *corona, QScreen *targetScreen, QWindow *parent
,
m_alignment
(
Qt
::
AlignLeft
)
,
m_corona
(
corona
)
,
m_visibilityMode
(
NormalPanel
)
,
m_opacityMode
(
Adaptive
)
,
m_backgroundHints
(
Plasma
::
Types
::
StandardBackground
)
,
m_shellSurface
(
nullptr
)
{
...
...
@@ -76,8 +77,10 @@ PanelView::PanelView(ShellCorona *corona, QScreen *targetScreen, QWindow *parent
setClearBeforeRendering
(
true
);
setColor
(
QColor
(
Qt
::
transparent
));
setFlags
(
Qt
::
FramelessWindowHint
|
Qt
::
WindowDoesNotAcceptFocus
);
updateAdaptiveOpacityEnabled
();
connect
(
&
m_theme
,
&
Plasma
::
Theme
::
themeChanged
,
this
,
&
PanelView
::
updateMask
);
connect
(
&
m_theme
,
&
Plasma
::
Theme
::
themeChanged
,
this
,
&
PanelView
::
updateAdaptiveOpacityEnabled
);
connect
(
this
,
&
PanelView
::
backgroundHintsChanged
,
this
,
&
PanelView
::
updateMask
);
connect
(
this
,
&
PanelView
::
backgroundHintsChanged
,
this
,
&
PanelView
::
updateEnabledBorders
);
// TODO: add finished/componentComplete signal to QuickViewSharedEngine,
...
...
@@ -405,6 +408,37 @@ PanelView::VisibilityMode PanelView::visibilityMode() const
return
m_visibilityMode
;
}
PanelView
::
OpacityMode
PanelView
::
opacityMode
()
const
{
if
(
!
m_theme
.
adaptiveTransparencyEnabled
())
{
return
PanelView
::
Translucent
;
}
return
m_opacityMode
;
}
bool
PanelView
::
adaptiveOpacityEnabled
()
{
return
m_theme
.
adaptiveTransparencyEnabled
();
}
void
PanelView
::
setOpacityMode
(
PanelView
::
OpacityMode
mode
)
{
if
(
m_opacityMode
!=
mode
)
{
m_opacityMode
=
mode
;
if
(
config
().
isValid
()
&&
config
().
parent
().
isValid
())
{
config
().
parent
().
writeEntry
(
"panelOpacity"
,
(
int
)
mode
);
m_corona
->
requestApplicationConfigSync
();
}
emit
opacityModeChanged
();
}
}
void
PanelView
::
updateAdaptiveOpacityEnabled
()
{
emit
opacityModeChanged
();
emit
adaptiveOpacityEnabledChanged
();
}
void
PanelView
::
positionPanel
()
{
if
(
!
containment
())
{
...
...
@@ -599,6 +633,7 @@ void PanelView::restore()
// the place for this config key is changed in Plasma 5.9
// Do NOT use readConfigValueWithFallBack
setVisibilityMode
((
VisibilityMode
)
panelConfig
.
parent
().
readEntry
<
int
>
(
"panelVisibility"
,
panelConfig
.
readEntry
<
int
>
(
"panelVisibility"
,
(
int
)
NormalPanel
)));
setOpacityMode
((
OpacityMode
)
readConfigValueWithFallBack
(
"panelOpacity"
,
PanelView
::
OpacityMode
::
Adaptive
));
m_initCompleted
=
true
;
resizePanel
();
positionPanel
();
...
...
shell/panelview.h
View file @
7db8d5ee
...
...
@@ -100,6 +100,18 @@ class PanelView : public PlasmaQuick::ContainmentView
*/
Q_PROPERTY
(
VisibilityMode
visibilityMode
READ
visibilityMode
WRITE
setVisibilityMode
NOTIFY
visibilityModeChanged
)
/**
* Property that determines how a panel's opacity behaves.
*
* @see OpacityMode
*/
Q_PROPERTY
(
OpacityMode
opacityMode
READ
opacityMode
WRITE
setOpacityMode
NOTIFY
opacityModeChanged
)
/**
/* Property that determines whether adaptive opacity is used.
*/
Q_PROPERTY
(
bool
adaptiveOpacityEnabled
READ
adaptiveOpacityEnabled
NOTIFY
adaptiveOpacityEnabledChanged
)
public:
enum
VisibilityMode
{
NormalPanel
=
0
,
/** default, always visible panel, the windowmanager reserves a places for it */
...
...
@@ -109,6 +121,14 @@ public:
};
Q_ENUM
(
VisibilityMode
)
/** Enumeration of possible opacity modes. */
enum
OpacityMode
{
Adaptive
=
0
,
/** The panel will change opacity depending on the presence of a maximized window */
Opaque
,
/** The panel will always be opaque */
Translucent
/** The panel will always be translucent */
};
Q_ENUM
(
OpacityMode
)
explicit
PanelView
(
ShellCorona
*
corona
,
QScreen
*
targetScreen
=
nullptr
,
QWindow
*
parent
=
nullptr
);
~
PanelView
()
override
;
...
...
@@ -147,6 +167,11 @@ public:
VisibilityMode
visibilityMode
()
const
;
void
setVisibilityMode
(
PanelView
::
VisibilityMode
mode
);
PanelView
::
OpacityMode
opacityMode
()
const
;
bool
adaptiveOpacityEnabled
();
void
setOpacityMode
(
PanelView
::
OpacityMode
mode
);
void
updateAdaptiveOpacityEnabled
();
/**
* @returns the geometry of the panel given a distance
*/
...
...
@@ -185,6 +210,8 @@ Q_SIGNALS:
// QWindow does not have a property for screen. Adding this property requires re-implementing the signal
void
screenToFollowChanged
(
QScreen
*
screen
);
void
visibilityModeChanged
();
void
opacityModeChanged
();
void
adaptiveOpacityEnabledChanged
();
protected
Q_SLOTS
:
/**
...
...
@@ -235,6 +262,7 @@ private:
ShellCorona
*
m_corona
;
QTimer
m_strutsTimer
;
VisibilityMode
m_visibilityMode
;
OpacityMode
m_opacityMode
;
Plasma
::
Theme
m_theme
;
QTimer
m_positionPaneltimer
;
QTimer
m_unhideTimer
;
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment