61
61
#include "gsm-fail-whale-dialog.h"
62
62
#include "gsm-icon-names.h"
63
63
#include "gsm-inhibit-dialog.h"
64
#include "gsm-consolekit.h"
64
#include "gsm-system.h"
65
65
#include "gsm-session-save.h"
66
#include "gsm-shell-extensions.h"
67
68
#define GSM_MANAGER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GSM_TYPE_MANAGER, GsmManagerPrivate))
276
277
const gchar *app_id;
277
gboolean want_extensions_ui;
278
278
gboolean allow_logout;
280
GsmShellExtensions *extensions;
280
282
app_id = gsm_app_peek_app_id (app);
281
want_extensions_ui = g_str_equal (app_id, "gnome-shell.desktop");
283
if (gsm_consolekit_is_current_session_login ()) {
284
if (g_str_equal (app_id, "gnome-shell.desktop")) {
285
extensions = g_object_new (GSM_TYPE_SHELL_EXTENSIONS, NULL);
286
gsm_shell_extensions_disable_all (extensions);
291
system = gsm_get_system ();
292
if (gsm_system_is_login_session (system)) {
284
293
allow_logout = FALSE;
286
295
allow_logout = !_log_out_is_locked_down (manager);
297
g_object_unref (system);
289
299
gsm_fail_whale_dialog_we_failed (FALSE,
345
_find_by_startup_id (const char *id,
347
const char *startup_id_a)
355
_client_has_startup_id (const char *id,
357
const char *startup_id_a)
349
359
const char *startup_id_b;
370
380
client = (GsmClient *)gsm_store_find (manager->priv->clients,
371
(GsmStoreFunc)_find_by_startup_id,
381
(GsmStoreFunc)_client_has_startup_id,
372
382
(char *)gsm_app_peek_startup_id (app));
459
469
static void start_phase (GsmManager *manager);
462
quit_request_completed (GsmConsolekit *consolekit,
472
quit_request_completed (GsmSystem *system,
466
476
GdmLogoutAction fallback_action = GPOINTER_TO_INT (user_data);
490
500
case GSM_MANAGER_LOGOUT_REBOOT_INTERACT:
491
501
gdm_set_logout_action (GDM_LOGOUT_ACTION_NONE);
493
consolekit = gsm_get_consolekit ();
494
g_signal_connect (consolekit,
503
system = gsm_get_system ();
504
g_signal_connect (system,
495
505
"request-completed",
496
506
G_CALLBACK (quit_request_completed),
497
507
GINT_TO_POINTER (GDM_LOGOUT_ACTION_NONE));
498
gsm_consolekit_attempt_restart (consolekit);
508
gsm_system_attempt_restart (system);
500
510
case GSM_MANAGER_LOGOUT_REBOOT_GDM:
501
511
gdm_set_logout_action (GDM_LOGOUT_ACTION_REBOOT);
505
515
case GSM_MANAGER_LOGOUT_SHUTDOWN_INTERACT:
506
516
gdm_set_logout_action (GDM_LOGOUT_ACTION_NONE);
508
consolekit = gsm_get_consolekit ();
509
g_signal_connect (consolekit,
518
system = gsm_get_system ();
519
g_signal_connect (system,
510
520
"request-completed",
511
521
G_CALLBACK (quit_request_completed),
512
522
GINT_TO_POINTER (GDM_LOGOUT_ACTION_NONE));
513
gsm_consolekit_attempt_stop (consolekit);
523
gsm_system_attempt_stop (system);
515
525
case GSM_MANAGER_LOGOUT_SHUTDOWN_GDM:
516
526
gdm_set_logout_action (GDM_LOGOUT_ACTION_SHUTDOWN);
596
app_event_during_startup (GsmManager *manager,
599
if (!(manager->priv->phase < GSM_MANAGER_PHASE_APPLICATION))
602
manager->priv->pending_apps = g_slist_remove (manager->priv->pending_apps, app);
604
if (manager->priv->pending_apps == NULL) {
605
if (manager->priv->phase_timeout_id > 0) {
606
g_source_remove (manager->priv->phase_timeout_id);
607
manager->priv->phase_timeout_id = 0;
615
_restart_app (GsmManager *manager,
618
GError *error = NULL;
620
if (!gsm_app_restart (app, &error)) {
621
if (is_app_required (manager, app)) {
622
on_required_app_failure (manager, app);
624
g_warning ("Error on restarting session managed app: %s", error->message);
626
g_clear_error (&error);
628
app_event_during_startup (manager, app);
586
633
app_died (GsmApp *app,
587
635
GsmManager *manager)
589
GError *error = NULL;
591
manager->priv->pending_apps = g_slist_remove (manager->priv->pending_apps, app);
592
g_signal_handlers_disconnect_by_func (app, app_registered, manager);
594
g_warning ("Application '%s' killed by signal", gsm_app_peek_app_id (app));
637
g_warning ("Application '%s' killed by signal %d", gsm_app_peek_app_id (app), signal);
596
639
if (gsm_app_peek_autorestart (app)) {
597
640
g_debug ("Component '%s' is autorestart, ignoring died signal",
602
if (!gsm_app_restart (app, &error)) {
603
if (is_app_required (manager, app)) {
604
on_required_app_failure (manager, app);
606
g_warning ("Error on restarting session managed app: %s", error->message);
608
g_clear_error (&error);
645
_restart_app (manager, app);
611
647
/* For now, we don't do anything with crashes from
612
648
* non-required apps after they hit the restart limit.
658
app_exited (GsmApp *app,
662
g_debug ("App %s exited with %d", gsm_app_peek_app_id (app), exit_code);
664
app_event_during_startup (manager, app);
622
668
app_registered (GsmApp *app,
623
669
GsmManager *manager)
625
671
g_debug ("App %s registered", gsm_app_peek_app_id (app));
627
manager->priv->pending_apps = g_slist_remove (manager->priv->pending_apps, app);
628
g_signal_handlers_disconnect_by_func (app, app_registered, manager);
630
if (manager->priv->pending_apps == NULL) {
631
if (manager->priv->phase_timeout_id > 0) {
632
g_source_remove (manager->priv->phase_timeout_id);
633
manager->priv->phase_timeout_id = 0;
673
app_event_during_startup (manager, app);
664
700
GsmApp *app = a->data;
665
701
g_warning ("Application '%s' failed to register before timeout",
666
702
gsm_app_peek_app_id (app));
667
g_signal_handlers_disconnect_by_func (app, app_registered, manager);
668
703
if (is_app_required (manager, app))
669
704
on_required_app_failure (manager, app);
1854
1887
g_debug ("GsmManager: restarting app");
1857
res = gsm_app_restart (app, &error);
1859
if (is_app_required (manager, app)) {
1860
on_required_app_failure (manager, app);
1862
g_warning ("Error on restarting session managed app: %s", error->message);
1864
g_clear_error (&error);
1889
_restart_app (manager, app);
1868
1892
g_object_unref (client);
1970
1993
debug_inhibitors (manager);
1972
n_removed = gsm_store_foreach_remove (manager->priv->inhibitors,
1973
(GsmStoreFunc)inhibitor_has_bus_name,
1995
gsm_store_foreach_remove (manager->priv->inhibitors,
1996
(GsmStoreFunc)inhibitor_has_bus_name,
2076
2099
return manager->priv->failsafe;
2080
_client_has_startup_id (const char *id,
2082
const char *startup_id_a)
2084
const char *startup_id_b;
2086
startup_id_b = gsm_client_peek_startup_id (client);
2088
if (IS_STRING_EMPTY (startup_id_b)) {
2092
return (strcmp (startup_id_a, startup_id_b) == 0);
2096
2103
on_client_disconnected (GsmClient *client,
2097
2104
GsmManager *manager)
2179
2186
maybe_save_session (GsmManager *manager)
2183
if (gsm_consolekit_is_current_session_login ())
2192
system = gsm_get_system ();
2193
is_login = gsm_system_is_login_session (system);
2194
g_object_unref (system);
2186
2198
/* We only allow session saving when session is running or when
2723
2735
GsmManager *manager)
2725
GsmConsolekit *consolekit;
2727
consolekit = gsm_get_consolekit ();
2728
gsm_consolekit_set_session_idle (consolekit,
2729
(status == GSM_PRESENCE_STATUS_IDLE));
2739
system = gsm_get_system ();
2740
gsm_system_set_session_idle (system,
2741
(status == GSM_PRESENCE_STATUS_IDLE));
2742
g_object_unref (system);
2732
2745
static gboolean
3394
3407
g_return_val_if_fail (GSM_IS_MANAGER (manager), FALSE);
3396
consolekit = gsm_get_consolekit ();
3409
system = gsm_get_system ();
3397
3410
*shutdown_available = !_log_out_is_locked_down (manager) &&
3398
(gsm_consolekit_can_stop (consolekit)
3399
|| gsm_consolekit_can_restart (consolekit)
3411
(gsm_system_can_stop (system)
3412
|| gsm_system_can_restart (system)
3401
3414
|| can_hibernate);
3402
g_object_unref (consolekit);
3415
g_object_unref (system);