[Top][All Lists]
[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,