indicators: Prepare the visibility to be more granular

Currently either all or none inner indicators can be hidden/shown,
and same of the outter.

We'll soon allow some of them to be hidden, selectively, by the
client app.
This commit is contained in:
Sergio Martins
2022-02-11 17:37:26 +00:00
parent 6db3ccc87f
commit 85fb4ff671
4 changed files with 77 additions and 31 deletions

View File

@@ -55,14 +55,44 @@ QPoint ClassicIndicators::posForIndicator(DropIndicatorOverlayInterface::DropLoc
return m_indicatorWindow->posForIndicator(loc);
}
bool ClassicIndicators::innerIndicatorsVisible() const
bool ClassicIndicators::innerLeftIndicatorVisible() const
{
return dropIndicatorVisible(DropLocation_Inner);
return dropIndicatorVisible(DropLocation_Left);
}
bool ClassicIndicators::outterIndicatorsVisible() const
bool ClassicIndicators::innerRightIndicatorVisible() const
{
return dropIndicatorVisible(DropLocation_Outter);
return dropIndicatorVisible(DropLocation_Right);
}
bool ClassicIndicators::innerTopIndicatorVisible() const
{
return dropIndicatorVisible(DropLocation_Top);
}
bool ClassicIndicators::innerBottomIndicatorVisible() const
{
return dropIndicatorVisible(DropLocation_Bottom);
}
bool ClassicIndicators::outterLeftIndicatorVisible() const
{
return dropIndicatorVisible(DropLocation_OutterLeft);
}
bool ClassicIndicators::outterRightIndicatorVisible() const
{
return dropIndicatorVisible(DropLocation_OutterRight);
}
bool ClassicIndicators::outterTopIndicatorVisible() const
{
return dropIndicatorVisible(DropLocation_OutterTop);
}
bool ClassicIndicators::outterBottomIndicatorVisible() const
{
return dropIndicatorVisible(DropLocation_OutterBottom);
}
bool ClassicIndicators::tabIndicatorVisible() const
@@ -88,9 +118,7 @@ void ClassicIndicators::updateVisibility()
m_indicatorWindow->setVisible(false);
}
Q_EMIT innerIndicatorsVisibleChanged();
Q_EMIT outterIndicatorsVisibleChanged();
Q_EMIT tabIndicatorVisibleChanged();
Q_EMIT indicatorsVisibleChanged();
}
void ClassicIndicators::raiseIndicators()

View File

@@ -138,9 +138,9 @@ IndicatorWindow::IndicatorWindow(ClassicIndicators *classicIndicators_)
setAttribute(Qt::WA_TranslucentBackground);
connect(classicIndicators, &ClassicIndicators::innerIndicatorsVisibleChanged,
connect(classicIndicators, &ClassicIndicators::indicatorsVisibleChanged,
this, &IndicatorWindow::updateIndicatorVisibility);
connect(classicIndicators, &ClassicIndicators::outterIndicatorsVisibleChanged,
connect(classicIndicators, &ClassicIndicators::indicatorsVisibleChanged,
this, &IndicatorWindow::updateIndicatorVisibility);
m_indicators << m_center << m_left << m_right << m_top << m_bottom
@@ -199,13 +199,10 @@ void IndicatorWindow::resizeEvent(QResizeEvent *ev)
void IndicatorWindow::updateIndicatorVisibility()
{
for (Indicator *indicator : { m_left, m_right, m_bottom, m_top })
indicator->setVisible(classicIndicators->innerIndicatorsVisible());
for (Indicator *indicator : { m_outterTop, m_outterLeft, m_outterRight, m_outterBottom })
indicator->setVisible(classicIndicators->outterIndicatorsVisible());
m_center->setVisible(classicIndicators->tabIndicatorVisible());
for (Indicator *indicator : { m_left, m_right, m_bottom, m_top,
m_outterTop, m_outterLeft, m_outterRight, m_outterBottom,
m_center })
indicator->setVisible(classicIndicators->dropIndicatorVisible(indicator->m_dropLocation));
updateMask();
}

View File

@@ -23,9 +23,18 @@ class DOCKS_EXPORT ClassicIndicators : public DropIndicatorOverlayInterface
{
Q_OBJECT
Q_PROPERTY(bool innerIndicatorsVisible READ innerIndicatorsVisible NOTIFY innerIndicatorsVisibleChanged)
Q_PROPERTY(bool outterIndicatorsVisible READ outterIndicatorsVisible NOTIFY outterIndicatorsVisibleChanged)
Q_PROPERTY(bool tabIndicatorVisible READ tabIndicatorVisible NOTIFY tabIndicatorVisibleChanged)
// Properties for QML
Q_PROPERTY(bool innerLeftIndicatorVisible READ innerLeftIndicatorVisible NOTIFY indicatorsVisibleChanged)
Q_PROPERTY(bool innerRightIndicatorVisible READ innerRightIndicatorVisible NOTIFY indicatorsVisibleChanged)
Q_PROPERTY(bool innerTopIndicatorVisible READ innerTopIndicatorVisible NOTIFY indicatorsVisibleChanged)
Q_PROPERTY(bool innerBottomIndicatorVisible READ innerBottomIndicatorVisible NOTIFY indicatorsVisibleChanged)
Q_PROPERTY(bool outterLeftIndicatorVisible READ outterLeftIndicatorVisible NOTIFY indicatorsVisibleChanged)
Q_PROPERTY(bool outterRightIndicatorVisible READ outterRightIndicatorVisible NOTIFY indicatorsVisibleChanged)
Q_PROPERTY(bool outterTopIndicatorVisible READ outterTopIndicatorVisible NOTIFY indicatorsVisibleChanged)
Q_PROPERTY(bool outterBottomIndicatorVisible READ outterBottomIndicatorVisible NOTIFY indicatorsVisibleChanged)
Q_PROPERTY(bool tabIndicatorVisible READ tabIndicatorVisible NOTIFY indicatorsVisibleChanged)
public:
explicit ClassicIndicators(DropArea *dropArea);
@@ -33,19 +42,22 @@ public:
DropLocation hover_impl(QPoint globalPos) override;
QPoint posForIndicator(DropLocation) const override;
bool innerIndicatorsVisible() const;
bool outterIndicatorsVisible() const;
// The tab/center indicator
// Lots of getters needed because of QML:
bool innerLeftIndicatorVisible() const;
bool innerRightIndicatorVisible() const;
bool innerTopIndicatorVisible() const;
bool innerBottomIndicatorVisible() const;
bool outterLeftIndicatorVisible() const;
bool outterRightIndicatorVisible() const;
bool outterTopIndicatorVisible() const;
bool outterBottomIndicatorVisible() const;
bool tabIndicatorVisible() const;
protected:
bool onResize(QSize newSize) override;
void updateVisibility() override;
Q_SIGNALS:
void innerIndicatorsVisibleChanged();
void outterIndicatorsVisibleChanged();
void tabIndicatorVisibleChanged();
void indicatorsVisibleChanged();
private:
friend class KDDockWidgets::Indicator;

View File

@@ -21,7 +21,7 @@ Item {
visible: width > 50 && height > 50 // don't show if window is too small'
ClassicIndicator {
visible: _window.classicIndicators.outterIndicatorsVisible
visible: _window.classicIndicators.outterLeftIndicatorVisible
indicatorType: DropIndicatorOverlayInterface.DropLocation_OutterLeft
anchors {
left: parent.left
@@ -31,7 +31,7 @@ Item {
}
ClassicIndicator {
visible: _window.classicIndicators.outterIndicatorsVisible
visible: _window.classicIndicators.outterRightIndicatorVisible
indicatorType: DropIndicatorOverlayInterface.DropLocation_OutterRight
anchors {
right: parent.right
@@ -41,7 +41,7 @@ Item {
}
ClassicIndicator {
visible: _window.classicIndicators.outterIndicatorsVisible
visible: _window.classicIndicators.outterTopIndicatorVisible
indicatorType: DropIndicatorOverlayInterface.DropLocation_OutterTop
anchors {
top: parent.top
@@ -51,7 +51,7 @@ Item {
}
ClassicIndicator {
visible: _window.classicIndicators.outterIndicatorsVisible
visible: _window.classicIndicators.outterBottomIndicatorVisible
indicatorType: DropIndicatorOverlayInterface.DropLocation_OutterBottom
anchors {
bottom: parent.bottom
@@ -69,9 +69,12 @@ Item {
width: (centerIndicator * 3) + (2 * innerMargin)
height: width
visible: _window.classicIndicators.innerIndicatorsVisible
visible: _window.classicIndicators.innerLeftIndicatorVisible || _window.classicIndicators.innerRightIndicatorVisible ||
_window.classicIndicators.innerTopIndicatorVisible || _window.classicIndicators.innerBottomIndicatorVisible || _window.classicIndicators.tabIndicatorVisible
ClassicIndicator {
id: innerLeft
visible: _window.classicIndicators.innerLeftIndicatorVisible
indicatorType: DropIndicatorOverlayInterface.DropLocation_Left
anchors {
right: centerIndicator.left
@@ -88,6 +91,8 @@ Item {
}
ClassicIndicator {
id: innerRight
visible: _window.classicIndicators.innerRightIndicatorVisible
indicatorType: DropIndicatorOverlayInterface.DropLocation_Right
anchors {
left: centerIndicator.right
@@ -97,6 +102,8 @@ Item {
}
ClassicIndicator {
id: innerTop
visible: _window.classicIndicators.innerTopIndicatorVisible
indicatorType: DropIndicatorOverlayInterface.DropLocation_Top
anchors {
bottom: centerIndicator.top
@@ -106,6 +113,8 @@ Item {
}
ClassicIndicator {
id: innerBottom
visible: _window.classicIndicators.innerBottomIndicatorVisible
indicatorType: DropIndicatorOverlayInterface.DropLocation_Bottom
anchors {
top: centerIndicator.bottom