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



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

    gamepad: Port RawGamepadMonitor to C
    
    Also port RawGamepadCallback 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/gamepad-callbacks.vala   |    1 -
 src/gamepad/raw-gamepad-monitor.c    |   67 ++++++++++++++++++++++++++++++++++
 src/gamepad/raw-gamepad-monitor.h    |   36 ++++++++++++++++++
 src/gamepad/raw-gamepad-monitor.vala |   18 ---------
 src/gamepad/raw-gamepad-monitor.vapi |   10 +++++
 6 files changed, 116 insertions(+), 20 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/gamepad-callbacks.vala b/src/gamepad/gamepad-callbacks.vala
index c69835f..00e6f64 100644
--- a/src/gamepad/gamepad-callbacks.vala
+++ b/src/gamepad/gamepad-callbacks.vala
@@ -2,5 +2,4 @@
 
 namespace Games {
        private delegate void GamepadCallback (Gamepad gamepad);
-       private delegate void RawGamepadCallback (RawGamepad raw_gamepad);
 }
diff --git a/src/gamepad/raw-gamepad-monitor.c b/src/gamepad/raw-gamepad-monitor.c
new file mode 100644
index 0000000..a0426d0
--- /dev/null
+++ b/src/gamepad/raw-gamepad-monitor.c
@@ -0,0 +1,67 @@
+// 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..10bec9a
--- /dev/null
+++ b/src/gamepad/raw-gamepad-monitor.h
@@ -0,0 +1,36 @@
+// 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
+
+typedef void (*GamesRawGamepadCallback) (GamesRawGamepad *raw_gamepad,
+                                         gpointer         target);
+
+#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)
+
+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..696fa7b
--- /dev/null
+++ b/src/gamepad/raw-gamepad-monitor.vapi
@@ -0,0 +1,10 @@
+// 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);
+}
+
+[CCode (cheader_filename = "raw-gamepad-monitor.h")]
+private delegate void Games.RawGamepadCallback (Games.RawGamepad raw_gamepad);


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