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_size_changed (GdkScreen *screen, BroadwayInputScreenResizeNotify *msg)
108 GdkBroadwayScreen *broadway_screen = GDK_BROADWAY_SCREEN (screen);
111 width = gdk_screen_get_width (screen);
112 height = gdk_screen_get_height (screen);
114 broadway_screen->width = msg->width;
115 broadway_screen->height = msg->height;
117 if (width != gdk_screen_get_width (screen) ||
118 height != gdk_screen_get_height (screen))
119 g_signal_emit_by_name (screen, "size-changed");
123 gdk_broadway_screen_dispose (GObject *object)
125 GdkBroadwayScreen *broadway_screen = GDK_BROADWAY_SCREEN (object);
127 if (broadway_screen->root_window)
128 _gdk_window_destroy (broadway_screen->root_window, TRUE);
130 G_OBJECT_CLASS (gdk_broadway_screen_parent_class)->dispose (object);
134 gdk_broadway_screen_finalize (GObject *object)
136 GdkBroadwayScreen *broadway_screen = GDK_BROADWAY_SCREEN (object);
139 if (broadway_screen->root_window)
140 g_object_unref (broadway_screen->root_window);
143 for (i = 0; i < broadway_screen->nvisuals; i++)
144 g_object_unref (broadway_screen->visuals[i]);
145 g_free (broadway_screen->visuals);
147 G_OBJECT_CLASS (gdk_broadway_screen_parent_class)->finalize (object);
151 gdk_broadway_screen_get_n_monitors (GdkScreen *screen)
153 g_return_val_if_fail (GDK_IS_SCREEN (screen), 0);
159 gdk_broadway_screen_get_primary_monitor (GdkScreen *screen)
161 g_return_val_if_fail (GDK_IS_SCREEN (screen), 0);
167 gdk_broadway_screen_get_monitor_width_mm (GdkScreen *screen,
170 g_return_val_if_fail (GDK_IS_SCREEN (screen), -1);
171 g_return_val_if_fail (monitor_num == 0, -1);
173 return gdk_screen_get_width_mm (screen);
177 gdk_broadway_screen_get_monitor_height_mm (GdkScreen *screen,
180 g_return_val_if_fail (GDK_IS_SCREEN (screen), -1);
181 g_return_val_if_fail (monitor_num == 0, -1);
183 return gdk_screen_get_height_mm (screen);
187 gdk_broadway_screen_get_monitor_plug_name (GdkScreen *screen,
190 g_return_val_if_fail (GDK_IS_SCREEN (screen), NULL);
191 g_return_val_if_fail (monitor_num == 0, NULL);
193 return g_strdup ("browser");
197 gdk_broadway_screen_get_monitor_geometry (GdkScreen *screen,
201 GdkBroadwayScreen *broadway_screen = GDK_BROADWAY_SCREEN (screen);
203 g_return_if_fail (GDK_IS_SCREEN (screen));
204 g_return_if_fail (monitor_num == 0);
210 dest->width = broadway_screen->width;
211 dest->height = broadway_screen->height;
216 gdk_broadway_screen_get_rgba_visual (GdkScreen *screen)
218 GdkBroadwayScreen *broadway_screen;
220 g_return_val_if_fail (GDK_IS_SCREEN (screen), NULL);
222 broadway_screen = GDK_BROADWAY_SCREEN (screen);
224 return broadway_screen->rgba_visual;
228 _gdk_broadway_screen_new (GdkDisplay *display,
232 GdkBroadwayScreen *broadway_screen;
234 screen = g_object_new (GDK_TYPE_BROADWAY_SCREEN, NULL);
236 broadway_screen = GDK_BROADWAY_SCREEN (screen);
237 broadway_screen->display = display;
238 _gdk_broadway_screen_init_visuals (screen);
239 _gdk_broadway_screen_init_root_window (screen);
245 * It is important that we first request the selection
246 * notification, and then setup the initial state of
247 * is_composited to avoid a race condition here.
250 _gdk_broadway_screen_setup (GdkScreen *screen)
255 gdk_broadway_screen_is_composited (GdkScreen *screen)
257 g_return_val_if_fail (GDK_IS_SCREEN (screen), FALSE);
264 gdk_broadway_screen_make_display_name (GdkScreen *screen)
266 g_return_val_if_fail (GDK_IS_SCREEN (screen), NULL);
268 return g_strdup ("browser");
272 gdk_broadway_screen_get_active_window (GdkScreen *screen)
278 gdk_broadway_screen_get_window_stack (GdkScreen *screen)
284 gdk_broadway_screen_broadcast_client_message (GdkScreen *screen,
290 gdk_broadway_screen_get_setting (GdkScreen *screen,
298 _gdk_broadway_screen_events_init (GdkScreen *screen)
303 gdk_broadway_screen_class_init (GdkBroadwayScreenClass *klass)
305 GObjectClass *object_class = G_OBJECT_CLASS (klass);
306 GdkScreenClass *screen_class = GDK_SCREEN_CLASS (klass);
308 object_class->dispose = gdk_broadway_screen_dispose;
309 object_class->finalize = gdk_broadway_screen_finalize;
311 screen_class->get_display = gdk_broadway_screen_get_display;
312 screen_class->get_width = gdk_broadway_screen_get_width;
313 screen_class->get_height = gdk_broadway_screen_get_height;
314 screen_class->get_width_mm = gdk_broadway_screen_get_width_mm;
315 screen_class->get_height_mm = gdk_broadway_screen_get_height_mm;
316 screen_class->get_number = gdk_broadway_screen_get_number;
317 screen_class->get_root_window = gdk_broadway_screen_get_root_window;
318 screen_class->get_n_monitors = gdk_broadway_screen_get_n_monitors;
319 screen_class->get_primary_monitor = gdk_broadway_screen_get_primary_monitor;
320 screen_class->get_monitor_width_mm = gdk_broadway_screen_get_monitor_width_mm;
321 screen_class->get_monitor_height_mm = gdk_broadway_screen_get_monitor_height_mm;
322 screen_class->get_monitor_plug_name = gdk_broadway_screen_get_monitor_plug_name;
323 screen_class->get_monitor_geometry = gdk_broadway_screen_get_monitor_geometry;
324 screen_class->is_composited = gdk_broadway_screen_is_composited;
325 screen_class->make_display_name = gdk_broadway_screen_make_display_name;
326 screen_class->get_active_window = gdk_broadway_screen_get_active_window;
327 screen_class->get_window_stack = gdk_broadway_screen_get_window_stack;
328 screen_class->broadcast_client_message = gdk_broadway_screen_broadcast_client_message;
329 screen_class->get_setting = gdk_broadway_screen_get_setting;
330 screen_class->get_rgba_visual = gdk_broadway_screen_get_rgba_visual;
331 screen_class->get_system_visual = _gdk_broadway_screen_get_system_visual;
332 screen_class->visual_get_best_depth = _gdk_broadway_screen_visual_get_best_depth;
333 screen_class->visual_get_best_type = _gdk_broadway_screen_visual_get_best_type;
334 screen_class->visual_get_best = _gdk_broadway_screen_visual_get_best;
335 screen_class->visual_get_best_with_depth = _gdk_broadway_screen_visual_get_best_with_depth;
336 screen_class->visual_get_best_with_type = _gdk_broadway_screen_visual_get_best_with_type;
337 screen_class->visual_get_best_with_both = _gdk_broadway_screen_visual_get_best_with_both;
338 screen_class->query_depths = _gdk_broadway_screen_query_depths;
339 screen_class->query_visual_types = _gdk_broadway_screen_query_visual_types;
340 screen_class->list_visuals = _gdk_broadway_screen_list_visuals;