summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJasper St. Pierre <jstpierre@mecheye.net>2014-03-01 13:06:25 -0500
committerJasper St. Pierre <jstpierre@mecheye.net>2014-03-05 10:20:50 -0500
commit00ecef2b5b426dc7fc94246cddc2784f07b5b930 (patch)
tree51c289483edc66df72c7a2bd21062645de396282
parente639123095a8f518b6f97ff823702cf3dc5ac6a6 (diff)
downloadclutter-wip/wayland-for-demo.tar.gz
close callbackwip/wayland-for-demo
-rw-r--r--clutter/evdev/clutter-device-manager-evdev.c21
-rw-r--r--clutter/evdev/clutter-evdev.h7
2 files changed, 19 insertions, 9 deletions
diff --git a/clutter/evdev/clutter-device-manager-evdev.c b/clutter/evdev/clutter-device-manager-evdev.c
index bdca5d477..a63950288 100644
--- a/clutter/evdev/clutter-device-manager-evdev.c
+++ b/clutter/evdev/clutter-device-manager-evdev.c
@@ -116,8 +116,9 @@ G_DEFINE_TYPE_WITH_PRIVATE (ClutterDeviceManagerEvdev,
clutter_device_manager_evdev,
CLUTTER_TYPE_DEVICE_MANAGER)
-static ClutterOpenDeviceCallback open_callback;
-static gpointer open_callback_data;
+static ClutterOpenDeviceCallback open_callback;
+static ClutterCloseDeviceCallback close_callback;
+static gpointer open_callback_data;
static const char *device_type_str[] = {
"pointer", /* CLUTTER_POINTER_DEVICE */
@@ -1143,7 +1144,10 @@ static void
close_restricted (int fd,
void *user_data)
{
- close (fd);
+ if (close_callback)
+ close_callback (fd, open_callback_data);
+ else
+ close (fd);
}
static const struct libinput_interface libinput_interface = {
@@ -1456,7 +1460,8 @@ clutter_evdev_reclaim_devices (void)
/**
* clutter_evdev_set_open_callback: (skip)
- * @callback: the user replacement for open()
+ * @open_callback: the user replacement for open()
+ * @close_callback: the user replacement for close()
* @user_data: user data for @callback
*
* Through this function, the application can set a custom callback
@@ -1472,10 +1477,12 @@ clutter_evdev_reclaim_devices (void)
* Stability: unstable
*/
void
-clutter_evdev_set_open_callback (ClutterOpenDeviceCallback callback,
- gpointer user_data)
+clutter_evdev_set_open_callback (ClutterOpenDeviceCallback open_callback_,
+ ClutterCloseDeviceCallback close_callback_,
+ gpointer user_data)
{
- open_callback = callback;
+ open_callback = open_callback_;
+ close_callback = close_callback_;
open_callback_data = user_data;
}
diff --git a/clutter/evdev/clutter-evdev.h b/clutter/evdev/clutter-evdev.h
index 104e3b413..beed9fa8c 100644
--- a/clutter/evdev/clutter-evdev.h
+++ b/clutter/evdev/clutter-evdev.h
@@ -48,10 +48,13 @@ typedef int (*ClutterOpenDeviceCallback) (const char *path,
int flags,
gpointer user_data,
GError **error);
+typedef void (*ClutterCloseDeviceCallback) (int fd,
+ gpointer user_data);
CLUTTER_AVAILABLE_IN_1_16
-void clutter_evdev_set_open_callback (ClutterOpenDeviceCallback callback,
- gpointer user_data);
+void clutter_evdev_set_open_callback (ClutterOpenDeviceCallback open_callback,
+ ClutterCloseDeviceCallback close_callback,
+ gpointer user_data);
CLUTTER_AVAILABLE_IN_1_10
void clutter_evdev_release_devices (void);