[gnome-flashback] backends: add method/property to get accelerometer availability
- From: Alberts Muktupāvels <muktupavels src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-flashback] backends: add method/property to get accelerometer availability
- Date: Sat, 5 Sep 2020 18:13:11 +0000 (UTC)
commit 6cff8965f6bbd4d4152b71a7f2d0d474e9e69485
Author: Alberts Muktupāvels <alberts muktupavels gmail com>
Date: Sat Sep 5 17:05:33 2020 +0300
backends: add method/property to get accelerometer availability
Based on mutter commit:
https://gitlab.gnome.org/GNOME/mutter/-/commit/7f9949a5e31b954a2c84
backends/gf-orientation-manager-private.h | 6 ++-
backends/gf-orientation-manager.c | 84 ++++++++++++++++++++++++++++---
2 files changed, 81 insertions(+), 9 deletions(-)
---
diff --git a/backends/gf-orientation-manager-private.h b/backends/gf-orientation-manager-private.h
index e0e5cb5e..62963934 100644
--- a/backends/gf-orientation-manager-private.h
+++ b/backends/gf-orientation-manager-private.h
@@ -40,9 +40,11 @@ typedef enum
G_DECLARE_FINAL_TYPE (GfOrientationManager, gf_orientation_manager,
GF, ORIENTATION_MANAGER, GObject)
-GfOrientationManager *gf_orientation_manager_new (void);
+GfOrientationManager *gf_orientation_manager_new (void);
-GfOrientation gf_orientation_manager_get_orientation (GfOrientationManager *manager);
+GfOrientation gf_orientation_manager_get_orientation (GfOrientationManager *manager);
+
+gboolean gf_orientation_manager_has_accelerometer (GfOrientationManager *self);
G_END_DECLS
diff --git a/backends/gf-orientation-manager.c b/backends/gf-orientation-manager.c
index 9c1fe81d..fa777266 100644
--- a/backends/gf-orientation-manager.c
+++ b/backends/gf-orientation-manager.c
@@ -38,10 +38,22 @@ struct _GfOrientationManager
GDBusProxy *iio_proxy;
GfOrientation prev_orientation;
GfOrientation curr_orientation;
+ gboolean has_accel;
GSettings *settings;
};
+enum
+{
+ PROP_0,
+
+ PROP_HAS_ACCELEROMETER,
+
+ LAST_PROP
+};
+
+static GParamSpec *manager_properties[LAST_PROP] = { NULL };
+
enum
{
ORIENTATION_CHANGED,
@@ -71,24 +83,25 @@ orientation_from_string (const gchar *orientation)
static void
read_iio_proxy (GfOrientationManager *manager)
{
- gboolean has_accel;
GVariant *variant;
manager->curr_orientation = GF_ORIENTATION_UNDEFINED;
if (!manager->iio_proxy)
- return;
+ {
+ manager->has_accel = FALSE;
+ return;
+ }
- has_accel = FALSE;
variant = g_dbus_proxy_get_cached_property (manager->iio_proxy, "HasAccelerometer");
if (variant)
{
- has_accel = g_variant_get_boolean (variant);
+ manager->has_accel = g_variant_get_boolean (variant);
g_variant_unref (variant);
}
- if (!has_accel)
+ if (!manager->has_accel)
return;
variant = g_dbus_proxy_get_cached_property (manager->iio_proxy, "AccelerometerOrientation");
@@ -106,11 +119,21 @@ read_iio_proxy (GfOrientationManager *manager)
static void
sync_state (GfOrientationManager *manager)
{
- if (g_settings_get_boolean (manager->settings, ORIENTATION_LOCK_KEY))
- return;
+ gboolean had_accel;
+
+ had_accel = manager->has_accel;
read_iio_proxy (manager);
+ if (had_accel != manager->has_accel)
+ {
+ g_object_notify_by_pspec (G_OBJECT (manager),
+ manager_properties[PROP_HAS_ACCELEROMETER]);
+ }
+
+ if (g_settings_get_boolean (manager->settings, ORIENTATION_LOCK_KEY))
+ return;
+
if (manager->prev_orientation == manager->curr_orientation)
return;
@@ -274,6 +297,45 @@ gf_orientation_manager_dispose (GObject *object)
G_OBJECT_CLASS (gf_orientation_manager_parent_class)->dispose (object);
}
+static void
+gf_orientation_manager_get_property (GObject *object,
+ guint property_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ GfOrientationManager *self;
+
+ self = GF_ORIENTATION_MANAGER (object);
+
+ switch (property_id)
+ {
+ case PROP_HAS_ACCELEROMETER:
+ g_value_set_boolean (value, self->has_accel);
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+ break;
+ }
+}
+
+static void
+gf_orientation_manager_install_properties (GObjectClass *object_class)
+{
+ manager_properties[PROP_HAS_ACCELEROMETER] =
+ g_param_spec_boolean ("has-accelerometer",
+ "Has accelerometer",
+ "Has accelerometer",
+ FALSE,
+ G_PARAM_READABLE |
+ G_PARAM_EXPLICIT_NOTIFY |
+ G_PARAM_STATIC_STRINGS);
+
+ g_object_class_install_properties (object_class,
+ LAST_PROP,
+ manager_properties);
+}
+
static void
gf_orientation_manager_install_signals (GObjectClass *object_class)
{
@@ -291,7 +353,9 @@ gf_orientation_manager_class_init (GfOrientationManagerClass *manager_class)
object_class = G_OBJECT_CLASS (manager_class);
object_class->dispose = gf_orientation_manager_dispose;
+ object_class->get_property = gf_orientation_manager_get_property;
+ gf_orientation_manager_install_properties (object_class);
gf_orientation_manager_install_signals (object_class);
}
@@ -325,3 +389,9 @@ gf_orientation_manager_get_orientation (GfOrientationManager *manager)
{
return manager->curr_orientation;
}
+
+gboolean
+gf_orientation_manager_has_accelerometer (GfOrientationManager *self)
+{
+ return self->has_accel;
+}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]