]> Pileus Git - ~andy/gtk/blob - gdk/broadway/gdkdevicemanager-broadway.c
Merge branch 'gdk-backend-wayland'
[~andy/gtk] / gdk / broadway / gdkdevicemanager-broadway.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 "gdkdevicemanager-broadway.h"
23
24 #include "gdktypes.h"
25 #include "gdkdevicemanager.h"
26 #include "gdkdevice-broadway.h"
27 #include "gdkkeysyms.h"
28 #include "gdkprivate-broadway.h"
29
30 #define HAS_FOCUS(toplevel)                           \
31   ((toplevel)->has_focus || (toplevel)->has_pointer_focus)
32
33 static void    gdk_broadway_device_manager_finalize    (GObject *object);
34 static void    gdk_broadway_device_manager_constructed (GObject *object);
35
36 static GList * gdk_broadway_device_manager_list_devices (GdkDeviceManager *device_manager,
37                                                          GdkDeviceType     type);
38 static GdkDevice * gdk_broadway_device_manager_get_client_pointer (GdkDeviceManager *device_manager);
39
40 G_DEFINE_TYPE (GdkBroadwayDeviceManager, gdk_broadway_device_manager, GDK_TYPE_DEVICE_MANAGER)
41
42 static void
43 gdk_broadway_device_manager_class_init (GdkBroadwayDeviceManagerClass *klass)
44 {
45   GdkDeviceManagerClass *device_manager_class = GDK_DEVICE_MANAGER_CLASS (klass);
46   GObjectClass *object_class = G_OBJECT_CLASS (klass);
47
48   object_class->finalize = gdk_broadway_device_manager_finalize;
49   object_class->constructed = gdk_broadway_device_manager_constructed;
50   device_manager_class->list_devices = gdk_broadway_device_manager_list_devices;
51   device_manager_class->get_client_pointer = gdk_broadway_device_manager_get_client_pointer;
52 }
53
54 static GdkDevice *
55 create_core_pointer (GdkDeviceManager *device_manager,
56                      GdkDisplay       *display)
57 {
58   return g_object_new (GDK_TYPE_BROADWAY_DEVICE,
59                        "name", "Core Pointer",
60                        "type", GDK_DEVICE_TYPE_MASTER,
61                        "input-source", GDK_SOURCE_MOUSE,
62                        "input-mode", GDK_MODE_SCREEN,
63                        "has-cursor", TRUE,
64                        "display", display,
65                        "device-manager", device_manager,
66                        NULL);
67 }
68
69 static GdkDevice *
70 create_core_keyboard (GdkDeviceManager *device_manager,
71                       GdkDisplay       *display)
72 {
73   return g_object_new (GDK_TYPE_BROADWAY_DEVICE,
74                        "name", "Core Keyboard",
75                        "type", GDK_DEVICE_TYPE_MASTER,
76                        "input-source", GDK_SOURCE_KEYBOARD,
77                        "input-mode", GDK_MODE_SCREEN,
78                        "has-cursor", FALSE,
79                        "display", display,
80                        "device-manager", device_manager,
81                        NULL);
82 }
83
84 static void
85 gdk_broadway_device_manager_init (GdkBroadwayDeviceManager *device_manager)
86 {
87 }
88
89 static void
90 gdk_broadway_device_manager_finalize (GObject *object)
91 {
92   GdkBroadwayDeviceManager *device_manager;
93
94   device_manager = GDK_BROADWAY_DEVICE_MANAGER (object);
95
96   g_object_unref (device_manager->core_pointer);
97   g_object_unref (device_manager->core_keyboard);
98
99   G_OBJECT_CLASS (gdk_broadway_device_manager_parent_class)->finalize (object);
100 }
101
102 static void
103 gdk_broadway_device_manager_constructed (GObject *object)
104 {
105   GdkBroadwayDeviceManager *device_manager;
106   GdkDisplay *display;
107
108   device_manager = GDK_BROADWAY_DEVICE_MANAGER (object);
109   display = gdk_device_manager_get_display (GDK_DEVICE_MANAGER (object));
110   device_manager->core_pointer = create_core_pointer (GDK_DEVICE_MANAGER (device_manager), display);
111   device_manager->core_keyboard = create_core_keyboard (GDK_DEVICE_MANAGER (device_manager), display);
112
113   _gdk_device_set_associated_device (device_manager->core_pointer, device_manager->core_keyboard);
114   _gdk_device_set_associated_device (device_manager->core_keyboard, device_manager->core_pointer);
115 }
116
117
118 static GList *
119 gdk_broadway_device_manager_list_devices (GdkDeviceManager *device_manager,
120                                           GdkDeviceType     type)
121 {
122   GdkBroadwayDeviceManager *broadway_device_manager = (GdkBroadwayDeviceManager *) device_manager;
123   GList *devices = NULL;
124
125   if (type == GDK_DEVICE_TYPE_MASTER)
126     {
127       devices = g_list_prepend (devices, broadway_device_manager->core_keyboard);
128       devices = g_list_prepend (devices, broadway_device_manager->core_pointer);
129     }
130
131   return devices;
132 }
133
134 static GdkDevice *
135 gdk_broadway_device_manager_get_client_pointer (GdkDeviceManager *device_manager)
136 {
137   GdkBroadwayDeviceManager *broadway_device_manager = (GdkBroadwayDeviceManager *) device_manager;
138
139   return broadway_device_manager->core_pointer;
140 }
141
142 GdkDeviceManager *
143 _gdk_broadway_device_manager_new (GdkDisplay *display)
144 {
145   return g_object_new (GDK_TYPE_BROADWAY_DEVICE_MANAGER,
146                        "display", display,
147                        NULL);
148 }