summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--docs/reference/gdk/gdk3-sections.txt1
-rw-r--r--gdk/gdk.symbols1
-rw-r--r--gdk/gdkdevicemanager.c24
-rw-r--r--gdk/gdkdevicemanager.h2
-rw-r--r--gdk/gdkdisplay.c4
-rw-r--r--gdk/quartz/gdkdevicemanager-core.c11
-rw-r--r--gdk/win32/gdkdevicemanager-win32.c11
-rw-r--r--gdk/x11/gdkdevicemanager-core.c11
-rw-r--r--gdk/x11/gdkdevicemanager-xi2.c19
-rw-r--r--gdk/x11/gdkdevicemanager-xi2.h2
10 files changed, 84 insertions, 2 deletions
diff --git a/docs/reference/gdk/gdk3-sections.txt b/docs/reference/gdk/gdk3-sections.txt
index 6769743c7b..8814d364e3 100644
--- a/docs/reference/gdk/gdk3-sections.txt
+++ b/docs/reference/gdk/gdk3-sections.txt
@@ -1020,6 +1020,7 @@ GdkGrabOwnership
gdk_enable_multidevice
gdk_device_manager_get_display
gdk_device_manager_list_devices
+gdk_device_manager_get_client_pointer
<SUBSECTION>
gdk_device_get_name
diff --git a/gdk/gdk.symbols b/gdk/gdk.symbols
index 3a5b9bb8d3..5dc69280f3 100644
--- a/gdk/gdk.symbols
+++ b/gdk/gdk.symbols
@@ -386,6 +386,7 @@ gdk_cursor_get_image
gdk_device_manager_get_display
gdk_device_manager_get_type G_GNUC_CONST
gdk_device_manager_list_devices
+gdk_device_manager_get_client_pointer
#endif
#endif
diff --git a/gdk/gdkdevicemanager.c b/gdk/gdkdevicemanager.c
index 5bce0fcf91..b93e8a3cd8 100644
--- a/gdk/gdkdevicemanager.c
+++ b/gdk/gdkdevicemanager.c
@@ -298,5 +298,29 @@ gdk_device_manager_list_devices (GdkDeviceManager *device_manager,
return GDK_DEVICE_MANAGER_GET_CLASS (device_manager)->list_devices (device_manager, type);
}
+/**
+ * gdk_device_manager_get_client_pointer:
+ * @device_manager: a #GdkDeviceManager
+ *
+ * Returns the client pointer, that is, the master pointer that acts as the core pointer
+ * for this application. In X11, window managers may change this depending on the interaction
+ * pattern under the presence of several pointers.
+ *
+ * You should use this function sheldomly, only in code that isn't triggered by a #GdkEvent
+ * and there aren't other means to get a meaningful #GdkDevice to operate on.
+ *
+ * Returns: The client pointer.
+ *
+ * Since: 3.0
+ **/
+GdkDevice *
+gdk_device_manager_get_client_pointer (GdkDeviceManager *device_manager)
+{
+ g_return_val_if_fail (GDK_IS_DEVICE_MANAGER (device_manager), NULL);
+
+ return GDK_DEVICE_MANAGER_GET_CLASS (device_manager)->get_client_pointer (device_manager);
+}
+
+
#define __GDK_DEVICE_MANAGER_C__
#include "gdkaliasdef.c"
diff --git a/gdk/gdkdevicemanager.h b/gdk/gdkdevicemanager.h
index 32ac376884..bed2bbba86 100644
--- a/gdk/gdkdevicemanager.h
+++ b/gdk/gdkdevicemanager.h
@@ -63,6 +63,7 @@ struct _GdkDeviceManagerClass
/* VMethods */
GList * (* list_devices) (GdkDeviceManager *device_manager,
GdkDeviceType type);
+ GdkDevice * (* get_client_pointer) (GdkDeviceManager *device_manager);
};
GType gdk_device_manager_get_type (void) G_GNUC_CONST;
@@ -70,6 +71,7 @@ GType gdk_device_manager_get_type (void) G_GNUC_CONST;
GdkDisplay * gdk_device_manager_get_display (GdkDeviceManager *device_manager);
GList * gdk_device_manager_list_devices (GdkDeviceManager *device_manager,
GdkDeviceType type);
+GdkDevice * gdk_device_manager_get_client_pointer (GdkDeviceManager *device_manager);
G_END_DECLS
diff --git a/gdk/gdkdisplay.c b/gdk/gdkdisplay.c
index d1f6a47a19..366fcfd326 100644
--- a/gdk/gdkdisplay.c
+++ b/gdk/gdkdisplay.c
@@ -605,7 +605,7 @@ gdk_event_send_clientmessage_toall (GdkEvent *event)
* Return value: the core pointer device; this is owned by the
* display and should not be freed.
*
- * Deprecated: 3.0: Use gdk_display_get_device_manager() instead, or
+ * Deprecated: 3.0: Use gdk_display_get_client_pointer() instead, or
* gdk_event_get_device() if a #GdkEvent with pointer device
* information is available.
**/
@@ -626,7 +626,7 @@ gdk_device_get_core_pointer (void)
*
* Since: 2.2
*
- * Deprecated: 3.0: Use gdk_display_get_device_manager() instead, or
+ * Deprecated: 3.0: Use gdk_display_get_client_pointer() instead, or
* gdk_event_get_device() if a #GdkEvent with device
* information is available.
**/
diff --git a/gdk/quartz/gdkdevicemanager-core.c b/gdk/quartz/gdkdevicemanager-core.c
index d4765c1335..e96e9a9bf3 100644
--- a/gdk/quartz/gdkdevicemanager-core.c
+++ b/gdk/quartz/gdkdevicemanager-core.c
@@ -34,6 +34,7 @@ static void gdk_device_manager_core_constructed (GObject *object);
static GList * gdk_device_manager_core_list_devices (GdkDeviceManager *device_manager,
GdkDeviceType type);
+static GdkDevice * gdk_device_manager_core_get_client_pointer (GdkDeviceManager *device_manager);
G_DEFINE_TYPE (GdkDeviceManagerCore, gdk_device_manager_core, GDK_TYPE_DEVICE_MANAGER)
@@ -47,6 +48,7 @@ gdk_device_manager_core_class_init (GdkDeviceManagerCoreClass *klass)
object_class->finalize = gdk_device_manager_core_finalize;
object_class->constructed = gdk_device_manager_core_constructed;
device_manager_class->list_devices = gdk_device_manager_core_list_devices;
+ device_manager_class->get_client_pointer = gdk_device_manager_core_get_client_pointer;
}
static GdkDevice *
@@ -128,3 +130,12 @@ gdk_device_manager_core_list_devices (GdkDeviceManager *device_manager,
return devices;
}
+
+static GdkDevice *
+gdk_device_manager_core_get_client_pointer (GdkDeviceManager *device_manager)
+{
+ GdkDeviceManagerCore *device_manager_core;
+
+ device_manager_core = (GdkDeviceManagerCore *) device_manager;
+ return device_manager_core->core_pointer;
+}
diff --git a/gdk/win32/gdkdevicemanager-win32.c b/gdk/win32/gdkdevicemanager-win32.c
index eea814296b..e3696bbf6f 100644
--- a/gdk/win32/gdkdevicemanager-win32.c
+++ b/gdk/win32/gdkdevicemanager-win32.c
@@ -69,6 +69,7 @@ static void gdk_device_manager_win32_constructed (GObject *object);
static GList * gdk_device_manager_win32_list_devices (GdkDeviceManager *device_manager,
GdkDeviceType type);
+static GdkDevice * gdk_device_manager_win32_get_client_pointer (GdkDeviceManager *device_manager);
G_DEFINE_TYPE (GdkDeviceManagerWin32, gdk_device_manager_win32, GDK_TYPE_DEVICE_MANAGER)
@@ -82,6 +83,7 @@ gdk_device_manager_win32_class_init (GdkDeviceManagerWin32Class *klass)
object_class->finalize = gdk_device_manager_win32_finalize;
object_class->constructed = gdk_device_manager_win32_constructed;
device_manager_class->list_devices = gdk_device_manager_win32_list_devices;
+ device_manager_class->get_client_pointer = gdk_device_manager_win32_get_client_pointer;
}
static GdkDevice *
@@ -690,6 +692,15 @@ gdk_device_manager_win32_list_devices (GdkDeviceManager *device_manager,
return devices;
}
+static GdkDevice *
+gdk_device_manager_win32_get_client_pointer (GdkDeviceManager *device_manager)
+{
+ GdkDeviceManagerWin32 *device_manager_win32;
+
+ device_manager_win32 = (GdkDeviceManagerWin32 *) device_manager;
+ return device_manager_win32->core_pointer;
+}
+
void
_gdk_input_set_tablet_active (void)
{
diff --git a/gdk/x11/gdkdevicemanager-core.c b/gdk/x11/gdkdevicemanager-core.c
index 7d2e9e44b3..5fb6f2ee8c 100644
--- a/gdk/x11/gdkdevicemanager-core.c
+++ b/gdk/x11/gdkdevicemanager-core.c
@@ -42,6 +42,7 @@ static void gdk_device_manager_core_constructed (GObject *object);
static GList * gdk_device_manager_core_list_devices (GdkDeviceManager *device_manager,
GdkDeviceType type);
+static GdkDevice * gdk_device_manager_core_get_client_pointer (GdkDeviceManager *device_manager);
static void gdk_device_manager_event_translator_init (GdkEventTranslatorIface *iface);
@@ -64,6 +65,7 @@ gdk_device_manager_core_class_init (GdkDeviceManagerCoreClass *klass)
object_class->finalize = gdk_device_manager_core_finalize;
object_class->constructed = gdk_device_manager_core_constructed;
device_manager_class->list_devices = gdk_device_manager_core_list_devices;
+ device_manager_class->get_client_pointer = gdk_device_manager_core_get_client_pointer;
}
static void
@@ -900,5 +902,14 @@ gdk_device_manager_core_list_devices (GdkDeviceManager *device_manager,
return devices;
}
+static GdkDevice *
+gdk_device_manager_core_get_client_pointer (GdkDeviceManager *device_manager)
+{
+ GdkDeviceManagerCore *device_manager_core;
+
+ device_manager_core = (GdkDeviceManagerCore *) device_manager;
+ return device_manager_core->core_pointer;
+}
+
#define __GDK_DEVICE_MANAGER_CORE_C__
#include "gdkaliasdef.c"
diff --git a/gdk/x11/gdkdevicemanager-xi2.c b/gdk/x11/gdkdevicemanager-xi2.c
index f9a9cd7650..57eb3212b2 100644
--- a/gdk/x11/gdkdevicemanager-xi2.c
+++ b/gdk/x11/gdkdevicemanager-xi2.c
@@ -38,6 +38,7 @@ static void gdk_device_manager_xi2_finalize (GObject *object);
static GList * gdk_device_manager_xi2_list_devices (GdkDeviceManager *device_manager,
GdkDeviceType type);
+static GdkDevice * gdk_device_manager_xi2_get_client_pointer (GdkDeviceManager *device_manager);
static void gdk_device_manager_xi2_event_translator_init (GdkEventTranslatorIface *iface);
@@ -66,6 +67,7 @@ gdk_device_manager_xi2_class_init (GdkDeviceManagerXI2Class *klass)
object_class->finalize = gdk_device_manager_xi2_finalize;
device_manager_class->list_devices = gdk_device_manager_xi2_list_devices;
+ device_manager_class->get_client_pointer = gdk_device_manager_xi2_get_client_pointer;
}
static void
@@ -419,6 +421,23 @@ gdk_device_manager_xi2_list_devices (GdkDeviceManager *device_manager,
return g_list_copy (list);
}
+static GdkDevice *
+gdk_device_manager_xi2_get_client_pointer (GdkDeviceManager *device_manager)
+{
+ GdkDeviceManagerXI2 *device_manager_xi2;
+ GdkDisplay *display;
+ int device_id;
+
+ device_manager_xi2 = (GdkDeviceManagerXI2 *) device_manager;
+ display = gdk_device_manager_get_display (device_manager);
+
+ XIGetClientPointer (GDK_DISPLAY_XDISPLAY (display),
+ None, &device_id);
+
+ return g_hash_table_lookup (device_manager_xi2->id_table,
+ GINT_TO_POINTER (device_id));
+}
+
static void
gdk_device_manager_xi2_event_translator_init (GdkEventTranslatorIface *iface)
{
diff --git a/gdk/x11/gdkdevicemanager-xi2.h b/gdk/x11/gdkdevicemanager-xi2.h
index 828aec3f48..20054c160c 100644
--- a/gdk/x11/gdkdevicemanager-xi2.h
+++ b/gdk/x11/gdkdevicemanager-xi2.h
@@ -45,6 +45,8 @@ struct _GdkDeviceManagerXI2
GList *slave_devices;
GList *floating_devices;
+ GdkDevice *client_pointer;
+
int opcode;
};