4 * Copyright 2001 Sun Microsystems Inc.
6 * Erwann Chenede <erwann.chenede@sun.com>
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.
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.
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.
26 #include "gdkscreen-broadway.h"
28 #include "gdkscreen.h"
29 #include "gdkdisplay.h"
30 #include "gdkdisplay-broadway.h"
37 static void gdk_broadway_screen_dispose (GObject *object);
38 static void gdk_broadway_screen_finalize (GObject *object);
40 G_DEFINE_TYPE (GdkBroadwayScreen, gdk_broadway_screen, GDK_TYPE_SCREEN)
43 gdk_broadway_screen_init (GdkBroadwayScreen *screen)
50 gdk_broadway_screen_get_display (GdkScreen *screen)
52 g_return_val_if_fail (GDK_IS_SCREEN (screen), NULL);
54 return GDK_BROADWAY_SCREEN (screen)->display;
58 gdk_broadway_screen_get_width (GdkScreen *screen)
60 g_return_val_if_fail (GDK_IS_SCREEN (screen), 0);
62 return GDK_BROADWAY_SCREEN (screen)->width;
66 gdk_broadway_screen_get_height (GdkScreen *screen)
68 g_return_val_if_fail (GDK_IS_SCREEN (screen), 0);
70 return GDK_BROADWAY_SCREEN (screen)->height;
74 gdk_broadway_screen_get_width_mm (GdkScreen *screen)
76 g_return_val_if_fail (GDK_IS_SCREEN (screen), 0);
78 return gdk_screen_get_width (screen) * 25.4 / 96;
82 gdk_broadway_screen_get_height_mm (GdkScreen *screen)
84 g_return_val_if_fail (GDK_IS_SCREEN (screen), 0);
86 return gdk_screen_get_height (screen) * 25.4 / 96;
90 gdk_broadway_screen_get_number (GdkScreen *screen)
92 g_return_val_if_fail (GDK_IS_SCREEN (screen), 0);
98 gdk_broadway_screen_get_root_window (GdkScreen *screen)
100 g_return_val_if_fail (GDK_IS_SCREEN (screen), NULL);
102 return GDK_BROADWAY_SCREEN (screen)->root_window;
106 gdk_broadway_screen_dispose (GObject *object)
108 GdkBroadwayScreen *broadway_screen = GDK_BROADWAY_SCREEN (object);
110 if (broadway_screen->root_window)
111 _gdk_window_destroy (broadway_screen->root_window, TRUE);
113 G_OBJECT_CLASS (gdk_broadway_screen_parent_class)->dispose (object);
117 gdk_broadway_screen_finalize (GObject *object)
119 GdkBroadwayScreen *broadway_screen = GDK_BROADWAY_SCREEN (object);
122 if (broadway_screen->root_window)
123 g_object_unref (broadway_screen->root_window);
126 for (i = 0; i < broadway_screen->nvisuals; i++)
127 g_object_unref (broadway_screen->visuals[i]);
128 g_free (broadway_screen->visuals);
130 G_OBJECT_CLASS (gdk_broadway_screen_parent_class)->finalize (object);
134 gdk_broadway_screen_get_n_monitors (GdkScreen *screen)
136 g_return_val_if_fail (GDK_IS_SCREEN (screen), 0);
142 gdk_broadway_screen_get_primary_monitor (GdkScreen *screen)
144 g_return_val_if_fail (GDK_IS_SCREEN (screen), 0);
150 gdk_broadway_screen_get_monitor_width_mm (GdkScreen *screen,
153 g_return_val_if_fail (GDK_IS_SCREEN (screen), -1);
154 g_return_val_if_fail (monitor_num == 0, -1);
156 return gdk_screen_get_width_mm (screen);
160 gdk_broadway_screen_get_monitor_height_mm (GdkScreen *screen,
163 g_return_val_if_fail (GDK_IS_SCREEN (screen), -1);
164 g_return_val_if_fail (monitor_num == 0, -1);
166 return gdk_screen_get_height_mm (screen);
170 gdk_broadway_screen_get_monitor_plug_name (GdkScreen *screen,
173 g_return_val_if_fail (GDK_IS_SCREEN (screen), NULL);
174 g_return_val_if_fail (monitor_num == 0, NULL);
176 return g_strdup ("browser");
180 gdk_broadway_screen_get_monitor_geometry (GdkScreen *screen,
184 GdkBroadwayScreen *broadway_screen = GDK_BROADWAY_SCREEN (screen);
186 g_return_if_fail (GDK_IS_SCREEN (screen));
187 g_return_if_fail (monitor_num == 0);
193 dest->width = broadway_screen->width;
194 dest->height = broadway_screen->height;
199 gdk_broadway_screen_get_rgba_visual (GdkScreen *screen)
201 GdkBroadwayScreen *broadway_screen;
203 g_return_val_if_fail (GDK_IS_SCREEN (screen), NULL);
205 broadway_screen = GDK_BROADWAY_SCREEN (screen);
207 return broadway_screen->rgba_visual;
211 _gdk_broadway_screen_new (GdkDisplay *display,
215 GdkBroadwayScreen *broadway_screen;
217 screen = g_object_new (GDK_TYPE_BROADWAY_SCREEN, NULL);
219 broadway_screen = GDK_BROADWAY_SCREEN (screen);
220 broadway_screen->display = display;
221 _gdk_broadway_screen_init_visuals (screen);
222 _gdk_broadway_screen_init_root_window (screen);
228 * It is important that we first request the selection
229 * notification, and then setup the initial state of
230 * is_composited to avoid a race condition here.
233 _gdk_broadway_screen_setup (GdkScreen *screen)
238 gdk_broadway_screen_is_composited (GdkScreen *screen)
240 GdkBroadwayScreen *broadway_screen;
242 g_return_val_if_fail (GDK_IS_SCREEN (screen), FALSE);
244 broadway_screen = GDK_BROADWAY_SCREEN (screen);
251 gdk_broadway_screen_make_display_name (GdkScreen *screen)
253 g_return_val_if_fail (GDK_IS_SCREEN (screen), NULL);
255 return g_strdup ("browser");
259 gdk_broadway_screen_get_active_window (GdkScreen *screen)
265 gdk_broadway_screen_get_window_stack (GdkScreen *screen)
271 gdk_broadway_screen_broadcast_client_message (GdkScreen *screen,
277 gdk_broadway_screen_get_setting (GdkScreen *screen,
285 _gdk_broadway_screen_events_init (GdkScreen *screen)
290 _gdk_windowing_substitute_screen_number (const gchar *display_name,
293 return g_strdup ("browser");
297 gdk_broadway_screen_class_init (GdkBroadwayScreenClass *klass)
299 GObjectClass *object_class = G_OBJECT_CLASS (klass);
300 GdkScreenClass *screen_class = GDK_SCREEN_CLASS (klass);
302 object_class->dispose = gdk_broadway_screen_dispose;
303 object_class->finalize = gdk_broadway_screen_finalize;
305 screen_class->get_display = gdk_broadway_screen_get_display;
306 screen_class->get_width = gdk_broadway_screen_get_width;
307 screen_class->get_height = gdk_broadway_screen_get_height;
308 screen_class->get_width_mm = gdk_broadway_screen_get_width_mm;
309 screen_class->get_height_mm = gdk_broadway_screen_get_height_mm;
310 screen_class->get_number = gdk_broadway_screen_get_number;
311 screen_class->get_root_window = gdk_broadway_screen_get_root_window;
312 screen_class->get_n_monitors = gdk_broadway_screen_get_n_monitors;
313 screen_class->get_primary_monitor = gdk_broadway_screen_get_primary_monitor;
314 screen_class->get_monitor_width_mm = gdk_broadway_screen_get_monitor_width_mm;
315 screen_class->get_monitor_height_mm = gdk_broadway_screen_get_monitor_height_mm;
316 screen_class->get_monitor_plug_name = gdk_broadway_screen_get_monitor_plug_name;
317 screen_class->get_monitor_geometry = gdk_broadway_screen_get_monitor_geometry;
318 screen_class->is_composited = gdk_broadway_screen_is_composited;
319 screen_class->make_display_name = gdk_broadway_screen_make_display_name;
320 screen_class->get_active_window = gdk_broadway_screen_get_active_window;
321 screen_class->get_window_stack = gdk_broadway_screen_get_window_stack;
322 screen_class->broadcast_client_message = gdk_broadway_screen_broadcast_client_message;
323 screen_class->get_setting = gdk_broadway_screen_get_setting;
324 screen_class->get_rgba_visual = gdk_broadway_screen_get_rgba_visual;
325 screen_class->get_system_visual = _gdk_broadway_screen_get_system_visual;
326 screen_class->visual_get_best_depth = _gdk_broadway_screen_visual_get_best_depth;
327 screen_class->visual_get_best_type = _gdk_broadway_screen_visual_get_best_type;
328 screen_class->visual_get_best = _gdk_broadway_screen_visual_get_best;
329 screen_class->visual_get_best_with_depth = _gdk_broadway_screen_visual_get_best_with_depth;
330 screen_class->visual_get_best_with_type = _gdk_broadway_screen_visual_get_best_with_type;
331 screen_class->visual_get_best_with_both = _gdk_broadway_screen_visual_get_best_with_both;
332 screen_class->query_depths = _gdk_broadway_screen_query_depths;
333 screen_class->query_visual_types = _gdk_broadway_screen_query_visual_types;
334 screen_class->list_visuals = _gdk_broadway_screen_list_visuals;