[gtk+/wip/gdk-gl: 6/31] gl: Add a back pointer from the window to the context



commit 6b0fc7c4d822a090adc0adcb560d87a8d6c7d6be
Author: Emmanuele Bassi <ebassi gnome org>
Date:   Mon Aug 11 21:24:29 2014 +0100

    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.

 gdk/gdkglcontext.c |   30 ++++++++++++++++++++++++++++--
 gdk/gdkinternals.h |    5 +++++
 2 files changed, 33 insertions(+), 2 deletions(-)
---
diff --git a/gdk/gdkglcontext.c b/gdk/gdkglcontext.c
index f5e543c..528bd26 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 791fa87..9dfd9b5 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 *
  *****************************/


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]