mirror of
https://gitlab.freedesktop.org/upower/upower.git
synced 2026-05-09 08:18:08 +02:00
Ensure we send ::Sleeping() if clients do not call AboutToSleep()
This commit is contained in:
parent
43fd837e00
commit
ab1bc59e56
1 changed files with 16 additions and 2 deletions
|
|
@ -85,6 +85,7 @@ struct UpDaemonPrivate
|
|||
gboolean hibernate_has_swap_space;
|
||||
gboolean hibernate_has_encrypted_swap;
|
||||
gboolean during_coldplug;
|
||||
gboolean sent_sleeping_signal;
|
||||
guint battery_poll_id;
|
||||
guint battery_poll_count;
|
||||
GTimer *about_to_sleep_timer;
|
||||
|
|
@ -330,9 +331,11 @@ up_daemon_about_to_sleep (UpDaemon *daemon, DBusGMethodInvocation *context)
|
|||
if (!up_polkit_check_auth (priv->polkit, subject, "org.freedesktop.upower.suspend", context))
|
||||
goto out;
|
||||
|
||||
/* we've told the clients we're going down */
|
||||
egg_debug ("emitting sleeping");
|
||||
g_signal_emit (daemon, signals[SIGNAL_SLEEPING], 0);
|
||||
g_timer_start (priv->about_to_sleep_timer);
|
||||
daemon->priv->sent_sleeping_signal = TRUE;
|
||||
|
||||
dbus_g_method_return (context, NULL);
|
||||
out:
|
||||
|
|
@ -387,6 +390,7 @@ up_daemon_deferred_sleep_cb (UpDaemonDeferredSleep *sleep)
|
|||
out:
|
||||
/* clear timer */
|
||||
priv->about_to_sleep_id = 0;
|
||||
priv->sent_sleeping_signal = FALSE;
|
||||
|
||||
g_free (stdout);
|
||||
g_free (stderr);
|
||||
|
|
@ -415,13 +419,22 @@ up_daemon_deferred_sleep (UpDaemon *daemon, const gchar *command, DBusGMethodInv
|
|||
sleep->context = context;
|
||||
sleep->command = g_strdup (command);
|
||||
|
||||
/* we didn't use AboutToSleep() so send the signal for clients now */
|
||||
if (!priv->sent_sleeping_signal) {
|
||||
egg_debug ("no AboutToSleep(), so emitting ::Sleeping()");
|
||||
g_signal_emit (daemon, signals[SIGNAL_SLEEPING], 0);
|
||||
priv->about_to_sleep_id = g_timeout_add (priv->conf_sleep_timeout,
|
||||
(GSourceFunc) up_daemon_deferred_sleep_cb, sleep);
|
||||
return;
|
||||
}
|
||||
|
||||
/* about to sleep */
|
||||
elapsed = 1000.0f * g_timer_elapsed (priv->about_to_sleep_timer, NULL);
|
||||
egg_debug ("between AboutToSleep() and %s was %fms", sleep->command, elapsed);
|
||||
if (elapsed < priv->conf_sleep_timeout) {
|
||||
/* we have to wait for a little bit */
|
||||
/* we have to wait for the difference in time */
|
||||
priv->about_to_sleep_id = g_timeout_add (priv->conf_sleep_timeout - elapsed,
|
||||
(GSourceFunc) up_daemon_deferred_sleep_cb, sleep);
|
||||
(GSourceFunc) up_daemon_deferred_sleep_cb, sleep);
|
||||
} else {
|
||||
/* we can do this straight away */
|
||||
priv->about_to_sleep_id = g_idle_add ((GSourceFunc) up_daemon_deferred_sleep_cb, sleep);
|
||||
|
|
@ -930,6 +943,7 @@ up_daemon_init (UpDaemon *daemon)
|
|||
daemon->priv->on_battery = FALSE;
|
||||
daemon->priv->on_low_battery = FALSE;
|
||||
daemon->priv->during_coldplug = FALSE;
|
||||
daemon->priv->sent_sleeping_signal = FALSE;
|
||||
daemon->priv->battery_poll_id = 0;
|
||||
daemon->priv->battery_poll_count = 0;
|
||||
daemon->priv->about_to_sleep_id = 0;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue