bug-gnubg
[Top][All Lists]
Advanced

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

Re: [Bug-gnubg] gnubg hangs when closing Appearance prefs on MacOS X


From: Michael Petch
Subject: Re: [Bug-gnubg] gnubg hangs when closing Appearance prefs on MacOS X
Date: Tue, 20 Apr 2004 09:12:52 -0600

Okay, I am using the latest tip release of gtglext (CVS). This version
as I mentioned previously (along with 1.0.6) hang gnubg. I modified your
makefile to work on OSX. Built it up. It seems to work.

I click on the test button and I get an aqua triangle in a second
window. When I click the window close button on the second window it
does not close on the first click. If I click the close button TWICE
both windows exit (The blue triangle and the test button window close
and program exits). No error, no coredump. 

This seems like slightly different behavior than what oliver is seeing.

I forgot to mention a scenario where the MAC build does work for me. And
I forgot until now. When I run the MAC build of gnubg on my desktop it
hangs coming out of the preferences screen. What I forgot to pointout is
that if I ssh into my MAC and remotely display gnubg on my Linux (Fedora
Cora 1) it works like a charm! 

I did this same test (remotely log in and run your test app), and I see
the same behavior. I must click the close window button twice on the
blue triangle window, and BOTH windows close.


On Tue, 2004-04-20 at 04:49, Jon Kinsey wrote:
> Olivier, Michael or any other mac users...
> 
> I've created a very simple test program which should narrow things down 
> to gnubg or gtkglext.
> 
> I've attached a makefile too, but I'm building on windows so may be of 
> limited use - should be easy to build anyway.
> 
> Just click the test button and see if the dialog closes ok.
> 
> Jon
> 
> 
> ______________________________________________________________________
> NAME=exttest
> 
> LIBFLAGS=-mwindows
> FLAGS=-fnative-struct -Wall -O3
> RM=del
> CC=gcc
> 
> INCLUDE= \
>       -I$(BASEDIR)\include\gtk-2.0 \
>       -I$(BASEDIR)\include\pango-1.0 \
>       -I$(BASEDIR)\include\atk-1.0 \
>       -I$(BASEDIR)\lib\gtk-2.0\include \
>       -I$(BASEDIR)/lib/glib-2.0/include \
>       -I$(BASEDIR)/include/libxml2 \
>       -I$(BASEDIR)/include/gtkglext-1.0 \
>       -I$(BASEDIR)/lib/gtkglext-1.0/include \
>       -I$(BASEDIR)/include/glib-2.0 \
>       -I$(BASEDIR)/include/freetype2
> 
> LIBS= \
>       -lintl.dll -lgdbm.dll\
>       -lgobject-2.0.dll -lglib-2.0.dll -lgtk-win32-2.0 -lgdk-win32-2.0 \
>       -liconv -lpng -lz -lwinmm -lm -lpango-1.0 -lgdk_pixbuf-2.0 \
>       -lopengl32 -lglu32 -lglut32 \
>       -lgdkglext-win32-1.0.dll -lgtkglext-win32-1.0.dll
> 
> TARGET=$(NAME).exe
> SOURCE=$(NAME)
> OBJECTS=$(patsubst %,%.o,$(SOURCE))
> HEADERS=
> 
> all: $(TARGET)
>       @echo done
>       $(TARGET)
> 
> $(TARGET): $(OBJECTS)
>       @echo linking
>       $(CC) -o $@ $+ $(LIBFLAGS) $(LIBS)
> 
> address@hidden compiling $(patsubst bin/gtk/int/../../../%,%,$<)
> COMP2=${CC} $(FLAGS) $(INCLUDE) -o $@ -c $<
> 
> %.o: %.c $(HEADERS)
>       $(COMP1)
>       $(COMP2)
>       
> clean:
>       $(RM) $(OBJECTS)
>       @echo clean
> 
> ______________________________________________________________________
> #include <gtk/gtk.h>
> #include <GL/gl.h>
> #include <GL/glu.h>
> #include <gtk/gtkgl.h>
> 
> void realize(GtkWidget *widget, void* data)
> {
>       GdkGLDrawable *gldrawable = gtk_widget_get_gl_drawable(widget);
>       if (!gdk_gl_drawable_gl_begin(gldrawable, 
> gtk_widget_get_gl_context(widget)))
>       {
>               g_print("gdk_gl_drawable_gl_begin failed\n");
>               return;
>       }
> 
>       glMatrixMode(GL_PROJECTION);
>       glLoadIdentity();
>       gluOrtho2D(0,100,100,0);
>       glMatrixMode(GL_MODELVIEW);
>       glLoadIdentity();
>       
>       glClearColor(0,0,0,1);
> 
>       gdk_gl_drawable_gl_end(gldrawable);
> }
> 
> static gboolean configure_event(GtkWidget *widget, GdkEventConfigure 
> *notused, void* data)
> {
>       GdkGLDrawable *gldrawable = gtk_widget_get_gl_drawable(widget);
>       if (!gdk_gl_drawable_gl_begin(gldrawable, 
> gtk_widget_get_gl_context(widget)))
>       {
>               g_print("gdk_gl_drawable_gl_begin failed\n");
>               return FALSE;
>       }
> 
>       glViewport(0, 0, widget->allocation.width, widget->allocation.height);
> 
>       gdk_gl_drawable_gl_end(gldrawable);
> 
>       return TRUE;
> }
> 
> void CheckOpenglError()
> {
>       GLenum glErr = glGetError();
>       if (glErr != GL_NO_ERROR)
>               g_print("OpenGL Error: %s\n", gluErrorString(glErr));
> }
> 
> void Draw(int red)
> {
>       CheckOpenglError();
>       glClear(GL_COLOR_BUFFER_BIT);
>       glColor3f(red,1,1);
>       glBegin(GL_TRIANGLES);
>       glVertex2f(10,10);
>       glVertex2f(10,90);
>       glVertex2f(90,90);
>       glEnd();
> }
> 
> static gboolean expose_event(GtkWidget *widget, GdkEventExpose *notused, int 
> red)
> {
>       GdkGLDrawable *gldrawable = gtk_widget_get_gl_drawable(widget);
>       if (!gdk_gl_drawable_gl_begin(gldrawable, 
> gtk_widget_get_gl_context(widget)))
>       {
>               g_print("gdk_gl_drawable_gl_begin failed\n");
>               return FALSE;
>       }
> 
>       Draw(red);
> 
>       gdk_gl_drawable_swap_buffers(gldrawable);
>       gdk_gl_drawable_gl_end(gldrawable);
> 
>       return TRUE;
> }
> 
> GdkGLConfig *glconfig;
> 
> extern GtkWidget* CreateGLWidget(int red)
> {
>       GtkWidget* drawing_area;
>       drawing_area = gtk_drawing_area_new();
>       gtk_widget_set_gl_capability(drawing_area, glconfig, NULL, TRUE, 
> GDK_GL_RGBA_TYPE);
>       gtk_widget_set_size_request(drawing_area, 200, 200);
> 
>       if (drawing_area == NULL)
>       {
>               g_print("Can't create opengl drawing widget\n");
>               return NULL;
>       }
> 
>       gtk_widget_set_events(drawing_area, GDK_EXPOSURE_MASK);
>       gtk_signal_connect(GTK_OBJECT(drawing_area), "realize", 
> GTK_SIGNAL_FUNC(realize), 0);
>       gtk_signal_connect(GTK_OBJECT(drawing_area), "configure_event", 
> GTK_SIGNAL_FUNC(configure_event), 0);
>       gtk_signal_connect(GTK_OBJECT(drawing_area), "expose_event", 
> GTK_SIGNAL_FUNC(expose_event), (void*)red);
> 
>       return drawing_area;
> }
> 
> GtkWidget *window;
> 
> static void Test(GtkWidget *pw, void* data)
> {
>       GtkWidget *pwDialog = gtk_dialog_new();
>       g_signal_connect(G_OBJECT(pwDialog), "delete_event", 
> G_CALLBACK(gtk_main_quit), NULL);
>       gtk_container_add(GTK_CONTAINER(GTK_DIALOG(pwDialog)->vbox), 
> CreateGLWidget(0));
>       gtk_window_set_modal(GTK_WINDOW(pwDialog), TRUE);
>       gtk_window_set_transient_for(GTK_WINDOW(pwDialog), GTK_WINDOW(window));
>       gtk_widget_show_all(pwDialog);
>       gtk_main();
> }
> 
> int main (int argc, char *argv[])
> {
>   GtkWidget *vbox;
>   GtkWidget *button;
> 
>       gtk_init(&argc, &argv);
>       gtk_gl_init(&argc, &argv);
>       
>       glconfig = gdk_gl_config_new_by_mode(GDK_GL_MODE_RGB | 
> GDK_GL_MODE_DEPTH | GDK_GL_MODE_DOUBLE | GDK_GL_MODE_STENCIL);
>       if (!glconfig)
>       {
>               g_print("*** Cannot find OpenGL-capable visual ***\n");
>               return 0;
>       }
>       
>       window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
>       g_signal_connect(G_OBJECT(window), "delete_event", 
> G_CALLBACK(gtk_main_quit), NULL);
> 
>   vbox = gtk_vbox_new (FALSE, 0);
>   gtk_container_add (GTK_CONTAINER (window), vbox);
>   gtk_widget_show (vbox);
> 
>   gtk_box_pack_start (GTK_BOX (vbox), CreateGLWidget(1), TRUE, TRUE, 0);
> 
>   button = gtk_button_new_with_label ("Test");
>   gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
>   g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK(Test), NULL);
> 
>   gtk_widget_show_all (window);
> 
>   gtk_main ();
> 
>   return 0;
> }
-- 
Mike Petch
CApp::Sysware Consulting Ltd.
Suite 1002,1140-15th Ave SW.
Calgary, Alberta, Canada.
T2R 1K6.
(403)804-5700.





reply via email to

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