[gnome-games/wip/aplazas/781572-remove-vala-macro: 5/11] 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: 5/11] gamepad: Port RawGamepadMonitor to C
- Date: Thu, 27 Apr 2017 05:00:11 +0000 (UTC)
commit 2a878dc70bf3ddd43aee818438e74c4bd8964282
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
Vala macros.
src/Makefile.am | 4 ++-
src/gamepad/raw-gamepad-monitor.c | 67 ++++++++++++++++++++++++++++++++++
src/gamepad/raw-gamepad-monitor.h | 34 +++++++++++++++++
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..105e2db
--- /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..7ac4f19
--- /dev/null
+++ b/src/gamepad/raw-gamepad-monitor.h
@@ -0,0 +1,34 @@
+// 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;
+
+const gchar *games_raw_gamepad_monitor_get_guid (GamesRawGamepadMonitor *self);
+
+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]