]> Pileus Git - ~andy/gtk/blob - gdk/quartz/gdkdisplay-quartz.c
Implement selection owner vfuncs for quartz
[~andy/gtk] / gdk / quartz / gdkdisplay-quartz.c
1 /* gdkdisplay-quartz.c
2  *
3  * Copyright (C) 2005 Imendio AB
4  *
5  * This library is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU Lesser General Public
7  * License as published by the Free Software Foundation; either
8  * version 2 of the License, or (at your option) any later version.
9  *
10  * This library is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13  * Lesser General Public License for more details.
14  *
15  * You should have received a copy of the GNU Lesser General Public
16  * License along with this library; if not, write to the
17  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18  * Boston, MA 02111-1307, USA.
19  */
20
21 #include "config.h"
22
23 #include "gdk.h"
24 #include "gdkdisplay-quartz.h"
25 #include "gdkprivate-quartz.h"
26 #include "gdkscreen-quartz.h"
27 #include "gdkdevicemanager-core.h"
28
29
30 static GdkWindow *
31 gdk_quartz_display_get_default_group (GdkDisplay *display)
32 {
33   g_return_val_if_fail (GDK_IS_DISPLAY (display), NULL);
34
35   /* FIXME: Implement */
36
37   return NULL;
38 }
39
40 GdkDeviceManager *
41 _gdk_device_manager_new (GdkDisplay *display)
42 {
43   return g_object_new (GDK_TYPE_DEVICE_MANAGER_CORE,
44                        "display", display,
45                        NULL);
46 }
47
48 GdkDisplay *
49 _gdk_quartz_display_open (const gchar *display_name)
50 {
51   if (_gdk_display != NULL)
52     return NULL;
53
54   /* Initialize application */
55   [NSApplication sharedApplication];
56
57   _gdk_display = g_object_new (_gdk_quartz_display_get_type (), NULL);
58   _gdk_display->device_manager = _gdk_device_manager_new (_gdk_display);
59
60   _gdk_screen = _gdk_screen_quartz_new ();
61
62   _gdk_quartz_visual_init (_gdk_screen);
63
64   _gdk_windowing_window_init ();
65
66   _gdk_quartz_events_init ();
67
68   _gdk_quartz_input_init ();
69
70 #if 0
71   /* FIXME: Remove the #if 0 when we have these functions */
72   _gdk_quartz_dnd_init ();
73 #endif
74
75   g_signal_emit_by_name (gdk_display_manager_get (),
76                          "display_opened", _gdk_display);
77
78   return _gdk_display;
79 }
80
81 static const gchar *
82 gdk_quartz_display_get_name (GdkDisplay *display)
83 {
84   static gchar *display_name = NULL;
85
86   if (!display_name)
87     {
88       GDK_QUARTZ_ALLOC_POOL;
89       display_name = g_strdup ([[[NSHost currentHost] name] UTF8String]);
90       GDK_QUARTZ_RELEASE_POOL;
91     }
92
93   return display_name;
94 }
95
96 static gint
97 gdk_quartz_display_get_n_screens (GdkDisplay *display)
98 {
99   g_return_val_if_fail (GDK_IS_DISPLAY (display), 0);
100
101   return 1;
102 }
103
104 static GdkScreen *
105 gdk_quartz_display_get_screen (GdkDisplay *display,
106                                gint        screen_num)
107 {
108   g_return_val_if_fail (GDK_IS_DISPLAY (display), NULL);
109   g_return_val_if_fail (screen_num == 0, NULL);
110
111   return _gdk_screen;
112 }
113
114 static GdkScreen *
115 gdk_quartz_display_get_default_screen (GdkDisplay *display)
116 {
117   return _gdk_screen;
118 }
119
120 static void
121 gdk_quartz_display_beep (GdkDisplay *display)
122 {
123   g_return_if_fail (GDK_IS_DISPLAY (display));
124
125   NSBeep();
126 }
127
128 static gboolean
129 gdk_quartz_display_supports_selection_notification (GdkDisplay *display)
130 {
131   g_return_val_if_fail (GDK_IS_DISPLAY (display), FALSE);
132
133   /* FIXME: Implement */
134   return FALSE;
135 }
136
137 static gboolean
138 gdk_quartz_display_request_selection_notification (GdkDisplay *display,
139                                                    GdkAtom     selection)
140
141 {
142   /* FIXME: Implement */
143   return FALSE;
144 }
145
146 static gboolean
147 gdk_quartz_display_supports_clipboard_persistence (GdkDisplay *display)
148 {
149   /* FIXME: Implement */
150   return FALSE;
151 }
152
153 static gboolean
154 gdk_quartz_display_supports_shapes (GdkDisplay *display)
155 {
156   /* FIXME: Implement */
157   return FALSE;
158 }
159
160 static gboolean
161 gdk_quartz_display_supports_input_shapes (GdkDisplay *display)
162 {
163   /* FIXME: Implement */
164   return FALSE;
165 }
166
167 static void
168 gdk_quartz_display_store_clipboard (GdkDisplay    *display,
169                                     GdkWindow     *clipboard_window,
170                                     guint32        time_,
171                                     const GdkAtom *targets,
172                                     gint           n_targets)
173 {
174   /* FIXME: Implement */
175 }
176
177
178 static gboolean
179 gdk_quartz_display_supports_composite (GdkDisplay *display)
180 {
181   /* FIXME: Implement */
182   return FALSE;
183 }
184
185 gulong
186 _gdk_quartz_display_get_next_serial (GdkDisplay *display)
187 {
188   return 0;
189 }
190
191 G_DEFINE_TYPE (GdkDisplayQuartz, _gdk_display_quartz, GDK_TYPE_DISPLAY)
192
193 static void
194 _gdk_display_quartz_init (GdkDisplayQuartz *display)
195 {
196   gdk_quartz_display_manager_add_display (gdk_display_nmanager_get (),
197                                        GDK_DISPLAY_OBJECT (display));
198 }
199
200 static void
201 _gdk_display_quartz_dispose (GObject *object)
202 {
203   _gdk_quartz_display_manager_remove_display (gdk_display_manager_get (),
204                                               GDK_DISPLAY_OBJECT (object));
205
206   G_OBJECT_CLASS (_gdk_display_quartz_parent_class)->dispose (object);
207 }
208
209 static void
210 _gdk_display_quartz_finalize (GObject *object)
211 {
212   G_OBJECT_CLASS (_gdk_display_quartz_parent_class)->finalize (object);
213 }
214
215 static void
216 _gdk_display_quartz_class_init (GdkDisplayQuartz *class)
217 {
218   GObjectClass *object_class = G_OBJECT_CLASS (class);
219   GdkDisplayClass *display_class = GDK_DISPLAY_CLASS (class);
220
221   object_class->finalize = _gdk_display_quartz_finalize;
222
223   display_class->get_name = gdk_quartz_display_get_name;
224   display_class->get_n_screens = gdk_quartz_display_get_n_screens;
225   display_class->get_screen = gdk_quartz_display_get_screen;
226   display_class->get_default_screen = gdk_quartz_display_get_default_screen;
227   display_class->beep = gdk_quartz_display_beep;
228   display_class->sync = _gdk_quartz_display_sync;
229   display_class->flush = _gdk_quartz_display_flush;
230   display_class->queue_events = _gdk_quartz_display_queue_events;
231   display_class->has_pending = _gdk_quartz_display_has_pending;
232   display_class->get_default_group = gdk_quartz_display_get_default_group;
233   display_class->supports_selection_notification = gdk_quartz_display_supports_selection_notification;
234   display_class->request_selection_notification = gdk_quartz_display_request_selection_notification;
235   display_class->supports_clipboard_persistence = gdk_quartz_display_supports_clipboard_persistence;
236   display_class->store_clipboard = gdk_quartz_display_store_clipboard;
237   display_class->supports_shapes = gdk_quartz_display_supports_shapes;
238   display_class->supports_input_shapes = gdk_quartz_display_supports_input_shapes;
239   display_class->supports_composite = gdk_quartz_display_supports_composite;
240   display_class->list_devices = _gdk_quartz_display_list_devices;
241   display_class->send_client_message = _gdk_quartz_display_send_client_message;
242   display_class->add_client_message_filter = _gdk_quartz_display_add_client_message_filter;
243   display_class->get_drag_protocol = _gdk_quartz_display_get_drag_protocol;
244   display_class->get_cursor_for_type = _gdk_quartz_display_get_cursor_for_type;
245   display_class->get_cursor_for_name = _gdk_quartz_display_get_cursor_for_name;
246   display_class->get_cursor_for_pixbuf = _gdk_quartz_display_get_cursor_for_pixbuf;
247   display_class->get_default_cursor_size = _gdk_quartz_display_get_default_cursor_size;
248   display_class->get_maximal_cursor_size = _gdk_quartz_display_get_maximal_cursor_size;
249   display_class->supports_cursor_alpha = _gdk_quartz_display_supports_cursor_alpha;
250   display_class->supports_cursor_color = _gdk_quartz_display_supports_cursor_color;
251   display_class->get_next_serial = gdk_quartz_display_get_next_serial;
252   display_class->notify_startup_complete = _gdk_quartz_display_notify_startup_complete;
253   display_class->event_data_copy = _gdk_quartz_display_event_data_copy;
254   display_class->event_data_free = _gdk_quartz_display_event_data_free;
255   display_class->create_window_impl = _gdk_quartz_display_create_window_impl;
256   display_class->get_keymap = _gdk_quartz_display_get_keymap;
257   display_class->get_selection_owner = _gdk_quartz_display_get_selection_owner;
258   display_class->set_selection_owner = _gdk_quartz_display_set_selection_owner;
259 }