--- rpl/src/encart.c 2017/08/21 09:06:02 1.61 +++ rpl/src/encart.c 2017/08/23 20:29:29 1.63 @@ -29,13 +29,31 @@ # include #endif +static logical1 +valeur_erreur(logical1 nouvelle_valeur) +{ + static logical1 erreur = d_faux; + logical1 registre; + + registre = erreur; + erreur = nouvelle_valeur; + return(registre); +} + static int _XlibErrorHandler(Display *display, XErrorEvent *event) { + valeur_erreur(d_vrai); uprintf("An error occured detecting the mouse position\n"); return True; } +static void +_XtWarningHandler(String message) +{ + return; +} + void encart(struct_processus *s_etat_processus, integer8 duree) { @@ -102,6 +120,8 @@ encart(struct_processus *s_etat_processu XtAppContext app; + XtErrorHandler old_message_handler; + if (strstr(XmVERSION_STRING, "LessTif") != NULL) { printf("Lesstif is broken, please consider an upgrade to OpenMotif.\n"); @@ -118,9 +138,11 @@ encart(struct_processus *s_etat_processu if (display != NULL) { objet_principal = XtVaOpenApplication(&app, "rpl", - NULL, 0, &argc, argv, NULL, topLevelShellWidgetClass, NULL); + NULL, 0, &argc, argv, NULL, overrideShellWidgetClass, NULL); XSynchronize(XtDisplay(objet_principal), False); + old_message_handler = XtAppSetWarningHandler(app, _XtWarningHandler); + form = XtVaCreateManagedWidget("rplSplashScreen", xmFormWidgetClass, objet_principal, NULL); @@ -144,7 +166,7 @@ encart(struct_processus *s_etat_processu XmNbackground, &couleur_arriere_plan, NULL); - if ((erreur = XCreatePixmapFromData(XtDisplay(form), + if ((erreur = XpmCreatePixmapFromData(XtDisplay(form), DefaultRootWindow(XtDisplay(form)), rpl_xpm, &pixmap_rpl, &pixmap_rpl_masque, NULL)) != 0) { @@ -180,7 +202,7 @@ encart(struct_processus *s_etat_processu ts = XineramaQueryScreens(display, &ns); - XSetErrorHandler(_XlibErrorHandler); + //XSetErrorHandler(_XlibErrorHandler); nb_screens = XScreenCount(display); root_windows = sys_malloc(((unsigned) nb_screens) * sizeof(Window)); @@ -192,10 +214,16 @@ encart(struct_processus *s_etat_processu for(i = 0; i < nb_screens; i++) { - if ((mouse_found = XQueryPointer(display, root_windows[i], - &window_returned, &window_returned, - &root_x, &root_y, &win_x, &win_y, &mask_return)) - == True) + valeur_erreur(d_faux); + + do + { + mouse_found = XQueryPointer(display, root_windows[i], + &window_returned, &window_returned, + &root_x, &root_y, &win_x, &win_y, &mask_return); + } while(valeur_erreur(d_faux) == d_vrai); + + if (mouse_found == True) { break; } @@ -260,8 +288,6 @@ encart(struct_processus *s_etat_processu offset_y = 0; } - XCloseDisplay(display); - #if 0 XtRealizeWidget(objet_principal); @@ -342,6 +368,8 @@ encart(struct_processus *s_etat_processu nanosleep(&attente, NULL); } + XCloseDisplay(display); + XtAppSetWarningHandler(app, old_message_handler); XtDestroyApplicationContext(app); } # endif