mirror of
https://invent.kde.org/marcoa/shift-shell.git
synced 2026-04-26 22:33:08 +00:00
shell: Move wallpaper selector to homescreens directly
This commit is contained in:
parent
77e59801d0
commit
1dbd1505dc
7 changed files with 202 additions and 100 deletions
|
|
@ -1,18 +1,16 @@
|
||||||
// SPDX-FileCopyrightText: 2013 Marco Martin <mart@kde.org>
|
// SPDX-FileCopyrightText: 2013 Marco Martin <mart@kde.org>
|
||||||
// SPDX-FileCopyrightText: 2022 Devin Lin <devin@kde.org>
|
// SPDX-FileCopyrightText: 2022-2024 Devin Lin <devin@kde.org>
|
||||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
import QtQuick
|
import QtQuick
|
||||||
import QtQuick.Layouts
|
import QtQuick.Layouts
|
||||||
import QtQuick.Window
|
import QtQuick.Window
|
||||||
import QtQuick.Controls 2.3 as Controls
|
import QtQuick.Controls as Controls
|
||||||
import org.kde.plasma.core as PlasmaCore
|
|
||||||
import org.kde.plasma.configuration 2.0
|
|
||||||
|
|
||||||
import org.kde.kirigami 2.20 as Kirigami
|
import org.kde.kirigami 2.20 as Kirigami
|
||||||
import org.kde.plasma.wallpapers.image 2.0 as Wallpaper
|
import org.kde.plasma.wallpapers.image 2.0 as Wallpaper
|
||||||
import org.kde.kquickcontrolsaddons 2.0 as Addons
|
import org.kde.kquickcontrolsaddons 2.0 as Addons
|
||||||
import org.kde.kcmutils as KCM
|
import org.kde.plasma.private.mobileshell.wallpaperimageplugin as WallpaperImagePlugin
|
||||||
|
|
||||||
Controls.Drawer {
|
Controls.Drawer {
|
||||||
id: imageWallpaperDrawer
|
id: imageWallpaperDrawer
|
||||||
|
|
@ -23,6 +21,7 @@ Controls.Drawer {
|
||||||
onOpened: {
|
onOpened: {
|
||||||
wallpapersView.forceActiveFocus()
|
wallpapersView.forceActiveFocus()
|
||||||
}
|
}
|
||||||
|
|
||||||
implicitWidth: Kirigami.Units.gridUnit * 10
|
implicitWidth: Kirigami.Units.gridUnit * 10
|
||||||
implicitHeight: Kirigami.Units.gridUnit * 8
|
implicitHeight: Kirigami.Units.gridUnit * 8
|
||||||
width: imageWallpaperDrawer.horizontal ? implicitWidth : parent.width
|
width: imageWallpaperDrawer.horizontal ? implicitWidth : parent.width
|
||||||
|
|
@ -37,6 +36,9 @@ Controls.Drawer {
|
||||||
ListView {
|
ListView {
|
||||||
id: wallpapersView
|
id: wallpapersView
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
|
anchors.leftMargin: imageWallpaperDrawer.leftMargin
|
||||||
|
anchors.rightMargin: imageWallpaperDrawer.rightMargin
|
||||||
|
anchors.bottomMargin: imageWallpaperDrawer.bottomMargin
|
||||||
orientation: imageWallpaperDrawer.horizontal ? ListView.Vertical : ListView.Horizontal
|
orientation: imageWallpaperDrawer.horizontal ? ListView.Vertical : ListView.Horizontal
|
||||||
keyNavigationEnabled: true
|
keyNavigationEnabled: true
|
||||||
highlightFollowsCurrentItem: true
|
highlightFollowsCurrentItem: true
|
||||||
|
|
@ -60,7 +62,7 @@ Controls.Drawer {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
property bool isCurrent: configDialog.wallpaperConfiguration["Image"] == model.path
|
property bool isCurrent: WallpaperImagePlugin.WallpaperPlugin.homescreenWallpaperPath == model.path
|
||||||
onIsCurrentChanged: {
|
onIsCurrentChanged: {
|
||||||
if (isCurrent) {
|
if (isCurrent) {
|
||||||
wallpapersView.currentIndex = index;
|
wallpapersView.currentIndex = index;
|
||||||
|
|
@ -87,9 +89,7 @@ Controls.Drawer {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
onClicked: {
|
onClicked: {
|
||||||
configDialog.currentWallpaper = "org.kde.image";
|
WallpaperImagePlugin.WallpaperPlugin.setHomescreenWallpaper(model.path);
|
||||||
configDialog.wallpaperConfiguration["Image"] = model.path;
|
|
||||||
configDialog.applyWallpaper()
|
|
||||||
}
|
}
|
||||||
Keys.onReturnPressed: {
|
Keys.onReturnPressed: {
|
||||||
clicked();
|
clicked();
|
||||||
|
|
@ -138,8 +138,6 @@ Item {
|
||||||
|
|
||||||
settingsModeHomeScreenScale: root.settingsModeHomeScreenScale
|
settingsModeHomeScreenScale: root.settingsModeHomeScreenScale
|
||||||
homeScreen: root
|
homeScreen: root
|
||||||
|
|
||||||
onRequestLeaveSettingsMode: root.leaveSettingsMode();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Item {
|
Item {
|
||||||
|
|
|
||||||
|
|
@ -22,8 +22,6 @@ Item {
|
||||||
|
|
||||||
readonly property bool homeScreenInteractive: !appletListViewer.open
|
readonly property bool homeScreenInteractive: !appletListViewer.open
|
||||||
|
|
||||||
signal requestLeaveSettingsMode()
|
|
||||||
|
|
||||||
MouseArea {
|
MouseArea {
|
||||||
id: closeSettings
|
id: closeSettings
|
||||||
|
|
||||||
|
|
@ -56,7 +54,6 @@ Item {
|
||||||
|
|
||||||
PC3.ToolButton {
|
PC3.ToolButton {
|
||||||
opacity: 0.9
|
opacity: 0.9
|
||||||
enabled: false
|
|
||||||
implicitHeight: Kirigami.Units.gridUnit * 4
|
implicitHeight: Kirigami.Units.gridUnit * 4
|
||||||
implicitWidth: Kirigami.Units.gridUnit * 5
|
implicitWidth: Kirigami.Units.gridUnit * 5
|
||||||
|
|
||||||
|
|
@ -76,6 +73,11 @@ Item {
|
||||||
font.bold: true
|
font.bold: true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
onClicked: {
|
||||||
|
wallpaperSelectorLoader.active = true;
|
||||||
|
Folio.HomeScreenState.closeSettingsView();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
PC3.ToolButton {
|
PC3.ToolButton {
|
||||||
|
|
@ -166,4 +168,25 @@ Item {
|
||||||
homeScreen.openConfigure()
|
homeScreen.openConfigure()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loader {
|
||||||
|
id: wallpaperSelectorLoader
|
||||||
|
asynchronous: true
|
||||||
|
active: false
|
||||||
|
|
||||||
|
onLoaded: {
|
||||||
|
wallpaperSelectorLoader.item.open();
|
||||||
|
}
|
||||||
|
|
||||||
|
sourceComponent: MobileShell.WallpaperSelector {
|
||||||
|
horizontal: root.width > root.height
|
||||||
|
edge: horizontal ? Qt.LeftEdge : Qt.BottomEdge
|
||||||
|
bottomMargin: root.homeScreen.bottomMargin
|
||||||
|
leftMargin: root.homeScreen.leftMargin
|
||||||
|
rightMargin: root.homeScreen.rightMargin
|
||||||
|
onClosed: {
|
||||||
|
wallpaperSelectorLoader.active = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -27,6 +27,13 @@ Item {
|
||||||
|
|
||||||
property alias page: swipeView.currentIndex
|
property alias page: swipeView.currentIndex
|
||||||
|
|
||||||
|
property bool settingsOpen: false
|
||||||
|
property real settingsOpenFactor: settingsOpen ? 1 : 0
|
||||||
|
|
||||||
|
Behavior on settingsOpenFactor {
|
||||||
|
NumberAnimation { duration: 200 }
|
||||||
|
}
|
||||||
|
|
||||||
function triggerHomescreen() {
|
function triggerHomescreen() {
|
||||||
swipeView.setCurrentIndex(0);
|
swipeView.setCurrentIndex(0);
|
||||||
swipeView.focusChild();
|
swipeView.focusChild();
|
||||||
|
|
@ -36,6 +43,10 @@ Item {
|
||||||
}
|
}
|
||||||
|
|
||||||
function openConfigure() {
|
function openConfigure() {
|
||||||
|
settingsOpen = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
function openContainmentSettings() {
|
||||||
Plasmoid.internalAction("configure").trigger();
|
Plasmoid.internalAction("configure").trigger();
|
||||||
Plasmoid.editMode = false;
|
Plasmoid.editMode = false;
|
||||||
}
|
}
|
||||||
|
|
@ -50,9 +61,19 @@ Item {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SettingsScreen {
|
||||||
|
id: settings
|
||||||
|
bottomMargin: root.bottomMargin
|
||||||
|
anchors.fill: parent
|
||||||
|
opacity: root.settingsOpenFactor
|
||||||
|
visible: opacity > 0
|
||||||
|
homeScreen: root
|
||||||
|
z: 1
|
||||||
|
}
|
||||||
|
|
||||||
QQC2.SwipeView {
|
QQC2.SwipeView {
|
||||||
id: swipeView
|
id: swipeView
|
||||||
opacity: 1 - searchWidget.openFactor
|
opacity: Math.min(1 - root.settingsOpenFactor, 1 - searchWidget.openFactor)
|
||||||
interactive: root.interactive
|
interactive: root.interactive
|
||||||
|
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,132 @@
|
||||||
|
// SPDX-FileCopyrightText: 2023 Devin Lin <devin@kde.org>
|
||||||
|
// SPDX-License-Identifier: LGPL-2.0-or-later
|
||||||
|
|
||||||
|
import QtQuick
|
||||||
|
import QtQuick.Window
|
||||||
|
import QtQuick.Layouts
|
||||||
|
import QtQuick.Controls as QQC2
|
||||||
|
|
||||||
|
import org.kde.kirigami 2.20 as Kirigami
|
||||||
|
|
||||||
|
import org.kde.plasma.components 3.0 as PC3
|
||||||
|
import org.kde.plasma.private.mobileshell as MobileShell
|
||||||
|
|
||||||
|
Item {
|
||||||
|
id: root
|
||||||
|
|
||||||
|
property real leftMargin
|
||||||
|
property real rightMargin
|
||||||
|
property real bottomMargin
|
||||||
|
property var homeScreen
|
||||||
|
|
||||||
|
MouseArea {
|
||||||
|
id: closeSettings
|
||||||
|
|
||||||
|
anchors.top: parent.top
|
||||||
|
anchors.left: parent.left
|
||||||
|
anchors.right: parent.right
|
||||||
|
anchors.bottom: settingsBar.top
|
||||||
|
|
||||||
|
onClicked: {
|
||||||
|
root.homeScreen.settingsOpen = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Item {
|
||||||
|
id: settingsBar
|
||||||
|
height: settingsOptions.implicitHeight
|
||||||
|
|
||||||
|
Kirigami.Theme.inherit: false
|
||||||
|
Kirigami.Theme.colorSet: Kirigami.Theme.Complementary
|
||||||
|
|
||||||
|
anchors.left: parent.left
|
||||||
|
anchors.leftMargin: root.leftMargin
|
||||||
|
anchors.right: parent.right
|
||||||
|
anchors.rightMargin: parent.rightMargin
|
||||||
|
anchors.bottom: parent.bottom
|
||||||
|
anchors.bottomMargin: Kirigami.Units.largeSpacing + root.bottomMargin
|
||||||
|
|
||||||
|
RowLayout {
|
||||||
|
id: settingsOptions
|
||||||
|
anchors.horizontalCenter: parent.horizontalCenter
|
||||||
|
spacing: Kirigami.Units.largeSpacing
|
||||||
|
|
||||||
|
PC3.ToolButton {
|
||||||
|
opacity: 0.9
|
||||||
|
implicitHeight: Kirigami.Units.gridUnit * 4
|
||||||
|
implicitWidth: Kirigami.Units.gridUnit * 5
|
||||||
|
|
||||||
|
contentItem: ColumnLayout {
|
||||||
|
spacing: Kirigami.Units.largeSpacing
|
||||||
|
|
||||||
|
Kirigami.Icon {
|
||||||
|
Layout.alignment: Qt.AlignHCenter | Qt.AlignBottom
|
||||||
|
implicitWidth: Kirigami.Units.iconSizes.smallMedium
|
||||||
|
implicitHeight: Kirigami.Units.iconSizes.smallMedium
|
||||||
|
source: 'edit-image'
|
||||||
|
}
|
||||||
|
|
||||||
|
QQC2.Label {
|
||||||
|
Layout.alignment: Qt.AlignHCenter | Qt.AlignTop
|
||||||
|
text: i18n('Wallpapers')
|
||||||
|
font.bold: true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
onClicked: {
|
||||||
|
root.homeScreen.settingsOpen = false;
|
||||||
|
wallpaperSelectorLoader.active = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
PC3.ToolButton {
|
||||||
|
opacity: 0.9
|
||||||
|
implicitHeight: Kirigami.Units.gridUnit * 4
|
||||||
|
implicitWidth: Kirigami.Units.gridUnit * 5
|
||||||
|
|
||||||
|
contentItem: ColumnLayout {
|
||||||
|
spacing: Kirigami.Units.largeSpacing
|
||||||
|
|
||||||
|
Kirigami.Icon {
|
||||||
|
Layout.alignment: Qt.AlignHCenter | Qt.AlignBottom
|
||||||
|
implicitWidth: Kirigami.Units.iconSizes.smallMedium
|
||||||
|
implicitHeight: Kirigami.Units.iconSizes.smallMedium
|
||||||
|
source: 'settings-configure'
|
||||||
|
}
|
||||||
|
|
||||||
|
QQC2.Label {
|
||||||
|
Layout.alignment: Qt.AlignHCenter | Qt.AlignTop
|
||||||
|
text: i18n('Settings')
|
||||||
|
font.bold: true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
onClicked: {
|
||||||
|
root.homeScreen.settingsOpen = false;
|
||||||
|
root.homeScreen.openContainmentSettings();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Loader {
|
||||||
|
id: wallpaperSelectorLoader
|
||||||
|
asynchronous: true
|
||||||
|
active: false
|
||||||
|
|
||||||
|
onLoaded: {
|
||||||
|
wallpaperSelectorLoader.item.open();
|
||||||
|
}
|
||||||
|
|
||||||
|
sourceComponent: MobileShell.WallpaperSelector {
|
||||||
|
horizontal: root.width > root.height
|
||||||
|
edge: horizontal ? Qt.LeftEdge : Qt.BottomEdge
|
||||||
|
bottomMargin: root.bottomMargin
|
||||||
|
leftMargin: root.leftMargin
|
||||||
|
rightMargin: root.rightMargin
|
||||||
|
onClosed: {
|
||||||
|
wallpaperSelectorLoader.active = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -61,6 +61,17 @@ ContainmentItem {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Rectangle {
|
||||||
|
id: darkenSettingsBackground
|
||||||
|
color: Qt.rgba(0, 0, 0, 0.7)
|
||||||
|
opacity: halcyonHomeScreen.settingsOpenFactor
|
||||||
|
anchors.fill: parent
|
||||||
|
z: -1
|
||||||
|
Behavior on color {
|
||||||
|
ColorAnimation { duration: Kirigami.Units.longDuration }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
MobileShell.HomeScreen {
|
MobileShell.HomeScreen {
|
||||||
id: homeScreen
|
id: homeScreen
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,7 @@ import org.kde.ksvg 1.0 as KSvg
|
||||||
AppletConfiguration {
|
AppletConfiguration {
|
||||||
id: root
|
id: root
|
||||||
isContainment: true
|
isContainment: true
|
||||||
loadApp: false
|
loadApp: true
|
||||||
|
|
||||||
readonly property bool horizontal: root.width > root.height
|
readonly property bool horizontal: root.width > root.height
|
||||||
|
|
||||||
|
|
@ -37,87 +37,4 @@ AppletConfiguration {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//END model
|
//END model
|
||||||
|
|
||||||
// the wallpaper selector is quite heavy, so only load it when needed
|
|
||||||
Loader {
|
|
||||||
id: wallpaperSelectorLoader
|
|
||||||
asynchronous: true
|
|
||||||
active: false
|
|
||||||
|
|
||||||
onLoaded: {
|
|
||||||
wallpaperSelectorLoader.item.open();
|
|
||||||
}
|
|
||||||
|
|
||||||
sourceComponent: WallpaperSelector {
|
|
||||||
visible: false
|
|
||||||
horizontal: root.horizontal
|
|
||||||
edge: root.horizontal ? Qt.LeftEdge : Qt.BottomEdge
|
|
||||||
onClosed: configDialog.close()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
MouseArea {
|
|
||||||
z: -1
|
|
||||||
anchors.fill: parent
|
|
||||||
onClicked: configDialog.close()
|
|
||||||
|
|
||||||
Controls.Control {
|
|
||||||
anchors.bottom: parent.bottom
|
|
||||||
anchors.horizontalCenter: parent.horizontalCenter
|
|
||||||
anchors.bottomMargin: Kirigami.Units.gridUnit
|
|
||||||
|
|
||||||
leftPadding: Kirigami.Units.gridUnit
|
|
||||||
rightPadding: Kirigami.Units.gridUnit
|
|
||||||
topPadding: Kirigami.Units.gridUnit
|
|
||||||
bottomPadding: Kirigami.Units.gridUnit
|
|
||||||
|
|
||||||
NumberAnimation on opacity {
|
|
||||||
id: opacityAnim
|
|
||||||
running: true
|
|
||||||
from: 0
|
|
||||||
to: 1
|
|
||||||
duration: Kirigami.Units.longDuration
|
|
||||||
}
|
|
||||||
|
|
||||||
background: KSvg.FrameSvgItem {
|
|
||||||
enabledBorders: KSvg.FrameSvgItem.AllBorders
|
|
||||||
imagePath: "widgets/background"
|
|
||||||
}
|
|
||||||
|
|
||||||
contentItem: RowLayout {
|
|
||||||
PlasmaComponents3.Button {
|
|
||||||
Layout.alignment: Qt.AlignRight
|
|
||||||
Layout.preferredHeight: Kirigami.Units.gridUnit * 4
|
|
||||||
Layout.preferredWidth: Kirigami.Units.gridUnit * 8
|
|
||||||
|
|
||||||
display: PlasmaComponents3.ToolButton.TextUnderIcon
|
|
||||||
icon.name: "viewimage"
|
|
||||||
icon.width: Kirigami.Units.iconSizes.medium
|
|
||||||
icon.height: Kirigami.Units.iconSizes.medium
|
|
||||||
text: i18n("Change Wallpaper")
|
|
||||||
onClicked: {
|
|
||||||
opacityAnim.from = 1;
|
|
||||||
opacityAnim.to = 0;
|
|
||||||
opacityAnim.restart();
|
|
||||||
wallpaperSelectorLoader.active = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
PlasmaComponents3.Button {
|
|
||||||
Layout.alignment: Qt.AlignLeft
|
|
||||||
Layout.preferredHeight: Kirigami.Units.gridUnit * 4
|
|
||||||
Layout.preferredWidth: Kirigami.Units.gridUnit * 8
|
|
||||||
|
|
||||||
display: PlasmaComponents3.ToolButton.TextUnderIcon
|
|
||||||
icon.name: "configure"
|
|
||||||
icon.width: Kirigami.Units.iconSizes.medium
|
|
||||||
icon.height: Kirigami.Units.iconSizes.medium
|
|
||||||
text: i18n("Configure")
|
|
||||||
onClicked: {
|
|
||||||
root.loadApp = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue