From 3227d4f3edade8d20a79c4c201b8c618230ba2b6 Mon Sep 17 00:00:00 2001 From: Giovanni Campagna Date: Sun, 19 Jan 2014 18:34:32 +0100 Subject: [PATCH] ShellApp+ShellGlobal: unify app launch context code Extend shell_global_create_app_launch_context() with the required parameters and use that for shell_app_launch() too. https://bugzilla.gnome.org/show_bug.cgi?id=669603 --- js/misc/util.js | 2 +- js/ui/components/autorunManager.js | 2 +- js/ui/components/telepathyClient.js | 2 +- js/ui/dateMenu.js | 2 +- js/ui/lookingGlass.js | 4 ++-- js/ui/messageTray.js | 2 +- js/ui/remoteSearch.js | 2 +- js/ui/runDialog.js | 2 +- src/shell-app.c | 34 +++++------------------------ src/shell-global.c | 17 ++++++++++----- src/shell-global.h | 4 +++- 11 files changed, 30 insertions(+), 43 deletions(-) diff --git a/js/misc/util.js b/js/misc/util.js index 9965c5a8f..ba5de4a75 100644 --- a/js/misc/util.js +++ b/js/misc/util.js @@ -89,7 +89,7 @@ function spawnApp(argv) { let app = Gio.AppInfo.create_from_commandline(argv.join(' '), null, Gio.AppInfoCreateFlags.SUPPORTS_STARTUP_NOTIFICATION); - let context = global.create_app_launch_context(); + let context = global.create_app_launch_context(0, -1); app.launch([], context); } catch(err) { _handleSpawnError(argv[0], err); diff --git a/js/ui/components/autorunManager.js b/js/ui/components/autorunManager.js index c58fa2e0d..66077cbf3 100644 --- a/js/ui/components/autorunManager.js +++ b/js/ui/components/autorunManager.js @@ -64,7 +64,7 @@ function startAppForMount(app, mount) { try { retval = app.launch(files, - global.create_app_launch_context()) + global.create_app_launch_context(0, -1)) } catch (e) { log('Unable to launch the application ' + app.get_name() + ': ' + e.toString()); diff --git a/js/ui/components/telepathyClient.js b/js/ui/components/telepathyClient.js index 56fc2d0fd..e69c2a18e 100644 --- a/js/ui/components/telepathyClient.js +++ b/js/ui/components/telepathyClient.js @@ -1339,7 +1339,7 @@ const AccountNotification = new Lang.Class({ let cmd = 'empathy-accounts --select-account=' + account.get_path_suffix(); let app_info = Gio.app_info_create_from_commandline(cmd, null, 0); - app_info.launch([], global.create_app_launch_context()); + app_info.launch([], global.create_app_launch_context(0, -1)); })); this._enabledId = account.connect('notify::enabled', diff --git a/js/ui/dateMenu.js b/js/ui/dateMenu.js index d851ed2bd..ab7f26db8 100644 --- a/js/ui/dateMenu.js +++ b/js/ui/dateMenu.js @@ -211,7 +211,7 @@ const DateMenuButton = 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()); + app.launch([], global.create_app_launch_context(0, -1)); }, _onOpenClocksActivate: function() { diff --git a/js/ui/lookingGlass.js b/js/ui/lookingGlass.js index a126d81af..5c54d931b 100644 --- a/js/ui/lookingGlass.js +++ b/js/ui/lookingGlass.js @@ -670,13 +670,13 @@ const Extensions = new Lang.Class({ _onViewSource: function (actor) { let extension = actor._extension; let uri = extension.dir.get_uri(); - Gio.app_info_launch_default_for_uri(uri, global.create_app_launch_context()); + Gio.app_info_launch_default_for_uri(uri, global.create_app_launch_context(0, -1)); this._lookingGlass.close(); }, _onWebPage: function (actor) { let extension = actor._extension; - Gio.app_info_launch_default_for_uri(extension.metadata.url, global.create_app_launch_context()); + Gio.app_info_launch_default_for_uri(extension.metadata.url, global.create_app_launch_context(0, -1)); this._lookingGlass.close(); }, diff --git a/js/ui/messageTray.js b/js/ui/messageTray.js index f3806b7e6..53e838eb4 100644 --- a/js/ui/messageTray.js +++ b/js/ui/messageTray.js @@ -203,7 +203,7 @@ const URLHighlighter = new Lang.Class({ if (url.indexOf(':') == -1) url = 'http://' + url; - Gio.app_info_launch_default_for_uri(url, global.create_app_launch_context()); + Gio.app_info_launch_default_for_uri(url, global.create_app_launch_context(0, -1)); return Clutter.EVENT_STOP; } return Clutter.EVENT_PROPAGATE; diff --git a/js/ui/remoteSearch.js b/js/ui/remoteSearch.js index 05a6ae927..26017018a 100644 --- a/js/ui/remoteSearch.js +++ b/js/ui/remoteSearch.js @@ -283,7 +283,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()); + this.appInfo.launch([], global.create_app_launch_context(0, -1)); } }); diff --git a/js/ui/runDialog.js b/js/ui/runDialog.js index 7d9925375..10cae4c36 100644 --- a/js/ui/runDialog.js +++ b/js/ui/runDialog.js @@ -233,7 +233,7 @@ const RunDialog = new Lang.Class({ let file = Gio.file_new_for_path(path); try { Gio.app_info_launch_default_for_uri(file.get_uri(), - global.create_app_launch_context()); + global.create_app_launch_context(0, -1)); } catch (e) { // The exception from gjs contains an error string like: // Error invoking Gio.app_info_launch_default_for_uri: No application diff --git a/src/shell-app.c b/src/shell-app.c index 283bd53e4..27f56af06 100644 --- a/src/shell-app.c +++ b/src/shell-app.c @@ -1185,32 +1185,6 @@ app_child_setup (gpointer user_data) } #endif -static GAppLaunchContext * -make_launch_context (guint timestamp, - int workspace) -{ - GdkAppLaunchContext *context; - ShellGlobal *global; - MetaScreen *screen; - GdkDisplay *gdisplay; - - global = shell_global_get (); - screen = shell_global_get_screen (global); - gdisplay = gdk_screen_get_display (shell_global_get_gdk_screen (global)); - - if (timestamp == 0) - timestamp = shell_global_get_current_time (global); - - if (workspace < 0) - workspace = meta_screen_get_active_workspace_index (screen); - - context = gdk_display_get_app_launch_context (gdisplay); - gdk_app_launch_context_set_timestamp (context, timestamp); - gdk_app_launch_context_set_desktop (context, workspace); - - return G_APP_LAUNCH_CONTEXT (context); -} - /** * shell_app_launch: * @timestamp: Event timestamp, or 0 for current event timestamp @@ -1223,6 +1197,7 @@ shell_app_launch (ShellApp *app, int workspace, GError **error) { + ShellGlobal *global; GAppLaunchContext *context; gboolean ret; @@ -1233,7 +1208,8 @@ shell_app_launch (ShellApp *app, return TRUE; } - context = make_launch_context (timestamp, workspace), + global = shell_global_get (); + context = shell_global_create_app_launch_context (global, timestamp, workspace); ret = g_desktop_app_info_launch_uris_as_manager (app->info, NULL, context, @@ -1264,9 +1240,11 @@ shell_app_launch_action (ShellApp *app, guint timestamp, int workspace) { + ShellGlobal *global; GAppLaunchContext *context; - context = make_launch_context (timestamp, workspace); + global = shell_global_get (); + context = shell_global_create_app_launch_context (global, timestamp, workspace); g_desktop_app_info_launch_action (G_DESKTOP_APP_INFO (app->info), action_name, context); diff --git a/src/shell-global.c b/src/shell-global.c index 849278d8b..f961dadae 100644 --- a/src/shell-global.c +++ b/src/shell-global.c @@ -1326,6 +1326,8 @@ shell_global_get_current_time (ShellGlobal *global) /** * shell_global_create_app_launch_context: * @global: A #ShellGlobal + * @timestamp: the timestamp for the launch (or 0 for current time) + * @workspace: a workspace index, or -1 to indicate the current one * * Create a #GAppLaunchContext set up with the correct timestamp, and * targeted to activate on the current workspace. @@ -1333,16 +1335,21 @@ shell_global_get_current_time (ShellGlobal *global) * Return value: (transfer full): A new #GAppLaunchContext */ GAppLaunchContext * -shell_global_create_app_launch_context (ShellGlobal *global) +shell_global_create_app_launch_context (ShellGlobal *global, + int timestamp, + int workspace) { GdkAppLaunchContext *context; context = gdk_display_get_app_launch_context (global->gdk_display); - gdk_app_launch_context_set_timestamp (context, shell_global_get_current_time (global)); - // Make sure that the app is opened on the current workspace even if - // the user switches before it starts - gdk_app_launch_context_set_desktop (context, meta_screen_get_active_workspace_index (global->meta_screen)); + if (timestamp == 0) + timestamp = shell_global_get_current_time (global); + gdk_app_launch_context_set_timestamp (context, timestamp); + + if (workspace < 0) + workspace = meta_screen_get_active_workspace_index (global->meta_screen); + gdk_app_launch_context_set_desktop (context, workspace); return (GAppLaunchContext *)context; } diff --git a/src/shell-global.h b/src/shell-global.h index ec4a08963..71bdf7d85 100644 --- a/src/shell-global.h +++ b/src/shell-global.h @@ -85,7 +85,9 @@ void shell_global_run_at_leisure (ShellGlobal *global, void shell_global_sync_pointer (ShellGlobal *global); GAppLaunchContext * - shell_global_create_app_launch_context (ShellGlobal *global); + shell_global_create_app_launch_context (ShellGlobal *global, + int timestamp, + int workspace); void shell_global_play_theme_sound (ShellGlobal *global, guint id,