diff options
author | Emmanuele Bassi <ebassi@gnome.org> | 2014-08-11 21:24:29 +0100 |
---|---|---|
committer | Emmanuele Bassi <ebassi@gnome.org> | 2014-08-12 10:39:29 +0100 |
commit | 6b0fc7c4d822a090adc0adcb560d87a8d6c7d6be (patch) | |
tree | 9464aab69c8b0761d04ee87c573f4a2f88061688 | |
parent | 6d71c440e99698f40d35af83edd43cf66192ce77 (diff) | |
download | gtk+-6b0fc7c4d822a090adc0adcb560d87a8d6c7d6be.tar.gz |
gl: Add a back pointer from the window to the context
This way we can check if a GdkWindow has a GdkGLContext associated to
it.
-rw-r--r-- | gdk/gdkglcontext.c | 30 | ||||
-rw-r--r-- | gdk/gdkinternals.h | 5 |
2 files changed, 33 insertions, 2 deletions
diff --git a/gdk/gdkglcontext.c b/gdk/gdkglcontext.c index f5e543c6a4..528bd26779 100644 --- a/gdk/gdkglcontext.c +++ b/gdk/gdkglcontext.c @@ -38,6 +38,7 @@ #include "gdkdisplayprivate.h" #include "gdkglpixelformat.h" #include "gdkvisual.h" +#include "gdkinternals.h" #include "gdkintl.h" @@ -393,15 +394,21 @@ gdk_gl_context_set_window (GdkGLContext *context, GdkGLContextPrivate *priv = gdk_gl_context_get_instance_private (context); g_return_if_fail (GDK_IS_GL_CONTEXT (context)); - g_return_if_fail (window == NULL || GDK_IS_WINDOW (window)); + g_return_if_fail (window == NULL || (GDK_IS_WINDOW (window) && !GDK_WINDOW_DESTROYED (window))); if (priv->window == window) return; + if (priv->window != NULL) + gdk_window_set_gl_context (priv->window, NULL); + g_clear_object (&priv->window); if (window != NULL) - priv->window = g_object_ref (window); + { + priv->window = g_object_ref (window); + gdk_window_set_gl_context (window, context); + } GDK_GL_CONTEXT_GET_CLASS (context)->set_window (context, window); } @@ -490,3 +497,22 @@ gdk_gl_context_get_swap_interval (GdkGLContext *context) return priv->swap_interval; } + +gboolean +gdk_window_has_gl_context (GdkWindow *window) +{ + return g_object_get_data (G_OBJECT (window), "-gdk-gl-context") != NULL; +} + +void +gdk_window_set_gl_context (GdkWindow *window, + GdkGLContext *context) +{ + g_object_set_data (G_OBJECT (window), "-gdk-gl-context", context); +} + +GdkGLContext * +gdk_window_get_gl_context (GdkWindow *window) +{ + return g_object_get_data (G_OBJECT (window), "-gdk-gl-context"); +} diff --git a/gdk/gdkinternals.h b/gdk/gdkinternals.h index 791fa87b22..9dfd9b544c 100644 --- a/gdk/gdkinternals.h +++ b/gdk/gdkinternals.h @@ -407,6 +407,11 @@ void _gdk_synthesize_crossing_events_for_geometry_change (GdkWindow *changed_win gboolean _gdk_window_has_impl (GdkWindow *window); GdkWindow * _gdk_window_get_impl_window (GdkWindow *window); +gboolean gdk_window_has_gl_context (GdkWindow *window); +void gdk_window_set_gl_context (GdkWindow *window, + GdkGLContext *context); +GdkGLContext * gdk_window_get_gl_context (GdkWindow *window); + /***************************** * offscreen window routines * *****************************/ |