]> Pileus Git - ~andy/gtk/blob - gdk/broadway/gdkscreen-broadway.c
Change FSF Address
[~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, see <http://www.gnu.org/licenses/>.
20  */
21
22 #include "config.h"
23
24 #include "gdkscreen-broadway.h"
25
26 #include "gdkscreen.h"
27 #include "gdkdisplay.h"
28 #include "gdkdisplay-broadway.h"
29
30 #include <glib.h>
31
32 #include <stdlib.h>
33 #include <string.h>
34
35 static void   gdk_broadway_screen_dispose     (GObject *object);
36 static void   gdk_broadway_screen_finalize    (GObject *object);
37
38 G_DEFINE_TYPE (GdkBroadwayScreen, gdk_broadway_screen, GDK_TYPE_SCREEN)
39
40 static void
41 gdk_broadway_screen_init (GdkBroadwayScreen *screen)
42 {
43   screen->width = 1024;
44   screen->height = 768;
45 }
46
47 static GdkDisplay *
48 gdk_broadway_screen_get_display (GdkScreen *screen)
49 {
50   return GDK_BROADWAY_SCREEN (screen)->display;
51 }
52
53 static gint
54 gdk_broadway_screen_get_width (GdkScreen *screen)
55 {
56   return GDK_BROADWAY_SCREEN (screen)->width;
57 }
58
59 static gint
60 gdk_broadway_screen_get_height (GdkScreen *screen)
61 {
62   return GDK_BROADWAY_SCREEN (screen)->height;
63 }
64
65 static gint
66 gdk_broadway_screen_get_width_mm (GdkScreen *screen)
67 {
68   return gdk_screen_get_width (screen) * 25.4 / 96;
69 }
70
71 static gint
72 gdk_broadway_screen_get_height_mm (GdkScreen *screen)
73 {
74   return gdk_screen_get_height (screen) * 25.4 / 96;
75 }
76
77 static gint
78 gdk_broadway_screen_get_number (GdkScreen *screen)
79 {
80   return 0;
81 }
82
83 static GdkWindow *
84 gdk_broadway_screen_get_root_window (GdkScreen *screen)
85 {
86   return GDK_BROADWAY_SCREEN (screen)->root_window;
87 }
88
89 void
90 _gdk_broadway_screen_size_changed (GdkScreen                       *screen,
91                                    BroadwayInputScreenResizeNotify *msg)
92 {
93   GdkBroadwayScreen *broadway_screen = GDK_BROADWAY_SCREEN (screen);
94   gint width, height;
95
96   width = gdk_screen_get_width (screen);
97   height = gdk_screen_get_height (screen);
98
99   broadway_screen->width   = msg->width;
100   broadway_screen->height  = msg->height;
101
102   if (width != gdk_screen_get_width (screen) ||
103       height != gdk_screen_get_height (screen))
104     g_signal_emit_by_name (screen, "size-changed");
105 }
106
107 static void
108 gdk_broadway_screen_dispose (GObject *object)
109 {
110   GdkBroadwayScreen *broadway_screen = GDK_BROADWAY_SCREEN (object);
111
112   if (broadway_screen->root_window)
113     _gdk_window_destroy (broadway_screen->root_window, TRUE);
114
115   G_OBJECT_CLASS (gdk_broadway_screen_parent_class)->dispose (object);
116 }
117
118 static void
119 gdk_broadway_screen_finalize (GObject *object)
120 {
121   GdkBroadwayScreen *broadway_screen = GDK_BROADWAY_SCREEN (object);
122   gint          i;
123
124   if (broadway_screen->root_window)
125     g_object_unref (broadway_screen->root_window);
126
127   /* Visual Part */
128   for (i = 0; i < broadway_screen->nvisuals; i++)
129     g_object_unref (broadway_screen->visuals[i]);
130   g_free (broadway_screen->visuals);
131
132   G_OBJECT_CLASS (gdk_broadway_screen_parent_class)->finalize (object);
133 }
134
135 static gint
136 gdk_broadway_screen_get_n_monitors (GdkScreen *screen)
137 {
138   return 1;
139 }
140
141 static gint
142 gdk_broadway_screen_get_primary_monitor (GdkScreen *screen)
143 {
144   return 0;
145 }
146
147 static gint
148 gdk_broadway_screen_get_monitor_width_mm (GdkScreen *screen,
149                                           gint       monitor_num)
150 {
151   return gdk_screen_get_width_mm (screen);
152 }
153
154 static gint
155 gdk_broadway_screen_get_monitor_height_mm (GdkScreen *screen,
156                                            gint       monitor_num)
157 {
158   return gdk_screen_get_height_mm (screen);
159 }
160
161 static gchar *
162 gdk_broadway_screen_get_monitor_plug_name (GdkScreen *screen,
163                                            gint       monitor_num)
164 {
165   return g_strdup ("browser");
166 }
167
168 static void
169 gdk_broadway_screen_get_monitor_geometry (GdkScreen    *screen,
170                                           gint          monitor_num,
171                                           GdkRectangle *dest)
172 {
173   GdkBroadwayScreen *broadway_screen = GDK_BROADWAY_SCREEN (screen);
174
175   if (dest)
176     {
177       dest->x = 0;
178       dest->y = 0;
179       dest->width = broadway_screen->width;
180       dest->height = broadway_screen->height;
181     }
182 }
183
184 static GdkVisual *
185 gdk_broadway_screen_get_rgba_visual (GdkScreen *screen)
186 {
187   GdkBroadwayScreen *broadway_screen = GDK_BROADWAY_SCREEN (screen);
188
189   return broadway_screen->rgba_visual;
190 }
191
192 GdkScreen *
193 _gdk_broadway_screen_new (GdkDisplay *display,
194                           gint   screen_number)
195 {
196   GdkScreen *screen;
197   GdkBroadwayScreen *broadway_screen;
198
199   screen = g_object_new (GDK_TYPE_BROADWAY_SCREEN, NULL);
200
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);
205
206   return screen;
207 }
208
209 /*
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.
213  */
214 void
215 _gdk_broadway_screen_setup (GdkScreen *screen)
216 {
217 }
218
219 static gboolean
220 gdk_broadway_screen_is_composited (GdkScreen *screen)
221 {
222   return FALSE;
223 }
224
225
226 static gchar *
227 gdk_broadway_screen_make_display_name (GdkScreen *screen)
228 {
229   return g_strdup ("browser");
230 }
231
232 static GdkWindow *
233 gdk_broadway_screen_get_active_window (GdkScreen *screen)
234 {
235   return NULL;
236 }
237
238 static GList *
239 gdk_broadway_screen_get_window_stack (GdkScreen *screen)
240 {
241   return NULL;
242 }
243
244 static void
245 gdk_broadway_screen_broadcast_client_message (GdkScreen *screen,
246                                               GdkEvent  *event)
247 {
248 }
249
250 static gboolean
251 gdk_broadway_screen_get_setting (GdkScreen   *screen,
252                                  const gchar *name,
253                                  GValue      *value)
254 {
255   return FALSE;
256 }
257
258 void
259 _gdk_broadway_screen_events_init (GdkScreen *screen)
260 {
261 }
262
263 static void
264 gdk_broadway_screen_class_init (GdkBroadwayScreenClass *klass)
265 {
266   GObjectClass *object_class = G_OBJECT_CLASS (klass);
267   GdkScreenClass *screen_class = GDK_SCREEN_CLASS (klass);
268
269   object_class->dispose = gdk_broadway_screen_dispose;
270   object_class->finalize = gdk_broadway_screen_finalize;
271
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;
303 }
304