Xlib problem



  • Hallo zusamm',

    ich hab neulich mal ein bischen mit Xlib proggerei angefangen und hab dabei im Schnelldurchlauf folgendes hässliches Programm aus nem Tut zusammengeschustert:

    #include <X11/Xlib.h>
    #include <stdio.h>
    
    int main(){
    
      Display *dsp = XOpenDisplay( NULL );
      if( !dsp ){ return 1; }
    
      int screenNumber = DefaultScreen(dsp);
      unsigned long white = WhitePixel(dsp,screenNumber);
      unsigned long black = BlackPixel(dsp,screenNumber);
    
      Window win = XCreateSimpleWindow(dsp,
                                   DefaultRootWindow(dsp),
                                   50, 50,   // origin
                                   200, 200, // size
                                   0, black, // border
                                   white );  // backgd
    
      XMapWindow( dsp, win );
    
      long eventMask = StructureNotifyMask;
      XSelectInput( dsp, win, eventMask );
    
      XEvent evt;
      do{
        XNextEvent( dsp, &evt );   // calls XFlush
      }while( evt.type != MapNotify );
    
      GC gc = XCreateGC( dsp, win,
                         0,        // mask of values
                         NULL );   // array of values
      XSetForeground( dsp, gc, black );
    
      XDrawLine(dsp, win, gc, 10, 10,190,190); //from-to
      XDrawLine(dsp, win, gc, 10,190,190, 10); //from-to
    
      eventMask = ButtonPressMask|ButtonReleaseMask|StructureNotifyMask;
      XSelectInput(dsp,win,eventMask); // override prev
    
      do{
        XNextEvent( dsp, &evt );   // calls XFlush()
        [b]if(evt.type == DestroyNotify) { printf("ciao bella!"); return -1; }[/b]
      }while( evt.type != ButtonRelease );
    
      XDestroyWindow( dsp, win );
      XCloseDisplay( dsp );
    
      return 0;
    }
    

    Interessant is die fettgedruckte Zeile; wenn ein Destroy event ausgelöst wird, sollte eigentlich ciao bella auf dem terminal ausgegeben werden; machts aber nicht! Stattdessen meldet er aber, wenn ich auf die Schließen-Schaltfläche des Fensters klicke, "Connection to X-server :0.0 broken." oder so.

    Hat jemand ne Ahnung, wie ich es schaffe, dass er auf das Destroy-event reagiert? bzw. weiß jemand warum diese dubiose Fehlermeldung kommt?



  • Habe zwar keine Ahnung von xlib, aber die Fehlermeldung könnte kommen weil bei dem return kein XClose/Destroy aufgerufen wird.

    Ausserdem solltest du bei dem printf ein newline mit ausgeben. Mein shell überschreibt die letzte Zeile sonst gerne mit dem Prompt.



  • DrGreenthumb schrieb:

    Ausserdem solltest du bei dem printf ein newline mit ausgeben. Mein shell überschreibt die letzte Zeile sonst gerne mit dem Prompt.

    Meine nich 😉 (hab aber zur Sicherheit trotzdem ein \n angehängt)

    DrGreenthumb schrieb:

    Habe zwar keine Ahnung von xlib, aber die Fehlermeldung könnte kommen weil bei dem return kein XClose/Destroy aufgerufen wird.

    Er kommt leider nichtmal zum return! Ich kann auch "if(evt.type == DestroyNotify) { printf("ciao bella!"); return -1; }" einfach rauslassen und der Fehler kommt immernoch!

    Des is mir wirklich rätselhaft...



  • ok, gelöst mittels http://www.eggdrop.ch/texts/xlib/index.htm Abschnitt 3.3.

    Danke und tschüss 🙂


Anmelden zum Antworten