diff options
author | Alexander Larsson <alexl@redhat.com> | 2010-12-06 22:05:13 +0100 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2010-12-21 12:06:54 -0500 |
commit | f52223f380e45ae019d65b457871383a0c52c6ca (patch) | |
tree | 96a3fe9b4c328dd0a418aeb3560c3a557f519455 /gdk | |
parent | 84c03b14e8e81911bb5c226ae1007d89cae79f5c (diff) | |
download | gtk+-f52223f380e45ae019d65b457871383a0c52c6ca.tar.gz |
Convert all GdkScreen methods to vtable calls
Diffstat (limited to 'gdk')
-rw-r--r-- | gdk/gdkinternals.h | 30 | ||||
-rw-r--r-- | gdk/gdkscreen.c | 414 | ||||
-rw-r--r-- | gdk/x11/gdkscreen-x11.c | 442 |
3 files changed, 534 insertions, 352 deletions
diff --git a/gdk/gdkinternals.h b/gdk/gdkinternals.h index f5b5ba15d5..264955a939 100644 --- a/gdk/gdkinternals.h +++ b/gdk/gdkinternals.h @@ -354,6 +354,36 @@ struct _GdkScreenClass { GObjectClass parent_class; + GdkDisplay * (* get_display) (GdkScreen *screen); + gint (* get_width) (GdkScreen *screen); + gint (* get_height) (GdkScreen *screen); + gint (* get_width_mm) (GdkScreen *screen); + gint (* get_height_mm) (GdkScreen *screen); + gint (* get_number) (GdkScreen *screen); + GdkWindow * (* get_root_window) (GdkScreen *screen); + gint (* get_n_monitors) (GdkScreen *screen); + gint (* get_primary_monitor) (GdkScreen *screen); + gint (* get_monitor_width_mm) (GdkScreen *screen, + gint monitor_num); + gint (* get_monitor_height_mm) (GdkScreen *screen, + gint monitor_num); + gchar * (* get_monitor_plug_name) (GdkScreen *screen, + gint monitor_num); + void (* get_monitor_geometry) (GdkScreen *screen, + gint monitor_num, + GdkRectangle *dest); + GdkVisual * (* get_rgba_visual) (GdkScreen *screen); + gboolean (* is_composited) (GdkScreen *screen); + gchar * (* make_display_name) (GdkScreen *screen); + GdkWindow * (* get_active_window) (GdkScreen *screen); + GList * (* get_window_stack) (GdkScreen *screen); + void (* broadcast_client_message) (GdkScreen *screen, + GdkEvent *event); + gboolean (* get_setting) (GdkScreen *screen, + const gchar *name, + GValue *value); + + /* Signals: */ void (*size_changed) (GdkScreen *screen); void (*composited_changed) (GdkScreen *screen); void (*monitors_changed) (GdkScreen *screen); diff --git a/gdk/gdkscreen.c b/gdk/gdkscreen.c index 79bcd97e18..f092db7c42 100644 --- a/gdk/gdkscreen.c +++ b/gdk/gdkscreen.c @@ -532,3 +532,417 @@ gdk_screen_set_property (GObject *object, 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_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 <ulink + * url="http://www.freedesktop.org/Standards/wm-spec">Extended Window + * Manager Hints</ulink>. 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 #GdkWindow<!-- -->s 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 <ulink + * url="http://www.freedesktop.org/Standards/wm-spec">Extended Window + * Manager Hints</ulink>. 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 #GdkWindow<!-- -->s 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_broadcast_client_message: + * @screen: the #GdkScreen where the event will be broadcasted. + * @event: the #GdkEvent. + * + * On X11, sends an X ClientMessage event to all toplevel windows on + * @screen. + * + * Toplevel windows are determined by checking for the WM_STATE property, + * as described in the Inter-Client Communication Conventions Manual (ICCCM). + * If no windows are found with the WM_STATE property set, the message is + * sent to all children of the root window. + * + * On Windows, broadcasts a message registered with the name + * GDK_WIN32_CLIENT_MESSAGE to all top-level windows. The amount of + * data is limited to one long, i.e. four bytes. + * + * Since: 2.2 + */ +void +gdk_screen_broadcast_client_message (GdkScreen *screen, + GdkEvent *event) +{ + return GDK_SCREEN_GET_CLASS(screen)->broadcast_client_message (screen, event); +} + +/** + * 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); +} diff --git a/gdk/x11/gdkscreen-x11.c b/gdk/x11/gdkscreen-x11.c index 362ec485a6..5510d63b82 100644 --- a/gdk/x11/gdkscreen-x11.c +++ b/gdk/x11/gdkscreen-x11.c @@ -87,152 +87,62 @@ struct _GdkX11Monitor char * manufacturer; }; -static void -_gdk_screen_x11_class_init (GdkScreenX11Class *klass) -{ - GObjectClass *object_class = G_OBJECT_CLASS (klass); - - object_class->dispose = gdk_screen_x11_dispose; - object_class->finalize = gdk_screen_x11_finalize; - - signals[WINDOW_MANAGER_CHANGED] = - g_signal_new (g_intern_static_string ("window_manager_changed"), - G_OBJECT_CLASS_TYPE (object_class), - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (GdkScreenX11Class, window_manager_changed), - NULL, NULL, - g_cclosure_marshal_VOID__VOID, - G_TYPE_NONE, - 0); -} static void _gdk_screen_x11_init (GdkScreenX11 *screen) { } -/** - * 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) +static GdkDisplay * +gdk_screen_x11_get_display (GdkScreen *screen) { g_return_val_if_fail (GDK_IS_SCREEN (screen), NULL); return GDK_SCREEN_X11 (screen)->display; } -/** - * 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) + +static gint +gdk_screen_x11_get_width (GdkScreen *screen) { g_return_val_if_fail (GDK_IS_SCREEN (screen), 0); return WidthOfScreen (GDK_SCREEN_X11 (screen)->xscreen); } -/** - * 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) +static gint +gdk_screen_x11_get_height (GdkScreen *screen) { g_return_val_if_fail (GDK_IS_SCREEN (screen), 0); return HeightOfScreen (GDK_SCREEN_X11 (screen)->xscreen); } -/** - * 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) +static gint +gdk_screen_x11_get_width_mm (GdkScreen *screen) { g_return_val_if_fail (GDK_IS_SCREEN (screen), 0); return WidthMMOfScreen (GDK_SCREEN_X11 (screen)->xscreen); } -/** - * 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) +static gint +gdk_screen_x11_get_height_mm (GdkScreen *screen) { g_return_val_if_fail (GDK_IS_SCREEN (screen), 0); return HeightMMOfScreen (GDK_SCREEN_X11 (screen)->xscreen); } -/** - * 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) +static gint +gdk_screen_x11_get_number (GdkScreen *screen) { g_return_val_if_fail (GDK_IS_SCREEN (screen), 0); return GDK_SCREEN_X11 (screen)->screen_num; } -/** - * 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) +static GdkWindow * +gdk_screen_x11_get_root_window (GdkScreen *screen) { g_return_val_if_fail (GDK_IS_SCREEN (screen), NULL); @@ -302,63 +212,25 @@ gdk_screen_x11_finalize (GObject *object) G_OBJECT_CLASS (_gdk_screen_x11_parent_class)->finalize (object); } -/** - * 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) +static gint +gdk_screen_x11_get_n_monitors (GdkScreen *screen) { g_return_val_if_fail (GDK_IS_SCREEN (screen), 0); return GDK_SCREEN_X11 (screen)->n_monitors; } -/** - * 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) +static gint +gdk_screen_x11_get_primary_monitor (GdkScreen *screen) { g_return_val_if_fail (GDK_IS_SCREEN (screen), 0); return GDK_SCREEN_X11 (screen)->primary_monitor; } -/** - * 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) +static gint +gdk_screen_x11_get_monitor_width_mm (GdkScreen *screen, + gint monitor_num) { GdkScreenX11 *screen_x11 = GDK_SCREEN_X11 (screen); @@ -369,20 +241,9 @@ gdk_screen_get_monitor_width_mm (GdkScreen *screen, return screen_x11->monitors[monitor_num].width_mm; } -/** - * 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) +static gint +gdk_screen_x11_get_monitor_height_mm (GdkScreen *screen, + gint monitor_num) { GdkScreenX11 *screen_x11 = GDK_SCREEN_X11 (screen); @@ -393,23 +254,9 @@ gdk_screen_get_monitor_height_mm (GdkScreen *screen, return screen_x11->monitors[monitor_num].height_mm; } -/** - * 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) +static gchar * +gdk_screen_x11_get_monitor_plug_name (GdkScreen *screen, + gint monitor_num) { GdkScreenX11 *screen_x11 = GDK_SCREEN_X11 (screen); @@ -446,24 +293,10 @@ gdk_x11_screen_get_monitor_output (GdkScreen *screen, return screen_x11->monitors[monitor_num].output; } -/** - * gdk_screen_get_monitor_geometry: - * @screen: a #GdkScreen - * @monitor_num: the monitor number, between 0 and gdk_screen_get_n_monitors (screen) - * @dest: (out caller-allocates) (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) +static void +gdk_screen_x11_get_monitor_geometry (GdkScreen *screen, + gint monitor_num, + GdkRectangle *dest) { GdkScreenX11 *screen_x11 = GDK_SCREEN_X11 (screen); @@ -475,31 +308,8 @@ gdk_screen_get_monitor_geometry (GdkScreen *screen, *dest = screen_x11->monitors[monitor_num].geometry; } -/** - * 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) +static GdkVisual * +gdk_screen_x11_get_rgba_visual (GdkScreen *screen) { GdkScreenX11 *screen_x11; @@ -1022,24 +832,8 @@ _gdk_x11_screen_setup (GdkScreen *screen) screen_x11->is_composited = check_is_composited (screen_x11->display, screen_x11); } -/** - * 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) +static gboolean +gdk_screen_x11_is_composited (GdkScreen *screen) { GdkScreenX11 *screen_x11; @@ -1204,19 +998,8 @@ _gdk_windowing_substitute_screen_number (const gchar *display_name, return g_string_free (str, FALSE); } -/** - * 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) +static gchar * +gdk_screen_x11_make_display_name (GdkScreen *screen) { const gchar *old_display; @@ -1228,31 +1011,8 @@ gdk_screen_make_display_name (GdkScreen *screen) gdk_screen_get_number (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 <ulink - * url="http://www.freedesktop.org/Standards/wm-spec">Extended Window - * Manager Hints</ulink>. 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) +static GdkWindow * +gdk_screen_x11_get_active_window (GdkScreen *screen) { GdkScreenX11 *screen_x11; GdkWindow *ret = NULL; @@ -1296,34 +1056,8 @@ gdk_screen_get_active_window (GdkScreen *screen) return ret; } -/** - * gdk_screen_get_window_stack: - * @screen: a #GdkScreen - * - * Returns a #GList of #GdkWindow<!-- -->s 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 <ulink - * url="http://www.freedesktop.org/Standards/wm-spec">Extended Window - * Manager Hints</ulink>. 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 #GdkWindow<!-- -->s for the current window stack, - * or %NULL. - * - * Since: 2.10 - **/ -GList * -gdk_screen_get_window_stack (GdkScreen *screen) +static GList * +gdk_screen_x11_get_window_stack (GdkScreen *screen) { GdkScreenX11 *screen_x11; GList *ret = NULL; @@ -1433,29 +1167,9 @@ gdk_event_send_client_message_to_all_recurse (GdkDisplay *display, return result; } -/** - * gdk_screen_broadcast_client_message: - * @screen: the #GdkScreen where the event will be broadcasted. - * @event: the #GdkEvent. - * - * On X11, sends an X ClientMessage event to all toplevel windows on - * @screen. - * - * Toplevel windows are determined by checking for the WM_STATE property, - * as described in the Inter-Client Communication Conventions Manual (ICCCM). - * If no windows are found with the WM_STATE property set, the message is - * sent to all children of the root window. - * - * On Windows, broadcasts a message registered with the name - * GDK_WIN32_CLIENT_MESSAGE to all top-level windows. The amount of - * data is limited to one long, i.e. four bytes. - * - * Since: 2.2 - */ - -void -gdk_screen_broadcast_client_message (GdkScreen *screen, - GdkEvent *event) +static void +gdk_screen_x11_broadcast_client_message (GdkScreen *screen, + GdkEvent *event) { XEvent sev; GdkWindow *root_window; @@ -1496,27 +1210,10 @@ check_transform (const gchar *xsettings_name, return TRUE; } -/** - * 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) +static gboolean +gdk_screen_x11_get_setting (GdkScreen *screen, + const gchar *name, + GValue *value) { const char *xsettings_name = NULL; @@ -2001,3 +1698,44 @@ gdk_x11_screen_get_window_manager_name (GdkScreen *screen) return GDK_SCREEN_X11 (screen)->window_manager_name; } + +static void +_gdk_screen_x11_class_init (GdkScreenX11Class *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS (klass); + GdkScreenClass *screen_class = GDK_SCREEN_CLASS (klass); + + object_class->dispose = gdk_screen_x11_dispose; + object_class->finalize = gdk_screen_x11_finalize; + + screen_class->get_display = gdk_screen_x11_get_display; + screen_class->get_width = gdk_screen_x11_get_width; + screen_class->get_height = gdk_screen_x11_get_height; + screen_class->get_width_mm = gdk_screen_x11_get_width_mm; + screen_class->get_height_mm = gdk_screen_x11_get_height_mm; + screen_class->get_number = gdk_screen_x11_get_number; + screen_class->get_root_window = gdk_screen_x11_get_root_window; + screen_class->get_n_monitors = gdk_screen_x11_get_n_monitors; + screen_class->get_primary_monitor = gdk_screen_x11_get_primary_monitor; + screen_class->get_monitor_width_mm = gdk_screen_x11_get_monitor_width_mm; + screen_class->get_monitor_height_mm = gdk_screen_x11_get_monitor_height_mm; + screen_class->get_monitor_plug_name = gdk_screen_x11_get_monitor_plug_name; + screen_class->get_monitor_geometry = gdk_screen_x11_get_monitor_geometry; + screen_class->get_rgba_visual = gdk_screen_x11_get_rgba_visual; + screen_class->is_composited = gdk_screen_x11_is_composited; + screen_class->make_display_name = gdk_screen_x11_make_display_name; + screen_class->get_active_window = gdk_screen_x11_get_active_window; + screen_class->get_window_stack = gdk_screen_x11_get_window_stack; + screen_class->broadcast_client_message = gdk_screen_x11_broadcast_client_message; + screen_class->get_setting = gdk_screen_x11_get_setting; + + signals[WINDOW_MANAGER_CHANGED] = + g_signal_new (g_intern_static_string ("window_manager_changed"), + G_OBJECT_CLASS_TYPE (object_class), + G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET (GdkScreenX11Class, window_manager_changed), + NULL, NULL, + g_cclosure_marshal_VOID__VOID, + G_TYPE_NONE, + 0); +} |