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;
}

Reply via email to