[gnome-games/wip/aplazas/781572-remove-vala-macro: 2/19] gamepad: Port RawGamepadMonitor to C
- From: Adrien Plazas <aplazas src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-games/wip/aplazas/781572-remove-vala-macro: 2/19] gamepad: Port RawGamepadMonitor to C
- Date: Tue, 2 May 2017 12:10:21 +0000 (UTC)
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]