Forum Linux.général afficher une fenetre sur une fenetre avec la lib X11

Posté par  . Licence CC By‑SA.
Étiquettes : aucune
0
25
juin
2019

Bonjour,

je souhaite afficher une fenetre sur une fenetre parent. Mais elle n’apparaît pas alors que le background est différent.

Je vous montre mon code :

    #include <X11/Xlib.h> 
    #include <unistd.h>  
    #include <stdio.h>
    #define NIL (0)      

    void main()
    {
          // Open the display

          Display *dpy = XOpenDisplay(NIL);

          int blackColor = BlackPixel(dpy, DefaultScreen(dpy));
          int whiteColor = WhitePixel(dpy, DefaultScreen(dpy));

          // Create the windows

          Window w = XCreateSimpleWindow(dpy, DefaultRootWindow(dpy), 0, 0, 
                         200, 100, 0, blackColor, blackColor);

          fprintf(stdout, "window = %li\n", w);


          Window w2 = XCreateSimpleWindow(dpy, w, 0, 0, 
                         50, 50, 0, blackColor, whiteColor);

          fprintf(stdout, "window2 = %li\n", w2);
          // We want to get events

          XSelectInput(dpy, w, ButtonPressMask | ButtonReleaseMask | KeyPressMask);
          XSelectInput(dpy, w2, ButtonPressMask | ButtonReleaseMask | KeyPressMask);


          // "Map" the window (that is, make it appear on the screen)

          XMapWindow(dpy, w);

          // Create a "Graphics Context"

          GC gc = XCreateGC(dpy, w, 0, NIL);

          // Tell the GC we draw using the white color

          XSetForeground(dpy, gc, whiteColor);

          // Wait for the MapNotify event

          XEvent e;
          for(;;) {

            XNextEvent(dpy, &e);

            fprintf(stdout, "receiving event %i, on window %li\n", e.type, e.xany.window);


            if (e.type == ButtonPress)
            {
                if( e.xany.window == w)
                {
                    fprintf(stdout, "button press from w\n");               
                }
                else if (e.xany.window == w2)
                {
                    fprintf(stdout, "button press from w2\n");
                }
                //break;
            }
            else if (e.type == ButtonRelease)
            {
                if( e.xany.window == w)
                {
                    fprintf(stdout, "button release from w\n");             
                }
                else if (e.xany.window == w2)
                {
                    fprintf(stdout, "button release from w2\n");
                }           
                //break;
            }
            else if (e.type == KeyPress)
            {
                fprintf(stdout, "KeyPress hihih\n");
            }
            else
            {
                //break;
            }

          }

    }

le terminal me retourne :

window = 77594625
window2 = 77594626
et seul les events de la premiere premiere fenetre (w) sont détectés, sachant que graphiquement je ne vois pas le carré blanc de la fenetre w2

Merci d'avance pour votre aide

  • # au pif en lisant en travers

    Posté par  . Évalué à 4.

    tu demandes à la fenetre w d'apparaitre

    // "Map" the window (that is, make it appear on the screen)
    
              XMapWindow(dpy, w);

    mais je ne vois pas la meme chose pour w2

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.