[gnome-settings-daemon] media-keys: Port to iio-sensor-proxy
- From: Hashem Nasarat <hnasarat src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-settings-daemon] media-keys: Port to iio-sensor-proxy
- Date: Wed, 10 Feb 2016 17:43:23 +0000 (UTC)
commit a66e6ff94e16d063756d2f1209e1203d19f78710
Author: Hashem Nasarat <hashem riseup net>
Date: Mon Feb 8 14:27:32 2016 -0500
media-keys: Port to iio-sensor-proxy
commit b7f6fe30b removed the Orientation dbus name which is what
media-keys used to determine if super+o or hardware keys should
work to lock the rotation.
https://bugzilla.gnome.org/show_bug.cgi?id=761746
plugins/media-keys/gsd-media-keys-manager.c | 94 +++++++++++++++++++++------
1 files changed, 73 insertions(+), 21 deletions(-)
---
diff --git a/plugins/media-keys/gsd-media-keys-manager.c b/plugins/media-keys/gsd-media-keys-manager.c
index 16e1b06..cc80c5d 100644
--- a/plugins/media-keys/gsd-media-keys-manager.c
+++ b/plugins/media-keys/gsd-media-keys-manager.c
@@ -182,8 +182,9 @@ struct GsdMediaKeysManagerPrivate
GCancellable *screencast_cancellable;
/* Rotation */
- guint orientation_watch_id;
- gboolean orientation_available;
+ guint iio_sensor_watch_id;
+ gboolean has_accel;
+ GDBusProxy *iio_sensor_proxy;
/* RFKill stuff */
guint rfkill_watch_id;
@@ -1643,24 +1644,72 @@ do_video_rotate_action (GsdMediaKeysManager *manager,
}
static void
-orientation_appeared_cb (GDBusConnection *connection,
- const gchar *name,
- const gchar *name_owner,
- gpointer user_data)
+sensor_properties_changed (GDBusProxy *proxy,
+ GVariant *changed_properties,
+ GStrv invalidated_properties,
+ gpointer user_data)
{
GsdMediaKeysManager *manager = user_data;
+ GVariant *v;
+ GVariantDict dict;
+
+ if (manager->priv->iio_sensor_proxy == NULL)
+ return;
+
+ if (changed_properties)
+ g_variant_dict_init (&dict, changed_properties);
- manager->priv->orientation_available = TRUE;
+ if (changed_properties == NULL ||
+ g_variant_dict_contains (&dict, "HasAccelerometer")) {
+ v = g_dbus_proxy_get_cached_property (manager->priv->iio_sensor_proxy,
+ "HasAccelerometer");
+ if (v == NULL) {
+ g_debug ("Couldn't fetch HasAccelerometer property");
+ return;
+ }
+ manager->priv->has_accel = g_variant_get_boolean (v);
+ g_variant_unref (v);
+ }
}
static void
-orientation_disappeared_cb (GDBusConnection *connection,
- const gchar *name,
- gpointer user_data)
+iio_sensor_appeared_cb (GDBusConnection *connection,
+ const gchar *name,
+ const gchar *name_owner,
+ gpointer user_data)
{
GsdMediaKeysManager *manager = user_data;
+ GError *error = NULL;
- manager->priv->orientation_available = FALSE;
+ manager->priv->iio_sensor_proxy = g_dbus_proxy_new_sync (connection,
+ G_DBUS_PROXY_FLAGS_NONE,
+ NULL,
+ "net.hadess.SensorProxy",
+ "/net/hadess/SensorProxy",
+ "net.hadess.SensorProxy",
+ NULL,
+ &error);
+
+ if (manager->priv->iio_sensor_proxy == NULL) {
+ g_warning ("Failed to access net.hadess.SensorProxy after it appeared");
+ return;
+ }
+ g_signal_connect (G_OBJECT (manager->priv->iio_sensor_proxy),
+ "g-properties-changed",
+ G_CALLBACK (sensor_properties_changed), manager);
+
+ sensor_properties_changed (manager->priv->iio_sensor_proxy,
+ NULL, NULL, manager);
+}
+
+static void
+iio_sensor_disappeared_cb (GDBusConnection *connection,
+ const gchar *name,
+ gpointer user_data)
+{
+ GsdMediaKeysManager *manager = user_data;
+ g_clear_object (&manager->priv->iio_sensor_proxy);
+ manager->priv->has_accel = FALSE;
}
static void
@@ -1670,8 +1719,10 @@ do_video_rotate_lock_action (GsdMediaKeysManager *manager,
GSettings *settings;
gboolean locked;
- if (!manager->priv->orientation_available)
+ if (!manager->priv->has_accel) {
+ g_debug ("Ignoring attempt to set orientation lock: no accelerometer");
return;
+ }
settings = g_settings_new ("org.gnome.settings-daemon.peripherals.touchscreen");
locked = !g_settings_get_boolean (settings, "orientation-lock");
@@ -2572,12 +2623,12 @@ start_media_keys_idle_cb (GsdMediaKeysManager *manager)
manager->priv->mpris_controller = mpris_controller_new ();
/* Rotation */
- manager->priv->orientation_watch_id = g_bus_watch_name (G_BUS_TYPE_SESSION,
- "org.gnome.SettingsDaemon.Orientation",
- G_BUS_NAME_WATCHER_FLAGS_NONE,
- orientation_appeared_cb,
- orientation_disappeared_cb,
- manager, NULL);
+ manager->priv->iio_sensor_watch_id = g_bus_watch_name (G_BUS_TYPE_SYSTEM,
+ "net.hadess.SensorProxy",
+ G_BUS_NAME_WATCHER_FLAGS_NONE,
+ iio_sensor_appeared_cb,
+ iio_sensor_disappeared_cb,
+ manager, NULL);
gnome_settings_profile_end (NULL);
@@ -2638,9 +2689,9 @@ gsd_media_keys_manager_stop (GsdMediaKeysManager *manager)
manager->priv->rfkill_watch_id = 0;
}
- if (manager->priv->orientation_watch_id > 0) {
- g_bus_unwatch_name (manager->priv->orientation_watch_id);
- manager->priv->orientation_watch_id = 0;
+ if (manager->priv->iio_sensor_watch_id > 0) {
+ g_bus_unwatch_name (manager->priv->iio_sensor_watch_id);
+ manager->priv->iio_sensor_watch_id = 0;
}
g_clear_pointer (&manager->priv->ca, ca_context_destroy);
@@ -2659,6 +2710,7 @@ gsd_media_keys_manager_stop (GsdMediaKeysManager *manager)
g_clear_object (&priv->composite_device);
g_clear_object (&priv->mpris_controller);
g_clear_object (&priv->screencast_proxy);
+ g_clear_object (&priv->iio_sensor_proxy);
g_clear_pointer (&priv->chassis_type, g_free);
if (priv->cancellable != NULL) {
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]