]> Pileus Git - ~andy/gtk/blob - gdk/gdkdisplaymanager.c
Inclusion cleanups in sources
[~andy/gtk] / gdk / gdkdisplaymanager.c
1 /* GDK - The GIMP Drawing Kit
2  * Copyright (C) 2000 Red Hat, Inc.
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Lesser General Public
6  * License as published by the Free Software Foundation; either
7  * version 2 of the License, or (at your option) any later version.
8  *
9  * This library is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  * Lesser General Public License for more details.
13  *
14  * You should have received a copy of the GNU Lesser General Public
15  * License along with this library; if not, write to the
16  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
17  * Boston, MA 02111-1307, USA.
18  */
19
20 /*
21  * Modified by the GTK+ Team and others 1997-2000.  See the AUTHORS
22  * file for a list of people on the GTK+ Team.  See the ChangeLog
23  * files for a list of changes.  These files are distributed with
24  * GTK+ at ftp://ftp.gtk.org/pub/gtk/. 
25  */
26
27 #include "config.h"
28
29 #include "gdkdisplaymanager.h"
30
31 #include "gdkscreen.h"
32 #include "gdkdisplay.h"
33 #include "gdkinternals.h"
34 #include "gdkmarshalers.h"
35 #include "gdkintl.h"
36
37
38 struct _GdkDisplayManager
39 {
40   GObject parent_instance;
41 };
42
43 enum {
44   PROP_0,
45
46   PROP_DEFAULT_DISPLAY
47 };
48
49 enum {
50   DISPLAY_OPENED,
51   LAST_SIGNAL
52 };
53
54 static void gdk_display_manager_class_init   (GdkDisplayManagerClass *klass);
55 static void gdk_display_manager_set_property (GObject                *object,
56                                               guint                   prop_id,
57                                               const GValue           *value,
58                                               GParamSpec             *pspec);
59 static void gdk_display_manager_get_property (GObject                *object,
60                                               guint                   prop_id,
61                                               GValue                 *value,
62                                               GParamSpec             *pspec);
63
64 static guint signals[LAST_SIGNAL] = { 0 };
65
66 static GdkDisplay *default_display = NULL;
67
68 G_DEFINE_TYPE (GdkDisplayManager, gdk_display_manager, G_TYPE_OBJECT)
69
70 static void
71 gdk_display_manager_class_init (GdkDisplayManagerClass *klass)
72 {
73   GObjectClass *object_class = G_OBJECT_CLASS (klass);
74
75   object_class->set_property = gdk_display_manager_set_property;
76   object_class->get_property = gdk_display_manager_get_property;
77
78   /**
79    * GdkDisplayManager::display-opened:
80    * @display_manager: the object on which the signal is emitted
81    * @display: the opened display
82    *
83    * The ::display_opened signal is emitted when a display is opened.
84    *
85    * Since: 2.2
86    */
87   signals[DISPLAY_OPENED] =
88     g_signal_new (g_intern_static_string ("display-opened"),
89                   G_OBJECT_CLASS_TYPE (object_class),
90                   G_SIGNAL_RUN_LAST,
91                   G_STRUCT_OFFSET (GdkDisplayManagerClass, display_opened),
92                   NULL, NULL,
93                   _gdk_marshal_VOID__OBJECT,
94                   G_TYPE_NONE,
95                   1,
96                   GDK_TYPE_DISPLAY);
97
98   g_object_class_install_property (object_class,
99                                    PROP_DEFAULT_DISPLAY,
100                                    g_param_spec_object ("default-display",
101                                                         P_("Default Display"),
102                                                         P_("The default display for GDK"),
103                                                         GDK_TYPE_DISPLAY,
104                                                         G_PARAM_READWRITE|G_PARAM_STATIC_NAME|
105                                                         G_PARAM_STATIC_NICK|G_PARAM_STATIC_BLURB));
106 }
107
108 static void
109 gdk_display_manager_init (GdkDisplayManager *manager)
110 {
111 }
112
113 static void
114 gdk_display_manager_set_property (GObject      *object,
115                                   guint         prop_id,
116                                   const GValue *value,
117                                   GParamSpec   *pspec)
118 {
119   switch (prop_id)
120     {
121     case PROP_DEFAULT_DISPLAY:
122       gdk_display_manager_set_default_display (GDK_DISPLAY_MANAGER (object),
123                                                g_value_get_object (value));
124       break;
125     default:
126       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
127       break;
128     }
129 }
130
131 static void
132 gdk_display_manager_get_property (GObject      *object,
133                                   guint         prop_id,
134                                   GValue       *value,
135                                   GParamSpec   *pspec)
136 {
137   switch (prop_id)
138     {
139     case PROP_DEFAULT_DISPLAY:
140       g_value_set_object (value, default_display);
141       break;
142     default:
143       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
144       break;
145     }
146 }
147
148 /**
149  * gdk_display_manager_get:
150  *
151  * Gets the singleton #GdkDisplayManager object.
152  *
153  * Returns: (transfer none): The global #GdkDisplayManager singleton; gdk_parse_pargs(),
154  * gdk_init(), or gdk_init_check() must have been called first.
155  *
156  * Since: 2.2
157  **/
158 GdkDisplayManager*
159 gdk_display_manager_get (void)
160 {
161   static GdkDisplayManager *display_manager = NULL;
162
163   if (!display_manager)
164     display_manager = g_object_new (GDK_TYPE_DISPLAY_MANAGER, NULL);
165
166   return display_manager;
167 }
168
169 /**
170  * gdk_display_manager_get_default_display:
171  * @display_manager: a #GdkDisplayManager 
172  *
173  * Gets the default #GdkDisplay.
174  *
175  * Returns: (transfer none): a #GdkDisplay, or %NULL if there is no default
176  *   display.
177  *
178  * Since: 2.2
179  */
180 GdkDisplay *
181 gdk_display_manager_get_default_display (GdkDisplayManager *display_manager)
182 {
183   return default_display;
184 }
185
186 /**
187  * gdk_display_get_default:
188  *
189  * Gets the default #GdkDisplay. This is a convenience
190  * function for
191  * <literal>gdk_display_manager_get_default_display (gdk_display_manager_get ())</literal>.
192  *
193  * Returns: (transfer none): a #GdkDisplay, or %NULL if there is no default
194  *   display.
195  *
196  * Since: 2.2
197  */
198 GdkDisplay *
199 gdk_display_get_default (void)
200 {
201   return default_display;
202 }
203
204 /**
205  * gdk_screen_get_default:
206  *
207  * Gets the default screen for the default display. (See
208  * gdk_display_get_default ()).
209  *
210  * Returns: (transfer none): a #GdkScreen, or %NULL if there is no default display.
211  *
212  * Since: 2.2
213  */
214 GdkScreen *
215 gdk_screen_get_default (void)
216 {
217   if (default_display)
218     return gdk_display_get_default_screen (default_display);
219   else
220     return NULL;
221 }
222
223 /**
224  * gdk_display_manager_set_default_display:
225  * @display_manager: a #GdkDisplayManager
226  * @display: a #GdkDisplay
227  * 
228  * Sets @display as the default display.
229  *
230  * Since: 2.2
231  **/
232 void
233 gdk_display_manager_set_default_display (GdkDisplayManager *display_manager,
234                                          GdkDisplay        *display)
235 {
236   default_display = display;
237
238   _gdk_windowing_set_default_display (display);
239
240   g_object_notify (G_OBJECT (display_manager), "default-display");
241 }
242
243 /**
244  * gdk_display_manager_list_displays:
245  * @display_manager: a #GdkDisplayManager 
246  *
247  * List all currently open displays.
248  * 
249  * Return value: (transfer container) (element-type GdkDisplay): a newly allocated
250  * #GSList of #GdkDisplay objects. Free this list with g_slist_free() when you
251  * are done with it.
252  *
253  * Since: 2.2
254  **/
255 GSList *
256 gdk_display_manager_list_displays (GdkDisplayManager *display_manager)
257 {
258   return g_slist_copy (_gdk_displays);
259 }