--- rpl/src/encart.c 2017/08/23 09:29:15 1.62 +++ rpl/src/encart.c 2017/08/24 07:07:38 1.65 @@ -29,9 +29,21 @@ # 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; } @@ -154,7 +166,8 @@ encart(struct_processus *s_etat_processu XmNbackground, &couleur_arriere_plan, NULL); - if ((erreur = XCreatePixmapFromData(XtDisplay(form), +uprintf("0\n"); + if ((erreur = XpmCreatePixmapFromData(XtDisplay(form), DefaultRootWindow(XtDisplay(form)), rpl_xpm, &pixmap_rpl, &pixmap_rpl_masque, NULL)) != 0) { @@ -183,6 +196,7 @@ encart(struct_processus *s_etat_processu XmNmwmFunctions, fonctions, NULL); +uprintf("1\n"); if (XineramaIsActive(display) == True) { // Récupération de la localisation des différents écrans @@ -190,7 +204,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)); @@ -202,10 +216,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; } @@ -269,6 +289,7 @@ encart(struct_processus *s_etat_processu offset_x = 0; offset_y = 0; } +uprintf("2\n"); #if 0 XtRealizeWidget(objet_principal); @@ -295,8 +316,10 @@ encart(struct_processus *s_etat_processu XtRealizeWidget(objet_principal); #endif +uprintf("3\n"); XFlush(XtDisplay(form)); +uprintf("3a\n"); attente.tv_sec = 0; attente.tv_nsec = 1000; @@ -305,11 +328,16 @@ encart(struct_processus *s_etat_processu do { +uprintf("3b\n"); if (XtAppPending(app) != 0) { +uprintf("3c\n"); XtAppNextEvent(app, &evenement); +uprintf("3d\n"); XtDispatchEvent(&evenement); +uprintf("3e\n"); } +uprintf("3f\n"); nanosleep(&attente, NULL); gettimeofday(&horodatage_final, NULL); @@ -328,15 +356,9 @@ encart(struct_processus *s_etat_processu + ((double) temps_ecoule.tv_sec)) < (((double) duree) / ((double) 1000000))); +uprintf("4\n"); XtUnrealizeWidget(objet_principal); - - XmDestroyPixmap(XtScreen(form), pixmap_rpl); - XmDestroyPixmap(XtScreen(form), pixmap_rpl_masque); - - XtDestroyWidget(pixmap); - XtDestroyWidget(cadre); - XtDestroyWidget(form); - XtDestroyWidget(objet_principal); +uprintf("5\n"); while(XtAppPending(app) == 0) { @@ -350,9 +372,19 @@ encart(struct_processus *s_etat_processu nanosleep(&attente, NULL); } + XtDestroyWidget(pixmap); + XtDestroyWidget(cadre); + XtDestroyWidget(form); + XtDestroyWidget(objet_principal); + +uprintf("6\n"); + XmDestroyPixmap(XtScreen(form), pixmap_rpl); + XmDestroyPixmap(XtScreen(form), pixmap_rpl_masque); + XCloseDisplay(display); XtAppSetWarningHandler(app, old_message_handler); XtDestroyApplicationContext(app); +uprintf("7\n"); } # endif