]> Pileus Git - ~andy/gtk/blob - gdk/quartz/gdkdevicemanager-core-quartz.c
f5d0ab6cc40af25b0b7ccf786f25c9456f8d98a3
[~andy/gtk] / gdk / quartz / gdkdevicemanager-core-quartz.c
1 /* GDK - The GIMP Drawing Kit
2  * Copyright (C) 2009 Carlos Garnacho <carlosg@gnome.org>
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Lesser General Public
6  * License as published by the Free Software Foundation; either
7  * version 2 of the License, or (at your option) any later version.
8  *
9  * This library is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  * Lesser General Public License for more details.
13  *
14  * You should have received a copy of the GNU Lesser General Public
15  * License along with this library; if not, write to the
16  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
17  * Boston, MA 02111-1307, USA.
18  */
19
20 #include "config.h"
21
22 #include <gdk/gdktypes.h>
23 #include <gdk/gdkdevicemanager.h>
24 #include <gdk/gdkdeviceprivate.h>
25 #include <gdk/gdkdevicemanagerprivate.h>
26 #include "gdkdevicemanager-core-quartz.h"
27 #include "gdkquartzdevice-core.h"
28 #include "gdkkeysyms.h"
29
30
31 #define HAS_FOCUS(toplevel)                           \
32   ((toplevel)->has_focus || (toplevel)->has_pointer_focus)
33
34 static void    gdk_quartz_device_manager_core_finalize    (GObject *object);
35 static void    gdk_quartz_device_manager_core_constructed (GObject *object);
36
37 static GList * gdk_quartz_device_manager_core_list_devices (GdkDeviceManager *device_manager,
38                                                             GdkDeviceType     type);
39 static GdkDevice * gdk_quartz_device_manager_core_get_client_pointer (GdkDeviceManager *device_manager);
40
41
42 G_DEFINE_TYPE (GdkQuartzDeviceManagerCore, gdk_quartz_device_manager_core, GDK_TYPE_DEVICE_MANAGER)
43
44 static void
45 gdk_quartz_device_manager_core_class_init (GdkQuartzDeviceManagerCoreClass *klass)
46 {
47   GdkDeviceManagerClass *device_manager_class = GDK_DEVICE_MANAGER_CLASS (klass);
48   GObjectClass *object_class = G_OBJECT_CLASS (klass);
49
50   object_class->finalize = gdk_quartz_device_manager_core_finalize;
51   object_class->constructed = gdk_quartz_device_manager_core_constructed;
52   device_manager_class->list_devices = gdk_quartz_device_manager_core_list_devices;
53   device_manager_class->get_client_pointer = gdk_quartz_device_manager_core_get_client_pointer;
54 }
55
56 static GdkDevice *
57 create_core_pointer (GdkDeviceManager *device_manager,
58                      GdkDisplay       *display)
59 {
60   return g_object_new (GDK_TYPE_QUARTZ_DEVICE_CORE,
61                        "name", "Core Pointer",
62                        "type", GDK_DEVICE_TYPE_MASTER,
63                        "input-source", GDK_SOURCE_MOUSE,
64                        "input-mode", GDK_MODE_SCREEN,
65                        "has-cursor", TRUE,
66                        "display", display,
67                        "device-manager", device_manager,
68                        NULL);
69 }
70
71 static GdkDevice *
72 create_core_keyboard (GdkDeviceManager *device_manager,
73                       GdkDisplay       *display)
74 {
75   return g_object_new (GDK_TYPE_QUARTZ_DEVICE_CORE,
76                        "name", "Core Keyboard",
77                        "type", GDK_DEVICE_TYPE_MASTER,
78                        "input-source", GDK_SOURCE_KEYBOARD,
79                        "input-mode", GDK_MODE_SCREEN,
80                        "has-cursor", FALSE,
81                        "display", display,
82                        "device-manager", device_manager,
83                        NULL);
84 }
85
86 static void
87 gdk_quartz_device_manager_core_init (GdkQuartzDeviceManagerCore *device_manager)
88 {
89 }
90
91 static void
92 gdk_quartz_device_manager_core_finalize (GObject *object)
93 {
94   GdkQuartzDeviceManagerCore *quartz_device_manager_core;
95
96   quartz_device_manager_core = GDK_QUARTZ_DEVICE_MANAGER_CORE (object);
97
98   g_object_unref (quartz_device_manager_core->core_pointer);
99   g_object_unref (quartz_device_manager_core->core_keyboard);
100
101   G_OBJECT_CLASS (gdk_quartz_device_manager_core_parent_class)->finalize (object);
102 }
103
104 static void
105 gdk_quartz_device_manager_core_constructed (GObject *object)
106 {
107   GdkQuartzDeviceManagerCore *device_manager;
108   GdkDisplay *display;
109
110   device_manager = GDK_QUARTZ_DEVICE_MANAGER_CORE (object);
111   display = gdk_device_manager_get_display (GDK_DEVICE_MANAGER (object));
112   device_manager->core_pointer = create_core_pointer (GDK_DEVICE_MANAGER (device_manager), display);
113   device_manager->core_keyboard = create_core_keyboard (GDK_DEVICE_MANAGER (device_manager), display);
114
115   _gdk_device_set_associated_device (device_manager->core_pointer, device_manager->core_keyboard);
116   _gdk_device_set_associated_device (device_manager->core_keyboard, device_manager->core_pointer);
117 }
118
119 static GList *
120 gdk_quartz_device_manager_core_list_devices (GdkDeviceManager *device_manager,
121                                              GdkDeviceType     type)
122 {
123   GdkQuartzDeviceManagerCore *quartz_device_manager_core;
124   GList *devices = NULL;
125
126   if (type == GDK_DEVICE_TYPE_MASTER)
127     {
128       quartz_device_manager_core = (GdkQuartzDeviceManagerCore *) device_manager;
129       devices = g_list_prepend (devices, quartz_device_manager_core->core_keyboard);
130       devices = g_list_prepend (devices, quartz_device_manager_core->core_pointer);
131     }
132
133   return devices;
134 }
135
136 static GdkDevice *
137 gdk_quartz_device_manager_core_get_client_pointer (GdkDeviceManager *device_manager)
138 {
139   GdkQuartzDeviceManagerCore *quartz_device_manager_core;
140
141   quartz_device_manager_core = (GdkQuartzDeviceManagerCore *) device_manager;
142   return quartz_device_manager_core->core_pointer;
143 }