Commit f52223f3 authored by Alexander Larsson's avatar Alexander Larsson Committed by Matthias Clasen

Convert all GdkScreen methods to vtable calls

parent 84c03b14
......@@ -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);
......
......@@ -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);
}
......@@ -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,