Index: trunk/src/stub_draw.c =================================================================== --- trunk/src/stub_draw.c (revision 20001) +++ trunk/src/stub_draw.c (revision 20002) @@ -45,7 +45,7 @@ pcb_text_draw_(info, &t, 0, 0, PCB_TXT_TINY_ACCURATE); } -static pcb_bool dummy_mouse(void *widget, pcb_hid_mouse_ev_t kind, pcb_coord_t x, pcb_coord_t y) +static pcb_bool dummy_mouse(void *widget, void *draw_data, pcb_hid_mouse_ev_t kind, pcb_coord_t x, pcb_coord_t y) { return 0; } @@ -77,7 +77,7 @@ void (*pcb_stub_draw_csect)(pcb_hid_gc_t gc, const pcb_hid_expose_ctx_t *e) = dummy_draw_csect; -pcb_bool (*pcb_stub_draw_csect_mouse_ev)(void *widget, pcb_hid_mouse_ev_t kind, pcb_coord_t x, pcb_coord_t y) = dummy_mouse; +pcb_bool (*pcb_stub_draw_csect_mouse_ev)(void *widget, void *draw_data, pcb_hid_mouse_ev_t kind, pcb_coord_t x, pcb_coord_t y) = dummy_mouse; /****** font selector GUI ******/ @@ -91,7 +91,7 @@ static int dummy_fontsel_type = 0; void (*pcb_stub_draw_fontsel)(pcb_hid_gc_t gc, const pcb_hid_expose_ctx_t *e) = dummy_draw_fontsel; -pcb_bool (*pcb_stub_draw_fontsel_mouse_ev)(void *widget, pcb_hid_mouse_ev_t kind, pcb_coord_t x, pcb_coord_t y) = dummy_mouse; +pcb_bool (*pcb_stub_draw_fontsel_mouse_ev)(void *widget, void *draw_data, pcb_hid_mouse_ev_t kind, pcb_coord_t x, pcb_coord_t y) = dummy_mouse; pcb_text_t **pcb_stub_draw_fontsel_text_obj = &dummy_fontsel_text; pcb_layer_t **pcb_stub_draw_fontsel_layer_obj = &dummy_fontsel_layer; int *pcb_stub_draw_fontsel_text_type = &dummy_fontsel_type; Index: trunk/src/stub_draw.h =================================================================== --- trunk/src/stub_draw.h (revision 20001) +++ trunk/src/stub_draw.h (revision 20002) @@ -42,11 +42,11 @@ /* csect */ extern void (*pcb_stub_draw_csect)(pcb_hid_gc_t gc, const pcb_hid_expose_ctx_t *e); -extern pcb_bool (*pcb_stub_draw_csect_mouse_ev)(void *widget, pcb_hid_mouse_ev_t kind, pcb_coord_t x, pcb_coord_t y); +extern pcb_bool (*pcb_stub_draw_csect_mouse_ev)(void *widget, void *draw_data, pcb_hid_mouse_ev_t kind, pcb_coord_t x, pcb_coord_t y); /* fontsel */ extern void (*pcb_stub_draw_fontsel)(pcb_hid_gc_t gc, const pcb_hid_expose_ctx_t *e); -extern pcb_bool (*pcb_stub_draw_fontsel_mouse_ev)(void *widget, pcb_hid_mouse_ev_t kind, pcb_coord_t x, pcb_coord_t y); +extern pcb_bool (*pcb_stub_draw_fontsel_mouse_ev)(void *widget, void *draw_data, pcb_hid_mouse_ev_t kind, pcb_coord_t x, pcb_coord_t y); extern pcb_text_t **pcb_stub_draw_fontsel_text_obj; extern pcb_layer_t **pcb_stub_draw_fontsel_layer_obj; extern int *pcb_stub_draw_fontsel_text_type; Index: trunk/src_plugins/draw_csect/draw_csect.c =================================================================== --- trunk/src_plugins/draw_csect/draw_csect.c (revision 20001) +++ trunk/src_plugins/draw_csect/draw_csect.c (revision 20002) @@ -658,7 +658,7 @@ } -static pcb_bool mouse_csect(void *widget, pcb_hid_mouse_ev_t kind, pcb_coord_t x, pcb_coord_t y) +static pcb_bool mouse_csect(void *widget, void *draw_data, pcb_hid_mouse_ev_t kind, pcb_coord_t x, pcb_coord_t y) { pcb_bool res = 0; pcb_layer_id_t lid; Index: trunk/src_plugins/draw_fontsel/draw_fontsel.c =================================================================== --- trunk/src_plugins/draw_fontsel/draw_fontsel.c (revision 20001) +++ trunk/src_plugins/draw_fontsel/draw_fontsel.c (revision 20002) @@ -187,7 +187,7 @@ return -1; } -static pcb_bool pcb_mouse_fontsel(void *widget, pcb_hid_mouse_ev_t kind, pcb_coord_t x, pcb_coord_t y) +static pcb_bool pcb_mouse_fontsel(void *widget, void *draw_data, pcb_hid_mouse_ev_t kind, pcb_coord_t x, pcb_coord_t y) { pcb_font_id_t fid; int ymm; Index: trunk/src_plugins/hid_lesstif/dlg_preview.c =================================================================== --- trunk/src_plugins/hid_lesstif/dlg_preview.c (revision 20001) +++ trunk/src_plugins/hid_lesstif/dlg_preview.c (revision 20002) @@ -133,12 +133,12 @@ switch(btn) { case PCB_MB_LEFT: if (pd->mouse_ev != NULL) - if (pd->mouse_ev(da, kind, cx, cy)) + if (pd->mouse_ev(da, NULL, kind, cx, cy)) SHOW_DRAW; break; case PCB_MB_RIGHT: if (pd->mouse_ev != NULL) - if (pd->mouse_ev(da, PCB_HID_MOUSE_POPUP, cx, cy)) + if (pd->mouse_ev(da, NULL, PCB_HID_MOUSE_POPUP, cx, cy)) SHOW_DRAW; break; case PCB_MB_MIDDLE: @@ -196,7 +196,7 @@ SHOW_DRAW; } else if (pd->mouse_ev != NULL) { - pd->mouse_ev(w, PCB_HID_MOUSE_MOTION, cx, cy); + pd->mouse_ev(w, NULL, PCB_HID_MOUSE_MOTION, cx, cy); SHOW_DRAW; } Index: trunk/src_plugins/hid_lesstif/main.c =================================================================== --- trunk/src_plugins/hid_lesstif/main.c (revision 20001) +++ trunk/src_plugins/hid_lesstif/main.c (revision 20002) @@ -129,7 +129,7 @@ int v_width, v_height; /* pixels */ pcb_hid_expose_ctx_t ctx; - pcb_bool (*mouse_ev)(void *widget, pcb_hid_mouse_ev_t kind, pcb_coord_t x, pcb_coord_t y); + pcb_bool (*mouse_ev)(void *widget, void *draw_data, pcb_hid_mouse_ev_t kind, pcb_coord_t x, pcb_coord_t y); void (*pre_close)(struct PreviewData *pd); pcb_hid_expose_t overlay_draw; unsigned pan:1; Index: trunk/src_plugins/lib_gtk_common/wt_preview.c =================================================================== --- trunk/src_plugins/lib_gtk_common/wt_preview.c (revision 20001) +++ trunk/src_plugins/lib_gtk_common/wt_preview.c (revision 20002) @@ -282,12 +282,16 @@ pcb_coord_t cx, cy; gint wx, wy; get_ptr(preview, &cx, &cy, &wx, &wy); + void *draw_data = NULL; + if (preview->kind == PCB_GTK_PREVIEW_GENERIC) + draw_data = preview->expose_data.content.draw_data; + switch (btn) { case PCB_MB_LEFT: if (preview->mouse_cb != NULL) { /* pcb_printf("bp %mm %mm\n", cx, cy); */ - if (preview->mouse_cb(w, PCB_HID_MOUSE_PRESS, cx, cy)) + if (preview->mouse_cb(w, draw_data, PCB_HID_MOUSE_PRESS, cx, cy)) gtk_widget_queue_draw(w); } break; @@ -340,7 +344,11 @@ pcb_gtk_preview_t *preview = (pcb_gtk_preview_t *) w; gint wx, wy; pcb_coord_t cx, cy; + void *draw_data = NULL; + if (preview->kind == PCB_GTK_PREVIEW_GENERIC) + draw_data = preview->expose_data.content.draw_data; + get_ptr(preview, &cx, &cy, &wx, &wy); switch (ghid_mouse_button(ev->button)) { @@ -347,13 +355,13 @@ case PCB_MB_MIDDLE: preview->view.panning = 0; if (((time(NULL) - preview->grabt) < 2) && (preview->grabmot < 4)) - if ((preview->mouse_cb != NULL) && (preview->mouse_cb(w, PCB_HID_MOUSE_POPUP, cx, cy))) + if ((preview->mouse_cb != NULL) && (preview->mouse_cb(w, draw_data, PCB_HID_MOUSE_POPUP, cx, cy))) gtk_widget_queue_draw(w); break; case PCB_MB_LEFT: if (preview->mouse_cb != NULL) { /* pcb_printf("br %mm %mm\n", cx, cy); */ - if (preview->mouse_cb(w, PCB_HID_MOUSE_RELEASE, cx, cy)) + if (preview->mouse_cb(w, draw_data, PCB_HID_MOUSE_RELEASE, cx, cy)) gtk_widget_queue_draw(w); } break; @@ -367,6 +375,11 @@ pcb_gtk_preview_t *preview = (pcb_gtk_preview_t *) w; pcb_coord_t cx, cy; gint wx, wy; + void *draw_data = NULL; + + if (preview->kind == PCB_GTK_PREVIEW_GENERIC) + draw_data = preview->expose_data.content.draw_data; + get_ptr(preview, &cx, &cy, &wx, &wy); if (preview->view.panning) { @@ -379,7 +392,7 @@ } if (preview->mouse_cb != NULL) { - preview->mouse_cb(w, PCB_HID_MOUSE_MOTION, cx, cy); + preview->mouse_cb(w, draw_data, PCB_HID_MOUSE_MOTION, cx, cy); gtk_widget_queue_draw(w); } return FALSE; Index: trunk/src_plugins/lib_gtk_common/wt_preview.h =================================================================== --- trunk/src_plugins/lib_gtk_common/wt_preview.h (revision 20001) +++ trunk/src_plugins/lib_gtk_common/wt_preview.h (revision 20002) @@ -57,7 +57,7 @@ typedef void (*pcb_gtk_init_drawing_widget_t)(GtkWidget * widget, void *port); typedef gboolean(*pcb_gtk_preview_expose_t)(GtkWidget * widget, pcb_gtk_expose_t * ev, pcb_hid_expose_t expcall, pcb_hid_expose_ctx_t * ctx); -typedef pcb_bool(*pcb_gtk_preview_mouse_ev_t)(void *widget, pcb_hid_mouse_ev_t kind, pcb_coord_t x, pcb_coord_t y); +typedef pcb_bool(*pcb_gtk_preview_mouse_ev_t)(void *widget, void *draw_data, pcb_hid_mouse_ev_t kind, pcb_coord_t x, pcb_coord_t y); typedef enum pcb_gtk_preview_kind_e { PCB_GTK_PREVIEW_INVALID,