[gnome-games/wip/aplazas/781572-remove-vala-macro: 6/14] gamepad: Port RawGamepadMonitor to C



commit b76fbd859601a640b65f165bc4e39ba10a16d541
Author: Adrien Plazas <kekun plazas laposte net>
Date:   Thu Apr 20 15:36:04 2017 +0200

    gamepad: Port RawGamepadMonitor to C
    
    This will help to port part of the gamepad handling to C to avoid using
    the Vala preprocessor.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=781572

 src/Makefile.am                      |    4 ++-
 src/gamepad/raw-gamepad-monitor.c    |   66 ++++++++++++++++++++++++++++++++++
 src/gamepad/raw-gamepad-monitor.h    |   35 ++++++++++++++++++
 src/gamepad/raw-gamepad-monitor.vala |   18 ---------
 src/gamepad/raw-gamepad-monitor.vapi |    7 ++++
 5 files changed, 111 insertions(+), 19 deletions(-)
---
diff --git a/src/Makefile.am b/src/Makefile.am
index 1896848..d0aa85f 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -25,6 +25,7 @@ EXTRA_DIST = \
        $(gresource_file) \
        gamepad/linux/libevdev.vapi \
        gamepad/raw-gamepad.vapi \
+       gamepad/raw-gamepad-monitor.vapi \
        gamepad/standard-gamepad-axis.vapi \
        gamepad/standard-gamepad-button.vapi \
        $(NULL)
@@ -79,7 +80,7 @@ gnome_games_SOURCES = \
        gamepad/gamepad-mappings-manager.vala \
        gamepad/gamepad-monitor.vala \
        gamepad/raw-gamepad.c \
-       gamepad/raw-gamepad-monitor.vala \
+       gamepad/raw-gamepad-monitor.c \
        gamepad/standard-gamepad-axis.c \
        gamepad/standard-gamepad-button.c \
        \
@@ -182,6 +183,7 @@ gnome_games_VALAFLAGS = \
        --pkg linux \
        --pkg posix \
        --pkg raw-gamepad \
+       --pkg raw-gamepad-monitor \
        --pkg standard-gamepad-axis \
        --pkg standard-gamepad-button \
        --gresources $(gresource_file) \
diff --git a/src/gamepad/raw-gamepad-monitor.c b/src/gamepad/raw-gamepad-monitor.c
new file mode 100644
index 0000000..c0352fd
--- /dev/null
+++ b/src/gamepad/raw-gamepad-monitor.c
@@ -0,0 +1,66 @@
+// This file is part of GNOME Games. License: GPL-3.0+.
+
+#include "raw-gamepad-monitor.h"
+
+G_DEFINE_INTERFACE (GamesRawGamepadMonitor, games_raw_gamepad_monitor, G_TYPE_OBJECT)
+
+/**
+ * SECTION:raw-gamepad-monitor
+ * @Short_description: Monitor the plugged gamepads
+ * @Title: GamesRawGamepadMonitor
+ */
+
+/* Signals */
+enum {
+  SIGNAL_GAMEPAD_PLUGGED,
+  LAST_SIGNAL,
+};
+
+static guint signals[LAST_SIGNAL] = { 0 };
+
+/* Public */
+
+/**
+ * games_raw_gamepad_monitor_foreach_gamepad:
+ * @self: a #GamesRawGamepadMonitor
+ * @callback: the callback handling each #RawGamepad
+ * @data: the data to pass to the callback
+ *
+ * Iterates through the available gamepads.
+ **/
+void
+games_raw_gamepad_monitor_foreach_gamepad (GamesRawGamepadMonitor  *self,
+                                           GamesRawGamepadCallback  callback,
+                                           gpointer                 data)
+{
+  g_return_if_fail (self != NULL);
+
+  GAMES_RAW_GAMEPAD_MONITOR_GET_IFACE (self)->foreach_gamepad (self, callback, data);
+}
+
+/* Type */
+
+static void
+games_raw_gamepad_monitor_default_init (GamesRawGamepadMonitorInterface *iface)
+{
+  static gboolean initialized = FALSE;
+
+  if (initialized)
+    return;
+
+  initialized = TRUE;
+
+  /**
+   * GamesRawGamepadMonitor::gamepad-plugged:
+   * @gamepad: the gamepad which got plugged in
+   *
+   * Emitted when a gamepad is plugged in.
+   **/
+  signals[SIGNAL_GAMEPAD_PLUGGED] =
+    g_signal_new ("gamepad-plugged",
+                  GAMES_TYPE_RAW_GAMEPAD_MONITOR,
+                  G_SIGNAL_RUN_LAST,
+                  0, NULL, NULL,
+                  g_cclosure_marshal_VOID__OBJECT,
+                  G_TYPE_NONE, 1, GAMES_TYPE_RAW_GAMEPAD);
+}
diff --git a/src/gamepad/raw-gamepad-monitor.h b/src/gamepad/raw-gamepad-monitor.h
new file mode 100644
index 0000000..72376f3
--- /dev/null
+++ b/src/gamepad/raw-gamepad-monitor.h
@@ -0,0 +1,35 @@
+// This file is part of GNOME Games. License: GPL-3.0+.
+
+#ifndef GAMES_RAW_GAMEPAD_MONITOR_H
+#define GAMES_RAW_GAMEPAD_MONITOR_H
+
+#include <glib-object.h>
+
+#include "raw-gamepad.h"
+
+G_BEGIN_DECLS
+
+#define GAMES_TYPE_RAW_GAMEPAD_MONITOR (games_raw_gamepad_monitor_get_type ())
+
+G_DECLARE_INTERFACE (GamesRawGamepadMonitor, games_raw_gamepad_monitor, GAMES, RAW_GAMEPAD_MONITOR, GObject)
+
+typedef void (*GamesRawGamepadCallback) (GamesRawGamepad* raw_gamepad, void* user_data);
+
+struct _GamesRawGamepadMonitorInterface {
+  GTypeInterface parent;
+
+  void (*foreach_gamepad) (GamesRawGamepadMonitor  *self,
+                           GamesRawGamepadCallback  callback,
+                           gpointer                 callback_target);
+};
+
+// FIXME Remove this once every piece using it has been moved to C.
+typedef struct _GamesRawGamepadMonitorInterface GamesRawGamepadMonitorIface;
+
+void games_raw_gamepad_monitor_foreach_gamepad (GamesRawGamepadMonitor  *self,
+                                                GamesRawGamepadCallback  callback,
+                                                gpointer                 data);
+
+G_END_DECLS
+
+#endif /* GAMES_RAW_GAMEPAD_MONITOR_H */
diff --git a/src/gamepad/raw-gamepad-monitor.vapi b/src/gamepad/raw-gamepad-monitor.vapi
new file mode 100644
index 0000000..489b8bf
--- /dev/null
+++ b/src/gamepad/raw-gamepad-monitor.vapi
@@ -0,0 +1,7 @@
+// This file is part of GNOME Games. License: GPL-3.0+.
+
+[CCode (cheader_filename = "raw-gamepad-monitor.h")]
+private interface Games.RawGamepadMonitor : GLib.Object {
+       public abstract signal void gamepad_plugged (RawGamepad raw_gamepad);
+       public abstract void foreach_gamepad (RawGamepadCallback callback);
+}


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]