]> Pileus Git - ~andy/gtk/blob - gdk/gdkdisplaymanager.c
gdk/: fully remove gdkalias hacks
[~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 "gdkscreen.h"
30 #include "gdkdisplay.h"
31 #include "gdkdisplaymanager.h"
32
33 #include "gdkinternals.h"
34 #include "gdkmarshalers.h"
35
36 #include "gdkintl.h"
37
38
39 struct _GdkDisplayManager
40 {
41   GObject parent_instance;
42 };
43
44 enum {
45   PROP_0,
46
47   PROP_DEFAULT_DISPLAY
48 };
49
50 enum {
51   DISPLAY_OPENED,
52   LAST_SIGNAL
53 };
54
55 static void gdk_display_manager_class_init   (GdkDisplayManagerClass *klass);
56 static void gdk_display_manager_set_property (GObject                *object,
57                                               guint                   prop_id,
58                                               const GValue           *value,
59                                               GParamSpec             *pspec);
60 static void gdk_display_manager_get_property (GObject                *object,
61                                               guint                   prop_id,
62                                               GValue                 *value,
63                                               GParamSpec             *pspec);
64
65 static guint signals[LAST_SIGNAL] = { 0 };
66
67 static GdkDisplay *default_display = NULL;
68
69 G_DEFINE_TYPE (GdkDisplayManager, gdk_display_manager, G_TYPE_OBJECT)
70
71 static void
72 gdk_display_manager_class_init (GdkDisplayManagerClass *klass)
73 {
74   GObjectClass *object_class = G_OBJECT_CLASS (klass);
75
76   object_class->set_property = gdk_display_manager_set_property;
77   object_class->get_property = gdk_display_manager_get_property;
78
79   /**
80    * GdkDisplayManager::display-opened:
81    * @display_manager: the object on which the signal is emitted
82    * @display: the opened display
83    *
84    * The ::display_opened signal is emitted when a display is opened.
85    *
86    * Since: 2.2
87    */
88   signals[DISPLAY_OPENED] =
89     g_signal_new (g_intern_static_string ("display-opened"),
90                   G_OBJECT_CLASS_TYPE (object_class),
91                   G_SIGNAL_RUN_LAST,
92                   G_STRUCT_OFFSET (GdkDisplayManagerClass, display_opened),
93                   NULL, NULL,
94                   _gdk_marshal_VOID__OBJECT,
95                   G_TYPE_NONE,
96                   1,
97                   GDK_TYPE_DISPLAY);
98
99   g_object_class_install_property (object_class,
100                                    PROP_DEFAULT_DISPLAY,
101                                    g_param_spec_object ("default-display",
102                                                         P_("Default Display"),
103                                                         P_("The default display for GDK"),
104                                                         GDK_TYPE_DISPLAY,
105                                                         G_PARAM_READWRITE|G_PARAM_STATIC_NAME|
106                                                         G_PARAM_STATIC_NICK|G_PARAM_STATIC_BLURB));
107 }
108
109 static void
110 gdk_display_manager_init (GdkDisplayManager *manager)
111 {
112 }
113
114 static void
115 gdk_display_manager_set_property (GObject      *object,
116                                   guint         prop_id,
117                                   const GValue *value,
118                                   GParamSpec   *pspec)
119 {
120   switch (prop_id)
121     {
122     case PROP_DEFAULT_DISPLAY:
123       gdk_display_manager_set_default_display (GDK_DISPLAY_MANAGER (object),
124                                                g_value_get_object (value));
125       break;
126     default:
127       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
128       break;
129     }
130 }
131
132 static void
133 gdk_display_manager_get_property (GObject      *object,
134                                   guint         prop_id,
135                                   GValue       *value,
136                                   GParamSpec   *pspec)
137 {
138   switch (prop_id)
139     {
140     case PROP_DEFAULT_DISPLAY:
141       g_value_set_object (value, default_display);
142       break;
143     default:
144       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
145       break;
146     }
147 }
148
149 /**
150  * gdk_display_manager_get:
151  *
152  * Gets the singleton #GdkDisplayManager object.
153  *
154  * Returns: (transfer none): The global #GdkDisplayManager singleton; gdk_parse_pargs(),
155  * gdk_init(), or gdk_init_check() must have been called first.
156  *
157  * Since: 2.2
158  **/
159 GdkDisplayManager*
160 gdk_display_manager_get (void)
161 {
162   static GdkDisplayManager *display_manager = NULL;
163
164   if (!display_manager)
165     display_manager = g_object_new (GDK_TYPE_DISPLAY_MANAGER, NULL);
166
167   return display_manager;
168 }
169
170 /**
171  * gdk_display_manager_get_default_display:
172  * @display_manager: a #GdkDisplayManager 
173  *
174  * Gets the default #GdkDisplay.
175  *
176  * Returns: (transfer none): a #GdkDisplay, or %NULL if there is no default
177  *   display.
178  *
179  * Since: 2.2
180  */
181 GdkDisplay *
182 gdk_display_manager_get_default_display (GdkDisplayManager *display_manager)
183 {
184   return default_display;
185 }
186
187 /**
188  * gdk_display_get_default:
189  *
190  * Gets the default #GdkDisplay. This is a convenience
191  * function for
192  * <literal>gdk_display_manager_get_default_display (gdk_display_manager_get ())</literal>.
193  *
194  * Returns: (transfer none): a #GdkDisplay, or %NULL if there is no default
195  *   display.
196  *
197  * Since: 2.2
198  */
199 GdkDisplay *
200 gdk_display_get_default (void)
201 {
202   return default_display;
203 }
204
205 /**
206  * gdk_screen_get_default:
207  *
208  * Gets the default screen for the default display. (See
209  * gdk_display_get_default ()).
210  *
211  * Returns: (transfer none): a #GdkScreen, or %NULL if there is no default display.
212  *
213  * Since: 2.2
214  */
215 GdkScreen *
216 gdk_screen_get_default (void)
217 {
218   if (default_display)
219     return gdk_display_get_default_screen (default_display);
220   else
221     return NULL;
222 }
223
224 /**
225  * gdk_display_manager_set_default_display:
226  * @display_manager: a #GdkDisplayManager
227  * @display: a #GdkDisplay
228  * 
229  * Sets @display as the default display.
230  *
231  * Since: 2.2
232  **/
233 void
234 gdk_display_manager_set_default_display (GdkDisplayManager *display_manager,
235                                          GdkDisplay        *display)
236 {
237   default_display = display;
238
239   _gdk_windowing_set_default_display (display);
240
241   g_object_notify (G_OBJECT (display_manager), "default-display");
242 }
243
244 /**
245  * gdk_display_manager_list_displays:
246  * @display_manager: a #GdkDisplayManager 
247  *
248  * List all currently open displays.
249  * 
250  * Return value: (transfer container) (element-type GdkDisplay): a newly allocated
251  * #GSList of #GdkDisplay objects. Free this list with g_slist_free() when you
252  * are done with it.
253  *
254  * Since: 2.2
255  **/
256 GSList *
257 gdk_display_manager_list_displays (GdkDisplayManager *display_manager)
258 {
259   return g_slist_copy (_gdk_displays);
260 }