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:
parent
7e27afb645
commit
3227d4f3ed
@ -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);
|
||||||
|
@ -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());
|
||||||
|
@ -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',
|
||||||
|
@ -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() {
|
||||||
|
@ -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();
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -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;
|
||||||
|
@ -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));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
@ -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);
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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,
|
||||||
|
Loading…
Reference in New Issue
Block a user