X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;ds=sidebyside;f=gdk%2Fgdkscreen.c;h=c1de0f64e93674e416fea3a78e5f8e7c97ebec86;hb=5406955f7c8b4f49b61dfd9e934997ecf2b8924d;hp=8e08e5363bf8027c4d26d5621d39f1f18790b9bf;hpb=2a2d769d423ad79f606b995f9016dc59e72d9d8c;p=~andy%2Fgtk diff --git a/gdk/gdkscreen.c b/gdk/gdkscreen.c index 8e08e5363..c1de0f64e 100644 --- a/gdk/gdkscreen.c +++ b/gdk/gdkscreen.c @@ -21,73 +21,101 @@ * Boston, MA 02111-1307, USA. */ -#include -#include "gdk.h" /* For gdk_rectangle_intersect() */ -#include "gdkcolor.h" +#include "config.h" + +#include "gdkscreenprivate.h" +#include "gdkrectangle.h" #include "gdkwindow.h" -#include "gdkscreen.h" -#include "gdkalias.h" +#include "gdkintl.h" + + +/** + * SECTION:gdkscreen + * @Short_description: Object representing a physical screen + * @Title: GdkScreen + * + * #GdkScreen objects are the GDK representation of the screen on + * which windows can be displayed and on which the pointer moves. + * X originally identified screens with physical screens, but + * nowadays it is more common to have a single #GdkScreen which + * combines several physical monitors (see gdk_screen_get_n_monitors()). + * + * GdkScreen is used throughout GDK and GTK+ to specify which screen + * the top level windows are to be displayed on. it is also used to + * query the screen specification and default settings such as + * the default visual (gdk_screen_get_system_visual()), the dimensions + * of the physical monitors (gdk_screen_get_monitor_geometry()), etc. + */ + -static void gdk_screen_class_init (GdkScreenClass *klass); -static void gdk_screen_dispose (GObject *object); +static void gdk_screen_finalize (GObject *object); +static void gdk_screen_set_property (GObject *object, + guint prop_id, + const GValue *value, + GParamSpec *pspec); +static void gdk_screen_get_property (GObject *object, + guint prop_id, + GValue *value, + GParamSpec *pspec); + +enum +{ + PROP_0, + PROP_FONT_OPTIONS, + PROP_RESOLUTION +}; enum { SIZE_CHANGED, + COMPOSITED_CHANGED, + MONITORS_CHANGED, LAST_SIGNAL }; static guint signals[LAST_SIGNAL] = { 0 }; -static gpointer parent_class = NULL; - -GType -gdk_screen_get_type (void) -{ - static GType object_type = 0; - - if (!object_type) - { - static const GTypeInfo object_info = - { - sizeof (GdkScreenClass), - (GBaseInitFunc) NULL, - (GBaseFinalizeFunc) NULL, - (GClassInitFunc) gdk_screen_class_init, - NULL, /* class_finalize */ - NULL, /* class_data */ - sizeof (GdkScreen), - 0, /* n_preallocs */ - (GInstanceInitFunc) NULL, - }; - - object_type = g_type_register_static (G_TYPE_OBJECT, - "GdkScreen", &object_info, 0); - } - - return object_type; -} +G_DEFINE_TYPE (GdkScreen, gdk_screen, G_TYPE_OBJECT) static void gdk_screen_class_init (GdkScreenClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); - parent_class = g_type_class_peek_parent (klass); - - object_class->dispose = gdk_screen_dispose; + object_class->finalize = gdk_screen_finalize; + object_class->set_property = gdk_screen_set_property; + object_class->get_property = gdk_screen_get_property; + g_object_class_install_property (object_class, + PROP_FONT_OPTIONS, + g_param_spec_pointer ("font-options", + P_("Font options"), + P_("The default font options for the screen"), + G_PARAM_READWRITE|G_PARAM_STATIC_NAME| + G_PARAM_STATIC_NICK|G_PARAM_STATIC_BLURB)); + + g_object_class_install_property (object_class, + PROP_RESOLUTION, + g_param_spec_double ("resolution", + P_("Font resolution"), + P_("The resolution for fonts on the screen"), + -G_MAXDOUBLE, + G_MAXDOUBLE, + -1.0, + G_PARAM_READWRITE|G_PARAM_STATIC_NAME| + G_PARAM_STATIC_NICK|G_PARAM_STATIC_BLURB)); + /** * GdkScreen::size-changed: * @screen: the object on which the signal is emitted * - * The ::size_changed signal is emitted when the pixel width or + * The ::size-changed signal is emitted when the pixel width or * height of a screen changes. * * Since: 2.2 */ signals[SIZE_CHANGED] = - g_signal_new ("size_changed", + g_signal_new (g_intern_static_string ("size-changed"), G_OBJECT_CLASS_TYPE (klass), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GdkScreenClass, size_changed), @@ -95,24 +123,64 @@ gdk_screen_class_init (GdkScreenClass *klass) g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); + + /** + * GdkScreen::composited-changed: + * @screen: the object on which the signal is emitted + * + * The ::composited-changed signal is emitted when the composited + * status of the screen changes + * + * Since: 2.10 + */ + signals[COMPOSITED_CHANGED] = + g_signal_new (g_intern_static_string ("composited-changed"), + G_OBJECT_CLASS_TYPE (klass), + G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET (GdkScreenClass, composited_changed), + NULL, NULL, + g_cclosure_marshal_VOID__VOID, + G_TYPE_NONE, + 0); + + /** + * GdkScreen::monitors-changed: + * @screen: the object on which the signal is emitted + * + * The ::monitors-changed signal is emitted when the number, size + * or position of the monitors attached to the screen change. + * + * Only for X11 and OS X for now. A future implementation for Win32 + * may be a possibility. + * + * Since: 2.14 + */ + signals[MONITORS_CHANGED] = + g_signal_new (g_intern_static_string ("monitors-changed"), + G_OBJECT_CLASS_TYPE (klass), + G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET (GdkScreenClass, monitors_changed), + NULL, NULL, + g_cclosure_marshal_VOID__VOID, + G_TYPE_NONE, + 0); } static void -gdk_screen_dispose (GObject *object) +gdk_screen_init (GdkScreen *screen) { - GdkScreen *screen = GDK_SCREEN (object); - gint i; + screen->resolution = -1.; +} - for (i = 0; i < 32; ++i) - { - if (screen->exposure_gcs[i]) - g_object_unref (screen->exposure_gcs[i]); +static void +gdk_screen_finalize (GObject *object) +{ + GdkScreen *screen = GDK_SCREEN (object); - if (screen->normal_gcs[i]) - g_object_unref (screen->normal_gcs[i]); - } + if (screen->font_options) + cairo_font_options_destroy (screen->font_options); - G_OBJECT_CLASS (parent_class)->dispose (object); + G_OBJECT_CLASS (gdk_screen_parent_class)->finalize (object); } void @@ -138,7 +206,7 @@ get_nearest_monitor (GdkScreen *screen, gint num_monitors, i; gint nearest_dist = G_MAXINT; gint nearest_monitor = 0; - + g_return_val_if_fail (GDK_IS_SCREEN (screen), -1); num_monitors = gdk_screen_get_n_monitors (screen); @@ -146,7 +214,7 @@ get_nearest_monitor (GdkScreen *screen, for (i = 0; i < num_monitors; i++) { GdkRectangle monitor; - gint dist_x, dist_y; + gint dist_x, dist_y, dist; gdk_screen_get_monitor_geometry (screen, i, &monitor); @@ -164,9 +232,10 @@ get_nearest_monitor (GdkScreen *screen, else dist_y = 0; - if (MIN (dist_x, dist_y) < nearest_dist) + dist = dist_x + dist_y; + if (dist < nearest_dist) { - nearest_dist = MIN (dist_x, dist_y); + nearest_dist = dist; nearest_monitor = i; } } @@ -218,13 +287,14 @@ gdk_screen_get_monitor_at_point (GdkScreen *screen, * gdk_screen_get_monitor_at_window: * @screen: a #GdkScreen. * @window: a #GdkWindow - * @returns: the monitor number in which most of @window is located, - * or if @window does not intersect any monitors, a monitor, - * close to @window. * - * Returns the number of the monitor in which the largest area of the + * Returns the number of the monitor in which the largest area of the * bounding rectangle of @window resides. * + * Returns: the monitor number in which most of @window is located, + * or if @window does not intersect any monitors, a monitor, + * close to @window. + * * Since: 2.2 **/ gint @@ -233,10 +303,11 @@ gdk_screen_get_monitor_at_window (GdkScreen *screen, { gint num_monitors, i, area = 0, screen_num = -1; GdkRectangle win_rect; + g_return_val_if_fail (GDK_IS_SCREEN (screen), -1); - + gdk_window_get_geometry (window, &win_rect.x, &win_rect.y, &win_rect.width, - &win_rect.height, NULL); + &win_rect.height); gdk_window_get_origin (window, &win_rect.x, &win_rect.y); num_monitors = gdk_screen_get_n_monitors (screen); @@ -271,7 +342,7 @@ gdk_screen_get_monitor_at_window (GdkScreen *screen, gint gdk_screen_width (void) { - return gdk_screen_get_width (gdk_screen_get_default()); + return gdk_screen_get_width (gdk_screen_get_default ()); } /** @@ -284,7 +355,7 @@ gdk_screen_width (void) gint gdk_screen_height (void) { - return gdk_screen_get_height (gdk_screen_get_default()); + return gdk_screen_get_height (gdk_screen_get_default ()); } /** @@ -299,7 +370,7 @@ gdk_screen_height (void) gint gdk_screen_width_mm (void) { - return gdk_screen_get_width_mm (gdk_screen_get_default()); + return gdk_screen_get_width_mm (gdk_screen_get_default ()); } /** @@ -317,5 +388,577 @@ gdk_screen_height_mm (void) return gdk_screen_get_height_mm (gdk_screen_get_default ()); } -#define __GDK_SCREEN_C__ -#include "gdkaliasdef.c" +/** + * gdk_screen_set_font_options: + * @screen: a #GdkScreen + * @options: (allow-none): a #cairo_font_options_t, or %NULL to unset any + * previously set default font options. + * + * Sets the default font options for the screen. These + * options will be set on any #PangoContext's newly created + * with gdk_pango_context_get_for_screen(). Changing the + * default set of font options does not affect contexts that + * have already been created. + * + * Since: 2.10 + **/ +void +gdk_screen_set_font_options (GdkScreen *screen, + const cairo_font_options_t *options) +{ + g_return_if_fail (GDK_IS_SCREEN (screen)); + + if (screen->font_options != options) + { + if (screen->font_options) + cairo_font_options_destroy (screen->font_options); + + if (options) + screen->font_options = cairo_font_options_copy (options); + else + screen->font_options = NULL; + + g_object_notify (G_OBJECT (screen), "font-options"); + } +} + +/** + * gdk_screen_get_font_options: + * @screen: a #GdkScreen + * + * Gets any options previously set with gdk_screen_set_font_options(). + * + * Return value: the current font options, or %NULL if no default + * font options have been set. + * + * Since: 2.10 + **/ +const cairo_font_options_t * +gdk_screen_get_font_options (GdkScreen *screen) +{ + g_return_val_if_fail (GDK_IS_SCREEN (screen), NULL); + + return screen->font_options; +} + +/** + * gdk_screen_set_resolution: + * @screen: a #GdkScreen + * @dpi: the resolution in "dots per inch". (Physical inches aren't actually + * involved; the terminology is conventional.) + + * Sets the resolution for font handling on the screen. This is a + * scale factor between points specified in a #PangoFontDescription + * and cairo units. The default value is 96, meaning that a 10 point + * font will be 13 units high. (10 * 96. / 72. = 13.3). + * + * Since: 2.10 + **/ +void +gdk_screen_set_resolution (GdkScreen *screen, + gdouble dpi) +{ + g_return_if_fail (GDK_IS_SCREEN (screen)); + + if (dpi < 0) + dpi = -1.0; + + if (screen->resolution != dpi) + { + screen->resolution = dpi; + + g_object_notify (G_OBJECT (screen), "resolution"); + } +} + +/** + * gdk_screen_get_resolution: + * @screen: a #GdkScreen + * + * Gets the resolution for font handling on the screen; see + * gdk_screen_set_resolution() for full details. + * + * Return value: the current resolution, or -1 if no resolution + * has been set. + * + * Since: 2.10 + **/ +gdouble +gdk_screen_get_resolution (GdkScreen *screen) +{ + g_return_val_if_fail (GDK_IS_SCREEN (screen), -1.0); + + return screen->resolution; +} + +static void +gdk_screen_get_property (GObject *object, + guint prop_id, + GValue *value, + GParamSpec *pspec) +{ + GdkScreen *screen = GDK_SCREEN (object); + + switch (prop_id) + { + case PROP_FONT_OPTIONS: + g_value_set_pointer (value, (gpointer) gdk_screen_get_font_options (screen)); + break; + case PROP_RESOLUTION: + g_value_set_double (value, gdk_screen_get_resolution (screen)); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } +} + +static void +gdk_screen_set_property (GObject *object, + guint prop_id, + const GValue *value, + GParamSpec *pspec) +{ + GdkScreen *screen = GDK_SCREEN (object); + + switch (prop_id) + { + case PROP_FONT_OPTIONS: + gdk_screen_set_font_options (screen, g_value_get_pointer (value)); + break; + case PROP_RESOLUTION: + gdk_screen_set_resolution (screen, g_value_get_double (value)); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } +} + +/** + * gdk_screen_get_display: + * @screen: a #GdkScreen + * + * Gets the display to which the @screen belongs. + * + * Returns: (transfer none): the display to which @screen belongs + * + * Since: 2.2 + **/ +GdkDisplay * +gdk_screen_get_display (GdkScreen *screen) +{ + return GDK_SCREEN_GET_CLASS(screen)->get_display (screen); +} + + +/** + * gdk_screen_get_width: + * @screen: a #GdkScreen + * + * Gets the width of @screen in pixels + * + * Returns: the width of @screen in pixels. + * + * Since: 2.2 + **/ +gint +gdk_screen_get_width (GdkScreen *screen) +{ + return GDK_SCREEN_GET_CLASS(screen)->get_width (screen); +} + +/** + * gdk_screen_get_height: + * @screen: a #GdkScreen + * + * Gets the height of @screen in pixels + * + * Returns: the height of @screen in pixels. + * + * Since: 2.2 + **/ +gint +gdk_screen_get_height (GdkScreen *screen) +{ + return GDK_SCREEN_GET_CLASS(screen)->get_height (screen); +} + +/** + * gdk_screen_get_width_mm: + * @screen: a #GdkScreen + * + * Gets the width of @screen in millimeters. + * Note that on some X servers this value will not be correct. + * + * Returns: the width of @screen in millimeters. + * + * Since: 2.2 + **/ +gint +gdk_screen_get_width_mm (GdkScreen *screen) +{ + return GDK_SCREEN_GET_CLASS(screen)->get_width_mm (screen); +} + +/** + * gdk_screen_get_height_mm: + * @screen: a #GdkScreen + * + * Returns the height of @screen in millimeters. + * Note that on some X servers this value will not be correct. + * + * Returns: the heigth of @screen in millimeters. + * + * Since: 2.2 + **/ +gint +gdk_screen_get_height_mm (GdkScreen *screen) +{ + return GDK_SCREEN_GET_CLASS(screen)->get_height_mm (screen); +} + +/** + * gdk_screen_get_number: + * @screen: a #GdkScreen + * + * Gets the index of @screen among the screens in the display + * to which it belongs. (See gdk_screen_get_display()) + * + * Returns: the index + * + * Since: 2.2 + **/ +gint +gdk_screen_get_number (GdkScreen *screen) +{ + return GDK_SCREEN_GET_CLASS(screen)->get_number (screen); +} + +/** + * gdk_screen_get_root_window: + * @screen: a #GdkScreen + * + * Gets the root window of @screen. + * + * Returns: (transfer none): the root window + * + * Since: 2.2 + **/ +GdkWindow * +gdk_screen_get_root_window (GdkScreen *screen) +{ + return GDK_SCREEN_GET_CLASS(screen)->get_root_window (screen); +} + +/** + * gdk_screen_get_n_monitors: + * @screen: a #GdkScreen + * + * Returns the number of monitors which @screen consists of. + * + * Returns: number of monitors which @screen consists of + * + * Since: 2.2 + */ +gint +gdk_screen_get_n_monitors (GdkScreen *screen) +{ + return GDK_SCREEN_GET_CLASS(screen)->get_n_monitors (screen); +} + +/** + * gdk_screen_get_primary_monitor: + * @screen: a #GdkScreen. + * + * Gets the primary monitor for @screen. The primary monitor + * is considered the monitor where the 'main desktop' lives. + * While normal application windows typically allow the window + * manager to place the windows, specialized desktop applications + * such as panels should place themselves on the primary monitor. + * + * If no primary monitor is configured by the user, the return value + * will be 0, defaulting to the first monitor. + * + * Returns: An integer index for the primary monitor, or 0 if none is configured. + * + * Since: 2.20 + */ +gint +gdk_screen_get_primary_monitor (GdkScreen *screen) +{ + return GDK_SCREEN_GET_CLASS(screen)->get_primary_monitor (screen); +} + +/** + * gdk_screen_get_monitor_width_mm: + * @screen: a #GdkScreen + * @monitor_num: number of the monitor, between 0 and gdk_screen_get_n_monitors (screen) + * + * Gets the width in millimeters of the specified monitor, if available. + * + * Returns: the width of the monitor, or -1 if not available + * + * Since: 2.14 + */ +gint +gdk_screen_get_monitor_width_mm (GdkScreen *screen, + gint monitor_num) +{ + return GDK_SCREEN_GET_CLASS(screen)->get_monitor_width_mm (screen, monitor_num); +} + +/** + * gdk_screen_get_monitor_height_mm: + * @screen: a #GdkScreen + * @monitor_num: number of the monitor, between 0 and gdk_screen_get_n_monitors (screen) + * + * Gets the height in millimeters of the specified monitor. + * + * Returns: the height of the monitor, or -1 if not available + * + * Since: 2.14 + */ +gint +gdk_screen_get_monitor_height_mm (GdkScreen *screen, + gint monitor_num) +{ + return GDK_SCREEN_GET_CLASS(screen)->get_monitor_height_mm (screen, monitor_num); +} + +/** + * gdk_screen_get_monitor_plug_name: + * @screen: a #GdkScreen + * @monitor_num: number of the monitor, between 0 and gdk_screen_get_n_monitors (screen) + * + * Returns the output name of the specified monitor. + * Usually something like VGA, DVI, or TV, not the actual + * product name of the display device. + * + * Returns: a newly-allocated string containing the name of the monitor, + * or %NULL if the name cannot be determined + * + * Since: 2.14 + */ +gchar * +gdk_screen_get_monitor_plug_name (GdkScreen *screen, + gint monitor_num) +{ + return GDK_SCREEN_GET_CLASS(screen)->get_monitor_plug_name (screen, monitor_num); +} + +/** + * gdk_screen_get_monitor_geometry: + * @screen: a #GdkScreen + * @monitor_num: the monitor number, between 0 and gdk_screen_get_n_monitors (screen) + * @dest: (out) (allow-none): a #GdkRectangle to be filled with the monitor geometry + * + * Retrieves the #GdkRectangle representing the size and position of + * the individual monitor within the entire screen area. + * + * Note that the size of the entire screen area can be retrieved via + * gdk_screen_get_width() and gdk_screen_get_height(). + * + * Since: 2.2 + */ +void +gdk_screen_get_monitor_geometry (GdkScreen *screen, + gint monitor_num, + GdkRectangle *dest) +{ + GDK_SCREEN_GET_CLASS(screen)->get_monitor_geometry (screen, monitor_num, dest); +} + +/** + * gdk_screen_list_visuals: + * @screen: the relevant #GdkScreen. + * + * Lists the available visuals for the specified @screen. + * A visual describes a hardware image data format. + * For example, a visual might support 24-bit color, or 8-bit color, + * and might expect pixels to be in a certain format. + * + * Call g_list_free() on the return value when you're finished with it. + * + * Return value: (transfer container) (element-type GdkVisual): + * a list of visuals; the list must be freed, but not its contents + * + * Since: 2.2 + **/ +GList * +gdk_screen_list_visuals (GdkScreen *screen) +{ + return GDK_SCREEN_GET_CLASS(screen)->list_visuals (screen); +} + +/** + * gdk_screen_get_system_visual: + * @screen: a #GdkScreen. + * + * Get the system's default visual for @screen. + * This is the visual for the root window of the display. + * The return value should not be freed. + * + * Return value: (transfer none): the system visual + * + * Since: 2.2 + **/ +GdkVisual * +gdk_screen_get_system_visual (GdkScreen * screen) +{ + return GDK_SCREEN_GET_CLASS(screen)->get_system_visual (screen); +} + +/** + * gdk_screen_get_rgba_visual: + * @screen: a #GdkScreen + * + * Gets a visual to use for creating windows with an alpha channel. + * The windowing system on which GTK+ is running + * may not support this capability, in which case %NULL will + * be returned. Even if a non-%NULL value is returned, its + * possible that the window's alpha channel won't be honored + * when displaying the window on the screen: in particular, for + * X an appropriate windowing manager and compositing manager + * must be running to provide appropriate display. + * + * This functionality is not implemented in the Windows backend. + * + * For setting an overall opacity for a top-level window, see + * gdk_window_set_opacity(). + * + * Return value: (transfer none): a visual to use for windows with an + * alpha channel or %NULL if the capability is not available. + * + * Since: 2.8 + **/ +GdkVisual * +gdk_screen_get_rgba_visual (GdkScreen *screen) +{ + return GDK_SCREEN_GET_CLASS(screen)->get_rgba_visual (screen); +} + +/** + * gdk_screen_is_composited: + * @screen: a #GdkScreen + * + * Returns whether windows with an RGBA visual can reasonably + * be expected to have their alpha channel drawn correctly on + * the screen. + * + * On X11 this function returns whether a compositing manager is + * compositing @screen. + * + * Return value: Whether windows with RGBA visuals can reasonably be + * expected to have their alpha channels drawn correctly on the screen. + * + * Since: 2.10 + **/ +gboolean +gdk_screen_is_composited (GdkScreen *screen) +{ + return GDK_SCREEN_GET_CLASS(screen)->is_composited (screen); +} + +/** + * gdk_screen_make_display_name: + * @screen: a #GdkScreen + * + * Determines the name to pass to gdk_display_open() to get + * a #GdkDisplay with this screen as the default screen. + * + * Return value: a newly allocated string, free with g_free() + * + * Since: 2.2 + **/ +gchar * +gdk_screen_make_display_name (GdkScreen *screen) +{ + return GDK_SCREEN_GET_CLASS(screen)->make_display_name (screen); +} + +/** + * gdk_screen_get_active_window: + * @screen: a #GdkScreen + * + * Returns the screen's currently active window. + * + * On X11, this is done by inspecting the _NET_ACTIVE_WINDOW property + * on the root window, as described in the Extended Window + * Manager Hints. If there is no currently currently active + * window, or the window manager does not support the + * _NET_ACTIVE_WINDOW hint, this function returns %NULL. + * + * On other platforms, this function may return %NULL, depending on whether + * it is implementable on that platform. + * + * The returned window should be unrefed using g_object_unref() when + * no longer needed. + * + * Return value: (transfer full): the currently active window, or %NULL. + * + * Since: 2.10 + **/ +GdkWindow * +gdk_screen_get_active_window (GdkScreen *screen) +{ + return GDK_SCREEN_GET_CLASS(screen)->get_active_window (screen); +} + +/** + * gdk_screen_get_window_stack: + * @screen: a #GdkScreen + * + * Returns a #GList of #GdkWindows representing the current + * window stack. + * + * On X11, this is done by inspecting the _NET_CLIENT_LIST_STACKING + * property on the root window, as described in the Extended Window + * Manager Hints. If the window manager does not support the + * _NET_CLIENT_LIST_STACKING hint, this function returns %NULL. + * + * On other platforms, this function may return %NULL, depending on whether + * it is implementable on that platform. + * + * The returned list is newly allocated and owns references to the + * windows it contains, so it should be freed using g_list_free() and + * its windows unrefed using g_object_unref() when no longer needed. + * + * Return value: (transfer full) (element-type GdkWindow): + * a list of #GdkWindows for the current window stack, + * or %NULL. + * + * Since: 2.10 + **/ +GList * +gdk_screen_get_window_stack (GdkScreen *screen) +{ + return GDK_SCREEN_GET_CLASS(screen)->get_window_stack (screen); +} + +/** + * gdk_screen_get_setting: + * @screen: the #GdkScreen where the setting is located + * @name: the name of the setting + * @value: location to store the value of the setting + * + * Retrieves a desktop-wide setting such as double-click time + * for the #GdkScreen @screen. + * + * FIXME needs a list of valid settings here, or a link to + * more information. + * + * Returns: %TRUE if the setting existed and a value was stored + * in @value, %FALSE otherwise. + * + * Since: 2.2 + **/ +gboolean +gdk_screen_get_setting (GdkScreen *screen, + const gchar *name, + GValue *value) +{ + return GDK_SCREEN_GET_CLASS(screen)->get_setting (screen, name, value); +}