backend-native: Reset idle time on lid open events

This makes gnome-settings-daemon turn on the backlight and
gnome-shell's screen shield animate.

Note that on X sessions, gnome-settings-daemon uses the same upower
property to force an innocuous key event into the X server so that the
idle time gets reset since Xorg doesn't do this itself on lid events.

https://bugzilla.gnome.org/show_bug.cgi?id=749076
This commit is contained in:
Rui Matos 2015-05-20 17:05:37 +02:00
parent 676a87eac6
commit b507461c0f

View File

@ -29,6 +29,7 @@
#include <meta/main.h> #include <meta/main.h>
#include <clutter/evdev/clutter-evdev.h> #include <clutter/evdev/clutter-evdev.h>
#include <libupower-glib/upower.h>
#include "meta-barrier-native.h" #include "meta-barrier-native.h"
#include "meta-idle-monitor-native.h" #include "meta-idle-monitor-native.h"
@ -40,6 +41,7 @@ struct _MetaBackendNativePrivate
{ {
MetaLauncher *launcher; MetaLauncher *launcher;
MetaBarrierManagerNative *barrier_manager; MetaBarrierManagerNative *barrier_manager;
UpClient *up_client;
}; };
typedef struct _MetaBackendNativePrivate MetaBackendNativePrivate; typedef struct _MetaBackendNativePrivate MetaBackendNativePrivate;
@ -53,9 +55,22 @@ meta_backend_native_finalize (GObject *object)
meta_launcher_free (priv->launcher); meta_launcher_free (priv->launcher);
g_object_unref (priv->up_client);
G_OBJECT_CLASS (meta_backend_native_parent_class)->finalize (object); G_OBJECT_CLASS (meta_backend_native_parent_class)->finalize (object);
} }
static void
lid_is_closed_changed_cb (UpClient *client,
GParamSpec *pspec,
gpointer user_data)
{
if (up_client_get_lid_is_closed (client))
return;
meta_idle_monitor_native_reset_idletime (meta_idle_monitor_get_core ());
}
static void static void
constrain_to_barriers (ClutterInputDevice *device, constrain_to_barriers (ClutterInputDevice *device,
guint32 time, guint32 time,
@ -267,6 +282,10 @@ meta_backend_native_init (MetaBackendNative *native)
priv->launcher = meta_launcher_new (); priv->launcher = meta_launcher_new ();
priv->barrier_manager = meta_barrier_manager_native_new (); priv->barrier_manager = meta_barrier_manager_native_new ();
priv->up_client = up_client_new ();
g_signal_connect (priv->up_client, "notify::lid-is-closed",
G_CALLBACK (lid_is_closed_changed_cb), NULL);
} }
gboolean gboolean