Re: OpenGL & Linux XServer

Petasis Gewrgios (ph1566@rea.edu.physics.uch.gr)
Mon, 9 Dec 1996 13:34:45 +0200 (WET)

To subscribers of the xforms list from Petasis Gewrgios <ph1566@rea.edu.physics.uch.gr> :

A few days ago, i have posted the following mail:
> MainLoopUser Event(7,w=0x2400016 s=1032) EnterNotify Mode Normal
> In EventCallback [events.c 37] Unknown window=0x2400016
> Ignored Event(7,w=0x2400016 s=1032) EnterNotify Mode Normal
> PutbackEvent Event(7,w=40390x2400016 s=1032) EnterNotify Mode Normal
> X Error of failed request: BadWindow (invalid Window parameter)
> Major opcode of failed request: 10 (X_UnmapWindow)
> Resource id in failed request: 0x2400038
> Serial number of failed request: 14038
> Current serial number in output stream: 1
>
> Anyone understanding anything ????

This error ocurs when i use fl_set_form_dblbuffer in a form with
some buttons, 3 sliders, text and 2 free objects...
(If anybody remembers...)
I *think* i found the problem. This error happens if you freeze
a form that has been double buffered! Sometimes you get X errors as the above,
or sometimes nothing appears in the window. This error (is it an error?)
happens always no matter how simple the form is...

What follows is a simple (?) program that reproduces the ploblem...

#include "forms.h"
#include <stdlib.h>
#ifndef FD_test_h_
#define FD_test_h_
/* Header file generated with fdesign. */

/**** Callback routines ****/

/**** Forms and Objects ****/

typedef struct {
FL_FORM *test;
FL_OBJECT *free1;
void *vdata;
long ldata;
} FD_test;

extern FD_test * create_form_test(void);
extern int handle_free1(FL_OBJECT *,int,FL_Coord,FL_Coord,int,void *);
extern void draw(FL_OBJECT *,long);

#endif /* FD_test_h_ */
/* Form definition file generated with fdesign. */

FD_test *test_form;
void free1_callback(FL_OBJECT *obj,long unused);
int handle_free2(FL_OBJECT *,int,FL_Coord,FL_Coord,int,void *);

FD_test *create_form_test(void)
{
FL_OBJECT *obj;
FD_test *fdui = (FD_test *) fl_calloc(1, sizeof(*fdui));

fdui->test = fl_bgn_form(FL_NO_BOX, 430, 430);
obj = fl_add_box(FL_UP_BOX,0,0,430,430,"");
obj = fl_add_button(FL_NORMAL_BUTTON,110,290,100,30,"Redraw");
fl_set_object_lsize(obj,FL_NORMAL_SIZE);
fl_set_object_callback(obj,draw,0);
fdui->free1 = obj = fl_add_free(FL_INPUT_FREE,20,20,260,260,"",handle_free1);
fl_set_object_boxtype(obj,FL_DOWN_BOX);
fl_set_object_color(obj,FL_DARKTOMATO,FL_DARKTOMATO);
fl_set_object_callback(obj,free1_callback,0);

fl_end_form();

return fdui;
}
/*---------------------------------------*/
void free1_callback(FL_OBJECT *obj,long unused)
{
fl_finish();
exit(0);
}

int handle_free1(FL_OBJECT *obj,int event,FL_Coord mx,FL_Coord my,
int key,void *xev)
{
int dif,value,saturation,y,R=125,G=255,B=200;
int tmp_R,tmp_G,tmp_B,k,ww=13,wh=10;

switch (event)
{
case FL_DRAW: /* Redraw Object */
fl_freeze_form(test_form->test);
/* fl_deactivate_form(test_form->test);*/

dif=obj->bw;if(dif<0)dif=-dif;
fl_drw_frame(obj->boxtype,obj->x+dif,obj->y+dif,
obj->w-2*dif,obj->h-2*dif,FL_COL1,obj->bw);
fl_set_clipping( obj->x+dif, obj->y+dif,
obj->w-2*dif, obj->h-2*dif);
k=FL_FREE_COL1;
saturation=50;
for(value=100;value>=8;value-=4) {
k++;
tmp_R=value*( (255-R)*(100-saturation)/100+R )/100;
tmp_G=value*( (255-G)*(100-saturation)/100+G )/100;
tmp_B=value*( (255-B)*(100-saturation)/100+B )/100;
fl_mapcolor(k,tmp_R,tmp_G,tmp_B);
y=100-saturation;
fl_rectf(obj->x+dif+(int)(2.41*value),
obj->y+dif+(int)(2.44*y),ww,wh,k);
}
fl_unset_clipping();
/* fl_activate_form(test_form->test);*/
fl_unfreeze_form(test_form->test);
}
return(0);
}
int handle_free2(FL_OBJECT *obj,int event,FL_Coord mx,FL_Coord my,
int key,void *xev)
{ return(0);}

void draw(FL_OBJECT *obj,long unused)
{
fl_redraw_object(test_form->free1);
}

int main(int argc,char *argv[])
{

fl_initialize(&argc,argv,"test",0,0);
test_form=create_form_test();
fl_set_form_dblbuffer(test_form->test,1);
fl_show_form(test_form->test,FL_PLACE_FREE,
FL_FULLBORDER,"Test");
while(1) {fl_do_forms();}
fl_hide_form(test_form->test);
fl_free_form(test_form->test);
return(0);
}

To unsubscribe, send the message "unsubscribe" to
xforms-request@bob.usuf2.usuhs.mil or see
http://bob.usuf2.usuhs.mil/mailserv/xforms.html