On 1 Dec 2000, Jean-Marc Lasgouttes wrote: > >>>>> "Lars" == Lars Gullik Bjønnes <[EMAIL PROTECTED]> writes: > > Lars> Jean-Marc Lasgouttes <[EMAIL PROTECTED]> writes: | > Lars> It seems interesting things will happen on the xforms front... > > Lars> Yes, but we have heard this for half a year (or more) now. > > Sure, but the previous message was "it will be some sort of open > source, but certainly not GPL". > > JMarc > I don't care, as long as I can find out what xforms is doing with my ClientMessage events ! (still no answer from the list after I wrote a small examplar, attached). john -- "Penguins are so sensitive to my needs." - Lyle Lovett
/* * This demonstrates how ClientMessages get lost. * */ #include "forms.h" #include <stdlib.h> typedef struct { FL_FORM *canvasform; void *vdata; char *cdata; long ldata; FL_OBJECT *canvas; FL_OBJECT *br; FL_OBJECT *keyboard; FL_OBJECT *mouse; FL_OBJECT *done; FL_OBJECT *misc; FL_OBJECT *menu; FL_OBJECT *browse; FL_OBJECT *send; } FD_canvasform; extern FD_canvasform * create_form_canvasform(void); static GC canvasGC; int canvas_expose(FL_OBJECT *ob, Window win, int w, int h, XEvent *ev, void *d) { FD_canvasform *ui = d; XFillRectangle(fl_get_display(), win, canvasGC, 0, 0, w, h); fl_addto_browser(ui->br, "Expose"); return 0; } int canvas_key(FL_OBJECT *ob, Window win, int w, int h, XEvent *ev, void *d) { FD_canvasform *ui = d; char buf[128]; sprintf(buf, "KeyPress: keysym=%ld", XKeycodeToKeysym(fl_display,ev->xkey.keycode, 0)); fl_addto_browser(ui->br, buf); return 0; } int canvas_but(FL_OBJECT *ob, Window win, int w, int h, XEvent *ev, void *d) { FD_canvasform *ui = d; char buf[128]; sprintf(buf, "Button%s: %d", ev->type==ButtonPress?"Press":"Release", ev->xbutton.button); fl_addto_browser(ui->br, buf); return 0; } int canvas_client(FL_OBJECT *ob, Window win, int w, int h, XEvent *ev, void *d) { printf("ClientMessage received window 0x%lx\n",win); if (ev) { // printf("Sender window is 0x%lx\n", ev->xclient.window); } return 0; } void init_canvas(FD_canvasform *fdui) { fl_add_canvas_handler(fdui->canvas, Expose, canvas_expose, fdui); fl_add_canvas_handler(fdui->canvas, KeyPress, canvas_key, fdui); fl_add_canvas_handler(fdui->canvas, ButtonPress,canvas_but,fdui); fl_add_canvas_handler(fdui->canvas, ButtonRelease,canvas_but,fdui); fl_add_canvas_handler(fdui->canvas, ClientMessage, canvas_client, fdui); canvasGC = XCreateGC(fl_get_display(),fl_state[fl_vmode].trailblazer,0,0); XSetForeground(fl_get_display(), canvasGC, fl_get_flcolor(FL_BLACK)); } FD_canvasform *fd_canvasform; void send_event(FL_OBJECT *ob, long all) { pid_t pid; Display *disp = fl_get_display(); Window id = fl_get_canvas_id(fd_canvasform->canvas); pid = fork(); if (pid==0) { Display *disp; XEvent xmess; disp = XOpenDisplay(""); sleep(2); xmess.xclient.type = ClientMessage; xmess.xclient.window = id; xmess.xclient.message_type = (Atom)23; xmess.xclient.format = 32; xmess.xclient.data.l[0] = 17; xmess.xclient.data.l[1] = 23; XSendEvent(disp, id, False, ClientMessage, &xmess); printf("ClientMessage sent to window 0x%lx\n",id); XCloseDisplay(disp); _exit(); } else { } } void do_browse(FL_OBJECT *ob, long all) { fl_show_file_selector("File To Load","","*",""); } int main(int argc, char *argv[]) { fl_set_border_width(-2); fl_initialize(&argc, argv, "FormDemo", 0, 0); fd_canvasform = create_form_canvasform(); init_canvas(fd_canvasform); fl_show_form(fd_canvasform->canvasform, FL_PLACE_FREE,FL_FULLBORDER,"canvasform"); printf("Canvas window id 0x%lx\n", fl_get_canvas_id(fd_canvasform->canvas)); while (fl_do_forms() != fd_canvasform->done) ; return 0; } FD_canvasform *create_form_canvasform(void) { FL_OBJECT *obj; FD_canvasform *fdui = (FD_canvasform *) fl_calloc(1, sizeof(*fdui)); fdui->canvasform = fl_bgn_form(FL_NO_BOX, 550, 280); obj = fl_add_box(FL_UP_BOX,0,0,550,280,""); fdui->canvas = obj = fl_add_canvas(FL_NORMAL_CANVAS,20,40,155,187,""); fdui->br = obj = fl_add_browser(FL_NORMAL_BROWSER,188,40,152,187,""); fdui->done = obj = fl_add_button(FL_NORMAL_BUTTON,400,236,90,27,"Done"); fdui->send = obj = fl_add_button(FL_NORMAL_BUTTON, 300, 236, 90, 27, "Send"); fl_set_object_callback(obj, send_event, 0); fdui->browse = obj = fl_add_button(FL_NORMAL_BUTTON, 40, 236, 90, 27, "Browse"); fl_set_object_callback(obj, do_browse, 0); obj = fl_add_text(FL_NORMAL_TEXT,130,10,120,20,"Canvas"); fl_set_object_lsize(obj,FL_MEDIUM_SIZE); fl_set_object_lalign(obj,FL_ALIGN_CENTER); fl_set_object_lstyle(obj,FL_BOLD_STYLE); fl_end_form(); return fdui; }