*** a/common/xfpm-enum-glib.h 2019-04-19 20:56:07.011083198 +0200
--- b/common/xfpm-enum-glib.h 2019-04-19 21:54:39.778802114 +0200
***************
*** 43,48 ****
--- 43,49 ----
{
XFPM_DO_NOTHING,
XFPM_DO_SUSPEND,
+ XFPM_DO_HYBRID_SLEEP,
XFPM_DO_HIBERNATE,
XFPM_ASK,
XFPM_DO_SHUTDOWN
***************
*** 53,58 ****
--- 54,60 ----
{
LID_TRIGGER_NOTHING,
LID_TRIGGER_SUSPEND,
+ LID_TRIGGER_HYBRID_SLEEP,
LID_TRIGGER_HIBERNATE,
LID_TRIGGER_LOCK_SCREEN,
*** a/settings/xfpm-settings-app.c 2019-04-19 20:56:07.022083391 +0200
--- b/settings/xfpm-settings-app.c 2019-04-19 21:55:41.480861187 +0200
***************
*** 130,137 ****
--- 130,139 ----
gboolean has_battery;
gboolean auth_suspend;
+ gboolean auth_hybrid_sleep;
gboolean auth_hibernate;
gboolean can_suspend;
+ gboolean can_hybrid_sleep;
gboolean can_hibernate;
gboolean can_shutdown;
gboolean has_lcd_brightness;
***************
*** 242,249 ****
--- 244,253 ----
has_battery = xfpm_string_to_bool (g_hash_table_lookup (hash, "has-battery"));
has_lid = xfpm_string_to_bool (g_hash_table_lookup (hash, "has-lid"));
can_suspend = xfpm_string_to_bool (g_hash_table_lookup (hash, "can-suspend"));
+ can_hybrid_sleep = xfpm_string_to_bool (g_hash_table_lookup (hash, "can-hybrid-sleep"));
can_hibernate = xfpm_string_to_bool (g_hash_table_lookup (hash, "can-hibernate"));
auth_suspend = xfpm_string_to_bool (g_hash_table_lookup (hash, "auth-suspend"));
+ auth_hybrid_sleep = xfpm_string_to_bool (g_hash_table_lookup (hash, "auth-hybrid-sleep"));
auth_hibernate = xfpm_string_to_bool (g_hash_table_lookup (hash, "auth-hibernate"));
has_lcd_brightness = xfpm_string_to_bool (g_hash_table_lookup (hash, "has-brightness"));
has_sleep_button = xfpm_string_to_bool (g_hash_table_lookup (hash, "sleep-button"));
***************
*** 255,262 ****
DBG("socket_id %i", (int)priv->socket_id);
DBG("device id %s", priv->device_id);
! dialog = xfpm_settings_dialog_new (channel, auth_suspend, auth_hibernate,
! can_suspend, can_hibernate, can_shutdown, has_battery, has_lcd_brightness,
has_lid, has_sleep_button, has_hibernate_button, has_power_button, has_battery_button,
priv->socket_id, priv->device_id, GTK_APPLICATION (app));
--- 259,266 ----
DBG("socket_id %i", (int)priv->socket_id);
DBG("device id %s", priv->device_id);
! dialog = xfpm_settings_dialog_new (channel, auth_suspend, auth_hybrid_sleep, auth_hibernate,
! can_suspend, can_hybrid_sleep, can_hibernate, can_shutdown, has_battery, has_lcd_brightness,
has_lid, has_sleep_button, has_hibernate_button, has_power_button, has_battery_button,
priv->socket_id, priv->device_id, GTK_APPLICATION (app));
*** a/settings/xfpm-settings.c 2019-04-19 20:56:07.022083391 +0200
--- b/settings/xfpm-settings.c 2019-04-19 22:20:46.175538378 +0200
***************
*** 882,888 ****
static void
xfpm_settings_on_battery (XfconfChannel *channel, gboolean auth_suspend,
! gboolean auth_hibernate, gboolean can_suspend,
gboolean can_hibernate, gboolean can_shutdown,
gboolean has_lcd_brightness, gboolean has_lid)
{
--- 882,889 ----
static void
xfpm_settings_on_battery (XfconfChannel *channel, gboolean auth_suspend,
! gboolean auth_hybrid_sleep, gboolean auth_hibernate,
! gboolean can_suspend, gboolean can_hybrid_sleep,
gboolean can_hibernate, gboolean can_shutdown,
gboolean has_lcd_brightness, gboolean has_lid)
{
***************
*** 919,924 ****
--- 920,939 ----
gtk_widget_set_tooltip_text (inact_action, _("Suspend operation not supported"));
}
+ if ( can_hybrid_sleep )
+ {
+ gtk_list_store_append (list_store, &iter);
+ gtk_list_store_set (list_store, &iter, 0, _("Hybrid Sleep"), 1, XFPM_DO_HYBRID_SLEEP, -1);
+ }
+ else if ( !auth_hybrid_sleep )
+ {
+ gtk_widget_set_tooltip_text (inact_action, _("Hybrid Sleep not permitted"));
+ }
+ else
+ {
+ gtk_widget_set_tooltip_text (inact_action, _("Hybrid Sleep not supported"));
+ }
+
if ( can_hibernate )
{
gtk_list_store_append (list_store, &iter);
***************
*** 990,995 ****
--- 1005,1016 ----
gtk_list_store_set (list_store, &iter, 0, _("Suspend"), 1, XFPM_DO_SUSPEND, -1);
}
+ if ( can_hybrid_sleep && auth_hybrid_sleep )
+ {
+ gtk_list_store_append(list_store, &iter);
+ gtk_list_store_set (list_store, &iter, 0, _("Hybrid Sleep"), 1, XFPM_DO_HYBRID_SLEEP, -1);
+ }
+
if ( can_hibernate && auth_hibernate )
{
gtk_list_store_append(list_store, &iter);
***************
*** 1052,1058 ****
gtk_list_store_set (list_store, &iter, 0, _("Suspend"), 1, LID_TRIGGER_SUSPEND, -1);
}
! if ( can_hibernate && auth_hibernate)
{
gtk_list_store_append(list_store, &iter);
gtk_list_store_set (list_store, &iter, 0, _("Hibernate"), 1, LID_TRIGGER_HIBERNATE, -1);
--- 1073,1085 ----
gtk_list_store_set (list_store, &iter, 0, _("Suspend"), 1, LID_TRIGGER_SUSPEND, -1);
}
! if ( can_hybrid_sleep && auth_hybrid_sleep )
! {
! gtk_list_store_append(list_store, &iter);
! gtk_list_store_set (list_store, &iter, 0, _("Hybrid Sleep"), 1, LID_TRIGGER_HYBRID_SLEEP, -1);
! }
!
! if ( can_hibernate && auth_hibernate )
{
gtk_list_store_append(list_store, &iter);
gtk_list_store_set (list_store, &iter, 0, _("Hibernate"), 1, LID_TRIGGER_HIBERNATE, -1);
***************
*** 1121,1127 ****
static void
xfpm_settings_on_ac (XfconfChannel *channel, gboolean auth_suspend,
! gboolean auth_hibernate, gboolean can_suspend,
gboolean can_hibernate, gboolean has_lcd_brightness,
gboolean has_lid)
{
--- 1148,1155 ----
static void
xfpm_settings_on_ac (XfconfChannel *channel, gboolean auth_suspend,
! gboolean auth_hybrid_sleep, gboolean auth_hibernate,
! gboolean can_suspend, gboolean can_hybrid_sleep,
gboolean can_hibernate, gboolean has_lcd_brightness,
gboolean has_lid)
{
***************
*** 1158,1163 ****
--- 1186,1205 ----
gtk_widget_set_tooltip_text (inact_action, _("Suspend operation not supported"));
}
+ if ( can_hybrid_sleep )
+ {
+ gtk_list_store_append (list_store, &iter);
+ gtk_list_store_set (list_store, &iter, 0, _("Hybrid Sleep"), 1, XFPM_DO_HYBRID_SLEEP, -1);
+ }
+ else if ( !auth_hybrid_sleep )
+ {
+ gtk_widget_set_tooltip_text (inact_action, _("Hybrid Sleep not permitted"));
+ }
+ else
+ {
+ gtk_widget_set_tooltip_text (inact_action, _("Hybrid Sleep not supported"));
+ }
+
if ( can_hibernate )
{
gtk_list_store_append (list_store, &iter);
***************
*** 1242,1247 ****
--- 1284,1295 ----
gtk_list_store_set (list_store, &iter, 0, _("Suspend"), 1, LID_TRIGGER_SUSPEND, -1);
}
+ if ( can_hybrid_sleep && auth_hybrid_sleep )
+ {
+ gtk_list_store_append(list_store, &iter);
+ gtk_list_store_set (list_store, &iter, 0, _("Hybrid Sleep"), 1, LID_TRIGGER_HYBRID_SLEEP, -1);
+ }
+
if ( can_hibernate && auth_hibernate )
{
gtk_list_store_append(list_store, &iter);
***************
*** 1313,1319 ****
static void
xfpm_settings_general (XfconfChannel *channel, gboolean auth_suspend,
! gboolean auth_hibernate, gboolean can_suspend,
gboolean can_hibernate, gboolean can_shutdown,
gboolean has_sleep_button, gboolean has_hibernate_button,
gboolean has_power_button, gboolean has_battery_button)
--- 1361,1368 ----
static void
xfpm_settings_general (XfconfChannel *channel, gboolean auth_suspend,
! gboolean auth_hybrid_sleep, gboolean auth_hibernate,
! gboolean can_suspend, gboolean can_hybrid_sleep,
gboolean can_hibernate, gboolean can_shutdown,
gboolean has_sleep_button, gboolean has_hibernate_button,
gboolean has_power_button, gboolean has_battery_button)
***************
*** 1358,1369 ****
gtk_list_store_append (list_store, &iter);
gtk_list_store_set (list_store, &iter, 0, _("Do nothing"), 1, XFPM_DO_NOTHING, -1);
! if ( can_suspend && auth_suspend)
{
gtk_list_store_append (list_store, &iter);
gtk_list_store_set (list_store, &iter, 0, _("Suspend"), 1, XFPM_DO_SUSPEND, -1);
}
if ( can_hibernate && auth_hibernate )
{
gtk_list_store_append (list_store, &iter);
--- 1407,1424 ----
gtk_list_store_append (list_store, &iter);
gtk_list_store_set (list_store, &iter, 0, _("Do nothing"), 1, XFPM_DO_NOTHING, -1);
! if ( can_suspend && auth_suspend )
{
gtk_list_store_append (list_store, &iter);
gtk_list_store_set (list_store, &iter, 0, _("Suspend"), 1, XFPM_DO_SUSPEND, -1);
}
+ if ( can_hybrid_sleep && auth_hybrid_sleep )
+ {
+ gtk_list_store_append(list_store, &iter);
+ gtk_list_store_set (list_store, &iter, 0, _("Hybrid Sleep"), 1, XFPM_DO_HYBRID_SLEEP, -1);
+ }
+
if ( can_hibernate && auth_hibernate )
{
gtk_list_store_append (list_store, &iter);
***************
*** 1415,1426 ****
gtk_list_store_append (list_store, &iter);
gtk_list_store_set (list_store, &iter, 0, _("Do nothing"), 1, XFPM_DO_NOTHING, -1);
! if ( can_suspend && auth_suspend)
{
gtk_list_store_append (list_store, &iter);
gtk_list_store_set (list_store, &iter, 0, _("Suspend"), 1, XFPM_DO_SUSPEND, -1);
}
if ( can_hibernate && auth_hibernate )
{
gtk_list_store_append (list_store, &iter);
--- 1470,1487 ----
gtk_list_store_append (list_store, &iter);
gtk_list_store_set (list_store, &iter, 0, _("Do nothing"), 1, XFPM_DO_NOTHING, -1);
! if ( can_suspend && auth_suspend )
{
gtk_list_store_append (list_store, &iter);
gtk_list_store_set (list_store, &iter, 0, _("Suspend"), 1, XFPM_DO_SUSPEND, -1);
}
+ if ( can_hybrid_sleep && auth_hybrid_sleep )
+ {
+ gtk_list_store_append(list_store, &iter);
+ gtk_list_store_set (list_store, &iter, 0, _("Hybrid Sleep"), 1, XFPM_DO_HYBRID_SLEEP, -1);
+ }
+
if ( can_hibernate && auth_hibernate )
{
gtk_list_store_append (list_store, &iter);
***************
*** 1473,1478 ****
--- 1534,1545 ----
gtk_list_store_set (list_store, &iter, 0, _("Suspend"), 1, XFPM_DO_SUSPEND, -1);
}
+ if ( can_hybrid_sleep && auth_hybrid_sleep )
+ {
+ gtk_list_store_append (list_store, &iter);
+ gtk_list_store_set (list_store, &iter, 0, _("Hybrid Sleep"), 1, XFPM_DO_HYBRID_SLEEP, -1);
+ }
+
if ( can_hibernate && auth_hibernate)
{
gtk_list_store_append (list_store, &iter);
***************
*** 1524,1529 ****
--- 1591,1602 ----
gtk_list_store_set (list_store, &iter, 0, _("Suspend"), 1, XFPM_DO_SUSPEND, -1);
}
+ if ( can_hybrid_sleep && auth_hybrid_sleep )
+ {
+ gtk_list_store_append (list_store, &iter);
+ gtk_list_store_set (list_store, &iter, 0, _("Hybrid Sleep"), 1, XFPM_DO_HYBRID_SLEEP, -1);
+ }
+
if ( can_hibernate && auth_hibernate)
{
gtk_list_store_append (list_store, &iter);
***************
*** 1558,1564 ****
static void
xfpm_settings_advanced (XfconfChannel *channel, gboolean auth_suspend,
! gboolean auth_hibernate, gboolean can_suspend,
gboolean can_hibernate, gboolean has_battery)
{
guint val;
--- 1631,1638 ----
static void
xfpm_settings_advanced (XfconfChannel *channel, gboolean auth_suspend,
! gboolean auth_hybrid_sleep, gboolean auth_hibernate,
! gboolean can_suspend, gboolean can_hybrid_sleep,
gboolean can_hibernate, gboolean has_battery)
{
guint val;
***************
*** 1709,1716 ****
}
static void xfpm_settings_light_locker (XfconfChannel *channel,
! gboolean auth_suspend, gboolean auth_hibernate,
! gboolean can_suspend, gboolean can_hibernate)
{
GSettingsSchemaSource *schema_source;
GSettingsSchema *schema;
--- 1783,1791 ----
}
static void xfpm_settings_light_locker (XfconfChannel *channel,
! gboolean auth_suspend, gboolean auth_hybrid_sleep,
! gboolean auth_hibernate, gboolean can_suspend,
! gboolean can_hybrid_sleep, gboolean can_hibernate)
{
GSettingsSchemaSource *schema_source;
GSettingsSchema *schema;
***************
*** 2248,2258 ****
GPtrArray *array = NULL;
guint i;
! #if UP_CHECK_VERSION(0, 99, 8)
array = up_client_get_devices2 (upower);
! #else
! array = up_client_get_devices (upower);
! #endif
if ( array )
{
--- 2323,2333 ----
GPtrArray *array = NULL;
guint i;
! #if UP_CHECK_VERSION(0, 99, 8)
array = up_client_get_devices2 (upower);
! #else
! array = up_client_get_devices (upower);
! #endif
if ( array )
{
***************
*** 2330,2336 ****
GtkWidget *
xfpm_settings_dialog_new (XfconfChannel *channel, gboolean auth_suspend,
! gboolean auth_hibernate, gboolean can_suspend,
gboolean can_hibernate, gboolean can_shutdown,
gboolean has_battery, gboolean has_lcd_brightness,
gboolean has_lid, gboolean has_sleep_button,
--- 2405,2412 ----
GtkWidget *
xfpm_settings_dialog_new (XfconfChannel *channel, gboolean auth_suspend,
! gboolean auth_hybrid_sleep, gboolean auth_hibernate,
! gboolean can_suspend, gboolean can_hybrid_sleep,
gboolean can_hibernate, gboolean can_shutdown,
gboolean has_battery, gboolean has_lcd_brightness,
gboolean has_lid, gboolean has_sleep_button,
***************
*** 2354,2368 ****
guint val;
GtkCssProvider *css_provider;
! XFPM_DEBUG ("auth_hibernate=%s auth_suspend=%s can_shutdown=%s can_suspend=%s can_hibernate=%s " \
"has_battery=%s has_lcd_brightness=%s has_lid=%s has_sleep_button=%s " \
"has_hibernate_button=%s has_power_button=%s has_battery_button=%s",
! xfpm_bool_to_string (has_battery), xfpm_bool_to_string (auth_hibernate),
! xfpm_bool_to_string (can_shutdown), xfpm_bool_to_string (auth_suspend),
! xfpm_bool_to_string (can_suspend), xfpm_bool_to_string (can_hibernate),
! xfpm_bool_to_string (has_lcd_brightness), xfpm_bool_to_string (has_lid),
! xfpm_bool_to_string (has_sleep_button), xfpm_bool_to_string (has_hibernate_button),
! xfpm_bool_to_string (has_power_button), xfpm_bool_to_string (has_battery_button));
xml = xfpm_builder_new_from_string (xfpm_settings_ui, &error);
--- 2430,2445 ----
guint val;
GtkCssProvider *css_provider;
! XFPM_DEBUG ("auth_hibernate=%s auth_suspend=%s auth_hybrid_sleep=%s can_shutdown=%s can_suspend=%s can_hybrid_sleep=%s can_hibernate=%s " \
"has_battery=%s has_lcd_brightness=%s has_lid=%s has_sleep_button=%s " \
"has_hibernate_button=%s has_power_button=%s has_battery_button=%s",
! xfpm_bool_to_string (has_battery), xfpm_bool_to_string (auth_hibernate),
! xfpm_bool_to_string (auth_hybrid_sleep), xfpm_bool_to_string (can_hybrid_sleep),
! xfpm_bool_to_string (can_shutdown), xfpm_bool_to_string (auth_suspend),
! xfpm_bool_to_string (can_suspend), xfpm_bool_to_string (can_hibernate),
! xfpm_bool_to_string (has_lcd_brightness), xfpm_bool_to_string (has_lid),
! xfpm_bool_to_string (has_sleep_button), xfpm_bool_to_string (has_hibernate_button),
! xfpm_bool_to_string (has_power_button), xfpm_bool_to_string (has_battery_button));
xml = xfpm_builder_new_from_string (xfpm_settings_ui, &error);
***************
*** 2472,2479 ****
--- 2549,2558 ----
xfpm_settings_on_ac (channel,
auth_suspend,
+ auth_hybrid_sleep,
auth_hibernate,
can_suspend,
+ can_hybrid_sleep,
can_hibernate,
has_lcd_brightness,
has_lid);
***************
*** 2481,2488 ****
--- 2560,2569 ----
if ( has_battery )
xfpm_settings_on_battery (channel,
auth_suspend,
+ auth_hybrid_sleep,
auth_hibernate,
can_suspend,
+ can_hybrid_sleep,
can_hibernate,
can_shutdown,
has_lcd_brightness,
***************
*** 2509,2521 ****
gtk_widget_hide (GTK_WIDGET (gtk_builder_get_object (xml ,"lid-plugged-in-header")));
}
! xfpm_settings_general (channel, auth_suspend, auth_hibernate, can_suspend, can_hibernate, can_shutdown,
! has_sleep_button, has_hibernate_button, has_power_button, has_battery_button);
! xfpm_settings_advanced (channel, auth_suspend, auth_hibernate, can_suspend, can_hibernate, has_battery);
/* Light Locker Integration */
! xfpm_settings_light_locker (channel, auth_suspend, auth_hibernate, can_suspend, can_hibernate);
/* END Light Locker Integration */
if ( !has_lcd_brightness )
--- 2590,2605 ----
gtk_widget_hide (GTK_WIDGET (gtk_builder_get_object (xml ,"lid-plugged-in-header")));
}
! xfpm_settings_general (channel, auth_suspend, auth_hybrid_sleep, auth_hibernate, can_suspend, can_hybrid_sleep,
! can_hibernate, can_shutdown, has_sleep_button, has_hibernate_button,
! has_power_button, has_battery_button);
! xfpm_settings_advanced (channel, auth_suspend, auth_hybrid_sleep, auth_hibernate, can_suspend, can_hybrid_sleep,
! can_hibernate, has_battery);
/* Light Locker Integration */
! xfpm_settings_light_locker (channel, auth_suspend, auth_hybrid_sleep, auth_hibernate, can_suspend,
! can_hybrid_sleep, can_hibernate);
/* END Light Locker Integration */
if ( !has_lcd_brightness )
*** a/settings/xfpm-settings.h 2019-04-19 20:56:07.023083408 +0200
--- b/settings/xfpm-settings.h 2019-04-19 21:24:46.250327496 +0200
***************
*** 26,33 ****
--- 26,35 ----
GtkWidget *xfpm_settings_dialog_new (XfconfChannel *channel,
gboolean auth_suspend,
+ gboolean auth_hybrid_sleep,
gboolean auth_hibernate,
gboolean can_suspend,
+ gboolean can_hybrid_sleep,
gboolean can_hibernate,
gboolean can_shutdown,
gboolean has_battery,
*** a/src/xfpm-pm-helper.c 2019-04-19 20:56:07.025083443 +0200
--- b/src/xfpm-pm-helper.c 2019-04-19 21:24:46.250327496 +0200
***************
*** 71,76 ****
--- 71,77 ----
#endif
#ifdef BACKEND_TYPE_LINUX
#define UP_BACKEND_SUSPEND_COMMAND "/usr/sbin/pm-suspend"
+ #define UP_BACKEND_HYBRID_SLEEP_COMMAND "/usr/sbin/pm-suspend-hybrid"
#define UP_BACKEND_HIBERNATE_COMMAND "/usr/sbin/pm-hibernate"
#endif
#ifdef BACKEND_TYPE_OPENBSD
***************
*** 136,146 ****
gint euid;
const gchar *pkexec_uid_str;
gboolean suspend = FALSE;
gboolean hibernate = FALSE;
const GOptionEntry options[] = {
! { "suspend", '\0', G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_NONE, &suspend, "Suspend the system", NULL },
! { "hibernate", '\0', G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_NONE, &hibernate, "Hibernate the system", NULL },
{ NULL }
};
--- 137,149 ----
gint euid;
const gchar *pkexec_uid_str;
gboolean suspend = FALSE;
+ gboolean hybridsleep = FALSE;
gboolean hibernate = FALSE;
const GOptionEntry options[] = {
! { "suspend", '\0', G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_NONE, &suspend, "Suspend the system", NULL },
! { "hybridsleep", '\0', G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_NONE, &hybridsleep, "Hybrid Suspend/sleep the system", NULL },
! { "hibernate", '\0', G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_NONE, &hibernate, "Hibernate the system", NULL },
{ NULL }
};
***************
*** 151,157 ****
g_option_context_free (context);
/* no input */
! if (!suspend && !hibernate) {
puts ("No valid option was specified");
return EXIT_CODE_ARGUMENTS_INVALID;
}
--- 154,160 ----
g_option_context_free (context);
/* no input */
! if (!suspend && !hybridsleep && !hibernate) {
puts ("No valid option was specified");
return EXIT_CODE_ARGUMENTS_INVALID;
}
***************
*** 181,186 ****
--- 184,198 ----
return EXIT_CODE_FAILED;
}
}
+ else if (hybridsleep)
+ {
+ if(run (UP_BACKEND_HYBRID_SLEEP_COMMAND))
+ {
+ return EXIT_CODE_SUCCESS;
+ } else {
+ return EXIT_CODE_FAILED;
+ }
+ }
else if (hibernate)
{
if(run (UP_BACKEND_HIBERNATE_COMMAND))
***************
*** 190,196 ****
return EXIT_CODE_FAILED;
}
}
-
/* how did we get here? */
return EXIT_CODE_FAILED;
}
--- 202,207 ----
*** a/src/xfpm-power.c 2019-04-19 20:56:07.023083408 +0200
--- b/src/xfpm-power.c 2019-04-19 22:09:17.186860748 +0200
***************
*** 115,120 ****
--- 115,121 ----
XfpmPolkit *polkit;
#endif
gboolean auth_suspend;
+ gboolean auth_hybrid_sleep;
gboolean auth_hibernate;
/* Properties */
***************
*** 124,129 ****
--- 125,131 ----
gboolean on_battery;
gchar *daemon_version;
gboolean can_suspend;
+ gboolean can_hybrid_sleep;
gboolean can_hibernate;
/**
***************
*** 139,146 ****
--- 141,150 ----
PROP_ON_LOW_BATTERY,
PROP_ON_BATTERY,
PROP_AUTH_SUSPEND,
+ PROP_AUTH_HYBRID_SLEEP,
PROP_AUTH_HIBERNATE,
PROP_CAN_SUSPEND,
+ PROP_CAN_HYBRID_SLEEP,
PROP_CAN_HIBERNATE,
PROP_HAS_LID,
PROP_PRESENTATION_MODE,
***************
*** 175,181 ****
check_for_consolekit2 (XfpmPower *power)
{
XfpmConsoleKit *console;
! gboolean can_suspend, can_hibernate;
g_return_val_if_fail (XFPM_IS_POWER (power), FALSE);
--- 179,185 ----
check_for_consolekit2 (XfpmPower *power)
{
XfpmConsoleKit *console;
! gboolean can_suspend; gboolean can_hybrid_sleep; gboolean can_hibernate;
g_return_val_if_fail (XFPM_IS_POWER (power), FALSE);
***************
*** 188,198 ****
"can-suspend", &can_suspend,
NULL);
g_object_get (G_OBJECT (console),
"can-hibernate", &can_hibernate,
NULL);
! /* ConsoleKit2 supports suspend and hibernate */
! if (can_suspend || can_hibernate)
{
return TRUE;
}
--- 192,205 ----
"can-suspend", &can_suspend,
NULL);
g_object_get (G_OBJECT (console),
+ "can-hybrid-sleep", &can_hybrid_sleep,
+ NULL);
+ g_object_get (G_OBJECT (console),
"can-hibernate", &can_hibernate,
NULL);
! /* ConsoleKit2 supports suspend, hybrid sleep or hibernate */
! if (can_suspend || can_hybrid_sleep || can_hibernate)
{
return TRUE;
}
***************
*** 204,215 ****
static void
xfpm_power_check_polkit_auth (XfpmPower *power)
{
! const char *suspend = NULL, *hibernate = NULL;
if (LOGIND_RUNNING())
{
XFPM_DEBUG ("using logind suspend backend");
! suspend = POLKIT_AUTH_SUSPEND_LOGIND;
! hibernate = POLKIT_AUTH_HIBERNATE_LOGIND;
}
else
{
--- 211,223 ----
static void
xfpm_power_check_polkit_auth (XfpmPower *power)
{
! const char *suspend = NULL, *hybrid_sleep = NULL, *hibernate = NULL;
if (LOGIND_RUNNING())
{
XFPM_DEBUG ("using logind suspend backend");
! suspend = POLKIT_AUTH_SUSPEND_LOGIND;
! hybrid_sleep = POLKIT_AUTH_HIBERNATE_LOGIND;
! hibernate = POLKIT_AUTH_HIBERNATE_LOGIND;
}
else
{
***************
*** 219,238 ****
if (check_for_consolekit2 (power))
{
XFPM_DEBUG ("using consolekit2 suspend backend");
! suspend = POLKIT_AUTH_SUSPEND_CONSOLEKIT2;
! hibernate = POLKIT_AUTH_HIBERNATE_CONSOLEKIT2;
}
else
{
XFPM_DEBUG ("using xfpm internal suspend backend");
! suspend = POLKIT_AUTH_SUSPEND_XFPM;
! hibernate = POLKIT_AUTH_HIBERNATE_XFPM;
}
}
}
power->priv->auth_suspend = xfpm_polkit_check_auth (power->priv->polkit,
suspend);
power->priv->auth_hibernate = xfpm_polkit_check_auth (power->priv->polkit,
hibernate);
}
--- 227,252 ----
if (check_for_consolekit2 (power))
{
XFPM_DEBUG ("using consolekit2 suspend backend");
! suspend = POLKIT_AUTH_SUSPEND_CONSOLEKIT2;
! hybrid_sleep = POLKIT_AUTH_HIBERNATE_CONSOLEKIT2;
! hibernate = POLKIT_AUTH_HIBERNATE_CONSOLEKIT2;
}
else
{
XFPM_DEBUG ("using xfpm internal suspend backend");
! suspend = POLKIT_AUTH_SUSPEND_XFPM;
! hybrid_sleep = POLKIT_AUTH_HIBERNATE_XFPM;
! hibernate = POLKIT_AUTH_HIBERNATE_XFPM;
}
}
}
power->priv->auth_suspend = xfpm_polkit_check_auth (power->priv->polkit,
suspend);
+ /* polkit doesn't seem to support hybrid-suspend auth check */
+ power->priv->auth_hybrid_sleep = xfpm_polkit_check_auth (power->priv->polkit,
+ hibernate);
+
power->priv->auth_hibernate = xfpm_polkit_check_auth (power->priv->polkit,
hibernate);
}
***************
*** 282,287 ****
--- 296,302 ----
*
* DaemonVersion 's'
* CanSuspend' 'b'
+ * CanHybridSleep' 'b'
* CanHibernate' 'b'
* OnBattery' 'b'
* OnLowBattery' 'b'
***************
*** 300,305 ****
--- 315,323 ----
g_object_get (G_OBJECT (power->priv->systemd),
"can-suspend", &power->priv->can_suspend,
NULL);
+ g_object_get (G_OBJECT (power->priv->systemd),
+ "can-hybrid-sleep", &power->priv->can_hybrid_sleep,
+ NULL);
g_object_get (G_OBJECT (power->priv->systemd),
"can-hibernate", &power->priv->can_hibernate,
NULL);
***************
*** 311,324 ****
g_object_get (G_OBJECT (power->priv->console),
"can-suspend", &power->priv->can_suspend,
NULL);
g_object_get (G_OBJECT (power->priv->console),
"can-hibernate", &power->priv->can_hibernate,
NULL);
}
else
{
! power->priv->can_suspend = xfpm_suspend_can_suspend ();
! power->priv->can_hibernate = xfpm_suspend_can_hibernate ();
}
}
--- 329,346 ----
g_object_get (G_OBJECT (power->priv->console),
"can-suspend", &power->priv->can_suspend,
NULL);
+ g_object_get (G_OBJECT (power->priv->console),
+ "can-hybrid-sleep", &power->priv->can_hybrid_sleep,
+ NULL);
g_object_get (G_OBJECT (power->priv->console),
"can-hibernate", &power->priv->can_hibernate,
NULL);
}
else
{
! power->priv->can_suspend = xfpm_suspend_can_suspend ();
! power->priv->can_hybrid_sleep = xfpm_suspend_can_hybrid_sleep ();
! power->priv->can_hibernate = xfpm_suspend_can_hibernate ();
}
}
***************
*** 922,932 ****
GPtrArray *array = NULL;
guint i;
! #if UP_CHECK_VERSION(0, 99, 8)
! array = up_client_get_devices2 (power->priv->upower);
! #else
! array = up_client_get_devices (power->priv->upower);
! #endif
if ( array )
{
--- 944,954 ----
GPtrArray *array = NULL;
guint i;
! #if UP_CHECK_VERSION(0, 99, 8)
! array = up_client_get_devices2 (power->priv->upower);
! #else
! array = up_client_get_devices (power->priv->upower);
! #endif
if ( array )
{
***************
*** 1143,1148 ****
--- 1165,1184 ----
G_PARAM_READABLE));
g_object_class_install_property (object_class,
+ PROP_CAN_HYBRID_SLEEP,
+ g_param_spec_boolean ("can-hybrid-sleep",
+ NULL, NULL,
+ FALSE,
+ G_PARAM_READABLE));
+
+ g_object_class_install_property (object_class,
+ PROP_AUTH_HYBRID_SLEEP,
+ g_param_spec_boolean ("auth-hybrid-sleep",
+ NULL, NULL,
+ FALSE,
+ G_PARAM_READABLE));
+
+ g_object_class_install_property (object_class,
PROP_PRESENTATION_MODE,
g_param_spec_boolean (PRESENTATION_MODE,
NULL, NULL,
***************
*** 1264,1269 ****
--- 1300,1308 ----
case PROP_AUTH_HIBERNATE:
g_value_set_boolean (value, power->priv->auth_hibernate);
break;
+ case PROP_AUTH_HYBRID_SLEEP:
+ g_value_set_boolean (value, power->priv->auth_hybrid_sleep);
+ break;
case PROP_AUTH_SUSPEND:
g_value_set_boolean (value, power->priv->auth_suspend);
break;
***************
*** 1273,1278 ****
--- 1312,1320 ----
case PROP_CAN_HIBERNATE:
g_value_set_boolean (value, power->priv->can_hibernate);
break;
+ case PROP_CAN_HYBRID_SLEEP:
+ g_value_set_boolean (value, power->priv->can_hybrid_sleep);
+ break;
case PROP_HAS_LID:
g_value_set_boolean (value, power->priv->lid_is_present);
break;
***************
*** 1400,1405 ****
--- 1442,1452 ----
xfpm_power_sleep (power, "Hibernate", force);
}
+ void xfpm_power_hybrid_sleep (XfpmPower *power, gboolean force)
+ {
+ xfpm_power_sleep (power, "HybridSleep", force);
+ }
+
gboolean xfpm_power_has_battery (XfpmPower *power)
{
GtkStatusIcon *battery = NULL;
*** a/src/xfpm-power.h 2019-04-19 20:56:07.025083443 +0200
--- b/src/xfpm-power.h 2019-04-19 21:58:48.707074778 +0200
***************
*** 65,75 ****
GType xfpm_power_get_type (void) G_GNUC_CONST;
! XfpmPower *xfpm_power_get (void);
void xfpm_power_suspend (XfpmPower *power,
gboolean force);
void xfpm_power_hibernate (XfpmPower *power,
gboolean force);
--- 65,78 ----
GType xfpm_power_get_type (void) G_GNUC_CONST;
! XfpmPower *xfpm_power_get (void);
void xfpm_power_suspend (XfpmPower *power,
gboolean force);
+ void xfpm_power_hybrid_sleep (XfpmPower *power,
+ gboolean force);
+
void xfpm_power_hibernate (XfpmPower *power,
gboolean force);
*** a/src/xfpm-suspend.h 2019-04-19 20:56:07.025083443 +0200
--- b/src/xfpm-suspend.h 2019-04-19 22:04:59.933446511 +0200
***************
*** 26,36 ****
{
XFPM_ASK_0 = 0,
XFPM_SUSPEND,
XFPM_HIBERNATE,
} XfpmActionType;
! gboolean xfpm_suspend_can_suspend (void);
! gboolean xfpm_suspend_can_hibernate (void);
gboolean xfpm_suspend_try_action (XfpmActionType type);
--- 26,38 ----
{
XFPM_ASK_0 = 0,
XFPM_SUSPEND,
+ XFPM_HYBRID_SLEEP,
XFPM_HIBERNATE,
} XfpmActionType;
! gboolean xfpm_suspend_can_suspend (void);
! gboolean xfpm_suspend_can_hybrid_sleep (void);
! gboolean xfpm_suspend_can_hibernate (void);
gboolean xfpm_suspend_try_action (XfpmActionType type);
*** a/src/xfpm-suspend.c 2019-04-19 20:56:07.025083443 +0200
--- b/src/xfpm-suspend.c 2019-04-19 22:07:05.968609775 +0200
***************
*** 149,154 ****
--- 149,173 ----
}
gboolean
+ xfpm_suspend_can_hybrid_sleep (void)
+ {
+ XFPM_DEBUG("entering");
+ #ifdef BACKEND_TYPE_FREEBSD
+ return freebsd_supports_sleep_state ("S3");
+ #endif
+ /* pm-utils pm-is-supported uses suspend-hybrid not hybridsleep */
+ #ifdef BACKEND_TYPE_LINUX
+ return linux_supports_sleep_state ("suspend-hybrid");
+ #endif
+ #ifdef BACKEND_TYPE_OPENBSD
+ return TRUE;
+ #endif
+
+ return FALSE;
+ }
+
+
+ gboolean
xfpm_suspend_can_hibernate (void)
{
XFPM_DEBUG("entering");
***************
*** 178,183 ****
--- 197,204 ----
if (type == XFPM_SUSPEND)
action = "suspend";
+ else if (type == XFPM_HYBRID_SLEEP)
+ action = "hybridsleep";
else if (type == XFPM_HIBERNATE)
action = "hibernate";
else
*** a/src/xfpm-systemd.c 2019-04-19 20:56:07.025083443 +0200
--- b/src/xfpm-systemd.c 2019-04-19 21:48:43.148705920 +0200
***************
*** 48,53 ****
--- 48,54 ----
gboolean can_shutdown;
gboolean can_restart;
gboolean can_suspend;
+ gboolean can_hybrid_sleep;
gboolean can_hibernate;
#ifdef ENABLE_POLKIT
XfpmPolkit *polkit;
***************
*** 60,65 ****
--- 61,67 ----
PROP_CAN_RESTART,
PROP_CAN_SHUTDOWN,
PROP_CAN_SUSPEND,
+ PROP_CAN_HYBRID_SLEEP,
PROP_CAN_HIBERNATE,
};
***************
*** 73,80 ****
--- 75,88 ----
#define SYSTEMD_REBOOT_TEST "org.freedesktop.login1.reboot"
#define SYSTEMD_POWEROFF_TEST "org.freedesktop.login1.power-off"
#define SYSTEMD_SUSPEND_TEST "org.freedesktop.login1.suspend"
+
#define SYSTEMD_HIBERNATE_TEST "org.freedesktop.login1.hibernate"
+ #define SYSTEMD_HYBRID_SLEEP_TEST "org.freedesktop.login1.reboot"
+ /*
+ #define SYSTEMD_HIBERNATE_TEST "CanHibernate"
+ #define SYSTEMD_HYBRID_SLEEP_TEST "CanHybridSleep"
+ */
static void
xfpm_systemd_class_init (XfpmSystemdClass *klass)
{
***************
*** 106,117 ****
G_PARAM_READABLE));
g_object_class_install_property (object_class,
PROP_CAN_HIBERNATE,
g_param_spec_boolean ("can-hibernate",
NULL, NULL,
FALSE,
! G_PARAM_READABLE));
! }
static gboolean
xfpm_systemd_can_method (XfpmSystemd *systemd,
--- 114,131 ----
G_PARAM_READABLE));
g_object_class_install_property (object_class,
+ PROP_CAN_HYBRID_SLEEP,
+ g_param_spec_boolean ("can-hybrid-sleep",
+ NULL, NULL,
+ FALSE,
+ G_PARAM_READABLE));
+
+ g_object_class_install_property (object_class,
PROP_CAN_HIBERNATE,
g_param_spec_boolean ("can-hibernate",
NULL, NULL,
FALSE,
! G_PARAM_READABLE));}
static gboolean
xfpm_systemd_can_method (XfpmSystemd *systemd,
***************
*** 149,154 ****
--- 163,171 ----
&systemd->priv->can_suspend,
SYSTEMD_SUSPEND_TEST);
xfpm_systemd_can_method (systemd,
+ &systemd->priv->can_hybrid_sleep,
+ SYSTEMD_HYBRID_SLEEP_TEST);
+ xfpm_systemd_can_method (systemd,
&systemd->priv->can_hibernate,
SYSTEMD_HIBERNATE_TEST);
}
***************
*** 164,183 ****
switch (prop_id)
{
case PROP_CAN_SHUTDOWN:
! g_value_set_boolean (value, systemd->priv->can_shutdown);
! break;
case PROP_CAN_RESTART:
! g_value_set_boolean (value, systemd->priv->can_restart);
! break;
case PROP_CAN_SUSPEND:
! g_value_set_boolean (value, systemd->priv->can_suspend);
! break;
case PROP_CAN_HIBERNATE:
g_value_set_boolean (value, systemd->priv->can_hibernate);
break;
! default:
! G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
! break;
}
}
--- 181,203 ----
switch (prop_id)
{
case PROP_CAN_SHUTDOWN:
! g_value_set_boolean (value, systemd->priv->can_shutdown);
! break;
case PROP_CAN_RESTART:
! g_value_set_boolean (value, systemd->priv->can_restart);
! break;
case PROP_CAN_SUSPEND:
! g_value_set_boolean (value, systemd->priv->can_suspend);
! break;
! case PROP_CAN_HYBRID_SLEEP:
! g_value_set_boolean (value, systemd->priv->can_hybrid_sleep);
! break;
case PROP_CAN_HIBERNATE:
g_value_set_boolean (value, systemd->priv->can_hibernate);
break;
! default:
! G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
! break;
}
}
*** a/src/xfpm-manager.c 2019-04-19 20:56:07.024083426 +0200
--- b/src/xfpm-manager.c 2019-04-19 22:17:53.718615419 +0200
***************
*** 339,344 ****
--- 339,347 ----
case XFPM_DO_HIBERNATE:
xfpm_power_hibernate (manager->priv->power, force);
break;
+ case XFPM_DO_HYBRID_SLEEP:
+ xfpm_power_hybrid_sleep (manager->priv->power, force);
+ break;
case XFPM_DO_SHUTDOWN:
xfpm_manager_shutdown (manager);
break;
***************
*** 950,957 ****
--- 953,962 ----
guint16 mapped_buttons;
gboolean auth_hibernate = FALSE;
gboolean auth_suspend = FALSE;
+ gboolean auth_hybrid_sleep = FALSE;
gboolean can_suspend = FALSE;
gboolean can_hibernate = FALSE;
+ gboolean can_hybrid_sleep = FALSE;
gboolean has_sleep_button = FALSE;
gboolean has_hibernate_button = FALSE;
gboolean has_power_button = FALSE;
***************
*** 978,985 ****
--- 983,992 ----
g_object_get (G_OBJECT (manager->priv->power),
"auth-suspend", &auth_suspend,
+ "auth-hybrid-sleep", &auth_hybrid_sleep,
"auth-hibernate", &auth_hibernate,
"can-suspend", &can_suspend,
+ "can-hybrid-sleep", &can_hybrid_sleep,
"can-hibernate", &can_hibernate,
"has-lid", &has_lid,
NULL);
***************
*** 1003,1010 ****
--- 1010,1019 ----
g_hash_table_insert (hash, g_strdup ("hibernate-button"), g_strdup (xfpm_bool_to_string (has_hibernate_button)));
g_hash_table_insert (hash, g_strdup ("battery-button"), g_strdup (xfpm_bool_to_string (has_battery_button)));
g_hash_table_insert (hash, g_strdup ("auth-suspend"), g_strdup (xfpm_bool_to_string (auth_suspend)));
+ g_hash_table_insert (hash, g_strdup ("auth-hybrid-sleep"), g_strdup (xfpm_bool_to_string (auth_hybrid_sleep)));
g_hash_table_insert (hash, g_strdup ("auth-hibernate"), g_strdup (xfpm_bool_to_string (auth_hibernate)));
g_hash_table_insert (hash, g_strdup ("can-suspend"), g_strdup (xfpm_bool_to_string (can_suspend)));
+ g_hash_table_insert (hash, g_strdup ("can-hybrid-sleep"), g_strdup (xfpm_bool_to_string (can_hybrid_sleep)));
g_hash_table_insert (hash, g_strdup ("can-hibernate"), g_strdup (xfpm_bool_to_string (can_hibernate)));
g_hash_table_insert (hash, g_strdup ("can-shutdown"), g_strdup (xfpm_bool_to_string (can_shutdown)));
*** a/src/xfpm-console-kit.c 2019-04-19 20:56:07.024083426 +0200
--- b/src/xfpm-console-kit.c 2019-04-19 21:56:35.235783839 +0200
***************
*** 51,56 ****
--- 51,57 ----
gboolean can_shutdown;
gboolean can_restart;
gboolean can_suspend;
+ gboolean can_hybrid_sleep;
gboolean can_hibernate;
};
***************
*** 60,65 ****
--- 61,67 ----
PROP_CAN_RESTART,
PROP_CAN_SHUTDOWN,
PROP_CAN_SUSPEND,
+ PROP_CAN_HYBRID_SLEEP,
PROP_CAN_HIBERNATE
};
***************
*** 194,206 ****
NULL, NULL,
FALSE,
G_PARAM_READABLE));
-
g_object_class_install_property (object_class,
! PROP_CAN_HIBERNATE,
! g_param_spec_boolean ("can-hibernate",
NULL, NULL,
FALSE,
G_PARAM_READABLE));
}
static void
--- 196,214 ----
NULL, NULL,
FALSE,
G_PARAM_READABLE));
g_object_class_install_property (object_class,
! PROP_CAN_HYBRID_SLEEP,
! g_param_spec_boolean ("can-hybrid-sleep",
NULL, NULL,
FALSE,
G_PARAM_READABLE));
+
+ g_object_class_install_property (object_class,
+ PROP_CAN_HIBERNATE,
+ g_param_spec_boolean ("can-hibernate",
+ NULL, NULL,
+ FALSE,
+ G_PARAM_READABLE));
}
static void
***************
*** 262,267 ****
--- 270,278 ----
case PROP_CAN_SUSPEND:
g_value_set_boolean (value, console->priv->can_suspend);
break;
+ case PROP_CAN_HYBRID_SLEEP:
+ g_value_set_boolean (value, console->priv->can_hybrid_sleep);
+ break;
case PROP_CAN_HIBERNATE:
g_value_set_boolean (value, console->priv->can_hibernate);
break;
*** a/src/xfpm-main.c 2019-04-19 20:56:07.024083426 +0200
--- b/src/xfpm-main.c 2019-04-19 22:07:31.289044375 +0200
***************
*** 82,89 ****
--- 82,91 ----
{
gboolean has_battery;
gboolean auth_suspend;
+ gboolean auth_hybrid_sleep;
gboolean auth_hibernate;
gboolean can_suspend;
+ gboolean can_hybrid_sleep;
gboolean can_hibernate;
gboolean can_shutdown;
gboolean has_lcd_brightness;
***************
*** 96,103 ****
--- 98,107 ----
has_battery = xfpm_string_to_bool (g_hash_table_lookup (hash, "has-battery"));
has_lid = xfpm_string_to_bool (g_hash_table_lookup (hash, "has-lid"));
can_suspend = xfpm_string_to_bool (g_hash_table_lookup (hash, "can-suspend"));
+ can_hybrid_sleep = xfpm_string_to_bool (g_hash_table_lookup (hash, "can-hybrid-sleep"));
can_hibernate = xfpm_string_to_bool (g_hash_table_lookup (hash, "can-hibernate"));
auth_suspend = xfpm_string_to_bool (g_hash_table_lookup (hash, "auth-suspend"));
+ auth_hybrid_sleep = xfpm_string_to_bool (g_hash_table_lookup (hash, "auth-hybrid-sleep"));
auth_hibernate = xfpm_string_to_bool (g_hash_table_lookup (hash, "auth-hibernate"));
has_lcd_brightness = xfpm_string_to_bool (g_hash_table_lookup (hash, "has-brightness"));
has_sleep_button = xfpm_string_to_bool (g_hash_table_lookup (hash, "sleep-button"));
***************
*** 133,142 ****
--- 137,150 ----
"%s: %s\n",
_("Can suspend"),
xfpm_bool_to_local_string (can_suspend),
+ _("Can hybrid_sleep"),
+ xfpm_bool_to_local_string (can_hybrid_sleep),
_("Can hibernate"),
xfpm_bool_to_local_string (can_hibernate),
_("Authorized to suspend"),
xfpm_bool_to_local_string (auth_suspend),
+ _("Authorized to hybrid_sleep"),
+ xfpm_bool_to_local_string (auth_hybrid_sleep),
_("Authorized to hibernate"),
xfpm_bool_to_local_string (auth_hibernate),
_("Authorized to shutdown"),
*** a/src/org.freedesktop.PowerManagement.xml 2019-04-19 20:56:07.023083408 +0200
--- b/src/org.freedesktop.PowerManagement.xml 2019-04-19 21:31:05.289722766 +0200
***************
*** 8,13 ****
--- 8,16 ----
+
+
+
***************
*** 27,32 ****
--- 30,39 ----
+
+
+
+