[gnome-shell] shell-app: Add "discrete_gpu" option when launching apps
- From: Bastien Nocera <hadess src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-shell] shell-app: Add "discrete_gpu" option when launching apps
- Date: Fri, 21 Oct 2016 17:31:01 +0000 (UTC)
commit 39a840e2c3da5dc55059e25ccf8d80f2240c66cc
Author: Bastien Nocera <hadess hadess net>
Date: Wed Oct 19 15:43:37 2016 +0200
shell-app: Add "discrete_gpu" option when launching apps
And adapt existing callers to the new API. This will allow us to
implement a way to launch applications on the discrete GPU for systems
where an "Optimus" system exists.
https://bugzilla.gnome.org/show_bug.cgi?id=773117
js/misc/util.js | 2 +-
js/ui/calendar.js | 2 +-
js/ui/components/autorunManager.js | 3 ++-
js/ui/remoteSearch.js | 2 +-
js/ui/status/network.js | 2 +-
src/shell-app.c | 8 ++++++--
src/shell-app.h | 1 +
7 files changed, 13 insertions(+), 7 deletions(-)
---
diff --git a/js/misc/util.js b/js/misc/util.js
index 748c7b7..7c6d111 100644
--- a/js/misc/util.js
+++ b/js/misc/util.js
@@ -94,7 +94,7 @@ function spawnApp(argv) {
Gio.AppInfoCreateFlags.SUPPORTS_STARTUP_NOTIFICATION);
let context = global.create_app_launch_context(0, -1);
- app.launch([], context);
+ app.launch([], context, false);
} catch(err) {
_handleSpawnError(argv[0], err);
}
diff --git a/js/ui/calendar.js b/js/ui/calendar.js
index ec3732e..2ed8126 100644
--- a/js/ui/calendar.js
+++ b/js/ui/calendar.js
@@ -902,7 +902,7 @@ const EventsSection = new Lang.Class({
let app = this._getCalendarApp();
if (app.get_id() == 'evolution.desktop')
app = Gio.DesktopAppInfo.new('evolution-calendar.desktop');
- app.launch([], global.create_app_launch_context(0, -1));
+ app.launch([], global.create_app_launch_context(0, -1), false);
},
setDate: function(date) {
diff --git a/js/ui/components/autorunManager.js b/js/ui/components/autorunManager.js
index 90a2961..4fd08f9 100644
--- a/js/ui/components/autorunManager.js
+++ b/js/ui/components/autorunManager.js
@@ -64,7 +64,8 @@ function startAppForMount(app, mount) {
try {
retval = app.launch(files,
- global.create_app_launch_context(0, -1))
+ global.create_app_launch_context(0, -1),
+ false)
} catch (e) {
log('Unable to launch the application ' + app.get_name()
+ ': ' + e.toString());
diff --git a/js/ui/remoteSearch.js b/js/ui/remoteSearch.js
index efe6bc2..baeaa12 100644
--- a/js/ui/remoteSearch.js
+++ b/js/ui/remoteSearch.js
@@ -297,7 +297,7 @@ const RemoteSearchProvider = new Lang.Class({
// the provider is not compatible with the new version of the interface, launch
// the app itself but warn so we can catch the error in logs
log('Search provider ' + this.appInfo.get_id() + ' does not implement LaunchSearch');
- this.appInfo.launch([], global.create_app_launch_context(0, -1));
+ this.appInfo.launch([], global.create_app_launch_context(0, -1), false);
}
});
diff --git a/js/ui/status/network.js b/js/ui/status/network.js
index 9f4293a..a9cc4d1 100644
--- a/js/ui/status/network.js
+++ b/js/ui/status/network.js
@@ -1501,7 +1501,7 @@ const NMVPNSection = new Lang.Class({
if (nItems > 1) {
let appSys = Shell.AppSystem.get_default();
let app = appSys.lookup_app('gnome-network-panel.desktop');
- app.launch(0, -1);
+ app.launch(0, -1, false);
} else {
let connection = this._connections[0];
Util.spawnApp(['gnome-control-center', 'network', 'show-device',
diff --git a/src/shell-app.c b/src/shell-app.c
index 7f61dc3..b383d9c 100644
--- a/src/shell-app.c
+++ b/src/shell-app.c
@@ -505,7 +505,7 @@ shell_app_activate_full (ShellApp *app,
case SHELL_APP_STATE_STOPPED:
{
GError *error = NULL;
- if (!shell_app_launch (app, timestamp, workspace, &error))
+ if (!shell_app_launch (app, timestamp, workspace, FALSE, &error))
{
char *msg;
msg = g_strdup_printf (_("Failed to launch ā%sā"), shell_app_get_name (app));
@@ -549,7 +549,7 @@ shell_app_open_new_window (ShellApp *app,
* as say Pidgin. Ideally, we have the application express to us
* that it supports an explicit new-window action.
*/
- shell_app_launch (app, 0, workspace, NULL);
+ shell_app_launch (app, 0, workspace, FALSE, NULL);
}
/**
@@ -1200,12 +1200,14 @@ app_child_setup (gpointer user_data)
* shell_app_launch:
* @timestamp: Event timestamp, or 0 for current event timestamp
* @workspace: Start on this workspace, or -1 for default
+ * @discrete_gpu: Whether to start on the discrete GPU
* @error: A #GError
*/
gboolean
shell_app_launch (ShellApp *app,
guint timestamp,
int workspace,
+ gboolean discrete_gpu,
GError **error)
{
ShellGlobal *global;
@@ -1227,6 +1229,8 @@ shell_app_launch (ShellApp *app,
global = shell_global_get ();
context = shell_global_create_app_launch_context (global, timestamp, workspace);
+ if (discrete_gpu)
+ g_app_launch_context_setenv (context, "DRI_PRIME", "1");
ret = g_desktop_app_info_launch_uris_as_manager (app->info, NULL,
context,
diff --git a/src/shell-app.h b/src/shell-app.h
index 7fc582a..f02f53a 100644
--- a/src/shell-app.h
+++ b/src/shell-app.h
@@ -54,6 +54,7 @@ gboolean shell_app_is_on_workspace (ShellApp *app, MetaWorkspace *workspace);
gboolean shell_app_launch (ShellApp *app,
guint timestamp,
int workspace,
+ gboolean discrete_gpu,
GError **error);
void shell_app_launch_action (ShellApp *app,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]