72
72
#include <libwnck/libwnck.h>
74
#include "xfsm-shutdown-helper.h"
75
74
#include <libxfce4ui/libxfce4ui.h>
77
76
#include <libxfsm/xfsm-splash-engine.h>
78
77
#include <libxfsm/xfsm-util.h>
80
#include "xfsm-manager.h"
81
#include "chooser-icon.h"
82
#include "xfsm-chooser.h"
83
#include "xfsm-global.h"
84
#include "xfsm-legacy.h"
85
#include "xfsm-startup.h"
86
#include "xfsm-marshal.h"
87
#include "xfsm-error.h"
79
#include <xfce4-session/xfsm-manager.h>
80
#include <xfce4-session/xfsm-chooser-icon.h>
81
#include <xfce4-session/xfsm-chooser.h>
82
#include <xfce4-session/xfsm-global.h>
83
#include <xfce4-session/xfsm-legacy.h>
84
#include <xfce4-session/xfsm-startup.h>
85
#include <xfce4-session/xfsm-marshal.h>
86
#include <xfce4-session/xfsm-error.h>
87
#include <xfce4-session/xfsm-logout-dialog.h>
90
90
#define DEFAULT_SESSION_NAME "Default"
225
229
manager->session_chooser = FALSE;
226
230
manager->failsafe_mode = TRUE;
227
231
manager->shutdown_type = XFSM_SHUTDOWN_LOGOUT;
232
manager->shutdown_helper = xfsm_shutdown_get ();
229
234
manager->pending_properties = g_queue_new ();
230
235
manager->starting_properties = g_queue_new ();
243
248
if (manager->die_timeout_id != 0)
244
249
g_source_remove (manager->die_timeout_id);
251
g_object_unref (manager->shutdown_helper);
246
253
g_queue_foreach (manager->pending_properties, (GFunc) xfsm_properties_free, NULL);
247
254
g_queue_free (manager->pending_properties);
730
737
manager->compat_gnome = xfconf_channel_get_bool (channel, "/compat/LaunchGNOME", FALSE);
731
738
manager->compat_kde = xfconf_channel_get_bool (channel, "/compat/LaunchKDE", FALSE);
739
manager->start_at = xfconf_channel_get_bool (channel, "/general/StartAssistiveTechnologies", FALSE);
733
741
display_name = xfsm_gdk_display_get_fullname (gdk_display_get_default ());
763
771
/* tell splash screen that the session is starting now */
764
772
preview = xfsm_load_session_preview (manager->session_name);
765
773
if (preview == NULL)
766
preview = gdk_pixbuf_new_from_inline (-1, chooser_icon_data, FALSE, NULL);
774
preview = gdk_pixbuf_new_from_inline (-1, xfsm_chooser_icon_data, FALSE, NULL);
767
775
steps = g_queue_get_length (manager->failsafe_mode ? manager->failsafe_clients : manager->pending_properties);
768
776
xfsm_splash_screen_start (splash_screen, manager->session_name, preview, steps);
769
777
g_object_unref (preview);
1091
1100
/* if we're not specifying fast shutdown, and we're ok with
1092
1101
* prompting then ask the user what to do */
1093
if (!shutdownDialog (manager->session_name, &manager->shutdown_type, &shutdown_save))
1102
if (!xfsm_logout_dialog (manager->session_name, &manager->shutdown_type, &shutdown_save))
1096
1105
/* |allow_shutdown_save| is ignored if we prompt the user. i think
1107
1116
if (manager->shutdown_type == XFSM_SHUTDOWN_SUSPEND
1108
1117
|| manager->shutdown_type == XFSM_SHUTDOWN_HIBERNATE)
1110
XfsmShutdownHelper *shutdown_helper;
1111
GError *error = NULL;
1113
shutdown_helper = xfsm_shutdown_helper_new ();
1115
if (!xfsm_shutdown_helper_send_command (shutdown_helper,
1116
manager->shutdown_type,
1119
if (!xfsm_shutdown_try_type (manager->shutdown_helper,
1120
manager->shutdown_type,
1119
1123
xfce_message_dialog (NULL, _("Shutdown Failed"),
1120
1124
GTK_STOCK_DIALOG_ERROR,
1127
1131
g_error_free (error);
1130
/* clean up and return */
1131
g_object_unref (shutdown_helper);
1134
1134
/* at this point, either we failed to suspend/hibernate, or we
1135
1135
* successfully suspended/hibernated, and we've been woken back
1136
1136
* up, so return control to the user */
1140
#if defined(__NR_ioprio_set) && defined(HAVE_SYNC)
1141
/* if we're on Linux and have ioprio_set(), we start sync()ing the
1142
* disks now, and set the i/o priority to idle so we don't create
1143
* a poor user experience if any apps need to interact with the user
1144
* during shutdown. if we *don't* have ioprio_set(), we sync at the
1145
* end of shutdown, right before quitting.
1147
if (shutdown == TRUE && fork () == 0)
1152
if(!syscall (__NR_ioprio_set, IOPRIO_WHO_PROCESS, getpid (),
1153
IOPRIO_PRIO_VALUE (IOPRIO_CLASS_IDLE, 0)))
1157
_exit (EXIT_SUCCESS);
1161
1141
if (!shutdown || shutdown_save)
1797
1785
static gboolean xfsm_manager_dbus_checkpoint (XfsmManager *manager,
1798
1786
const gchar *session_name,
1799
1787
GError **error);
1788
static gboolean xfsm_manager_dbus_logout (XfsmManager *manager,
1789
gboolean show_dialog,
1790
gboolean allow_save,
1800
1792
static gboolean xfsm_manager_dbus_shutdown (XfsmManager *manager,
1802
1793
gboolean allow_save,
1803
1794
GError **error);
1795
static gboolean xfsm_manager_dbus_can_shutdown (XfsmManager *manager,
1796
gboolean *can_shutdown,
1798
static gboolean xfsm_manager_dbus_restart (XfsmManager *manager,
1799
gboolean allow_save,
1801
static gboolean xfsm_manager_dbus_can_restart (XfsmManager *manager,
1802
gboolean *can_restart,
1804
static gboolean xfsm_manager_dbus_suspend (XfsmManager *manager,
1806
static gboolean xfsm_manager_dbus_can_suspend (XfsmManager *manager,
1807
gboolean *can_suspend,
1809
static gboolean xfsm_manager_dbus_hibernate (XfsmManager *manager,
1811
static gboolean xfsm_manager_dbus_can_hibernate (XfsmManager *manager,
1812
gboolean *can_hibernate,
1806
1816
/* eader needs the above fwd decls */
1807
#include "xfsm-manager-dbus.h"
1817
#include <xfce4-session/xfsm-manager-dbus.h>
1991
if (type > XFSM_SHUTDOWN_HIBERNATE)
1993
g_set_error (error, XFSM_ERROR, XFSM_ERROR_BAD_VALUE,
1994
_("Invalid shutdown type \"%u\""), type);
1998
2001
idata = g_new (ShutdownIdleData, 1);
1999
2002
idata->manager = manager;
2000
2003
idata->type = type;
2013
xfsm_manager_dbus_logout (XfsmManager *manager,
2014
gboolean show_dialog,
2015
gboolean allow_save,
2018
XfsmShutdownType type;
2020
g_return_val_if_fail (XFSM_IS_MANAGER (manager), FALSE);
2022
type = show_dialog ? XFSM_SHUTDOWN_ASK : XFSM_SHUTDOWN_LOGOUT;
2023
return xfsm_manager_save_yourself_dbus (manager, type,
2029
xfsm_manager_dbus_shutdown (XfsmManager *manager,
2030
gboolean allow_save,
2033
g_return_val_if_fail (XFSM_IS_MANAGER (manager), FALSE);
2034
return xfsm_manager_save_yourself_dbus (manager, XFSM_SHUTDOWN_SHUTDOWN,
2040
xfsm_manager_dbus_can_shutdown (XfsmManager *manager,
2041
gboolean *can_shutdown,
2044
g_return_val_if_fail (XFSM_IS_MANAGER (manager), FALSE);
2045
return xfsm_shutdown_can_shutdown (manager->shutdown_helper,
2046
can_shutdown, error);
2051
xfsm_manager_dbus_restart (XfsmManager *manager,
2052
gboolean allow_save,
2055
g_return_val_if_fail (XFSM_IS_MANAGER (manager), FALSE);
2056
return xfsm_manager_save_yourself_dbus (manager, XFSM_SHUTDOWN_RESTART,
2062
xfsm_manager_dbus_can_restart (XfsmManager *manager,
2063
gboolean *can_restart,
2066
g_return_val_if_fail (XFSM_IS_MANAGER (manager), FALSE);
2067
return xfsm_shutdown_can_restart (manager->shutdown_helper,
2068
can_restart, error);
2073
xfsm_manager_dbus_suspend (XfsmManager *manager,
2076
g_return_val_if_fail (XFSM_IS_MANAGER (manager), FALSE);
2077
return xfsm_shutdown_try_suspend (manager->shutdown_helper, error);
2082
xfsm_manager_dbus_can_suspend (XfsmManager *manager,
2083
gboolean *can_suspend,
2087
gboolean auth_suspend;
2089
g_return_val_if_fail (XFSM_IS_MANAGER (manager), FALSE);
2090
retval = xfsm_shutdown_can_suspend (manager->shutdown_helper,
2091
can_suspend, &auth_suspend, error);
2094
*can_suspend = FALSE;
2100
xfsm_manager_dbus_hibernate (XfsmManager *manager,
2103
g_return_val_if_fail (XFSM_IS_MANAGER (manager), FALSE);
2104
return xfsm_shutdown_try_hibernate (manager->shutdown_helper, error);
2109
xfsm_manager_dbus_can_hibernate (XfsmManager *manager,
2110
gboolean *can_hibernate,
2114
gboolean auth_hibernate;
2116
g_return_val_if_fail (XFSM_IS_MANAGER (manager), FALSE);
2117
retval = xfsm_shutdown_can_hibernate (manager->shutdown_helper,
2118
can_hibernate, &auth_hibernate, error);
2120
if (!auth_hibernate)
2121
*can_hibernate = FALSE;