Commit 2b95d1a3 authored by Matthias Clasen's avatar Matthias Clasen

Introduce API to get the preferred visual

Unless GDK_RGBA=0 is set, this will be the RGBA visual.
The new function is called gdk_screen_get_preferred_visual().

https://bugzilla.gnome.org/show_bug.cgi?id=630217
parent 15060a8f
...@@ -195,6 +195,7 @@ GdkScreen ...@@ -195,6 +195,7 @@ GdkScreen
gdk_screen_get_default gdk_screen_get_default
gdk_screen_get_system_visual gdk_screen_get_system_visual
gdk_screen_get_rgba_visual gdk_screen_get_rgba_visual
gdk_screen_get_preferred_visual
gdk_screen_is_composited gdk_screen_is_composited
gdk_screen_get_root_window gdk_screen_get_root_window
gdk_screen_get_display gdk_screen_get_display
......
...@@ -478,6 +478,15 @@ nevertheless. ...@@ -478,6 +478,15 @@ nevertheless.
</para> </para>
</formalpara> </formalpara>
<formalpara>
<title><envar>GDK_RGBA</envar></title>
<para>
Since 3.12, this environment variable can be used to prevent
using RGBA visuals on the X11 backend by setting GDK_RGBA=0.
</para>
</formalpara>
<formalpara> <formalpara>
<title><envar>XDG_DATA_HOME</envar>, <envar>XDG_DATA_DIRS</envar></title> <title><envar>XDG_DATA_HOME</envar>, <envar>XDG_DATA_DIRS</envar></title>
......
...@@ -912,6 +912,36 @@ gdk_screen_get_rgba_visual (GdkScreen *screen) ...@@ -912,6 +912,36 @@ gdk_screen_get_rgba_visual (GdkScreen *screen)
return GDK_SCREEN_GET_CLASS (screen)->get_rgba_visual (screen); return GDK_SCREEN_GET_CLASS (screen)->get_rgba_visual (screen);
} }
/**
* gdk_screen_get_preferred_visual:
* @screen: a #GdkScreen
*
* Returns the visual that is preferred when creating windows.
*
* This will be the visual returned by gdk_screen_get_rgba_visual()
* unless that is not available, or unless the environment
* variable <envar>GDK_RGBA</envar> is set to 0.
*
* Return value: (transfer none): the preferred visual to use
* for windows
*
* Since: 3.12
*/
GdkVisual *
gdk_screen_get_preferred_visual (GdkScreen *screen)
{
GdkVisual *visual;
g_return_val_if_fail (GDK_IS_SCREEN (screen), NULL);
visual = gdk_screen_get_rgba_visual (screen);
if (visual == NULL || g_strcmp0 (g_getenv ("GDK_RGBA"), "0") == 0)
visual = gdk_screen_get_system_visual (screen);
return visual;
}
/** /**
* gdk_screen_is_composited: * gdk_screen_is_composited:
* @screen: a #GdkScreen * @screen: a #GdkScreen
......
...@@ -45,6 +45,8 @@ GDK_AVAILABLE_IN_ALL ...@@ -45,6 +45,8 @@ GDK_AVAILABLE_IN_ALL
GdkVisual * gdk_screen_get_system_visual (GdkScreen *screen); GdkVisual * gdk_screen_get_system_visual (GdkScreen *screen);
GDK_AVAILABLE_IN_ALL GDK_AVAILABLE_IN_ALL
GdkVisual * gdk_screen_get_rgba_visual (GdkScreen *screen); GdkVisual * gdk_screen_get_rgba_visual (GdkScreen *screen);
GDK_AVAILABLE_IN_3_12
GdkVisual * gdk_screen_get_preferred_visual (GdkScreen *screen);
GDK_AVAILABLE_IN_ALL GDK_AVAILABLE_IN_ALL
gboolean gdk_screen_is_composited (GdkScreen *screen); gboolean gdk_screen_is_composited (GdkScreen *screen);
......
...@@ -66,6 +66,7 @@ struct _GdkScreenClass ...@@ -66,6 +66,7 @@ struct _GdkScreenClass
GList * (* list_visuals) (GdkScreen *screen); GList * (* list_visuals) (GdkScreen *screen);
GdkVisual * (* get_system_visual) (GdkScreen *screen); GdkVisual * (* get_system_visual) (GdkScreen *screen);
GdkVisual * (* get_rgba_visual) (GdkScreen *screen); GdkVisual * (* get_rgba_visual) (GdkScreen *screen);
GdkVisual * (* get_preferred_visual) (GdkScreen *screen);
gboolean (* is_composited) (GdkScreen *screen); gboolean (* is_composited) (GdkScreen *screen);
gchar * (* make_display_name) (GdkScreen *screen); gchar * (* make_display_name) (GdkScreen *screen);
GdkWindow * (* get_active_window) (GdkScreen *screen); GdkWindow * (* get_active_window) (GdkScreen *screen);
......
...@@ -10863,9 +10863,14 @@ gtk_widget_get_visual (GtkWidget *widget) ...@@ -10863,9 +10863,14 @@ gtk_widget_get_visual (GtkWidget *widget)
g_warning ("Ignoring visual set on widget `%s' that is not on the correct screen.", g_warning ("Ignoring visual set on widget `%s' that is not on the correct screen.",
gtk_widget_get_name (widget)); gtk_widget_get_name (widget));
} }
}
return gdk_screen_get_system_visual (screen); visual = gdk_screen_get_rgba_visual (screen);
if (visual == NULL ||
g_strcmp0 (g_getenv ("GDK_RGBA"), "0") != 0)
visual = gdk_screen_get_system_visual (screen);
return visual;
} }
/** /**
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment