diff --git a/src/shell-app.c b/src/shell-app.c index 6c78d23b1..bf01a5292 100644 --- a/src/shell-app.c +++ b/src/shell-app.c @@ -7,6 +7,8 @@ #include "shell-global.h" #include "shell-enum-types.h" #include "display.h" +#include "st.h" +#include "shell-window-tracker.h" #include <string.h> @@ -733,6 +735,37 @@ _shell_app_set_starting (ShellApp *app, shell_app_state_transition (app, SHELL_APP_STATE_RUNNING); } +/** + * shell_app_request_quit: + * @app: A #ShellApp + * + * Initiate an asynchronous request to quit this application. + * The application may interact with the user, and the user + * might cancel the quit request from the application UI. + * + * This operation may not be supported for all applications. + * + * Returns: %TRUE if a quit request is supported for this application + */ +gboolean +shell_app_request_quit (ShellApp *app) +{ + GSList *iter; + + /* TODO - check for an XSMP connection; we could probably use that */ + + for (iter = app->windows; iter; iter = iter->next) + { + MetaWindow *win = iter->data; + + if (!shell_window_tracker_is_window_interesting (win)) + continue; + + meta_window_delete (win, shell_global_get_current_time (shell_global_get ())); + } + return TRUE; +} + static void shell_app_init (ShellApp *self) { diff --git a/src/shell-app.h b/src/shell-app.h index de969152f..22f612f1b 100644 --- a/src/shell-app.h +++ b/src/shell-app.h @@ -3,6 +3,7 @@ #define __SHELL_APP_H__ #include <clutter/clutter.h> +#include <gio/gio.h> #include "window.h" @@ -49,6 +50,8 @@ void shell_app_open_new_window (ShellApp *app); ShellAppState shell_app_get_state (ShellApp *app); +gboolean shell_app_request_quit (ShellApp *app); + guint shell_app_get_n_windows (ShellApp *app); GSList *shell_app_get_windows (ShellApp *app);