From 724389fac4abdf6a4d4e10aba0dada9549a7a714 Mon Sep 17 00:00:00 2001 From: Vishesh Handa Date: Fri, 19 Jun 2015 01:44:57 +0200 Subject: [PATCH] Remove the compositor Made obsolete by kwin --- CMakeLists.txt | 7 - compositor/ClientWindowWrapper.qml | 75 ---- compositor/Compositor.qml | 378 ------------------ compositor/ShellWindowWrapper.qml | 24 -- compositor/WindowManagement.js | 280 ------------- compositor/WindowWrapper.qml | 54 --- compositor/klogo.png | Bin 23345 -> 0 bytes services/CMakeLists.txt | 1 - .../plasma-phone-compositor.service.cmake | 22 - services/plasma-phone-ui.service.cmake | 4 +- 10 files changed, 2 insertions(+), 843 deletions(-) delete mode 100644 compositor/ClientWindowWrapper.qml delete mode 100644 compositor/Compositor.qml delete mode 100644 compositor/ShellWindowWrapper.qml delete mode 100644 compositor/WindowManagement.js delete mode 100644 compositor/WindowWrapper.qml delete mode 100644 compositor/klogo.png delete mode 100644 services/plasma-phone-compositor.service.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 28ac378c..c08b1212 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -41,13 +41,6 @@ plasma_install_package(look-and-feel org.kde.plasma.phone look-and-feel) plasma_install_package(shell org.kde.plasma.phone shells) install(DIRECTORY wallpaper/ DESTINATION "${WALLPAPER_INSTALL_DIR}/org.kde.plasma.phone.lockers") -install(DIRECTORY compositor/ - DESTINATION ${DATA_INSTALL_DIR}/greenisland/org.kde.plasma.phone.compositor - PATTERN .svn EXCLUDE - PATTERN CMakeLists.txt EXCLUDE - PATTERN Messages.sh EXCLUDE - PATTERN dummydata EXCLUDE) - kpackage_install_package(phonebook org.kde.phone.phonebook genericqml) install(FILES phonebook/metadata.desktop DESTINATION ${XDG_APPS_INSTALL_DIR} RENAME org.kde.phone.phonebook.desktop) diff --git a/compositor/ClientWindowWrapper.qml b/compositor/ClientWindowWrapper.qml deleted file mode 100644 index b18cbb52..00000000 --- a/compositor/ClientWindowWrapper.qml +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Copyright 2014 Pier Luigi Fiorini - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU Library General Public License as - * published by the Free Software Foundation; either version 2, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Library General Public License for more details - * - * You should have received a copy of the GNU Library General Public - * License along with this program; if not, write to the - * Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - */ - -import QtQuick 2.0 -import org.kde.plasma.core 2.0 as PlasmaCore - -WindowWrapper { - id: window - objectName: "clientWindow" - onXChanged: { - if (compositorRoot.currentWindow == window) { - compositorRoot.layers.windows.contentX = x; - } - } - Behavior on y { - enabled: !mouse.active - SequentialAnimation { - NumberAnimation { - easing.type: "InOutQuad" - duration: units.longDuration - } - ScriptAction { - script: { - if (window.opacity < 0.3) { - window.close(); - } - } - } - } - } - opacity: 1 - (Math.abs(y) / height) - - MouseArea { - id: mouse - z: 99 - anchors.fill: parent - enabled: compositorRoot.layers.windows.switchMode - property bool active - onPressed: { - active = true; - } - onClicked: { - compositorRoot.currentWindow = window; - window.child.takeFocus(); - } - onReleased: { - active = false; - if (window.opacity < 0.3) { - window.y = (window.y > 0 ? +1 : -1) * window.height; - } else { - window.y = 0; - } - } - drag { - axis: Drag.YAxis - target: window - } - } -} diff --git a/compositor/Compositor.qml b/compositor/Compositor.qml deleted file mode 100644 index b44f8f0e..00000000 --- a/compositor/Compositor.qml +++ /dev/null @@ -1,378 +0,0 @@ -/* - * Copyright 2014 Pier Luigi Fiorini - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU Library General Public License as - * published by the Free Software Foundation; either version 2, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Library General Public License for more details - * - * You should have received a copy of the GNU Library General Public - * License along with this program; if not, write to the - * Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - */ - -import QtQuick 2.0 -import QtQuick.Layouts 1.0 -import QtQml.Models 2.1 -import org.kde.plasma.core 2.0 as PlasmaCore -import "WindowManagement.js" as WindowManagement - -Rectangle { - property alias showSplash: splash.visible - property bool showPanel: true - property alias showKeyboard: keyboardLayer.visible - readonly property alias layers: layers - readonly property real topBarHeight: units.iconSizes.small - readonly property real bottomBarHeight: units.iconSizes.medium - property var currentWindow: null - property var shellWindow: null; - - onCurrentWindowChanged: { - if (!currentWindow) { - compositorRoot.state = "homeScreen"; - return; - } - compositorRoot.state = "application"; - } - - id: compositorRoot - color: "black" - state: "homeScreen" - - Image { - id: splash - anchors.fill: parent - source: "klogo.png" - sourceSize.width: width - sourceSize.height: height - fillMode: Image.PreserveAspectFit - z: 1000 - } - - ListModel { - id: surfaceModel - } - - Connections { - target: compositor - onSurfaceMapped: WindowManagement.surfaceMapped(surface) - onSurfaceUnmapped: WindowManagement.surfaceUnmapped(surface) - onSurfaceDestroyed: WindowManagement.surfaceDestroyed(surface) - } - - QtObject { - readonly property alias desktop: desktopLayer - readonly property alias windows: windowsLayerBackground - readonly property alias panel: panelLayer - readonly property alias keyboard: keyboardLayer - - id: layers - } - - Item { - id: desktopLayer - anchors.fill: parent - visible: true - } - - Rectangle { - id: windowsLayerBackground - anchors { - fill: parent - topMargin: topBarHeight - bottomMargin: bottomBarHeight - } - color: Qt.rgba(0, 0, 0, 0.9) - function addWindow (window) { - window.parent = windowsLayout - } - property bool switchMode: windowsZoom.scale < 1 - - Item { - id: windowsZoom - anchors.fill: parent - Flickable { - id: windowsLayer - anchors.centerIn: parent - - flickableDirection: Flickable.HorizontalFlick - height: windowsZoom.height * 2 - width: windowsZoom.width * 2 - interactive: windowsLayerBackground.switchMode - contentWidth: windowsLayout.width - contentHeight: windowsLayout.height - - MouseArea { - height: windowsLayer.height - width: windowsLayout.width - onClicked: { - compositorRoot.state = "homeScreen"; - } - Row { - id: windowsLayout - anchors.centerIn: parent - height: windowsLayerBackground.height - transformOrigin: Item.Left - onChildrenChanged: { - if (children.length == 0) { - compositorRoot.state = "homeScreen"; - } - } - } - } - } - } - } - - Item { - id: panelLayer - anchors.fill: parent - visible: showPanel - z: 3 - } - - Item { - id: keyboardLayer - anchors.fill: parent - z: 800 - onVisibleChanged: { - if (!visible && compositorRoot.shellWindow) { - compositorRoot.shellWindow.child.takeFocus(); - } - } - } - - Rectangle { - id: bottomBar - z: 4 - anchors.left: parent.left - anchors.right: parent.right - anchors.bottom: parent.bottom - height: bottomBarHeight - color: Qt.rgba(0, 0, 0, 0.9) - - Behavior on height { - NumberAnimation { - easing.type: "InOutQuad" - duration: units.shortDuration - } - } - - RowLayout { - anchors.fill: parent - - PlasmaCore.IconItem { - colorGroup: PlasmaCore.Theme.ComplementaryColorGroup - width: units.iconSizes.smallMedium - height: width - source: "distribute-horizontal-x" - enabled: compositorRoot.state != "switcher" && windowsLayout.children.length > 0 - opacity: enabled ? 1 : 0.2 - - Layout.alignment: Qt.AlignHCenter - Layout.preferredWidth: units.iconSizes.medium - Layout.preferredHeight: units.iconSizes.medium - - MouseArea { - anchors.fill: parent - onClicked: { - compositorRoot.state = "switcher"; - } - } - } - PlasmaCore.IconItem { - colorGroup: PlasmaCore.Theme.ComplementaryColorGroup - width: units.iconSizes.smallMedium - height: width - source: "go-home" - enabled: compositorRoot.state != "homeScreen"; - opacity: enabled ? 1 : 0.2 - - Layout.alignment: Qt.AlignHCenter - Layout.preferredWidth: units.iconSizes.medium - Layout.preferredHeight: units.iconSizes.medium - - MouseArea { - anchors.fill: parent - onClicked: { - compositorRoot.state = "homeScreen"; - } - } - } - PlasmaCore.IconItem { - colorGroup: PlasmaCore.Theme.ComplementaryColorGroup - width: units.iconSizes.smallMedium - height: width - source: "window-close" - enabled: compositorRoot.currentWindow - opacity: enabled ? 1 : 0.2 - - Layout.alignment: Qt.AlignHCenter - Layout.preferredWidth: units.iconSizes.medium - Layout.preferredHeight: units.iconSizes.medium - - MouseArea { - anchors.fill: parent - onClicked: { - compositorRoot.state = "homeScreen"; - compositorRoot.currentWindow.close(); - } - } - } - } - } - - MouseArea { - id: taskSwitchEdge - z: 1000 - anchors { - left: parent.left - right: parent.right - bottom: parent.bottom - } - height: 8 - enabled: windowsLayout.children.length > 0 && compositorRoot.state != "switcher" - property int oldX: 0 - onPressed: { - oldX = mouse.x; - } - onPositionChanged: { - compositorRoot.state = "changing"; - compositorRoot.showKeyboard = false; - - var newScale = (1-Math.abs(mouse.y)/(compositorRoot.height/2)) - if (newScale > 0.3) { - windowsZoom.scale = newScale - } - windowsLayer.contentX -= (mouse.x - oldX); - oldX = mouse.x; - } - onReleased: { - if (windowsZoom.scale > 0.7) { - compositorRoot.state = compositorRoot.currentWindow ? "application" : "homeScreen"; - } else { - compositorRoot.state = "switcher"; - } - } - } - - states: [ - State { - name: "homeScreen" - PropertyChanges { - target: windowsLayerBackground - opacity: 0 - } - PropertyChanges { - target: windowsZoom - scale: 1 - } - }, - State { - name: "application" - PropertyChanges { - target: windowsLayerBackground - opacity: 1 - } - PropertyChanges { - target: windowsZoom - scale: 1 - } - PropertyChanges { - target: windowsLayer - contentX: compositorRoot.currentWindow ? compositorRoot.currentWindow.x - windowsLayerBackground.width/2 : 0 - } - }, - State { - name: "switcher" - PropertyChanges { - target: windowsLayerBackground - opacity: 1 - } - PropertyChanges { - target: windowsZoom - scale: 0.5 - } - PropertyChanges { - target: windowsLayer - contentX: compositorRoot.currentWindow ? compositorRoot.currentWindow.x - windowsLayerBackground.width/2 : 0 - } - }, - State { - name: "changing" - PropertyChanges { - target: windowsLayerBackground - opacity: 1 - } - PropertyChanges { - target: windowsLayer - contentX: compositorRoot.currentWindow ? compositorRoot.currentWindow.x - windowsLayerBackground.width/2 : 0 - } - } - ] - - transitions: [ - Transition { - to: "changing" - SequentialAnimation { - ScriptAction { - script: { - desktopLayer.z = 1 - windowsLayerBackground.z = 800 - } - } - PropertyAnimation { - target: windowsLayerBackground - duration: units.longDuration - easing.type: Easing.InOutQuad - properties: "opacity" - } - } - }, - Transition { - SequentialAnimation { - ParallelAnimation { - PropertyAnimation { - target: windowsLayerBackground - duration: units.longDuration - easing.type: Easing.InOutQuad - properties: "opacity" - } - PropertyAnimation { - target: windowsZoom - duration: units.shortDuration - easing.type: Easing.InOutQuad - properties: "scale" - } - PropertyAnimation { - target: windowsLayer - duration: units.shortDuration - easing.type: Easing.InOutQuad - properties: "contentX" - } - } - ScriptAction { - script: { - if (compositorRoot.state == "homeScreen") { - desktopLayer.z = 2; - windowsLayerBackground.z = 1; - compositorRoot.currentWindow = null; - } else { - desktopLayer.z = 1; - windowsLayerBackground.z = 800; - if (compositorRoot.currentWindow) { - compositorRoot.currentWindow.child.takeFocus(); - } - } - } - } - } - } - ] -} diff --git a/compositor/ShellWindowWrapper.qml b/compositor/ShellWindowWrapper.qml deleted file mode 100644 index 00e30cce..00000000 --- a/compositor/ShellWindowWrapper.qml +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright 2014 Pier Luigi Fiorini - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU Library General Public License as - * published by the Free Software Foundation; either version 2, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Library General Public License for more details - * - * You should have received a copy of the GNU Library General Public - * License along with this program; if not, write to the - * Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - */ - -import QtQuick 2.0 - -WindowWrapper { - objectName: "shellWindow" -} diff --git a/compositor/WindowManagement.js b/compositor/WindowManagement.js deleted file mode 100644 index ba5d6c68..00000000 --- a/compositor/WindowManagement.js +++ /dev/null @@ -1,280 +0,0 @@ -/* - * Copyright 2014 Pier Luigi Fiorini - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU Library General Public License as - * published by the Free Software Foundation; either version 2, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Library General Public License for more details - * - * You should have received a copy of the GNU Library General Public - * License along with this program; if not, write to the - * Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - */ - -/* - * Main procedures - */ - -function surfaceMapped(surface) { - // Determine if it's a shell window - var firstView = compositor.firstViewOf(surface); - var isShellWindow = - (typeof(firstView.role) != "undefined") || - (surface.className == "plasmashell.desktop"); - - // Print some information - if (surface.className == "maliit-server.desktop") { - console.debug("Keyboard surface", surface, "mapped"); - console.debug("\tappId:", surface.className); - console.debug("\ttitle:", surface.title); - console.debug("\tsize:", surface.size.width + "x" + surface.size.height); - } else if (isShellWindow) { - console.debug("Shell surface", surface, "mapped"); - console.debug("\trole:", firstView.role); - console.debug("\tsize:", surface.size.width + "x" + surface.size.height); - } else { - console.debug("Application surface", surface, "mapped"); - console.debug("\tappId:", surface.className); - console.debug("\ttitle:", surface.title); - console.debug("\tsize:", surface.size.width + "x" + surface.size.height); - } - - if (surface.className == "maliit-server.desktop") { - mapKeyboardSurface(surface); - // Call a specialized method to deal with application or - // shell windows - } else if (isShellWindow) - mapShellSurface(surface, firstView); - else - mapApplicationSurface(surface); -} - -function surfaceUnmapped(surface) { - // Determine if it's a shell window - var firstView = compositor.firstViewOf(surface); - var isShellWindow = - (typeof(firstView.role) != "undefined") || - (surface.className == "plasmashell.desktop"); - - // Print some information - if (typeof(firstView.role) == "undefined") { - console.debug("Shell surface", surface, "unmapped"); - console.debug("\trole:", firstView.role); - console.debug("\tsize:", surface.size.width + "x" + surface.size.height); - } else { - console.debug("Application surface", surface, "unmapped"); - console.debug("\tappId:", surface.className); - console.debug("\ttitle:", surface.title); - } - - //Is it maliit? - if (surface.className == "maliit-server.desktop") { - unmapKeyboardSurface(surface); - // Call a specialized method to deal with application or - // shell windows - } else if (isShellWindow) - unmapShellSurface(surface); - else - unmapApplicationSurface(surface); -} - -function surfaceDestroyed(surface) { - console.debug("Surface", surface, "destroyed"); - - // Remove surface from model - var i; - for (i = 0; i < surfaceModel.count; i++) { - var entry = surfaceModel.get(i); - - if (entry.surface === surface) { - // Destroy window representation and - // remove the surface from the model - if (entry.window.chrome) - entry.window.chrome.destroy(); - entry.window.destroy(); - surfaceModel.remove(i, 1); - break; - } - } -} - -/* - * Map surfaces - */ - -function mapApplicationSurface(surface) { - // Just exit if we already created a window representation - var i; - for (i = 0; i < surfaceModel.count; i++) { - var entry = surfaceModel.get(i); - - if (entry.surface === surface) { - // Ask the client to resize - surface.requestSize(window.parent.width, window.parent.height); - - return; - } - } - - // Create surface item - var component = Qt.createComponent("ClientWindowWrapper.qml"); - if (component.status !== Component.Ready) { - console.error(component.errorString()); - return; - } - - // Request a view for this output although with phones will - // likely have just one output - var child = compositor.viewForOutput(surface, _greenisland_output); - - child.resizeSurfaceToItem = true; - child.width = compositorRoot.layers.windows.width; - child.height = compositorRoot.layers.windows.height; - - // Create and setup window container - var window = component.createObject(compositorRoot.layers.windows, {"child": child}); - compositorRoot.layers.windows.addWindow(window); - window.child.parent = window; - window.child.touchEventsEnabled = true; - window.width = surface.size.width; - window.height = surface.size.height; - - // Switch to the applications layer and take focus - compositorRoot.state = "application"; - compositorRoot.currentWindow = window; - window.child.takeFocus(); - - // Run map animation - if (typeof(window.runMapAnimation) != "undefined") - window.runMapAnimation(); - - // Add surface to the model - surfaceModel.append({"surface": surface, "window": window}); -} - -function mapShellSurface(surface, child) { - // Shell surfaces have only one view which is passed to us - // as an argument, check whether it's a view for this output - // or not - if (child.output !== _greenisland_output) - return; - - // Just set z-index and exit if we already created a - // window representation - var i; - for (i = 0; i < surfaceModel.count; i++) { - var entry = surfaceModel.get(i); - - if (entry.surface === surface) { - // Switch to layer and take focus - if (surface.className == "plasmashell.desktop") { - compositorRoot.showPanel = true; - } else { - compositorRoot.state = "homeScreen"; - } - entry.window.child.takeFocus(); - - return; - } - } - - // Create surface item - var component = Qt.createComponent("ShellWindowWrapper.qml"); - if (component.status !== Component.Ready) { - console.error(component.errorString()); - return; - } - - // Create and setup window container - // XXX: We only support desktop roles for now - var window = component.createObject(compositorRoot, {"child": child}); - window.parent = (surface.className == "plasmashell.desktop") ? compositorRoot.layers.panel : compositorRoot.layers.desktop; - window.child.parent = window; - window.child.touchEventsEnabled = true; - window.x = window.y = 0; - window.width = surface.size.width; - window.height = surface.size.height; - - // Switch to the desktop layer and take focus - compositorRoot.showSplash = false; - if (surface.className == "plasmashell.desktop") { - compositorRoot.showPanel = true; - } else { - compositorRoot.state = "homeScreen"; - compositorRoot.shellWindow = window; - } - window.child.takeFocus(); - - // Add surface to the model - surfaceModel.append({"surface": surface, "window": window}); -} - -function mapKeyboardSurface(surface) { - // Just exit if we already created a window representation - var i; - for (i = 0; i < surfaceModel.count; i++) { - var entry = surfaceModel.get(i); - - if (entry.surface === surface) { - compositorRoot.showKeyboard = true; - - return; - } - } - - // Create surface item - var component = Qt.createComponent("ShellWindowWrapper.qml"); - if (component.status !== Component.Ready) { - console.error(component.errorString()); - return; - } - - // Request a view for this output although with phones will - // likely have just one output - var child = compositor.viewForOutput(surface, _greenisland_output); - - // Create and setup window container - var window = component.createObject(compositorRoot.layers.keyboard, {"child": child}); - window.parent = compositorRoot.layers.keyboard; - window.child.parent = window; - window.child.touchEventsEnabled = true; - window.width = surface.size.width; - window.height = surface.size.height; - window.y = compositorRoot.layers.keyboard.height - window.height; - - // Add surface to the model - surfaceModel.append({"surface": surface, "window": window}); - compositorRoot.showKeyboard = true; -} - - -/* - * Unmap surfaces - */ - -function unmapApplicationSurface(surface) { - // Reactivate home layer as soon as an application window is unmapped - compositorRoot.state = "homeScreen"; - compositorRoot.currentWindow = null; -} - -function unmapShellSurface(surface) { - // Hide panel layer if this is the sliding panel - if (surface.className == "plasmashell.desktop") { - compositorRoot.showPanel = false; - } -} - -function unmapKeyboardSurface(surface) { - if (compositorRoot.currentWindow) { - compositorRoot.currentWindow.child.height = compositorRoot.layers.windows.height; - } - - compositorRoot.showKeyboard = false; -} diff --git a/compositor/WindowWrapper.qml b/compositor/WindowWrapper.qml deleted file mode 100644 index 69d68ee9..00000000 --- a/compositor/WindowWrapper.qml +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright 2014 Pier Luigi Fiorini - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU Library General Public License as - * published by the Free Software Foundation; either version 2, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Library General Public License for more details - * - * You should have received a copy of the GNU Library General Public - * License along with this program; if not, write to the - * Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - */ - -import QtQuick 2.0 -import QtCompositor 1.0 -import GreenIsland 1.0 - -Item { - property var child - property var role: child.surface.windowProperties.role - - id: window - onVisibleChanged: { - if (child) - child.surface.clientRenderingEnabled = visible; - } - - SurfaceRenderer { - anchors.fill: parent - source: child - } - - Connections { - target: child.surface - onSizeChanged: { - window.width = child.surface.size.width; - window.height = child.surface.size.height; - } - } - - function close() { - if (!child || !child.surface) - return; - - child.surface.client.close(); - window.destroy(); - } -} diff --git a/compositor/klogo.png b/compositor/klogo.png deleted file mode 100644 index b467f5072d44de4d1d9a5c9cd040a81d052b8de0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23345 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 E1-QXljQ{`u diff --git a/services/CMakeLists.txt b/services/CMakeLists.txt index e6f2facd..f0122473 100644 --- a/services/CMakeLists.txt +++ b/services/CMakeLists.txt @@ -14,6 +14,5 @@ plasma_phone_install_service(kded5) plasma_phone_install_service(kdeinit5) plasma_phone_install_service(kglobalaccel5) plasma_phone_install_service(kuiserver5) -plasma_phone_install_service(plasma-phone-compositor) plasma_phone_install_service(plasma-phone-ui) plasma_phone_install_service(plasma-phone) diff --git a/services/plasma-phone-compositor.service.cmake b/services/plasma-phone-compositor.service.cmake deleted file mode 100644 index a10f52a8..00000000 --- a/services/plasma-phone-compositor.service.cmake +++ /dev/null @@ -1,22 +0,0 @@ -# -# Copyright (C) 2014 Pier Luigi Fiorini -# -# Starts Green Island with the phone compositor plugin. -# - -[Unit] -Description=Green Island -Requires=dbus.socket pre-user-session.target -After=pre-user-session.target -Conflicts=maui-bootsplash.service - -[Service] -Type=notify -Environment=DBUS_SESSION_BUS_ADDRESS=unix:path=%t/dbus/user_bus_socket -EnvironmentFile=-/var/lib/environment/compositor/*.conf -EnvironmentFile=-/var/lib/environment/greenisland/*.conf -ExecStart=@CMAKE_INSTALL_FULL_BINDIR@/greenisland $LIPSTICK_OPTIONS -p org.kde.plasma.compositor.phone -Restart=on-failure - -[Install] -WantedBy=user-session.target diff --git a/services/plasma-phone-ui.service.cmake b/services/plasma-phone-ui.service.cmake index 7c81c85c..8229f996 100644 --- a/services/plasma-phone-ui.service.cmake +++ b/services/plasma-phone-ui.service.cmake @@ -6,8 +6,8 @@ [Unit] Description=Plasma Phone UI -Requires=dbus.socket plasma-phone-compositor.service -After=plasma-phone-compositor.service +Requires=dbus.socket +After= [Service] Environment=DBUS_SESSION_BUS_ADDRESS=unix:path=%t/dbus/user_bus_socket