]> Pileus Git - ~andy/gtk/blob - gdk/broadway/gdkdisplay-broadway.c
[broadway] Rename X11 -> Broadway in all code
[~andy/gtk] / gdk / broadway / gdkdisplay-broadway.c
1 /* GDK - The GIMP Drawing Kit
2  * gdkdisplay-broadway.c
3  * 
4  * Copyright 2001 Sun Microsystems Inc.
5  * Copyright (C) 2004 Nokia Corporation
6  *
7  * Erwann Chenede <erwann.chenede@sun.com>
8  *
9  * This library is free software; you can redistribute it and/or
10  * modify it under the terms of the GNU Library General Public
11  * License as published by the Free Software Foundation; either
12  * version 2 of the License, or (at your option) any later version.
13  *
14  * This library is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
17  * Library General Public License for more details.
18  *
19  * You should have received a copy of the GNU Library General Public
20  * License along with this library; if not, write to the
21  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
22  * Boston, MA 02111-1307, USA.
23  */
24
25 #include "config.h"
26
27 #include "gdkdisplay-broadway.h"
28
29 #include "gdkdisplay.h"
30 #include "gdkeventsource.h"
31 #include "gdkscreen.h"
32 #include "gdkscreen-broadway.h"
33 #include "gdkinternals.h"
34 #include "gdkdeviceprivate.h"
35 #include "gdkdevicemanager.h"
36
37 #include <glib.h>
38 #include <glib/gprintf.h>
39 #include <stdlib.h>
40 #include <string.h>
41 #include <errno.h>
42 #include <unistd.h>
43
44 static void   gdk_display_broadway_dispose            (GObject            *object);
45 static void   gdk_display_broadway_finalize           (GObject            *object);
46
47 G_DEFINE_TYPE (GdkDisplayBroadway, _gdk_display_broadway, GDK_TYPE_DISPLAY)
48
49
50 static void
51 _gdk_display_broadway_class_init (GdkDisplayBroadwayClass * class)
52 {
53   GObjectClass *object_class = G_OBJECT_CLASS (class);
54
55   object_class->dispose = gdk_display_broadway_dispose;
56   object_class->finalize = gdk_display_broadway_finalize;
57 }
58
59 static void
60 _gdk_display_broadway_init (GdkDisplayBroadway *display)
61 {
62 }
63
64 static void
65 _gdk_event_init (GdkDisplay *display)
66 {
67   GdkDisplayBroadway *display_broadway;
68
69   display_broadway = GDK_DISPLAY_BROADWAY (display);
70   display_broadway->event_source = gdk_event_source_new (display);
71 }
72
73 static void
74 _gdk_input_init (GdkDisplay *display)
75 {
76   GdkDisplayBroadway *display_broadway;
77   GdkDeviceManager *device_manager;
78   GdkDevice *device;
79   GList *list, *l;
80
81   display_broadway = GDK_DISPLAY_BROADWAY (display);
82   device_manager = gdk_display_get_device_manager (display);
83
84   /* For backwards compatibility, just add
85    * floating devices that are not keyboards.
86    */
87   list = gdk_device_manager_list_devices (device_manager, GDK_DEVICE_TYPE_FLOATING);
88
89   for (l = list; l; l = l->next)
90     {
91       device = l->data;
92
93       if (gdk_device_get_source (device) == GDK_SOURCE_KEYBOARD)
94         continue;
95
96       display_broadway->input_devices = g_list_prepend (display_broadway->input_devices,
97                                                    g_object_ref (l->data));
98     }
99
100   g_list_free (list);
101
102   /* Now set "core" pointer to the first
103    * master device that is a pointer.
104    */
105   list = gdk_device_manager_list_devices (device_manager, GDK_DEVICE_TYPE_MASTER);
106
107   for (l = list; l; l = l->next)
108     {
109       device = list->data;
110
111       if (gdk_device_get_source (device) != GDK_SOURCE_MOUSE)
112         continue;
113
114       display->core_pointer = device;
115       break;
116     }
117
118   /* Add the core pointer to the devices list */
119   display_broadway->input_devices = g_list_prepend (display_broadway->input_devices,
120                                                g_object_ref (display->core_pointer));
121
122   g_list_free (list);
123 }
124
125 GdkDisplay *
126 gdk_display_open (const gchar *display_name)
127 {
128   GdkDisplay *display;
129   GdkDisplayBroadway *display_broadway;
130   const char *sm_client_id;
131
132   display = g_object_new (GDK_TYPE_DISPLAY_BROADWAY, NULL);
133   display_broadway = GDK_DISPLAY_BROADWAY (display);
134
135   /* initialize the display's screens */
136   display_broadway->screens = g_new (GdkScreen *, 1);
137   display_broadway->screens[0] = _gdk_broadway_screen_new (display, 0);
138
139   /* We need to initialize events after we have the screen
140    * structures in places
141    */
142   _gdk_screen_broadway_events_init (display_broadway->screens[0]);
143
144   /*set the default screen */
145   display_broadway->default_screen = display_broadway->screens[0];
146
147   display->device_manager = _gdk_device_manager_new (display);
148
149   _gdk_event_init (display);
150
151   sm_client_id = _gdk_get_sm_client_id ();
152   if (sm_client_id)
153     _gdk_windowing_display_set_sm_client_id (display, sm_client_id);
154
155   _gdk_input_init (display);
156   _gdk_dnd_init (display);
157
158   _gdk_broadway_screen_setup (display_broadway->screens[0]);
159
160   g_signal_emit_by_name (display, "opened");
161   g_signal_emit_by_name (gdk_display_manager_get (), "display-opened", display);
162
163   return display;
164 }
165
166
167 G_CONST_RETURN gchar *
168 gdk_display_get_name (GdkDisplay *display)
169 {
170   g_return_val_if_fail (GDK_IS_DISPLAY (display), NULL);
171
172   return (gchar *) "Broadway";
173 }
174
175 gint
176 gdk_display_get_n_screens (GdkDisplay *display)
177 {
178   g_return_val_if_fail (GDK_IS_DISPLAY (display), 0);
179
180   return 1;
181 }
182
183 GdkScreen *
184 gdk_display_get_screen (GdkDisplay *display,
185                         gint        screen_num)
186 {
187   g_return_val_if_fail (GDK_IS_DISPLAY (display), NULL);
188   g_return_val_if_fail (screen_num == 0, NULL);
189
190   return GDK_DISPLAY_BROADWAY (display)->screens[screen_num];
191 }
192
193 GdkScreen *
194 gdk_display_get_default_screen (GdkDisplay *display)
195 {
196   g_return_val_if_fail (GDK_IS_DISPLAY (display), NULL);
197
198   return GDK_DISPLAY_BROADWAY (display)->default_screen;
199 }
200
201 void
202 gdk_device_ungrab (GdkDevice  *device,
203                    guint32     time_)
204 {
205 }
206
207 void
208 gdk_display_beep (GdkDisplay *display)
209 {
210   g_return_if_fail (GDK_IS_DISPLAY (display));
211 }
212
213 void
214 gdk_display_sync (GdkDisplay *display)
215 {
216   g_return_if_fail (GDK_IS_DISPLAY (display));
217
218 }
219
220 void
221 gdk_display_flush (GdkDisplay *display)
222 {
223   g_return_if_fail (GDK_IS_DISPLAY (display));
224
225 }
226
227 GdkWindow *
228 gdk_display_get_default_group (GdkDisplay *display)
229 {
230   g_return_val_if_fail (GDK_IS_DISPLAY (display), NULL);
231
232   return NULL;
233 }
234
235 void
236 gdk_broadway_display_grab (GdkDisplay *display)
237 {
238 }
239
240 void
241 gdk_broadway_display_ungrab (GdkDisplay *display)
242 {
243 }
244
245 static void
246 gdk_display_broadway_dispose (GObject *object)
247 {
248   GdkDisplayBroadway *display_broadway = GDK_DISPLAY_BROADWAY (object);
249
250   g_list_foreach (display_broadway->input_devices, (GFunc) g_object_run_dispose, NULL);
251
252   _gdk_screen_close (display_broadway->screens[0]);
253
254   if (display_broadway->event_source)
255     {
256       g_source_destroy (display_broadway->event_source);
257       g_source_unref (display_broadway->event_source);
258       display_broadway->event_source = NULL;
259     }
260
261   G_OBJECT_CLASS (_gdk_display_broadway_parent_class)->dispose (object);
262 }
263
264 static void
265 gdk_display_broadway_finalize (GObject *object)
266 {
267   GdkDisplayBroadway *display_broadway = GDK_DISPLAY_BROADWAY (object);
268
269   /* Keymap */
270   if (display_broadway->keymap)
271     g_object_unref (display_broadway->keymap);
272
273   _gdk_broadway_cursor_display_finalize (GDK_DISPLAY_OBJECT(display_broadway));
274
275   /* Atom Hashtable */
276   g_hash_table_destroy (display_broadway->atom_from_virtual);
277   g_hash_table_destroy (display_broadway->atom_to_virtual);
278
279   /* input GdkDevice list */
280   g_list_foreach (display_broadway->input_devices, (GFunc) g_object_unref, NULL);
281   g_list_free (display_broadway->input_devices);
282   /* Free all GdkScreens */
283   g_object_unref (display_broadway->screens[0]);
284   g_free (display_broadway->screens);
285
286   G_OBJECT_CLASS (_gdk_display_broadway_parent_class)->finalize (object);
287 }
288
289 void
290 _gdk_windowing_set_default_display (GdkDisplay *display)
291 {
292 }
293
294 void
295 gdk_notify_startup_complete (void)
296 {
297 }
298
299 void
300 gdk_notify_startup_complete_with_id (const gchar* startup_id)
301 {
302 }
303
304 gboolean
305 gdk_display_supports_selection_notification (GdkDisplay *display)
306 {
307   return FALSE;
308 }
309
310 gboolean
311 gdk_display_request_selection_notification (GdkDisplay *display,
312                                             GdkAtom     selection)
313
314 {
315     return FALSE;
316 }
317
318 gboolean
319 gdk_display_supports_clipboard_persistence (GdkDisplay *display)
320 {
321   return FALSE;
322 }
323
324 void
325 gdk_display_store_clipboard (GdkDisplay    *display,
326                              GdkWindow     *clipboard_window,
327                              guint32        time_,
328                              const GdkAtom *targets,
329                              gint           n_targets)
330 {
331 }
332
333 guint32
334 gdk_broadway_display_get_user_time (GdkDisplay *display)
335 {
336   return GDK_DISPLAY_BROADWAY (display)->user_time;
337 }
338
339 gboolean
340 gdk_display_supports_shapes (GdkDisplay *display)
341 {
342   return FALSE;
343 }
344
345 gboolean
346 gdk_display_supports_input_shapes (GdkDisplay *display)
347 {
348   return FALSE;
349 }
350
351 gboolean
352 gdk_display_supports_composite (GdkDisplay *display)
353 {
354   return FALSE;
355 }
356
357 GList *
358 gdk_display_list_devices (GdkDisplay *display)
359 {
360   g_return_val_if_fail (GDK_IS_DISPLAY (display), NULL);
361
362   return GDK_DISPLAY_BROADWAY (display)->input_devices;
363 }
364
365 gboolean
366 gdk_event_send_client_message_for_display (GdkDisplay     *display,
367                                            GdkEvent       *event,
368                                            GdkNativeWindow winid)
369 {
370   return FALSE;
371 }
372
373 void
374 gdk_display_add_client_message_filter (GdkDisplay   *display,
375                                        GdkAtom       message_type,
376                                        GdkFilterFunc func,
377                                        gpointer      data)
378 {
379 }
380
381 void
382 gdk_add_client_message_filter (GdkAtom       message_type,
383                                GdkFilterFunc func,
384                                gpointer      data)
385 {
386 }
387
388 void
389 gdk_flush (void)
390 {
391   GSList *tmp_list = _gdk_displays;
392
393   while (tmp_list)
394     {
395       gdk_display_flush (GDK_DISPLAY_OBJECT (tmp_list->data));
396       tmp_list = tmp_list->next;
397     }
398 }
399
400 gulong
401 _gdk_windowing_window_get_next_serial (GdkDisplay *display)
402 {
403   return 0;
404 }