on cc4e572 help sign in
unity8/Components/ApplicationManagerWrapper.qml
139 lines 5.8 kB history raw
1/*
2 * Copyright (C) 2013 Canonical, Ltd.
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; version 3.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
17import QtQuick 2.0
18import Ubuntu.Application 0.1
20Item {
21 id: applicationManager
23 property var mainStageApplications: ApplicationManager.mainStageApplications
24 property var sideStageApplications: ApplicationManager.sideStageApplications
25 property var mainStageFocusedApplication: ApplicationManager.mainStageFocusedApplication
26 property var sideStageFocusedApplication: ApplicationManager.sideStageFocusedApplication
27 property bool sideStageEnabled: true
28 signal focusRequested(string desktopFile)
29 property bool keyboardVisible: ApplicationManager.keyboardVisible
30 property int keyboardHeight: ApplicationManager.keyboardHeight
32 property bool fake: ApplicationManager.fake ? ApplicationManager.fake : false
34 Component.onCompleted: {
35 // Start the watcher so that the ApplicationManager applications model can be populated.
36 ApplicationManager.startWatcher();
37 }
39 function activateApplication(desktopFile, argument) {
40 var application;
41 application = getApplicationFromDesktopFile(desktopFile, ApplicationInfo.MainStage);
42 if (application == null) {
43 application = getApplicationFromDesktopFile(desktopFile, ApplicationInfo.SideStage);
44 }
45 if (application != null) {
46 return application;
47 }
49 var execFlags = sideStageEnabled ? ApplicationManager.NoFlag : ApplicationManager.ForceMainStage;
51 if (argument) {
52 return ApplicationManager.startProcess(desktopFile, execFlags, [argument]);
53 } else {
54 return ApplicationManager.startProcess(desktopFile, execFlags);
55 }
56 }
58 function stopProcess(application) {
59 ApplicationManager.stopProcess(application)
60 }
62 function focusApplication(application) {
63 if (application == null || application == undefined) {
64 return;
65 }
67 ApplicationManager.focusApplication(application.handle);
68 }
70 function unfocusCurrentApplication() {
71 ApplicationManager.unfocusCurrentApplication(ApplicationInfo.MainStage);
72 }
74 function moveRunningApplicationStackPosition(from, to, stage) {
75 var applications;
76 if (stage == ApplicationInfo.SideStage) {
77 applications = ApplicationManager.sideStageApplications;
78 } else {
79 applications = ApplicationManager.mainStageApplications;
80 }
81 // FIXME: applications.move(0, 0) crashes
82 if (from !== to && from >= 0 && to >= 0) applications.move(from, to);
83 }
85 function getApplicationFromDesktopFile(desktopFile, stage) {
86 var foundSideStageApp, foundMainStageApp;
88 foundMainStageApp = __find(desktopFile, ApplicationManager.mainStageApplications)
89 if (stage == ApplicationInfo.MainStage) {
90 return foundMainStageApp;
91 }
92 foundSideStageApp = __find(desktopFile, ApplicationManager.sideStageApplications)
93 if (stage == ApplicationInfo.SideStage) {
94 return foundSideStageApp;
95 }
97 // if stage not specified, return whichever app running on either stage
98 return (foundMainStageApp) ? foundMainStageApp : foundSideStageApp;
101 function __find(desktopFile, applications) {
102 for (var i = 0; i < applications.count; i++ ) {
103 var application = applications.get(i);
104 if (application.desktopFile == desktopFile) {
105 return application;
106 }
107 }
108 return null;
109 }
110 }
112 Connections {
113 target: ApplicationManager
114 onFocusRequested: {
115 // FIXME: hardcoded mapping from ApplicationManager.FavoriteApplications
116 // enum to desktop files
117 var desktopFile
118 if (favoriteApplication == ApplicationManager.CameraApplication) {
119 desktopFile = "/usr/share/applications/camera-app.desktop"
120 } else if (favoriteApplication == ApplicationManager.GalleryApplication) {
121 desktopFile = "/usr/share/applications/gallery-app.desktop"
122 } else if (favoriteApplication == ApplicationManager.ShareApplication) {
123 desktopFile = "/usr/share/applications/share-app.desktop"
124 } else if (favoriteApplication == ApplicationManager.BrowserApplication) {
125 desktopFile = "/usr/share/applications/webbrowser-app.desktop"
126 } else if (favoriteApplication == ApplicationManager.PhoneApplication) {
127 desktopFile = "/usr/share/applications/phone-app.desktop"
128 } else if (favoriteApplication == ApplicationManager.DialerApplication) {
129 desktopFile = "/usr/share/applications/dialer-app.desktop"
130 } else if (favoriteApplication == ApplicationManager.MessagingApplication) {
131 desktopFile = "/usr/share/applications/messaging-app.desktop"
132 } else if (favoriteApplication == ApplicationManager.AddressbookApplication) {
133 desktopFile = "/usr/share/applications/address-book-app.desktop"
134 }
136 applicationManager.focusRequested(desktopFile);
137 }
138 }