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));
462
472
static void start_phase (GsmManager *manager);
465
quit_request_completed (GsmConsolekit *consolekit,
475
quit_request_completed (GsmSystem *system,
469
479
GdmLogoutAction fallback_action = GPOINTER_TO_INT (user_data);
493
503
case GSM_MANAGER_LOGOUT_REBOOT_INTERACT:
494
504
gdm_set_logout_action (GDM_LOGOUT_ACTION_NONE);
496
consolekit = gsm_get_consolekit ();
497
g_signal_connect (consolekit,
506
system = gsm_get_system ();
507
g_signal_connect (system,
498
508
"request-completed",
499
509
G_CALLBACK (quit_request_completed),
500
510
GINT_TO_POINTER (GDM_LOGOUT_ACTION_NONE));
501
gsm_consolekit_attempt_restart (consolekit);
511
gsm_system_attempt_restart (system);
503
513
case GSM_MANAGER_LOGOUT_REBOOT_GDM:
504
514
gdm_set_logout_action (GDM_LOGOUT_ACTION_REBOOT);
508
518
case GSM_MANAGER_LOGOUT_SHUTDOWN_INTERACT:
509
519
gdm_set_logout_action (GDM_LOGOUT_ACTION_NONE);
511
consolekit = gsm_get_consolekit ();
512
g_signal_connect (consolekit,
521
system = gsm_get_system ();
522
g_signal_connect (system,
513
523
"request-completed",
514
524
G_CALLBACK (quit_request_completed),
515
525
GINT_TO_POINTER (GDM_LOGOUT_ACTION_NONE));
516
gsm_consolekit_attempt_stop (consolekit);
526
gsm_system_attempt_stop (system);
518
528
case GSM_MANAGER_LOGOUT_SHUTDOWN_GDM:
519
529
gdm_set_logout_action (GDM_LOGOUT_ACTION_SHUTDOWN);
599
app_event_during_startup (GsmManager *manager,
602
if (!(manager->priv->phase < GSM_MANAGER_PHASE_APPLICATION))
605
manager->priv->pending_apps = g_slist_remove (manager->priv->pending_apps, app);
607
if (manager->priv->pending_apps == NULL) {
608
if (manager->priv->phase_timeout_id > 0) {
609
g_source_remove (manager->priv->phase_timeout_id);
610
manager->priv->phase_timeout_id = 0;
618
_restart_app (GsmManager *manager,
621
GError *error = NULL;
623
if (!gsm_app_restart (app, &error)) {
624
if (is_app_required (manager, app)) {
625
on_required_app_failure (manager, app);
627
g_warning ("Error on restarting session managed app: %s", error->message);
629
g_clear_error (&error);
631
app_event_during_startup (manager, app);
589
636
app_died (GsmApp *app,
590
638
GsmManager *manager)
592
GError *error = NULL;
594
manager->priv->pending_apps = g_slist_remove (manager->priv->pending_apps, app);
595
g_signal_handlers_disconnect_by_func (app, app_registered, manager);
597
g_warning ("Application '%s' killed by signal", gsm_app_peek_app_id (app));
640
g_warning ("Application '%s' killed by signal %d", gsm_app_peek_app_id (app), signal);
599
642
if (gsm_app_peek_autorestart (app)) {
600
643
g_debug ("Component '%s' is autorestart, ignoring died signal",
605
if (!gsm_app_restart (app, &error)) {
606
if (is_app_required (manager, app)) {
607
on_required_app_failure (manager, app);
609
g_warning ("Error on restarting session managed app: %s", error->message);
611
g_clear_error (&error);
648
_restart_app (manager, app);
614
650
/* For now, we don't do anything with crashes from
615
651
* non-required apps after they hit the restart limit.
661
app_exited (GsmApp *app,
665
g_debug ("App %s exited with %d", gsm_app_peek_app_id (app), exit_code);
667
app_event_during_startup (manager, app);
625
671
app_registered (GsmApp *app,
626
672
GsmManager *manager)
628
674
g_debug ("App %s registered", gsm_app_peek_app_id (app));
630
manager->priv->pending_apps = g_slist_remove (manager->priv->pending_apps, app);
631
g_signal_handlers_disconnect_by_func (app, app_registered, manager);
633
if (manager->priv->pending_apps == NULL) {
634
if (manager->priv->phase_timeout_id > 0) {
635
g_source_remove (manager->priv->phase_timeout_id);
636
manager->priv->phase_timeout_id = 0;
676
app_event_during_startup (manager, app);
667
703
GsmApp *app = a->data;
668
704
g_warning ("Application '%s' failed to register before timeout",
669
705
gsm_app_peek_app_id (app));
670
g_signal_handlers_disconnect_by_func (app, app_registered, manager);
671
706
if (is_app_required (manager, app))
672
707
on_required_app_failure (manager, app);
1901
1934
g_debug ("GsmManager: restarting app");
1904
res = gsm_app_restart (app, &error);
1906
if (is_app_required (manager, app)) {
1907
on_required_app_failure (manager, app);
1909
g_warning ("Error on restarting session managed app: %s", error->message);
1911
g_clear_error (&error);
1936
_restart_app (manager, app);
1915
1939
g_object_unref (client);
2017
2040
debug_inhibitors (manager);
2019
n_removed = gsm_store_foreach_remove (manager->priv->inhibitors,
2020
(GsmStoreFunc)inhibitor_has_bus_name,
2042
gsm_store_foreach_remove (manager->priv->inhibitors,
2043
(GsmStoreFunc)inhibitor_has_bus_name,
2123
2146
return manager->priv->failsafe;
2127
_client_has_startup_id (const char *id,
2129
const char *startup_id_a)
2131
const char *startup_id_b;
2133
startup_id_b = gsm_client_peek_startup_id (client);
2135
if (IS_STRING_EMPTY (startup_id_b)) {
2139
return (strcmp (startup_id_a, startup_id_b) == 0);
2143
2150
on_client_disconnected (GsmClient *client,
2144
2151
GsmManager *manager)
2226
2233
maybe_save_session (GsmManager *manager)
2230
if (gsm_consolekit_is_current_session_login ())
2239
system = gsm_get_system ();
2240
is_login = gsm_system_is_login_session (system);
2241
g_object_unref (system);
2233
2245
/* We only allow session saving when session is running or when
2770
2782
GsmManager *manager)
2772
GsmConsolekit *consolekit;
2774
consolekit = gsm_get_consolekit ();
2775
gsm_consolekit_set_session_idle (consolekit,
2776
(status == GSM_PRESENCE_STATUS_IDLE));
2786
system = gsm_get_system ();
2787
gsm_system_set_session_idle (system,
2788
(status == GSM_PRESENCE_STATUS_IDLE));
2789
g_object_unref (system);
2779
2792
static gboolean
3484
3497
g_return_val_if_fail (GSM_IS_MANAGER (manager), FALSE);
3486
consolekit = gsm_get_consolekit ();
3499
system = gsm_get_system ();
3487
3500
*shutdown_available = !_log_out_is_locked_down (manager) &&
3488
(gsm_consolekit_can_stop (consolekit)
3489
|| gsm_consolekit_can_restart (consolekit)
3501
(gsm_system_can_stop (system)
3502
|| gsm_system_can_restart (system)
3491
3504
|| can_hibernate);
3492
g_object_unref (consolekit);
3505
g_object_unref (system);