diff -r -u ../libxfcegui4-svn/libxfcegui4/xfce-exec.c ./libxfcegui4/xfce-exec.c --- ../libxfcegui4-svn/libxfcegui4/xfce-exec.c 2005-12-18 16:27:38.000000000 +0100 +++ ./libxfcegui4/xfce-exec.c 2005-12-18 16:28:38.000000000 +0100 @@ -278,6 +278,7 @@ char **argv, gboolean in_terminal, gboolean use_sn, + gint workspace_nr, GError ** error, char **envp, gboolean async) @@ -303,7 +304,33 @@ free_envp = NULL; #ifdef HAVE_LIBSTARTUP_NOTIFICATION - if (use_sn) + if (workspace_nr > -1) + { + sn_display = sn_display_new (gdk_display, sn_error_trap_push, + sn_error_trap_pop); + + if (sn_display != NULL) + { + sn_context = + sn_launcher_context_new (sn_display, + gdk_screen_get_number (screen)); + if ((sn_context != NULL) + && !sn_launcher_context_get_initiated (sn_context)) + { + DBG("got workspace: %d", workspace_nr); + sn_launcher_context_set_workspace (sn_context, workspace_nr); + sn_launcher_context_set_binary_name (sn_context, argv[0]); + sn_launcher_context_initiate (sn_context, + g_get_prgname () ? + g_get_prgname () : "unknown", + argv[0], + CurrentTime); + free_envp = + make_spawn_environment_for_sn_context (sn_context, envp); + } + } + } + else if (use_sn) { sn_display = sn_display_new (gdk_display, sn_error_trap_push, sn_error_trap_pop); @@ -324,7 +351,7 @@ g_get_prgname () ? g_get_prgname () : "unknown", argv[0], - gtk_get_current_event_time ()); + CurrentTime); free_envp = make_spawn_environment_for_sn_context (sn_context, envp); } @@ -465,7 +492,7 @@ GError ** error) { return real_xfce_exec_with_envp (gdk_screen_get_default (), - argv, in_terminal, use_sn, error, + argv, in_terminal, use_sn, -1, error, environ, TRUE); } @@ -489,7 +516,7 @@ char **envp) { return real_xfce_exec_with_envp (gdk_screen_get_default (), - argv, in_terminal, use_sn, error, envp, + argv, in_terminal, use_sn, -1, error, envp, TRUE); } @@ -516,7 +543,7 @@ return FALSE; success = real_xfce_exec_with_envp (gdk_screen_get_default (), - argv, in_terminal, use_sn, error, + argv, in_terminal, use_sn, -1, error, environ, TRUE); g_strfreev (argv); return success; @@ -548,7 +575,7 @@ return FALSE; success = real_xfce_exec_with_envp (gdk_screen_get_default (), - argv, in_terminal, use_sn, error, envp, + argv, in_terminal, use_sn, -1, error, envp, TRUE); g_strfreev (argv); return success; @@ -577,7 +604,7 @@ return FALSE; success = real_xfce_exec_with_envp (gdk_screen_get_default (), - argv, in_terminal, use_sn, error, + argv, in_terminal, use_sn, -1, error, environ, FALSE); g_strfreev (argv); return success; @@ -609,7 +636,7 @@ return FALSE; success = real_xfce_exec_with_envp (gdk_screen_get_default (), - argv, in_terminal, use_sn, error, envp, + argv, in_terminal, use_sn, -1, error, envp, FALSE); g_strfreev (argv); return success; @@ -636,7 +663,7 @@ gboolean use_sn, GError ** error) { - return real_xfce_exec_with_envp (screen, argv, in_terminal, use_sn, error, + return real_xfce_exec_with_envp (screen, argv, in_terminal, use_sn, -1, error, environ, TRUE); } @@ -661,7 +688,7 @@ GError ** error, char **envp) { - return real_xfce_exec_with_envp (screen, argv, in_terminal, use_sn, error, + return real_xfce_exec_with_envp (screen, argv, in_terminal, use_sn, -1, error, envp, TRUE); } @@ -689,7 +716,7 @@ if (!(argv = xfce_exec_create_argv (cmd, in_terminal, error))) return FALSE; - success = real_xfce_exec_with_envp (screen, argv, in_terminal, use_sn, + success = real_xfce_exec_with_envp (screen, argv, in_terminal, use_sn, -1, error, environ, TRUE); g_strfreev (argv); return success; @@ -722,10 +749,42 @@ if (!(argv = xfce_exec_create_argv (cmd, in_terminal, error))) return FALSE; - success = real_xfce_exec_with_envp (screen, argv, in_terminal, use_sn, + success = real_xfce_exec_with_envp (screen, argv, in_terminal, use_sn, -1, error, envp, TRUE); g_strfreev (argv); return success; } +/* run on specific workspace */ +/** + * xfce_exec_on_workspace + * @screen : a #GdkScreen + * @cmd : command line to run + * @in_terminal : whether to run @cmd in a terminal + * @use_sn : whether to use startup notification + * @workspace : the workspace to start the program + * @error : location for a GError or NULL + * + * Use #xfce_exec_with_envp_on_workspace if you want to specify the environment. + * + * Returns: TRUE on success, FALSE on failure. + */ +gboolean xfce_exec_on_workspace (GdkScreen *screen, + const char *cmd, + gboolean in_terminal, + gboolean use_sn, + int workspace, + GError **error) +{ + char **argv; + gboolean success; + + if (!(argv = xfce_exec_create_argv (cmd, in_terminal, error))) + return FALSE; + + success = real_xfce_exec_with_envp (screen, argv, in_terminal, use_sn, workspace, + error, environ, TRUE); + g_strfreev (argv); + return success; +} diff -r -u ../libxfcegui4-svn/libxfcegui4/xfce-exec.h ./libxfcegui4/xfce-exec.h --- ../libxfcegui4-svn/libxfcegui4/xfce-exec.h 2005-12-18 16:27:38.000000000 +0100 +++ ./libxfcegui4/xfce-exec.h 2005-12-18 16:28:38.000000000 +0100 @@ -66,6 +66,14 @@ gboolean in_terminal, gboolean use_sn, GError ** error, char **envp); +/* run on specific workspace */ +gboolean xfce_exec_on_workspace (GdkScreen *screen, + const char *cmd, + gboolean in_terminal, + gboolean use_sn, + int workspace, + GError **error); + G_END_DECLS #endif /* _XFCE_EXEC_H */