mirror of
https://invent.kde.org/marcoa/shift-shell.git
synced 2026-04-26 14:23:09 +00:00
mobileshellstate: Move to DBus API instead of trying to use shared QML context
This also allows us to trigger behaviour from other processes that import mobileshell
This commit is contained in:
parent
be7c36d0c2
commit
f25840bfc2
29 changed files with 381 additions and 222 deletions
|
|
@ -66,7 +66,7 @@ Components.BaseItem {
|
||||||
root.toggleFunction();
|
root.toggleFunction();
|
||||||
} else if (root.settingsCommand && !root.restrictedPermissions) {
|
} else if (root.settingsCommand && !root.restrictedPermissions) {
|
||||||
closeRequested();
|
closeRequested();
|
||||||
MobileShellState.Shell.openAppLaunchAnimation(
|
MobileShellState.ShellDBusClient.openAppLaunchAnimation(
|
||||||
root.icon,
|
root.icon,
|
||||||
root.text,
|
root.text,
|
||||||
iconItem.Kirigami.ScenePosition.x + iconItem.width/2,
|
iconItem.Kirigami.ScenePosition.x + iconItem.width/2,
|
||||||
|
|
@ -79,7 +79,7 @@ Components.BaseItem {
|
||||||
function delegatePressAndHold() {
|
function delegatePressAndHold() {
|
||||||
if (root.settingsCommand && !root.restrictedPermissions) {
|
if (root.settingsCommand && !root.restrictedPermissions) {
|
||||||
closeRequested();
|
closeRequested();
|
||||||
MobileShellState.Shell.openAppLaunchAnimation(
|
MobileShellState.ShellDBusClient.openAppLaunchAnimation(
|
||||||
root.icon,
|
root.icon,
|
||||||
root.text,
|
root.text,
|
||||||
iconItem.Kirigami.ScenePosition.x + iconItem.width/2,
|
iconItem.Kirigami.ScenePosition.x + iconItem.width/2,
|
||||||
|
|
|
||||||
|
|
@ -57,8 +57,8 @@ MouseArea { // use mousearea to ensure clicks don't go behind
|
||||||
|
|
||||||
// close when homescreen requested
|
// close when homescreen requested
|
||||||
Connections {
|
Connections {
|
||||||
target: MobileShellState.HomeScreenControls
|
target: MobileShellState.ShellDBusClient
|
||||||
function onOpenHomeScreen() {
|
function onOpenHomeScreenRequested() {
|
||||||
root.close();
|
root.close();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -129,7 +129,7 @@ MouseArea { // use mousearea to ensure clicks don't go behind
|
||||||
ScriptAction {
|
ScriptAction {
|
||||||
script: {
|
script: {
|
||||||
// close the app drawer after it isn't visible
|
// close the app drawer after it isn't visible
|
||||||
MobileShellState.HomeScreenControls.resetHomeScreenPosition();
|
MobileShellState.ShellDBusClient.resetHomeScreenPosition();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -161,7 +161,7 @@ MouseArea { // use mousearea to ensure clicks don't go behind
|
||||||
ScriptAction {
|
ScriptAction {
|
||||||
script: {
|
script: {
|
||||||
// close the app drawer after it isn't visible
|
// close the app drawer after it isn't visible
|
||||||
MobileShellState.HomeScreenControls.resetHomeScreenPosition();
|
MobileShellState.ShellDBusClient.resetHomeScreenPosition();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -77,14 +77,14 @@ Item {
|
||||||
//BEGIN API implementation
|
//BEGIN API implementation
|
||||||
|
|
||||||
Connections {
|
Connections {
|
||||||
target: MobileShellState.HomeScreenControls
|
target: MobileShellState.ShellDBusClient
|
||||||
|
|
||||||
function onOpenHomeScreen() {
|
function onOpenHomeScreenRequested() {
|
||||||
if (WindowPlugin.WindowMaximizedTracker.showingWindow) {
|
if (WindowPlugin.WindowMaximizedTracker.showingWindow) {
|
||||||
itemContainer.zoomIn();
|
itemContainer.zoomIn();
|
||||||
}
|
}
|
||||||
|
|
||||||
MobileShellState.HomeScreenControls.resetHomeScreenPosition();
|
resetHomeScreenPosition();
|
||||||
|
|
||||||
WindowPlugin.WindowUtil.unsetAllMinimizedGeometries(root);
|
WindowPlugin.WindowUtil.unsetAllMinimizedGeometries(root);
|
||||||
WindowPlugin.WindowUtil.minimizeAll();
|
WindowPlugin.WindowUtil.minimizeAll();
|
||||||
|
|
@ -92,46 +92,24 @@ Item {
|
||||||
root.homeTriggered();
|
root.homeTriggered();
|
||||||
}
|
}
|
||||||
|
|
||||||
function onResetHomeScreenPosition() {
|
function onResetHomeScreenPositionRequested() {
|
||||||
root.resetHomeScreenPosition();
|
root.resetHomeScreenPosition();
|
||||||
}
|
}
|
||||||
|
|
||||||
function onRequestRelativeScroll(pos) {
|
function onOpenAppLaunchAnimationRequested(splashIcon, title, x, y, sourceIconSize) {
|
||||||
// TODO
|
|
||||||
//homescreen.appDrawer.offset -= pos.y;
|
|
||||||
//lastRequestedPosition = pos.y;
|
|
||||||
}
|
|
||||||
|
|
||||||
function onOpenAppLaunchAnimation(splashIcon, title, x, y, sourceIconSize) {
|
|
||||||
startupFeedback.open(splashIcon, title, x, y, sourceIconSize);
|
startupFeedback.open(splashIcon, title, x, y, sourceIconSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
function onCloseAppLaunchAnimation() {
|
function onCloseAppLaunchAnimationRequested() {
|
||||||
startupFeedback.close();
|
startupFeedback.close();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Plasmoid.onScreenChanged: {
|
|
||||||
if (plasmoid.screen == 0) {
|
|
||||||
MobileShellState.HomeScreenControls.homeScreenWindow = root.Window.window;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Window.onWindowChanged: {
|
|
||||||
if (plasmoid.screen == 0) {
|
|
||||||
MobileShellState.HomeScreenControls.homeScreenWindow = root.Window.window;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//END API implementation
|
//END API implementation
|
||||||
|
|
||||||
Component.onCompleted: {
|
Component.onCompleted: {
|
||||||
// determine the margins used
|
// determine the margins used
|
||||||
evaluateMargins();
|
evaluateMargins();
|
||||||
|
|
||||||
// set API variables
|
|
||||||
if (plasmoid.screen == 0) {
|
|
||||||
MobileShellState.HomeScreenControls.homeScreenWindow = root.Window.window;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// homescreen visual component
|
// homescreen visual component
|
||||||
|
|
|
||||||
|
|
@ -179,7 +179,7 @@ Window {
|
||||||
|
|
||||||
onClicked: {
|
onClicked: {
|
||||||
let coords = mapToItem(flickable, 0, 0);
|
let coords = mapToItem(flickable, 0, 0);
|
||||||
MobileShellState.Shell.openAppLaunchAnimation("audio-volume-high", i18n("Audio Settings"), coords.x, coords.y, PlasmaCore.Units.iconSizes.medium);
|
MobileShellState.ShellDBusClient.openAppLaunchAnimation("audio-volume-high", i18n("Audio Settings"), coords.x, coords.y, PlasmaCore.Units.iconSizes.medium);
|
||||||
MobileShell.ShellUtil.executeCommand("plasma-open-settings kcm_pulseaudio");
|
MobileShell.ShellUtil.executeCommand("plasma-open-settings kcm_pulseaudio");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -75,7 +75,7 @@ Item {
|
||||||
|
|
||||||
onClicked: {
|
onClicked: {
|
||||||
Components.AppLaunch.launchOrActivateApp(modelData.desktopEntry + ".desktop");
|
Components.AppLaunch.launchOrActivateApp(modelData.desktopEntry + ".desktop");
|
||||||
MobileShellState.Shell.closeActionDrawer();
|
MobileShellState.ShellDBusClient.closeActionDrawer();
|
||||||
}
|
}
|
||||||
|
|
||||||
Components.BaseItem {
|
Components.BaseItem {
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,22 @@ include_directories(${CMAKE_CURRENT_SOURCE_DIR}/..)
|
||||||
|
|
||||||
set(mobileshellstateplugin_SRCS
|
set(mobileshellstateplugin_SRCS
|
||||||
mobileshellstateplugin.cpp
|
mobileshellstateplugin.cpp
|
||||||
|
shelldbusobject.cpp
|
||||||
|
shelldbusclient.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
|
qt_generate_dbus_interface(
|
||||||
|
${CMAKE_CURRENT_SOURCE_DIR}/shelldbusobject.h
|
||||||
|
org.kde.plasmashell.Mobile.xml
|
||||||
|
OPTIONS -s -m -P
|
||||||
|
)
|
||||||
|
|
||||||
|
qt_add_dbus_adaptor(mobileshellstateplugin_SRCS ${CMAKE_CURRENT_BINARY_DIR}/org.kde.plasmashell.Mobile.xml
|
||||||
|
${CMAKE_CURRENT_SOURCE_DIR}/shelldbusobject.h ShellDBusObject)
|
||||||
|
qt_add_dbus_interface(mobileshellstateplugin_SRCS ${CMAKE_CURRENT_BINARY_DIR}/org.kde.plasmashell.Mobile.xml plasmashellmobileinterface)
|
||||||
|
|
||||||
|
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/org.kde.plasmashell.Mobile.xml DESTINATION ${KDE_INSTALL_DBUSINTERFACEDIR})
|
||||||
|
|
||||||
qt_add_resources(RESOURCES resources.qrc)
|
qt_add_resources(RESOURCES resources.qrc)
|
||||||
add_library(mobileshellstateplugin SHARED ${mobileshellstateplugin_SRCS} ${RESOURCES})
|
add_library(mobileshellstateplugin SHARED ${mobileshellstateplugin_SRCS} ${RESOURCES})
|
||||||
|
|
||||||
|
|
@ -18,6 +33,7 @@ target_link_libraries(mobileshellstateplugin
|
||||||
Qt::Qml
|
Qt::Qml
|
||||||
Qt::Gui
|
Qt::Gui
|
||||||
Qt::Quick
|
Qt::Quick
|
||||||
|
Qt::DBus
|
||||||
KF6::Plasma
|
KF6::Plasma
|
||||||
KF6::I18n
|
KF6::I18n
|
||||||
KF6::Notifications
|
KF6::Notifications
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,8 @@
|
||||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
#include "mobileshellstateplugin.h"
|
#include "mobileshellstateplugin.h"
|
||||||
|
#include "shelldbusclient.h"
|
||||||
|
#include "shelldbusobject.h"
|
||||||
|
|
||||||
#include <QQmlContext>
|
#include <QQmlContext>
|
||||||
#include <QQuickItem>
|
#include <QQuickItem>
|
||||||
|
|
@ -15,9 +17,11 @@ void MobileShellStatePlugin::registerTypes(const char *uri)
|
||||||
{
|
{
|
||||||
Q_ASSERT(QLatin1String(uri) == QLatin1String("org.kde.plasma.private.mobileshell.state"));
|
Q_ASSERT(QLatin1String(uri) == QLatin1String("org.kde.plasma.private.mobileshell.state"));
|
||||||
|
|
||||||
|
qmlRegisterType<ShellDBusObject>(uri, 1, 0, "ShellDBusObject");
|
||||||
|
qmlRegisterSingletonType<ShellDBusClient>(uri, 1, 0, "ShellDBusClient", [](QQmlEngine *, QJSEngine *) -> QObject * {
|
||||||
|
return ShellDBusClient::self();
|
||||||
|
});
|
||||||
|
|
||||||
// /
|
// /
|
||||||
qmlRegisterSingletonType(resolvePath("AudioProvider.qml"), uri, 1, 0, "AudioProvider");
|
qmlRegisterSingletonType(resolvePath("AudioProvider.qml"), uri, 1, 0, "AudioProvider");
|
||||||
qmlRegisterSingletonType(resolvePath("HomeScreenControls.qml"), uri, 1, 0, "HomeScreenControls");
|
|
||||||
qmlRegisterSingletonType(resolvePath("Shell.qml"), uri, 1, 0, "Shell");
|
|
||||||
qmlRegisterSingletonType(resolvePath("TopPanelControls.qml"), uri, 1, 0, "TopPanelControls");
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,26 +0,0 @@
|
||||||
// SPDX-FileCopyrightText: 2020 Marco Martin <mart@kde.org>
|
|
||||||
// SPDX-FileCopyrightText: 2021 Devin Lin <devin@kde.org>
|
|
||||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
|
||||||
|
|
||||||
import QtQuick 2.12
|
|
||||||
import QtQuick.Window 2.2
|
|
||||||
|
|
||||||
pragma Singleton
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Provides access to the homescreen plasmoid containment within the shell.
|
|
||||||
*/
|
|
||||||
QtObject {
|
|
||||||
id: root
|
|
||||||
|
|
||||||
signal openHomeScreen()
|
|
||||||
signal resetHomeScreenPosition()
|
|
||||||
signal requestRelativeScroll(point pos)
|
|
||||||
|
|
||||||
signal openAppLaunchAnimation(string splashIcon, string title, real x, real y, real sourceIconSize)
|
|
||||||
signal closeAppLaunchAnimation()
|
|
||||||
|
|
||||||
property var taskSwitcher
|
|
||||||
property QtObject homeScreenWindow
|
|
||||||
property bool taskSwitcherVisible: false
|
|
||||||
}
|
|
||||||
|
|
@ -1,47 +0,0 @@
|
||||||
// SPDX-FileCopyrightText: 2022 Devin Lin <devin@kde.org>
|
|
||||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
|
||||||
|
|
||||||
import QtQuick 2.15
|
|
||||||
import QtQuick.Window 2.15
|
|
||||||
|
|
||||||
pragma Singleton
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Provides access to common functions within the shell. Only available within the plasmashell process.
|
|
||||||
*/
|
|
||||||
QtObject {
|
|
||||||
id: delegate
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Whether the action drawer is currently open.
|
|
||||||
*/
|
|
||||||
readonly property bool actionDrawerVisible: TopPanelControls.actionDrawerVisible
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Open the app launch screen with animation parameters.
|
|
||||||
*/
|
|
||||||
function openAppLaunchAnimation(splashIcon: string, title: string, x: real, y: real, sourceIconSize: real) {
|
|
||||||
HomeScreenControls.openAppLaunchAnimation(splashIcon, title, x, y, sourceIconSize);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Close the app launch screen.
|
|
||||||
*/
|
|
||||||
function closeAppLaunchAnimation() {
|
|
||||||
HomeScreenControls.closeAppLaunchAnimation();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Open the action drawer.
|
|
||||||
*/
|
|
||||||
function openActionDrawer() {
|
|
||||||
TopPanelControls.openActionDrawer();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Close the action drawer, if it is open.
|
|
||||||
*/
|
|
||||||
function closeActionDrawer() {
|
|
||||||
TopPanelControls.closeActionDrawer();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,26 +0,0 @@
|
||||||
/*
|
|
||||||
* SPDX-FileCopyrightText: 2021 Devin Lin <devin@kde.org>
|
|
||||||
*
|
|
||||||
* SPDX-License-Identifier: GPL-2.0-or-later
|
|
||||||
*/
|
|
||||||
|
|
||||||
import QtQuick 2.12
|
|
||||||
import org.kde.plasma.core 2.0 as PlasmaCore
|
|
||||||
|
|
||||||
pragma Singleton
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Provides access to the panel plasmoid containment within the shell.
|
|
||||||
*/
|
|
||||||
QtObject {
|
|
||||||
id: root
|
|
||||||
|
|
||||||
signal startSwipe()
|
|
||||||
signal endSwipe()
|
|
||||||
signal requestRelativeScroll(real offsetY)
|
|
||||||
signal closeActionDrawer()
|
|
||||||
signal openActionDrawer()
|
|
||||||
property bool inSwipe: false
|
|
||||||
property bool actionDrawerVisible: false
|
|
||||||
property var notificationsWidget: null // updated in panel containment
|
|
||||||
}
|
|
||||||
|
|
@ -4,9 +4,6 @@
|
||||||
-->
|
-->
|
||||||
<RCC>
|
<RCC>
|
||||||
<qresource prefix="/org/kde/plasma/private/mobileshell/state/">
|
<qresource prefix="/org/kde/plasma/private/mobileshell/state/">
|
||||||
<file>qml/HomeScreenControls.qml</file>
|
|
||||||
<file>qml/Shell.qml</file>
|
|
||||||
<file>qml/TopPanelControls.qml</file>
|
|
||||||
<file>qml/AudioProvider.qml</file>
|
<file>qml/AudioProvider.qml</file>
|
||||||
</qresource>
|
</qresource>
|
||||||
</RCC>
|
</RCC>
|
||||||
|
|
|
||||||
112
components/mobileshellstate/shelldbusclient.cpp
Normal file
112
components/mobileshellstate/shelldbusclient.cpp
Normal file
|
|
@ -0,0 +1,112 @@
|
||||||
|
// SPDX-FileCopyrightText: 2023 Devin Lin <devin@kde.org>
|
||||||
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
|
#include "shelldbusclient.h"
|
||||||
|
|
||||||
|
#include <QDBusServiceWatcher>
|
||||||
|
|
||||||
|
ShellDBusClient::ShellDBusClient(QObject *parent)
|
||||||
|
: QObject{parent}
|
||||||
|
, m_interface{new OrgKdePlasmashellInterface{QStringLiteral("org.kde.plasmashell"), QStringLiteral("/Mobile"), QDBusConnection::sessionBus(), this}}
|
||||||
|
, m_connected{false}
|
||||||
|
{
|
||||||
|
m_watcher = new QDBusServiceWatcher(QStringLiteral("org.kde.plasmashell"), QDBusConnection::sessionBus(), QDBusServiceWatcher::WatchForOwnerChange, this);
|
||||||
|
|
||||||
|
if (m_interface->isValid()) {
|
||||||
|
connectSignals();
|
||||||
|
}
|
||||||
|
|
||||||
|
connect(m_watcher, &QDBusServiceWatcher::serviceRegistered, this, [this]() -> void {
|
||||||
|
m_connected = true;
|
||||||
|
if (m_interface->isValid()) {
|
||||||
|
connectSignals();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
connect(m_watcher, &QDBusServiceWatcher::serviceUnregistered, this, [this]() -> void {
|
||||||
|
m_connected = false;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
ShellDBusClient *ShellDBusClient::self()
|
||||||
|
{
|
||||||
|
static ShellDBusClient *instance = new ShellDBusClient;
|
||||||
|
return instance;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ShellDBusClient::connectSignals()
|
||||||
|
{
|
||||||
|
connect(m_interface, &OrgKdePlasmashellInterface::isActionDrawerOpenChanged, this, &ShellDBusClient::updateIsActionDrawerOpen);
|
||||||
|
connect(m_interface, &OrgKdePlasmashellInterface::doNotDisturbChanged, this, &ShellDBusClient::updateDoNotDisturb);
|
||||||
|
connect(m_interface, &OrgKdePlasmashellInterface::openActionDrawerRequested, this, &ShellDBusClient::openActionDrawerRequested);
|
||||||
|
connect(m_interface, &OrgKdePlasmashellInterface::closeActionDrawerRequested, this, &ShellDBusClient::closeActionDrawerRequested);
|
||||||
|
connect(m_interface, &OrgKdePlasmashellInterface::openAppLaunchAnimationRequested, this, &ShellDBusClient::openAppLaunchAnimationRequested);
|
||||||
|
connect(m_interface, &OrgKdePlasmashellInterface::closeAppLaunchAnimationRequested, this, &ShellDBusClient::closeAppLaunchAnimationRequested);
|
||||||
|
connect(m_interface, &OrgKdePlasmashellInterface::openHomeScreenRequested, this, &ShellDBusClient::openHomeScreenRequested);
|
||||||
|
connect(m_interface, &OrgKdePlasmashellInterface::resetHomeScreenPositionRequested, this, &ShellDBusClient::resetHomeScreenPositionRequested);
|
||||||
|
|
||||||
|
updateIsActionDrawerOpen();
|
||||||
|
updateDoNotDisturb();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ShellDBusClient::doNotDisturb()
|
||||||
|
{
|
||||||
|
return m_doNotDisturb;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ShellDBusClient::setDoNotDisturb(bool value)
|
||||||
|
{
|
||||||
|
m_interface->setDoNotDisturb(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ShellDBusClient::isActionDrawerOpen()
|
||||||
|
{
|
||||||
|
return m_isActionDrawerOpen;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ShellDBusClient::setIsActionDrawerOpen(bool value)
|
||||||
|
{
|
||||||
|
m_interface->setIsActionDrawerOpen(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ShellDBusClient::openActionDrawer()
|
||||||
|
{
|
||||||
|
m_interface->openActionDrawer();
|
||||||
|
}
|
||||||
|
|
||||||
|
void ShellDBusClient::closeActionDrawer()
|
||||||
|
{
|
||||||
|
m_interface->closeActionDrawer();
|
||||||
|
}
|
||||||
|
|
||||||
|
void ShellDBusClient::openAppLaunchAnimation(QString splashIcon, QString title, qreal x, qreal y, qreal sourceIconSize)
|
||||||
|
{
|
||||||
|
m_interface->openAppLaunchAnimation(splashIcon, title, x, y, sourceIconSize);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ShellDBusClient::closeAppLaunchAnimation()
|
||||||
|
{
|
||||||
|
m_interface->closeAppLaunchAnimation();
|
||||||
|
}
|
||||||
|
|
||||||
|
void ShellDBusClient::openHomeScreen()
|
||||||
|
{
|
||||||
|
m_interface->openHomeScreen();
|
||||||
|
}
|
||||||
|
|
||||||
|
void ShellDBusClient::resetHomeScreenPosition()
|
||||||
|
{
|
||||||
|
m_interface->resetHomeScreenPosition();
|
||||||
|
}
|
||||||
|
|
||||||
|
void ShellDBusClient::updateDoNotDisturb()
|
||||||
|
{
|
||||||
|
m_doNotDisturb = m_interface->doNotDisturb();
|
||||||
|
Q_EMIT doNotDisturbChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
void ShellDBusClient::updateIsActionDrawerOpen()
|
||||||
|
{
|
||||||
|
m_isActionDrawerOpen = m_interface->isActionDrawerOpen();
|
||||||
|
Q_EMIT isActionDrawerOpenChanged();
|
||||||
|
}
|
||||||
60
components/mobileshellstate/shelldbusclient.h
Normal file
60
components/mobileshellstate/shelldbusclient.h
Normal file
|
|
@ -0,0 +1,60 @@
|
||||||
|
// SPDX-FileCopyrightText: 2023 Devin Lin <devin@kde.org>
|
||||||
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "plasmashellmobileinterface.h"
|
||||||
|
|
||||||
|
#include <QDBusServiceWatcher>
|
||||||
|
#include <QObject>
|
||||||
|
#include <QString>
|
||||||
|
|
||||||
|
class ShellDBusClient : public QObject
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
Q_PROPERTY(bool doNotDisturb READ doNotDisturb WRITE setDoNotDisturb NOTIFY doNotDisturbChanged);
|
||||||
|
Q_PROPERTY(bool isActionDrawerOpen READ isActionDrawerOpen WRITE setIsActionDrawerOpen NOTIFY isActionDrawerOpenChanged);
|
||||||
|
|
||||||
|
public:
|
||||||
|
explicit ShellDBusClient(QObject *parent = nullptr);
|
||||||
|
static ShellDBusClient *self();
|
||||||
|
|
||||||
|
bool doNotDisturb();
|
||||||
|
void setDoNotDisturb(bool value);
|
||||||
|
|
||||||
|
bool isActionDrawerOpen();
|
||||||
|
void setIsActionDrawerOpen(bool value);
|
||||||
|
|
||||||
|
Q_INVOKABLE void openActionDrawer();
|
||||||
|
Q_INVOKABLE void closeActionDrawer();
|
||||||
|
|
||||||
|
Q_INVOKABLE void openAppLaunchAnimation(QString splashIcon, QString title, qreal x, qreal y, qreal sourceIconSize);
|
||||||
|
Q_INVOKABLE void closeAppLaunchAnimation();
|
||||||
|
|
||||||
|
Q_INVOKABLE void openHomeScreen();
|
||||||
|
Q_INVOKABLE void resetHomeScreenPosition();
|
||||||
|
|
||||||
|
Q_SIGNALS:
|
||||||
|
void isActionDrawerOpenChanged();
|
||||||
|
void doNotDisturbChanged();
|
||||||
|
void openActionDrawerRequested();
|
||||||
|
void closeActionDrawerRequested();
|
||||||
|
void openAppLaunchAnimationRequested(QString splashIcon, QString title, qreal x, qreal y, qreal sourceIconSize);
|
||||||
|
void closeAppLaunchAnimationRequested();
|
||||||
|
void openHomeScreenRequested();
|
||||||
|
void resetHomeScreenPositionRequested();
|
||||||
|
|
||||||
|
private Q_SLOTS:
|
||||||
|
void updateDoNotDisturb();
|
||||||
|
void updateIsActionDrawerOpen();
|
||||||
|
|
||||||
|
private:
|
||||||
|
void connectSignals();
|
||||||
|
|
||||||
|
OrgKdePlasmashellInterface *m_interface;
|
||||||
|
QDBusServiceWatcher *m_watcher;
|
||||||
|
|
||||||
|
bool m_doNotDisturb;
|
||||||
|
bool m_isActionDrawerOpen;
|
||||||
|
bool m_connected;
|
||||||
|
};
|
||||||
70
components/mobileshellstate/shelldbusobject.cpp
Normal file
70
components/mobileshellstate/shelldbusobject.cpp
Normal file
|
|
@ -0,0 +1,70 @@
|
||||||
|
// SPDX-FileCopyrightText: 2023 Devin Lin <devin@kde.org>
|
||||||
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
|
#include "shelldbusobject.h"
|
||||||
|
#include "mobileadaptor.h"
|
||||||
|
|
||||||
|
#include <QDBusConnection>
|
||||||
|
|
||||||
|
ShellDBusObject::ShellDBusObject(QObject *parent)
|
||||||
|
: QObject{parent}
|
||||||
|
{
|
||||||
|
new PlasmashellAdaptor{this};
|
||||||
|
QDBusConnection::sessionBus().registerObject(QStringLiteral("/Mobile"), this);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ShellDBusObject::doNotDisturb()
|
||||||
|
{
|
||||||
|
return m_doNotDisturb;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ShellDBusObject::setDoNotDisturb(bool value)
|
||||||
|
{
|
||||||
|
if (value != m_doNotDisturb) {
|
||||||
|
m_doNotDisturb = value;
|
||||||
|
Q_EMIT doNotDisturbChanged();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ShellDBusObject::isActionDrawerOpen()
|
||||||
|
{
|
||||||
|
return m_isActionDrawerOpen;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ShellDBusObject::setIsActionDrawerOpen(bool value)
|
||||||
|
{
|
||||||
|
if (value != m_isActionDrawerOpen) {
|
||||||
|
m_isActionDrawerOpen = value;
|
||||||
|
Q_EMIT isActionDrawerOpenChanged();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ShellDBusObject::openActionDrawer()
|
||||||
|
{
|
||||||
|
Q_EMIT openActionDrawerRequested();
|
||||||
|
}
|
||||||
|
|
||||||
|
void ShellDBusObject::closeActionDrawer()
|
||||||
|
{
|
||||||
|
Q_EMIT closeActionDrawerRequested();
|
||||||
|
}
|
||||||
|
|
||||||
|
void ShellDBusObject::openAppLaunchAnimation(QString splashIcon, QString title, qreal x, qreal y, qreal sourceIconSize)
|
||||||
|
{
|
||||||
|
Q_EMIT openAppLaunchAnimationRequested(splashIcon, title, x, y, sourceIconSize);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ShellDBusObject::closeAppLaunchAnimation()
|
||||||
|
{
|
||||||
|
Q_EMIT closeAppLaunchAnimationRequested();
|
||||||
|
}
|
||||||
|
|
||||||
|
void ShellDBusObject::openHomeScreen()
|
||||||
|
{
|
||||||
|
Q_EMIT openHomeScreenRequested();
|
||||||
|
}
|
||||||
|
|
||||||
|
void ShellDBusObject::resetHomeScreenPosition()
|
||||||
|
{
|
||||||
|
Q_EMIT resetHomeScreenPositionRequested();
|
||||||
|
}
|
||||||
46
components/mobileshellstate/shelldbusobject.h
Normal file
46
components/mobileshellstate/shelldbusobject.h
Normal file
|
|
@ -0,0 +1,46 @@
|
||||||
|
// SPDX-FileCopyrightText: 2023 Devin Lin <devin@kde.org>
|
||||||
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <QObject>
|
||||||
|
#include <QString>
|
||||||
|
|
||||||
|
class ShellDBusObject : public QObject
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
Q_CLASSINFO("D-Bus Interface", "org.kde.plasmashell")
|
||||||
|
|
||||||
|
public:
|
||||||
|
ShellDBusObject(QObject *parent = nullptr);
|
||||||
|
|
||||||
|
Q_SIGNALS:
|
||||||
|
Q_SCRIPTABLE void doNotDisturbChanged();
|
||||||
|
Q_SCRIPTABLE void isActionDrawerOpenChanged();
|
||||||
|
Q_SCRIPTABLE void openActionDrawerRequested();
|
||||||
|
Q_SCRIPTABLE void closeActionDrawerRequested();
|
||||||
|
Q_SCRIPTABLE void openAppLaunchAnimationRequested(QString splashIcon, QString title, qreal x, qreal y, qreal sourceIconSize);
|
||||||
|
Q_SCRIPTABLE void closeAppLaunchAnimationRequested();
|
||||||
|
Q_SCRIPTABLE void openHomeScreenRequested();
|
||||||
|
Q_SCRIPTABLE void resetHomeScreenPositionRequested();
|
||||||
|
|
||||||
|
public Q_SLOTS:
|
||||||
|
Q_SCRIPTABLE bool doNotDisturb();
|
||||||
|
Q_SCRIPTABLE void setDoNotDisturb(bool value);
|
||||||
|
|
||||||
|
Q_SCRIPTABLE bool isActionDrawerOpen();
|
||||||
|
Q_SCRIPTABLE void setIsActionDrawerOpen(bool value);
|
||||||
|
|
||||||
|
Q_SCRIPTABLE void openActionDrawer();
|
||||||
|
Q_SCRIPTABLE void closeActionDrawer();
|
||||||
|
|
||||||
|
Q_SCRIPTABLE void openAppLaunchAnimation(QString splashIcon, QString title, qreal x, qreal y, qreal sourceIconSize);
|
||||||
|
Q_SCRIPTABLE void closeAppLaunchAnimation();
|
||||||
|
|
||||||
|
Q_SCRIPTABLE void openHomeScreen();
|
||||||
|
Q_SCRIPTABLE void resetHomeScreenPosition();
|
||||||
|
|
||||||
|
private:
|
||||||
|
bool m_doNotDisturb = false;
|
||||||
|
bool m_isActionDrawerOpen = false;
|
||||||
|
};
|
||||||
|
|
@ -86,12 +86,6 @@ ContainmentLayoutManager.ItemContainer {
|
||||||
syncDelegateGeometry()
|
syncDelegateGeometry()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Connections {
|
|
||||||
target: MobileShellState.Shell
|
|
||||||
function onTaskSwitcherVisibleChanged() {
|
|
||||||
syncDelegateGeometry();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Connections {
|
Connections {
|
||||||
target: appletsLayout
|
target: appletsLayout
|
||||||
function onAppletsLayoutInteracted() {
|
function onAppletsLayoutInteracted() {
|
||||||
|
|
|
||||||
|
|
@ -106,7 +106,7 @@ Repeater {
|
||||||
|
|
||||||
onLaunch: (x, y, icon, title) => {
|
onLaunch: (x, y, icon, title) => {
|
||||||
if (icon !== "") {
|
if (icon !== "") {
|
||||||
MobileShellState.Shell.openAppLaunchAnimation(
|
MobileShellState.ShellDBusClient.openAppLaunchAnimation(
|
||||||
icon,
|
icon,
|
||||||
title,
|
title,
|
||||||
delegate.iconItem.Kirigami.ScenePosition.x + delegate.iconItem.width/2,
|
delegate.iconItem.Kirigami.ScenePosition.x + delegate.iconItem.width/2,
|
||||||
|
|
|
||||||
|
|
@ -69,7 +69,7 @@ AbstractAppDrawer {
|
||||||
}
|
}
|
||||||
onLaunch: (x, y, icon, title, storageId) => {
|
onLaunch: (x, y, icon, title, storageId) => {
|
||||||
if (icon !== "") {
|
if (icon !== "") {
|
||||||
MobileShellState.Shell.openAppLaunchAnimation(
|
MobileShellState.ShellDBusClient.openAppLaunchAnimation(
|
||||||
icon,
|
icon,
|
||||||
title,
|
title,
|
||||||
delegate.iconItem.Kirigami.ScenePosition.x + delegate.iconItem.width/2,
|
delegate.iconItem.Kirigami.ScenePosition.x + delegate.iconItem.width/2,
|
||||||
|
|
|
||||||
|
|
@ -55,7 +55,7 @@ AbstractAppDrawer {
|
||||||
}
|
}
|
||||||
onLaunch: (x, y, icon, title, storageId) => {
|
onLaunch: (x, y, icon, title, storageId) => {
|
||||||
if (icon !== "") {
|
if (icon !== "") {
|
||||||
MobileShell.HomeScreenControls.openAppLaunchAnimation(
|
MobileShellState.ShellDBusClient.openAppLaunchAnimation(
|
||||||
icon,
|
icon,
|
||||||
title,
|
title,
|
||||||
delegate.iconItem.Kirigami.ScenePosition.x + delegate.iconItem.width/2,
|
delegate.iconItem.Kirigami.ScenePosition.x + delegate.iconItem.width/2,
|
||||||
|
|
|
||||||
|
|
@ -44,14 +44,16 @@ MobileShell.HomeScreen {
|
||||||
// - minimize windows (only if we are in an app)
|
// - minimize windows (only if we are in an app)
|
||||||
// - open app drawer
|
// - open app drawer
|
||||||
// - close app drawer and, if necessary, restore windows
|
// - close app drawer and, if necessary, restore windows
|
||||||
|
|
||||||
|
// Always close action drawer
|
||||||
|
if (MobileShellState.ShellDBusClient.isActionDrawerOpen) {
|
||||||
|
MobileShellState.ShellDBusClient.closeActionDrawer();
|
||||||
|
}
|
||||||
|
|
||||||
if (!WindowPlugin.WindowUtil.isShowingDesktop && WindowPlugin.WindowMaximizedTracker.showingWindow
|
if (!WindowPlugin.WindowUtil.isShowingDesktop && WindowPlugin.WindowMaximizedTracker.showingWindow
|
||||||
|| MobileShellState.Shell.actionDrawerVisible
|
|| MobileShellState.ShellDBusClient.isActionDrawerOpen
|
||||||
|| searchWidget.isOpen
|
|| searchWidget.isOpen
|
||||||
) {
|
) {
|
||||||
// Always close action drawer
|
|
||||||
if (MobileShellState.Shell.actionDrawerVisible) {
|
|
||||||
MobileShellState.Shell.closeActionDrawer();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Always close the search widget as well
|
// Always close the search widget as well
|
||||||
if (searchWidget.isOpen) {
|
if (searchWidget.isOpen) {
|
||||||
|
|
@ -93,14 +95,6 @@ MobileShell.HomeScreen {
|
||||||
bottomMargin: root.bottomMargin
|
bottomMargin: root.bottomMargin
|
||||||
leftMargin: root.leftMargin
|
leftMargin: root.leftMargin
|
||||||
rightMargin: root.rightMargin
|
rightMargin: root.rightMargin
|
||||||
|
|
||||||
// close search component when task switcher is shown or hidden
|
|
||||||
Connections {
|
|
||||||
target: MobileShellState.HomeScreenControls.taskSwitcher
|
|
||||||
function onVisibleChanged() {
|
|
||||||
searchWidget.close();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -80,7 +80,7 @@ Item {
|
||||||
|
|
||||||
function launchAppWithAnim(x: int, y: int, source, title: string, storageId: string) {
|
function launchAppWithAnim(x: int, y: int, source, title: string, storageId: string) {
|
||||||
if (source !== "") {
|
if (source !== "") {
|
||||||
MobileShellState.Shell.openAppLaunchAnimation(
|
MobileShellState.ShellDBusClient.openAppLaunchAnimation(
|
||||||
source,
|
source,
|
||||||
title,
|
title,
|
||||||
iconLoader.Kirigami.ScenePosition.x + iconLoader.width/2,
|
iconLoader.Kirigami.ScenePosition.x + iconLoader.width/2,
|
||||||
|
|
|
||||||
|
|
@ -90,7 +90,7 @@ MobileShell.GridView {
|
||||||
|
|
||||||
onLaunch: (x, y, icon, title, storageId) => {
|
onLaunch: (x, y, icon, title, storageId) => {
|
||||||
if (icon !== "") {
|
if (icon !== "") {
|
||||||
MobileShellState.Shell.openAppLaunchAnimation(
|
MobileShellState.ShellDBusClient.openAppLaunchAnimation(
|
||||||
icon,
|
icon,
|
||||||
title,
|
title,
|
||||||
delegate.iconItem.Kirigami.ScenePosition.x + delegate.iconItem.width/2,
|
delegate.iconItem.Kirigami.ScenePosition.x + delegate.iconItem.width/2,
|
||||||
|
|
|
||||||
|
|
@ -46,12 +46,13 @@ MobileShell.HomeScreen {
|
||||||
// - minimize windows (only if we are in an app)
|
// - minimize windows (only if we are in an app)
|
||||||
// - open app drawer
|
// - open app drawer
|
||||||
// - close app drawer and, if necessary, restore windows
|
// - close app drawer and, if necessary, restore windows
|
||||||
if (!WindowPlugin.WindowUtil.isShowingDesktop && WindowPlugin.WindowMaximizedTracker.showingWindow || search.isOpen) {
|
|
||||||
// Always close action drawer
|
|
||||||
if (MobileShellState.Shell.actionDrawerVisible) {
|
|
||||||
MobileShellState.Shell.closeActionDrawer();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
// Always close action drawer
|
||||||
|
if (MobileShellState.ShellDBusClient.isActionDrawerOpen) {
|
||||||
|
MobileShellState.ShellDBusClient.closeActionDrawer();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!WindowPlugin.WindowUtil.isShowingDesktop && WindowPlugin.WindowMaximizedTracker.showingWindow || search.isOpen) {
|
||||||
// Always close the search widget as well
|
// Always close the search widget as well
|
||||||
if (search.isOpen) {
|
if (search.isOpen) {
|
||||||
search.close();
|
search.close();
|
||||||
|
|
|
||||||
|
|
@ -44,41 +44,29 @@ Item {
|
||||||
|
|
||||||
//BEGIN API implementation
|
//BEGIN API implementation
|
||||||
|
|
||||||
Binding {
|
|
||||||
target: MobileShellState.TopPanelControls
|
|
||||||
property: "inSwipe"
|
|
||||||
value: drawer.actionDrawer.dragging
|
|
||||||
}
|
|
||||||
Binding {
|
|
||||||
target: MobileShellState.TopPanelControls
|
|
||||||
property: "actionDrawerVisible"
|
|
||||||
value: drawer.visible
|
|
||||||
}
|
|
||||||
|
|
||||||
Binding {
|
|
||||||
target: MobileShellState.TopPanelControls
|
|
||||||
property: "notificationsWidget"
|
|
||||||
value: drawer.actionDrawer.notificationsWidget
|
|
||||||
}
|
|
||||||
|
|
||||||
Connections {
|
Connections {
|
||||||
target: MobileShellState.TopPanelControls
|
target: MobileShellState.ShellDBusClient
|
||||||
|
|
||||||
function onStartSwipe() {
|
function onOpenActionDrawerRequested() {
|
||||||
swipeArea.startSwipe();
|
|
||||||
}
|
|
||||||
function onEndSwipe() {
|
|
||||||
swipeArea.endSwipe();
|
|
||||||
}
|
|
||||||
function onRequestRelativeScroll(offsetY) {
|
|
||||||
swipeArea.updateOffset(offsetY);
|
|
||||||
}
|
|
||||||
function onCloseActionDrawer() {
|
|
||||||
drawer.actionDrawer.close();
|
|
||||||
}
|
|
||||||
function onOpenActionDrawer() {
|
|
||||||
drawer.actionDrawer.open();
|
drawer.actionDrawer.open();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function onCloseActionDrawerRequested() {
|
||||||
|
console.log('action drawer close');
|
||||||
|
drawer.actionDrawer.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
function onDoNotDisturbChanged() {
|
||||||
|
if (drawer.actionDrawer.notificationsWidget.doNotDisturbModeEnabled !== MobileShellState.ShellDBusClient.doNotDisturb) {
|
||||||
|
drawer.actionDrawer.notificationsWidget.toggleDoNotDisturbMode();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Binding {
|
||||||
|
target: MobileShellState.ShellDBusClient
|
||||||
|
property: "isActionDrawerOpen"
|
||||||
|
value: drawer.visible
|
||||||
}
|
}
|
||||||
|
|
||||||
//END API implementation
|
//END API implementation
|
||||||
|
|
|
||||||
|
|
@ -73,7 +73,7 @@ MobileShell.NavigationPanel {
|
||||||
iconSizeFactor: 1
|
iconSizeFactor: 1
|
||||||
|
|
||||||
onTriggered: {
|
onTriggered: {
|
||||||
MobileShellState.HomeScreenControls.openHomeScreen();
|
MobileShellState.ShellDBusClient.openHomeScreen();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -95,7 +95,7 @@ MobileShell.NavigationPanel {
|
||||||
if (tasksModel.activeTask !== 0) {
|
if (tasksModel.activeTask !== 0) {
|
||||||
tasksModel.requestClose(tasksModel.activeTask);
|
tasksModel.requestClose(tasksModel.activeTask);
|
||||||
}
|
}
|
||||||
MobileShellState.Shell.closeAppLaunchAnimation();
|
MobileShellState.ShellDBusClient.closeAppLaunchAnimation();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -4,20 +4,17 @@
|
||||||
* SPDX-License-Identifier: LGPL-2.0-or-later
|
* SPDX-License-Identifier: LGPL-2.0-or-later
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import org.kde.plasma.core 2.0 as PlasmaCore
|
import QtQuick
|
||||||
import org.kde.plasma.private.mobileshell.state 1.0 as MobileShellState
|
import org.kde.plasma.private.mobileshell.state as MobileShellState
|
||||||
import org.kde.plasma.private.mobileshell.quicksettingsplugin as QS
|
import org.kde.plasma.private.mobileshell.quicksettingsplugin as QS
|
||||||
|
|
||||||
QS.QuickSetting {
|
QS.QuickSetting {
|
||||||
text: i18n("Do Not Disturb")
|
text: i18n("Do Not Disturb")
|
||||||
icon: enabled ? "notifications-disabled" : "notifications"
|
icon: enabled ? "notifications-disabled" : "notifications"
|
||||||
status: ""
|
status: ""
|
||||||
enabled: MobileShellState.TopPanelControls.notificationsWidget && MobileShellState.TopPanelControls.notificationsWidget.doNotDisturbModeEnabled
|
enabled: MobileShellState.ShellDBusClient.doNotDisturb
|
||||||
available: MobileShellState.TopPanelControls.notificationsWidget
|
|
||||||
|
|
||||||
function toggle() {
|
function toggle() {
|
||||||
if (MobileShellState.TopPanelControls.notificationsWidget) {
|
MobileShellState.ShellDBusClient.doNotDisturb = !MobileShellState.ShellDBusClient.doNotDisturb;
|
||||||
MobileShellState.TopPanelControls.notificationsWidget.toggleDoNotDisturbMode();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -39,7 +39,7 @@ QS.QuickSetting {
|
||||||
}
|
}
|
||||||
|
|
||||||
enabled = !enabled
|
enabled = !enabled
|
||||||
MobileShellState.Shell.closeActionDrawer();
|
MobileShellState.ShellDBusClient.closeActionDrawer();
|
||||||
}
|
}
|
||||||
|
|
||||||
PWRec.PipeWireRecord {
|
PWRec.PipeWireRecord {
|
||||||
|
|
|
||||||
|
|
@ -4,8 +4,8 @@
|
||||||
import QtQuick 2.15
|
import QtQuick 2.15
|
||||||
|
|
||||||
import org.kde.plasma.private.mobileshell.quicksettingsplugin as QS
|
import org.kde.plasma.private.mobileshell.quicksettingsplugin as QS
|
||||||
import org.kde.plasma.private.mobileshell.state 1.0 as MobileShellState
|
import org.kde.plasma.private.mobileshell.state as MobileShellState
|
||||||
import org.kde.plasma.quicksetting.screenshot 1.0
|
import org.kde.plasma.quicksetting.screenshot
|
||||||
|
|
||||||
QS.QuickSetting {
|
QS.QuickSetting {
|
||||||
text: i18n("Screenshot")
|
text: i18n("Screenshot")
|
||||||
|
|
@ -17,12 +17,13 @@ QS.QuickSetting {
|
||||||
|
|
||||||
function toggle() {
|
function toggle() {
|
||||||
screenshotRequested = true;
|
screenshotRequested = true;
|
||||||
MobileShellState.Shell.closeActionDrawer();
|
MobileShellState.ShellDBusClient.closeActionDrawer();
|
||||||
}
|
}
|
||||||
|
|
||||||
Connections {
|
Connections {
|
||||||
target: MobileShellState.Shell
|
target: MobileShellState.ShellDBusClient
|
||||||
function onActionDrawerVisibleChanged(visible) {
|
|
||||||
|
function onIsActionDrawerOpenChanged(visible) {
|
||||||
if (!visible && screenshotRequested) {
|
if (!visible && screenshotRequested) {
|
||||||
screenshotRequested = false;
|
screenshotRequested = false;
|
||||||
timer.restart();
|
timer.restart();
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,7 @@ import org.kde.plasma.core 2.0 as PlasmaCore
|
||||||
import org.kde.plasma.shell 2.0 as Shell
|
import org.kde.plasma.shell 2.0 as Shell
|
||||||
import org.kde.kquickcontrolsaddons 2.0
|
import org.kde.kquickcontrolsaddons 2.0
|
||||||
import org.kde.kirigami 2.20 as Kirigami
|
import org.kde.kirigami 2.20 as Kirigami
|
||||||
|
import org.kde.plasma.private.mobileshell.state as MobileShellState
|
||||||
|
|
||||||
Rectangle {
|
Rectangle {
|
||||||
id: root
|
id: root
|
||||||
|
|
@ -61,9 +62,8 @@ Rectangle {
|
||||||
containment.anchors.fill = root;
|
containment.anchors.fill = root;
|
||||||
}
|
}
|
||||||
|
|
||||||
Component.onCompleted: {
|
// Load shell dbus object
|
||||||
// desktop.windowType = Shell.Desktop.Desktop;
|
MobileShellState.ShellDBusObject {}
|
||||||
}
|
|
||||||
|
|
||||||
// This is taken from plasma-desktop's shell package, try to keep it in sync
|
// This is taken from plasma-desktop's shell package, try to keep it in sync
|
||||||
Loader {
|
Loader {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue