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
This commit is contained in:
Giovanni Campagna 2014-01-19 18:34:32 +01:00
parent 7e27afb645
commit 3227d4f3ed
11 changed files with 30 additions and 43 deletions

View File

@ -89,7 +89,7 @@ function spawnApp(argv) {
let app = Gio.AppInfo.create_from_commandline(argv.join(' '), null, let app = Gio.AppInfo.create_from_commandline(argv.join(' '), null,
Gio.AppInfoCreateFlags.SUPPORTS_STARTUP_NOTIFICATION); Gio.AppInfoCreateFlags.SUPPORTS_STARTUP_NOTIFICATION);
let context = global.create_app_launch_context(); let context = global.create_app_launch_context(0, -1);
app.launch([], context); app.launch([], context);
} catch(err) { } catch(err) {
_handleSpawnError(argv[0], err); _handleSpawnError(argv[0], err);

View File

@ -64,7 +64,7 @@ function startAppForMount(app, mount) {
try { try {
retval = app.launch(files, retval = app.launch(files,
global.create_app_launch_context()) global.create_app_launch_context(0, -1))
} catch (e) { } catch (e) {
log('Unable to launch the application ' + app.get_name() log('Unable to launch the application ' + app.get_name()
+ ': ' + e.toString()); + ': ' + e.toString());

View File

@ -1339,7 +1339,7 @@ const AccountNotification = new Lang.Class({
let cmd = 'empathy-accounts --select-account=' + let cmd = 'empathy-accounts --select-account=' +
account.get_path_suffix(); account.get_path_suffix();
let app_info = Gio.app_info_create_from_commandline(cmd, null, 0); 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', this._enabledId = account.connect('notify::enabled',

View File

@ -211,7 +211,7 @@ const DateMenuButton = new Lang.Class({
let app = this._getCalendarApp(); let app = this._getCalendarApp();
if (app.get_id() == 'evolution.desktop') if (app.get_id() == 'evolution.desktop')
app = Gio.DesktopAppInfo.new('evolution-calendar.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() { _onOpenClocksActivate: function() {

View File

@ -670,13 +670,13 @@ const Extensions = new Lang.Class({
_onViewSource: function (actor) { _onViewSource: function (actor) {
let extension = actor._extension; let extension = actor._extension;
let uri = extension.dir.get_uri(); 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(); this._lookingGlass.close();
}, },
_onWebPage: function (actor) { _onWebPage: function (actor) {
let extension = actor._extension; 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(); this._lookingGlass.close();
}, },

View File

@ -203,7 +203,7 @@ const URLHighlighter = new Lang.Class({
if (url.indexOf(':') == -1) if (url.indexOf(':') == -1)
url = 'http://' + url; 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_STOP;
} }
return Clutter.EVENT_PROPAGATE; return Clutter.EVENT_PROPAGATE;

View File

@ -283,7 +283,7 @@ const RemoteSearchProvider = new Lang.Class({
// the provider is not compatible with the new version of the interface, launch // 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 // the app itself but warn so we can catch the error in logs
log('Search provider ' + this.appInfo.get_id() + ' does not implement LaunchSearch'); 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));
} }
}); });

View File

@ -233,7 +233,7 @@ const RunDialog = new Lang.Class({
let file = Gio.file_new_for_path(path); let file = Gio.file_new_for_path(path);
try { try {
Gio.app_info_launch_default_for_uri(file.get_uri(), Gio.app_info_launch_default_for_uri(file.get_uri(),
global.create_app_launch_context()); global.create_app_launch_context(0, -1));
} catch (e) { } catch (e) {
// The exception from gjs contains an error string like: // The exception from gjs contains an error string like:
// Error invoking Gio.app_info_launch_default_for_uri: No application // Error invoking Gio.app_info_launch_default_for_uri: No application

View File

@ -1185,32 +1185,6 @@ app_child_setup (gpointer user_data)
} }
#endif #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: * shell_app_launch:
* @timestamp: Event timestamp, or 0 for current event timestamp * @timestamp: Event timestamp, or 0 for current event timestamp
@ -1223,6 +1197,7 @@ shell_app_launch (ShellApp *app,
int workspace, int workspace,
GError **error) GError **error)
{ {
ShellGlobal *global;
GAppLaunchContext *context; GAppLaunchContext *context;
gboolean ret; gboolean ret;
@ -1233,7 +1208,8 @@ shell_app_launch (ShellApp *app,
return TRUE; 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, ret = g_desktop_app_info_launch_uris_as_manager (app->info, NULL,
context, context,
@ -1264,9 +1240,11 @@ shell_app_launch_action (ShellApp *app,
guint timestamp, guint timestamp,
int workspace) int workspace)
{ {
ShellGlobal *global;
GAppLaunchContext *context; 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), g_desktop_app_info_launch_action (G_DESKTOP_APP_INFO (app->info),
action_name, context); action_name, context);

View File

@ -1326,6 +1326,8 @@ shell_global_get_current_time (ShellGlobal *global)
/** /**
* shell_global_create_app_launch_context: * shell_global_create_app_launch_context:
* @global: A #ShellGlobal * @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 * Create a #GAppLaunchContext set up with the correct timestamp, and
* targeted to activate on the current workspace. * 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 * Return value: (transfer full): A new #GAppLaunchContext
*/ */
GAppLaunchContext * GAppLaunchContext *
shell_global_create_app_launch_context (ShellGlobal *global) shell_global_create_app_launch_context (ShellGlobal *global,
int timestamp,
int workspace)
{ {
GdkAppLaunchContext *context; GdkAppLaunchContext *context;
context = gdk_display_get_app_launch_context (global->gdk_display); 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 if (timestamp == 0)
// the user switches before it starts timestamp = shell_global_get_current_time (global);
gdk_app_launch_context_set_desktop (context, meta_screen_get_active_workspace_index (global->meta_screen)); 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; return (GAppLaunchContext *)context;
} }

View File

@ -85,7 +85,9 @@ void shell_global_run_at_leisure (ShellGlobal *global,
void shell_global_sync_pointer (ShellGlobal *global); void shell_global_sync_pointer (ShellGlobal *global);
GAppLaunchContext * 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, void shell_global_play_theme_sound (ShellGlobal *global,
guint id, guint id,