]> Pileus Git - ~andy/gtk/blob - gdk/broadway/gdkscreen-broadway.c
527deb3d0eb49508390760e71b94a073e016730e
[~andy/gtk] / gdk / broadway / gdkscreen-broadway.c
1  /*
2  * gdkscreen-broadway.c
3  * 
4  * Copyright 2001 Sun Microsystems Inc. 
5  *
6  * Erwann Chenede <erwann.chenede@sun.com>
7  *
8  * This library is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU Library General Public
10  * License as published by the Free Software Foundation; either
11  * version 2 of the License, or (at your option) any later version.
12  *
13  * This library is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16  * Library General Public License for more details.
17  *
18  * You should have received a copy of the GNU Library General Public
19  * License along with this library; if not, write to the
20  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
21  * Boston, MA 02111-1307, USA.
22  */
23
24 #include "config.h"
25
26 #include "gdkscreen-broadway.h"
27
28 #include "gdkscreen.h"
29 #include "gdkdisplay.h"
30 #include "gdkdisplay-broadway.h"
31
32 #include <glib.h>
33
34 #include <stdlib.h>
35 #include <string.h>
36
37 static void         gdk_screen_broadway_dispose     (GObject              *object);
38 static void         gdk_screen_broadway_finalize    (GObject              *object);
39
40 G_DEFINE_TYPE (GdkScreenBroadway, _gdk_screen_broadway, GDK_TYPE_SCREEN)
41
42 static void
43 _gdk_screen_broadway_class_init (GdkScreenBroadwayClass *klass)
44 {
45   GObjectClass *object_class = G_OBJECT_CLASS (klass);
46
47   object_class->dispose = gdk_screen_broadway_dispose;
48   object_class->finalize = gdk_screen_broadway_finalize;
49 }
50
51 static void
52 _gdk_screen_broadway_init (GdkScreenBroadway *screen)
53 {
54   screen->width = 1024;
55   screen->height = 768;
56 }
57
58 GdkDisplay *
59 gdk_screen_get_display (GdkScreen *screen)
60 {
61   g_return_val_if_fail (GDK_IS_SCREEN (screen), NULL);
62
63   return GDK_SCREEN_BROADWAY (screen)->display;
64 }
65
66 gint
67 gdk_screen_get_width (GdkScreen *screen)
68 {
69   g_return_val_if_fail (GDK_IS_SCREEN (screen), 0);
70
71   return GDK_SCREEN_BROADWAY (screen)->width;
72 }
73
74 gint
75 gdk_screen_get_height (GdkScreen *screen)
76 {
77   g_return_val_if_fail (GDK_IS_SCREEN (screen), 0);
78
79   return GDK_SCREEN_BROADWAY (screen)->height;
80 }
81
82 gint
83 gdk_screen_get_width_mm (GdkScreen *screen)
84 {
85   g_return_val_if_fail (GDK_IS_SCREEN (screen), 0);
86
87   return gdk_screen_get_width (screen) * 25.4 / 96;
88 }
89
90 gint
91 gdk_screen_get_height_mm (GdkScreen *screen)
92 {
93   g_return_val_if_fail (GDK_IS_SCREEN (screen), 0);
94
95   return gdk_screen_get_height (screen) * 25.4 / 96;
96 }
97
98 gint
99 gdk_screen_get_number (GdkScreen *screen)
100 {
101   g_return_val_if_fail (GDK_IS_SCREEN (screen), 0);
102
103   return 0;
104 }
105
106 GdkWindow *
107 gdk_screen_get_root_window (GdkScreen *screen)
108 {
109   g_return_val_if_fail (GDK_IS_SCREEN (screen), NULL);
110
111   return GDK_SCREEN_BROADWAY (screen)->root_window;
112 }
113
114 static void
115 gdk_screen_broadway_dispose (GObject *object)
116 {
117   GdkScreenBroadway *screen_broadway = GDK_SCREEN_BROADWAY (object);
118
119   if (screen_broadway->root_window)
120     _gdk_window_destroy (screen_broadway->root_window, TRUE);
121
122   G_OBJECT_CLASS (_gdk_screen_broadway_parent_class)->dispose (object);
123 }
124
125 static void
126 gdk_screen_broadway_finalize (GObject *object)
127 {
128   GdkScreenBroadway *screen_broadway = GDK_SCREEN_BROADWAY (object);
129   gint          i;
130
131   if (screen_broadway->root_window)
132     g_object_unref (screen_broadway->root_window);
133
134   /* Visual Part */
135   for (i = 0; i < screen_broadway->nvisuals; i++)
136     g_object_unref (screen_broadway->visuals[i]);
137   g_free (screen_broadway->visuals);
138
139   G_OBJECT_CLASS (_gdk_screen_broadway_parent_class)->finalize (object);
140 }
141
142 gint
143 gdk_screen_get_n_monitors (GdkScreen *screen)
144 {
145   g_return_val_if_fail (GDK_IS_SCREEN (screen), 0);
146
147   return 1;
148 }
149
150 gint
151 gdk_screen_get_primary_monitor (GdkScreen *screen)
152 {
153   g_return_val_if_fail (GDK_IS_SCREEN (screen), 0);
154
155   return 0;
156 }
157
158 gint
159 gdk_screen_get_monitor_width_mm (GdkScreen *screen,
160                                  gint       monitor_num)
161 {
162   g_return_val_if_fail (GDK_IS_SCREEN (screen), -1);
163   g_return_val_if_fail (monitor_num == 0, -1);
164
165   return gdk_screen_get_width_mm (screen);
166 }
167
168 gint
169 gdk_screen_get_monitor_height_mm (GdkScreen *screen,
170                                   gint       monitor_num)
171 {
172   g_return_val_if_fail (GDK_IS_SCREEN (screen), -1);
173   g_return_val_if_fail (monitor_num == 0, -1);
174
175   return gdk_screen_get_height_mm (screen);
176 }
177
178 gchar *
179 gdk_screen_get_monitor_plug_name (GdkScreen *screen,
180                                   gint       monitor_num)
181 {
182   g_return_val_if_fail (GDK_IS_SCREEN (screen), NULL);
183   g_return_val_if_fail (monitor_num == 0, NULL);
184
185   return g_strdup ("browser");
186 }
187
188 /**
189  * gdk_screen_get_monitor_geometry:
190  * @screen: a #GdkScreen
191  * @monitor_num: the monitor number, between 0 and gdk_screen_get_n_monitors (screen)
192  * @dest: a #GdkRectangle to be filled with the monitor geometry
193  *
194  * Retrieves the #GdkRectangle representing the size and position of
195  * the individual monitor within the entire screen area.
196  *
197  * Note that the size of the entire screen area can be retrieved via
198  * gdk_screen_get_width() and gdk_screen_get_height().
199  *
200  * Since: 2.2
201  */
202 void
203 gdk_screen_get_monitor_geometry (GdkScreen    *screen,
204                                  gint          monitor_num,
205                                  GdkRectangle *dest)
206 {
207   GdkScreenBroadway *screen_broadway = GDK_SCREEN_BROADWAY (screen);
208
209   g_return_if_fail (GDK_IS_SCREEN (screen));
210   g_return_if_fail (monitor_num == 0);
211
212   if (dest)
213     {
214       dest->x = 0;
215       dest->y = 0;
216       dest->width = screen_broadway->width;
217       dest->height = screen_broadway->height;
218     }
219 }
220
221 GdkVisual *
222 gdk_screen_get_rgba_visual (GdkScreen *screen)
223 {
224   GdkScreenBroadway *screen_broadway;
225
226   g_return_val_if_fail (GDK_IS_SCREEN (screen), NULL);
227
228   screen_broadway = GDK_SCREEN_BROADWAY (screen);
229
230   return screen_broadway->rgba_visual;
231 }
232
233 GdkScreen *
234 _gdk_broadway_screen_new (GdkDisplay *display,
235                      gint        screen_number)
236 {
237   GdkScreen *screen;
238   GdkScreenBroadway *screen_broadway;
239
240   screen = g_object_new (GDK_TYPE_SCREEN_BROADWAY, NULL);
241
242   screen_broadway = GDK_SCREEN_BROADWAY (screen);
243   screen_broadway->display = display;
244   _gdk_visual_init (screen);
245   _gdk_windowing_window_init (screen);
246
247   return screen;
248 }
249
250 /*
251  * It is important that we first request the selection
252  * notification, and then setup the initial state of
253  * is_composited to avoid a race condition here.
254  */
255 void
256 _gdk_broadway_screen_setup (GdkScreen *screen)
257 {
258 }
259
260 gboolean
261 gdk_screen_is_composited (GdkScreen *screen)
262 {
263   GdkScreenBroadway *screen_broadway;
264
265   g_return_val_if_fail (GDK_IS_SCREEN (screen), FALSE);
266
267   screen_broadway = GDK_SCREEN_BROADWAY (screen);
268
269   return FALSE;
270 }
271
272
273 gchar *
274 gdk_screen_make_display_name (GdkScreen *screen)
275 {
276   g_return_val_if_fail (GDK_IS_SCREEN (screen), NULL);
277
278   return g_strdup ("browser");
279 }
280
281 GdkWindow *
282 gdk_screen_get_active_window (GdkScreen *screen)
283 {
284   return NULL;
285 }
286
287 GList *
288 gdk_screen_get_window_stack (GdkScreen *screen)
289 {
290   return NULL;
291 }
292
293 void
294 gdk_screen_broadcast_client_message (GdkScreen *screen,
295                                      GdkEvent  *event)
296 {
297 }
298
299 gboolean
300 gdk_screen_get_setting (GdkScreen   *screen,
301                         const gchar *name,
302                         GValue      *value)
303 {
304   return FALSE;
305 }
306
307 gboolean
308 gdk_net_wm_supports (GdkAtom property)
309 {
310   return FALSE;
311 }
312
313 void
314 _gdk_screen_broadway_events_init (GdkScreen *screen)
315 {
316 }
317
318 gchar *
319 _gdk_windowing_substitute_screen_number (const gchar *display_name,
320                                          gint         screen_number)
321 {
322   return g_strdup ("browser");
323 }
324