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