[Xlib] Problème de focus de fenêtre

Problème de focus de fenêtre [Xlib] - C - Programmation

Marsh Posté le 10-07-2008 à 11:56:43    

Bonjour à tous !
 
Voilà, comme indiqué dans le titre, je me heurte à un léger problème de focus avec un projet en C utilisant la Xlib. Mon but est d'afficher l'image passée en argv[1] sur le bureau (via une fenêtre Override_redirect), la position de la fenêtre étant donnée par argv[2] et argv[3].
Hors, par défaut avec mon code, la fenêtre apparait systématiquement au dessus de toutes les autres fenêtres, et impossible de l'en faire décoincer. J'ai bien trouvé la fonction XLowerWindow, mais lorsque je l'utilise, cela fonctionne tellement bien que ma fenêtre n'apparait plus du tout, même une fois toutes les autres fenêtres réduites :heink:  
 
Voilà toujours mon code :
 

Code :
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <Imlib2.h>
  4. #include <X11/Xlib.h>
  5. int main( int argc, char **argv )
  6. {
  7. int pos_x = atoi( argv[2] );
  8. int pos_y = atoi( argv[3] );
  9. /* La base : on définit le server X à utiliser */
  10. /* l'écran, etc., et on récupère la fenêtre root */
  11. Display *display = XOpenDisplay( NULL );
  12. int screen = DefaultScreen( display );
  13. int depth = DefaultDepth( display, screen );
  14. Visual *visuel = DefaultVisual( display, screen );
  15. Colormap colormap = DefaultColormap( display, screen );
  16. Window fenetre_root = RootWindow( display, screen );
  17. XEvent report;
  18. // On définit les attributs, puis la fenêtre  
  19. XSetWindowAttributes attrs = { ParentRelative, 0L, 0, 0L, 0, 0,
  20.    Always, 0L, 0L, False, StructureNotifyMask | ExposureMask, 0L, True, 0, 0 };
  21. Window fenetre = XCreateWindow(display, fenetre_root, pos_x, pos_y, 200, 200, 0, CopyFromParent, InputOutput, CopyFromParent, CWOverrideRedirect | CWEventMask | CWBackPixel, &attrs);
  22. /* Paramétrage d'imlib */
  23. imlib_context_set_display(display);
  24. imlib_context_set_visual(visuel);
  25. imlib_context_set_colormap(colormap);
  26. imlib_context_set_drawable(fenetre);
  27. /* On affiche la fenêtre */
  28. XMapWindow( display, fenetre );
  29. /* si on utilise ça, la fenêtre disparait ! O_o */
  30. //XLowerWindow(display, fenetre);
  31. XSelectInput( display, fenetre, ExposureMask );
  32. for( ;; )
  33. {
  34.  XNextEvent( display, &report );
  35.  Imlib_Image image = imlib_load_image( argv[1] );
  36.  imlib_context_set_image(image);
  37.  imlib_render_image_on_drawable(1,1);
  38. }
  39. imlib_free_image();
  40. return 0;
  41. }


 
 
Voilà, je voudrais simplement que ma fenêtre s'affiche sur le bureau, donc sous toutes les autres fenêtres :) je sais que c'est faisable puisque plusieurs soft et bout de code que j'ai croisé le font (et de la même manière que moi !), mais même après bien étudié les listings, impossible de faire fonctionner le miens :heink:  
 
Merci d'avance ;)

Reply

Marsh Posté le 10-07-2008 à 11:56:43   

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed