gnash-commit
[Top][All Lists]
Advanced

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

[Gnash-commit] gnash ./ChangeLog backend/gnash.cpp backend/gtk...


From: Bastiaan Jacques
Subject: [Gnash-commit] gnash ./ChangeLog backend/gnash.cpp backend/gtk...
Date: Sat, 29 Apr 2006 17:39:11 +0000

CVSROOT:        /sources/gnash
Module name:    gnash
Branch:         
Changes by:     Bastiaan Jacques <address@hidden>       06/04/29 17:39:11

Modified files:
        .              : ChangeLog 
        backend        : gnash.cpp gtksup.cpp gtksup.h 

Log message:
        Add a gtkgl unrealize_event handler which facilitates destruction of
        some gdkgl objects. This fixes shutdown leaks.

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnash/gnash/ChangeLog.diff?tr1=1.253&tr2=1.254&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/gnash/gnash/backend/gnash.cpp.diff?tr1=1.26&tr2=1.27&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/gnash/gnash/backend/gtksup.cpp.diff?tr1=1.3&tr2=1.4&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/gnash/gnash/backend/gtksup.h.diff?tr1=1.1&tr2=1.2&r1=text&r2=text

Patches:
Index: gnash/ChangeLog
diff -u gnash/ChangeLog:1.253 gnash/ChangeLog:1.254
--- gnash/ChangeLog:1.253       Sat Apr 29 00:56:38 2006
+++ gnash/ChangeLog     Sat Apr 29 17:39:11 2006
@@ -1,3 +1,9 @@
+2006-04-29 Bastiaan Jacques <address@hidden>
+
+       * backend/{gnash.cpp,gtksup.cpp,gtksup.h}: Add a gtkgl
+       unrealize_event handler which facilitates destruction of
+       some gdkgl objects. This fixes shutdown leaks.
+
 2006-04-28 Sandro Santilli <address@hidden>
 
        * server/array.cpp: fixed bug in copy constructor.
Index: gnash/backend/gnash.cpp
diff -u gnash/backend/gnash.cpp:1.26 gnash/backend/gnash.cpp:1.27
--- gnash/backend/gnash.cpp:1.26        Tue Apr 18 14:40:16 2006
+++ gnash/backend/gnash.cpp     Sat Apr 29 17:39:11 2006
@@ -195,7 +195,6 @@
     std::vector<const char*> infiles;
     string url;
 #ifdef HAVE_GTK2
-    GdkGLConfig *glconfig;
     GdkGLConfigMode glcmode;
     gint major, minor;
 
@@ -512,6 +511,8 @@
                           G_CALLBACK (configure_event), NULL);
         g_signal_connect(G_OBJECT (drawing_area), "expose_event",
                           G_CALLBACK (expose_event), NULL);
+        g_signal_connect (G_OBJECT (drawing_area), "unrealize_event",
+                          G_CALLBACK (unrealize_event), NULL);
         
         gtk_widget_add_events(drawing_area, GDK_EXPOSURE_MASK
                               | GDK_BUTTON_PRESS_MASK
@@ -853,7 +854,7 @@
         m = gnash::get_current_root();
         gnash::delete_unused_root();
 #ifdef HAVE_GTK2
-        GdkGLContext *glcontext = gtk_widget_get_gl_context (drawing_area);
+        glcontext = gtk_widget_get_gl_context (drawing_area);
         GdkGLDrawable *gldrawable = gtk_widget_get_gl_drawable (drawing_area);
         if (!gdk_gl_drawable_gl_begin (gldrawable, glcontext)) {
             dbglogfile << "ERROR: Couldn't start drawable!" << endl;
Index: gnash/backend/gtksup.cpp
diff -u gnash/backend/gtksup.cpp:1.3 gnash/backend/gtksup.cpp:1.4
--- gnash/backend/gtksup.cpp:1.3        Mon Apr 10 20:21:39 2006
+++ gnash/backend/gtksup.cpp    Sat Apr 29 17:39:11 2006
@@ -238,6 +238,20 @@
 // Event handlers
 //
 
+gboolean
+unrealize_event(GtkWidget *widget, GdkEvent *event, gpointer data)
+{
+    if (glcontext) {
+      g_object_unref (G_OBJECT (glcontext));
+      glcontext = NULL;
+    }
+
+    if (glconfig) {
+      g_object_unref (G_OBJECT (glconfig));
+      glconfig = NULL;
+    }
+}
+
 // Shut everything down and exit when we're destroyed as a window
 gboolean
 delete_event(GtkWidget *widget, GdkEvent *event, gpointer data)
Index: gnash/backend/gtksup.h
diff -u gnash/backend/gtksup.h:1.1 gnash/backend/gtksup.h:1.2
--- gnash/backend/gtksup.h:1.1  Wed Mar 29 05:42:42 2006
+++ gnash/backend/gtksup.h      Sat Apr 29 17:39:11 2006
@@ -55,6 +55,9 @@
 // void xt_event_handler(Widget xtwidget, gpointer instance,
 //              XEvent *xevent, Boolean *b);
 
+extern GdkGLConfig *glconfig = NULL;
+extern GdkGLContext *glcontext = NULL;
+
 typedef enum {IDLE_MOVIE, PLAY_MOVIE, RESTART_MOVIE, PAUSE_MOVIE, STOP_MOVIE, 
STEP_FORWARD, STEP_BACKWARD, JUMP_FORWARD, JUMP_BACKWARD, QUIT_MOVIE} 
movie_state_e;
 
 // Gtk popup menu
@@ -79,6 +82,7 @@
 void examine_gl_config_attrib (GdkGLConfig *glconfig);
 
 // GTK Event handlers
+gboolean unrealize_event(GtkWidget *widget, GdkEvent *event, gpointer data);
 gboolean realize_event(GtkWidget *widget, GdkEvent *event, gpointer data);
 gboolean delete_event(GtkWidget *widget, GdkEvent *event, gpointer data);
 gboolean expose_event(GtkWidget *widget, GdkEventExpose *event,




reply via email to

[Prev in Thread] Current Thread [Next in Thread]