diff --git a/app/layout/genericlayout.cpp b/app/layout/genericlayout.cpp index 333a2453b..55840e6a3 100644 --- a/app/layout/genericlayout.cpp +++ b/app/layout/genericlayout.cpp @@ -926,7 +926,7 @@ void GenericLayout::toggleHiddenState(QString screenName, Plasma::Types::Locatio if (viewsOnEdge >= 1) { for(const auto view : latteViews()) { if (view->positioner()->currentScreenName() == validScreenName && view->location() == edge) { - if (viewsOnEdge == 1 || (viewsOnEdge >1 && view->visibility() && view->visibility()->mode() == Latte::Types::SideBar)) { + if (viewsOnEdge == 1 || (viewsOnEdge >1 && view->visibility() && view->visibility()->isSidebar())) { view->visibility()->toggleHiddenState(); return; } diff --git a/app/plasma/extended/screengeometries.h b/app/plasma/extended/screengeometries.h index a08843ed8..5e1396b7a 100644 --- a/app/plasma/extended/screengeometries.h +++ b/app/plasma/extended/screengeometries.h @@ -69,7 +69,8 @@ private: QList m_ignoreModes{ Latte::Types::AutoHide, - Latte::Types::SideBar + Latte::Types::SideBar, + Latte::Types::SidebarAutoHide }; QStringList m_lastScreenNames; diff --git a/app/shortcuts/globalshortcuts.cpp b/app/shortcuts/globalshortcuts.cpp index de284b065..4dbc30c0f 100644 --- a/app/shortcuts/globalshortcuts.cpp +++ b/app/shortcuts/globalshortcuts.cpp @@ -562,7 +562,7 @@ void GlobalShortcuts::hideViewsTimerSlot() latteView->visibility()->removeBlockHidingEvent(SHORTCUTBLOCKHIDINGTYPE); latteView->extendedInterface()->hideShortcutBadges(); - if (latteView->visibility()->mode() == Latte::Types::SideBar && !latteView->visibility()->isHidden()) { + if (latteView->visibility()->isSidebar() && !latteView->visibility()->isHidden()) { latteView->visibility()->toggleHiddenState(); } } diff --git a/app/view/positioner.cpp b/app/view/positioner.cpp index ad53d17b8..b58718280 100644 --- a/app/view/positioner.cpp +++ b/app/view/positioner.cpp @@ -464,7 +464,8 @@ void Positioner::immediateSyncGeometry() int fixedScreen = m_view->onPrimary() ? latteCorona->screenPool()->primaryScreenId() : m_view->containment()->screen(); QList ignoreModes({Latte::Types::AutoHide, - Latte::Types::SideBar}); + Latte::Types::SideBar, + Latte::Types::SidebarAutoHide}); QList ignoreEdges({Plasma::Types::LeftEdge, Plasma::Types::RightEdge}); diff --git a/app/view/settings/primaryconfigview.cpp b/app/view/settings/primaryconfigview.cpp index 04e12ebe4..57a3794cb 100644 --- a/app/view/settings/primaryconfigview.cpp +++ b/app/view/settings/primaryconfigview.cpp @@ -304,10 +304,11 @@ void PrimaryConfigView::instantUpdateAvailableScreenGeometry() int currentScrId = m_latteView->positioner()->currentScreenId(); - QList ignoreModes{Latte::Types::SideBar}; + QList ignoreModes{Latte::Types::SideBar,Latte::Types::SidebarAutoHide}; - if (m_latteView->visibility() && m_latteView->visibility()->mode() == Latte::Types::SideBar) { + if (m_latteView->visibility() && m_latteView->visibility()->isSidebar()) { ignoreModes.removeAll(Latte::Types::SideBar); + ignoreModes.removeAll(Latte::Types::SidebarAutoHide); } m_availableScreenGeometry = m_corona->availableScreenRectWithCriteria(currentScrId, m_latteView->layout()->name(), ignoreModes, {}, false, true); diff --git a/app/view/visibilitymanager.cpp b/app/view/visibilitymanager.cpp index 18b58b8b8..81b58615b 100644 --- a/app/view/visibilitymanager.cpp +++ b/app/view/visibilitymanager.cpp @@ -44,6 +44,7 @@ //! view to be show. For example !compositing+kwin_edges+hide inteval<50ms const int HIDEMINIMUMINTERVAL = 50; + namespace Latte { namespace ViewPart { @@ -328,7 +329,23 @@ void VisibilityManager::setMode(Latte::Types::Visibility mode) }); toggleHiddenState(); + break; + case Types::SidebarAutoHide: + m_connections[base] = connect(this, &VisibilityManager::containsMouseChanged, this, [&]() { + if(!isHidden()){ + raiseView(m_containsMouse); + } + }); + + m_connections[base] = connect(m_latteView, &Latte::View::inEditModeChanged, this, [&]() { + if (!m_latteView->inEditMode()) { + toggleHiddenState(); + } + }); + toggleHiddenState(); + break; + default: break; } @@ -592,6 +609,11 @@ void VisibilityManager::setTimerHide(int msec) emit timerHideChanged(); } +bool VisibilityManager::isSidebar() const +{ + return m_mode == Latte::Types::SideBar || m_mode == Latte::Types::SidebarAutoHide; +} + bool VisibilityManager::supportsKWinEdges() const { return (m_edgeGhostWindow != nullptr); @@ -693,13 +715,17 @@ bool VisibilityManager::isValidMode() const void VisibilityManager::toggleHiddenState() { if (!m_latteView->inEditMode()) { - if (m_mode == Latte::Types::SideBar) { + if (isSidebar()) { if (m_blockHidingEvents.contains(Q_FUNC_INFO)) { removeBlockHidingEvent(Q_FUNC_INFO); } if (m_isHidden) { emit mustBeShown(); + + if(m_mode == Latte::Types::SidebarAutoHide) { + m_timerHide.start(); + } } else { emit mustBeHide(); } @@ -907,7 +933,7 @@ void VisibilityManager::viewEventManager(QEvent *ev) case QEvent::DragEnter: m_dragEnter = true; - if (m_isHidden && m_mode != Latte::Types::SideBar) { + if (m_isHidden && !isSidebar()) { emit mustBeShown(); } diff --git a/app/view/visibilitymanager.h b/app/view/visibilitymanager.h index d02851645..5ab5c4021 100644 --- a/app/view/visibilitymanager.h +++ b/app/view/visibilitymanager.h @@ -99,6 +99,8 @@ public: int timerHide() const; void setTimerHide(int msec); + bool isSidebar() const; + //! KWin Edges Support functions bool enableKWinEdges() const; void setEnableKWinEdges(bool enable); diff --git a/app/wm/tracker/windowstracker.h b/app/wm/tracker/windowstracker.h index dfef081e3..f38fd683a 100644 --- a/app/wm/tracker/windowstracker.h +++ b/app/wm/tracker/windowstracker.h @@ -189,7 +189,8 @@ private: Latte::Types::WindowsGoBelow, Latte::Types::WindowsCanCover, Latte::Types::WindowsAlwaysCover, - Latte::Types::SideBar + Latte::Types::SideBar, + Latte::Types::SidebarAutoHide }; QMap m_windows; diff --git a/containment/package/contents/ui/abilities/AutoSize.qml b/containment/package/contents/ui/abilities/AutoSize.qml index c1bace12c..f76f803f6 100644 --- a/containment/package/contents/ui/abilities/AutoSize.qml +++ b/containment/package/contents/ui/abilities/AutoSize.qml @@ -32,7 +32,9 @@ Item { readonly property bool isActive: plasmoid.configuration.autoSizeEnabled && !root.containsOnlyPlasmaTasks && layouter.fillApplets<=0 - && latteView && latteView.visibility.mode !== LatteCore.Types.SideBar + && latteView + && latteView.visibility.mode !== LatteCore.Types.SideBar + && latteView.visibility.mode !== LatteCore.Types.SidebarAutoHide property int iconSize: -1 //it is not set, this is the default readonly property bool inCalculatedIconSize: ((metrics.iconSize === sizer.iconSize) || (metrics.iconSize === metrics.maxIconSize)) diff --git a/containment/package/contents/ui/debug/DebugWindow.qml b/containment/package/contents/ui/debug/DebugWindow.qml index a2c858326..1f35e93c5 100644 --- a/containment/package/contents/ui/debug/DebugWindow.qml +++ b/containment/package/contents/ui/debug/DebugWindow.qml @@ -380,6 +380,9 @@ Window{ case LatteCore.Types.SideBar: return "OnDemand SideBar"; break; + case LatteCore.Types.SidebarAutoHide: + return "AutoHide Sidebar"; + break; case LatteCore.Types.NormalWindow: return "Normal Window"; break; diff --git a/declarativeimports/coretypes.h.in b/declarativeimports/coretypes.h.in index 41f3e2135..330dd8928 100644 --- a/declarativeimports/coretypes.h.in +++ b/declarativeimports/coretypes.h.in @@ -54,6 +54,7 @@ public: WindowsCanCover, WindowsAlwaysCover, SideBar, + SidebarAutoHide, NormalWindow = 20 }; Q_ENUM(Visibility); diff --git a/shell/package/contents/configuration/pages/AppearanceConfig.qml b/shell/package/contents/configuration/pages/AppearanceConfig.qml index 5a0495363..5bc146672 100644 --- a/shell/package/contents/configuration/pages/AppearanceConfig.qml +++ b/shell/package/contents/configuration/pages/AppearanceConfig.qml @@ -90,7 +90,7 @@ PlasmaComponents.Page { Layout.fillWidth: true value: plasmoid.configuration.iconSize from: 16 - to: latteView.visibility.mode === LatteCore.Types.SideBar ? 512 : 256 + to: (latteView.visibility.mode === LatteCore.Types.SideBar || latteView.visibility.mode === LatteCore.Types.SidebarAutoHide) ? 512 : 256 stepSize: dialog.advancedLevel || (plasmoid.configuration.iconSize % 8 !== 0) || dialog.viewIsPanel ? 1 : 8 wheelEnabled: false @@ -139,7 +139,7 @@ PlasmaComponents.Page { Layout.fillWidth: true value: plasmoid.configuration.proportionIconSize from: 1.0 - to: latteView.visibility.mode === LatteCore.Types.SideBar ? 25 : 12 + to: (latteView.visibility.mode === LatteCore.Types.SideBar || latteView.visibility.mode === LatteCore.Types.SidebarAutoHide) ? 25 : 12 stepSize: 0.5 wheelEnabled: false diff --git a/shell/package/contents/configuration/pages/BehaviorConfig.qml b/shell/package/contents/configuration/pages/BehaviorConfig.qml index ede16eb1b..274d118e3 100644 --- a/shell/package/contents/configuration/pages/BehaviorConfig.qml +++ b/shell/package/contents/configuration/pages/BehaviorConfig.qml @@ -478,6 +478,7 @@ PlasmaComponents.Page { RowLayout{ id: showTimerRow anchors.horizontalCenter: parent.horizontalCenter + enabled: latteView.visibility.mode !== LatteCore.Types.SidebarAutoHide PlasmaComponents.Label { Layout.leftMargin: Qt.application.layoutDirection === Qt.RightToLeft ? units.smallSpacing : 0 Layout.rightMargin: Qt.application.layoutDirection === Qt.RightToLeft ? 0 : units.smallSpacing diff --git a/shell/package/contents/controls/CustomWindowsModeButton.qml b/shell/package/contents/controls/CustomWindowsModeButton.qml index 0af24cb8f..16c868d04 100644 --- a/shell/package/contents/controls/CustomWindowsModeButton.qml +++ b/shell/package/contents/controls/CustomWindowsModeButton.qml @@ -140,10 +140,16 @@ LatteComponents.ComboBoxButton{ name: i18n("On Demand SideBar") } + var sidebarAutoHide = { + pluginId: '9', + name: i18n("Auto Hide Sidebar") + } + actionsModel.append(windowsGoBelow); actionsModel.append(windowsCanCover); actionsModel.append(windowsAlwaysCover); actionsModel.append(sideBar); + actionsModel.append(sidebarAutoHide); } }