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, see <http://www.gnu.org/licenses/>.
24 #include "gdkscreen-broadway.h"
26 #include "gdkscreen.h"
27 #include "gdkdisplay.h"
28 #include "gdkdisplay-broadway.h"
35 static void gdk_broadway_screen_dispose (GObject *object);
36 static void gdk_broadway_screen_finalize (GObject *object);
38 G_DEFINE_TYPE (GdkBroadwayScreen, gdk_broadway_screen, GDK_TYPE_SCREEN)
41 gdk_broadway_screen_init (GdkBroadwayScreen *screen)
48 gdk_broadway_screen_get_display (GdkScreen *screen)
50 return GDK_BROADWAY_SCREEN (screen)->display;
54 gdk_broadway_screen_get_width (GdkScreen *screen)
56 return GDK_BROADWAY_SCREEN (screen)->width;
60 gdk_broadway_screen_get_height (GdkScreen *screen)
62 return GDK_BROADWAY_SCREEN (screen)->height;
66 gdk_broadway_screen_get_width_mm (GdkScreen *screen)
68 return gdk_screen_get_width (screen) * 25.4 / 96;
72 gdk_broadway_screen_get_height_mm (GdkScreen *screen)
74 return gdk_screen_get_height (screen) * 25.4 / 96;
78 gdk_broadway_screen_get_number (GdkScreen *screen)
84 gdk_broadway_screen_get_root_window (GdkScreen *screen)
86 return GDK_BROADWAY_SCREEN (screen)->root_window;
90 _gdk_broadway_screen_size_changed (GdkScreen *screen,
91 BroadwayInputScreenResizeNotify *msg)
93 GdkBroadwayScreen *broadway_screen = GDK_BROADWAY_SCREEN (screen);
96 width = gdk_screen_get_width (screen);
97 height = gdk_screen_get_height (screen);
99 broadway_screen->width = msg->width;
100 broadway_screen->height = msg->height;
102 if (width != gdk_screen_get_width (screen) ||
103 height != gdk_screen_get_height (screen))
104 g_signal_emit_by_name (screen, "size-changed");
108 gdk_broadway_screen_dispose (GObject *object)
110 GdkBroadwayScreen *broadway_screen = GDK_BROADWAY_SCREEN (object);
112 if (broadway_screen->root_window)
113 _gdk_window_destroy (broadway_screen->root_window, TRUE);
115 G_OBJECT_CLASS (gdk_broadway_screen_parent_class)->dispose (object);
119 gdk_broadway_screen_finalize (GObject *object)
121 GdkBroadwayScreen *broadway_screen = GDK_BROADWAY_SCREEN (object);
124 if (broadway_screen->root_window)
125 g_object_unref (broadway_screen->root_window);
128 for (i = 0; i < broadway_screen->nvisuals; i++)
129 g_object_unref (broadway_screen->visuals[i]);
130 g_free (broadway_screen->visuals);
132 G_OBJECT_CLASS (gdk_broadway_screen_parent_class)->finalize (object);
136 gdk_broadway_screen_get_n_monitors (GdkScreen *screen)
142 gdk_broadway_screen_get_primary_monitor (GdkScreen *screen)
148 gdk_broadway_screen_get_monitor_width_mm (GdkScreen *screen,
151 return gdk_screen_get_width_mm (screen);
155 gdk_broadway_screen_get_monitor_height_mm (GdkScreen *screen,
158 return gdk_screen_get_height_mm (screen);
162 gdk_broadway_screen_get_monitor_plug_name (GdkScreen *screen,
165 return g_strdup ("browser");
169 gdk_broadway_screen_get_monitor_geometry (GdkScreen *screen,
173 GdkBroadwayScreen *broadway_screen = GDK_BROADWAY_SCREEN (screen);
179 dest->width = broadway_screen->width;
180 dest->height = broadway_screen->height;
185 gdk_broadway_screen_get_rgba_visual (GdkScreen *screen)
187 GdkBroadwayScreen *broadway_screen = GDK_BROADWAY_SCREEN (screen);
189 return broadway_screen->rgba_visual;
193 _gdk_broadway_screen_new (GdkDisplay *display,
197 GdkBroadwayScreen *broadway_screen;
199 screen = g_object_new (GDK_TYPE_BROADWAY_SCREEN, NULL);
201 broadway_screen = GDK_BROADWAY_SCREEN (screen);
202 broadway_screen->display = display;
203 _gdk_broadway_screen_init_visuals (screen);
204 _gdk_broadway_screen_init_root_window (screen);
210 * It is important that we first request the selection
211 * notification, and then setup the initial state of
212 * is_composited to avoid a race condition here.
215 _gdk_broadway_screen_setup (GdkScreen *screen)
220 gdk_broadway_screen_is_composited (GdkScreen *screen)
227 gdk_broadway_screen_make_display_name (GdkScreen *screen)
229 return g_strdup ("browser");
233 gdk_broadway_screen_get_active_window (GdkScreen *screen)
239 gdk_broadway_screen_get_window_stack (GdkScreen *screen)
245 gdk_broadway_screen_broadcast_client_message (GdkScreen *screen,
251 gdk_broadway_screen_get_setting (GdkScreen *screen,
259 _gdk_broadway_screen_events_init (GdkScreen *screen)
264 gdk_broadway_screen_class_init (GdkBroadwayScreenClass *klass)
266 GObjectClass *object_class = G_OBJECT_CLASS (klass);
267 GdkScreenClass *screen_class = GDK_SCREEN_CLASS (klass);
269 object_class->dispose = gdk_broadway_screen_dispose;
270 object_class->finalize = gdk_broadway_screen_finalize;
272 screen_class->get_display = gdk_broadway_screen_get_display;
273 screen_class->get_width = gdk_broadway_screen_get_width;
274 screen_class->get_height = gdk_broadway_screen_get_height;
275 screen_class->get_width_mm = gdk_broadway_screen_get_width_mm;
276 screen_class->get_height_mm = gdk_broadway_screen_get_height_mm;
277 screen_class->get_number = gdk_broadway_screen_get_number;
278 screen_class->get_root_window = gdk_broadway_screen_get_root_window;
279 screen_class->get_n_monitors = gdk_broadway_screen_get_n_monitors;
280 screen_class->get_primary_monitor = gdk_broadway_screen_get_primary_monitor;
281 screen_class->get_monitor_width_mm = gdk_broadway_screen_get_monitor_width_mm;
282 screen_class->get_monitor_height_mm = gdk_broadway_screen_get_monitor_height_mm;
283 screen_class->get_monitor_plug_name = gdk_broadway_screen_get_monitor_plug_name;
284 screen_class->get_monitor_geometry = gdk_broadway_screen_get_monitor_geometry;
285 screen_class->get_monitor_workarea = gdk_broadway_screen_get_monitor_geometry;
286 screen_class->is_composited = gdk_broadway_screen_is_composited;
287 screen_class->make_display_name = gdk_broadway_screen_make_display_name;
288 screen_class->get_active_window = gdk_broadway_screen_get_active_window;
289 screen_class->get_window_stack = gdk_broadway_screen_get_window_stack;
290 screen_class->broadcast_client_message = gdk_broadway_screen_broadcast_client_message;
291 screen_class->get_setting = gdk_broadway_screen_get_setting;
292 screen_class->get_rgba_visual = gdk_broadway_screen_get_rgba_visual;
293 screen_class->get_system_visual = _gdk_broadway_screen_get_system_visual;
294 screen_class->visual_get_best_depth = _gdk_broadway_screen_visual_get_best_depth;
295 screen_class->visual_get_best_type = _gdk_broadway_screen_visual_get_best_type;
296 screen_class->visual_get_best = _gdk_broadway_screen_visual_get_best;
297 screen_class->visual_get_best_with_depth = _gdk_broadway_screen_visual_get_best_with_depth;
298 screen_class->visual_get_best_with_type = _gdk_broadway_screen_visual_get_best_with_type;
299 screen_class->visual_get_best_with_both = _gdk_broadway_screen_visual_get_best_with_both;
300 screen_class->query_depths = _gdk_broadway_screen_query_depths;
301 screen_class->query_visual_types = _gdk_broadway_screen_query_visual_types;
302 screen_class->list_visuals = _gdk_broadway_screen_list_visuals;