I'm submitting this patch as a starting point for discussion. With
this patch XEmacs compiles and runs "pretty well" under Cygwin. I'm
still getting an assertion failure in alloc.c in mark_object at line 3200
gc_checking_assert (LHEADER_IMPLEMENTATION (lheader)->basic_p ||
! ((struct lcrecord_header *) lheader)->free);
I'm still having trouble with debugging and stack traces but roughly
the call sequence is:
mark_object
mark_event line 112 of events.c (mark_object (XEVENT_CHANNEL(obj));)
mark_object line 3226 of alloc.c (obj = RECORD_MARKER (lheader)(obj);)
garbage_collect_1 line 4344 of alloc.c
2002-08-07 David Bush <David.Bush(a)intel.com>
* device-msw.c: Correct initialization list for devmode_description
Add dumpable flag to msprinter-settings for USE_KKCC
* dialog-msw.c: Add dumpable flag to mswindows-dialog-id for USE_KKCC
* event-msw.c (mswindows_enqueue_misc_user_event): For USE_KKCC
use mutator macros to set event parameters
* event-msw.c (mswindows_enqueue_magic_event): For USE_KKCC use
mutator macros to set event parameters
* event-msw.c (mswindows_enqueue_process_event): For USE_KKCC use
mutator macros to set event parameters
* event-msw.c (mswindows_enqueue_mouse_button_event): Reorder
event setup so event type is set first to support USE_KKCC.
For USE_KKCC use mutator macros to set event parameters
* event-msw.c (mswindows_enqueue_keypress_event): For USE_KKCC use
mutator macros to set event parameters
* event-msw.c (mswindows_dequeue_dispatch_event): For USE_KKCC use
accessor and mutator macros for USE_KKCC
* event-msw.c (mswindows_cancel_dispatch_event): For USE_KKCC use
accessor macros for USE_KKCC
* event-msw.c (mswindows_wm_timer_callback): For USE_KKCC use
mutator macros to set event parameters
* event-msw.c (mswindows_dde_callback): For USE_KKCC use mutator
macros to set event parameters
* event-msw.c (mswindows_wnd_proc): For USE_KKCC use mutator
macros to set event parameters
* event-msw.c (emacs_mswindows_remove_timeout): For USE_KKCC
use mutator macros to set event parameters
* event-msw.c (emacs_mswindows_format_magic_event): For USE_KKCC
use accessor macro to access magic event type
* event-msw.c (emacs_mswindows_compare_magic_event): For USE_KKCC
use accessor macro to access magic event type
* event-msw.c (emacs_mswindows_hash_magic_event): For USE_KKCC
use accessor macro to access magic event type
* event-msw.c (emacs_mswindows_handle_magic_event): For USE_KKCC
use accessor macro to access magic event type
* event-msw.c (emacs_mswindows_quit_p): For USE_KKCC use event
accessor and mutator macros to get/set event parameters
* gui-msw.c (mswindows_handle_gui_wm_command): For USE_KKCC
use mutator macros to set event parameters
* menubar-msw.c (mswindows_popup_menu): For USE_KKCC use
accessor macros to extract button position
XEmacs source patch:
Diff command: cvs -q diff -u
Files affected: src/menubar-msw.c src/gui-msw.c src/event-msw.c src/dialog-msw.c
src/device-msw.c
Index: src/device-msw.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/device-msw.c,v
retrieving revision 1.48
diff -u -r1.48 device-msw.c
--- src/device-msw.c 2002/07/29 09:21:16 1.48
+++ src/device-msw.c 2002/08/07 19:53:27
@@ -1077,7 +1077,7 @@
#ifdef USE_KKCC
static const struct lrecord_description devmode_description[] = {
{ XD_LISP_OBJECT, offsetof (struct Lisp_Devmode, printer_name) },
- { XD_LISP_OBJECT, offsetof (struct Lisp_Devmode, device) }
+ { XD_LISP_OBJECT, offsetof (struct Lisp_Devmode, device) },
{ XD_END }
};
#endif /* USE_KKCC */
@@ -1153,6 +1153,7 @@
#ifdef USE_KKCC
DEFINE_LRECORD_IMPLEMENTATION ("msprinter-settings", devmode,
+ 0, /*dumpable-flag*/
mark_devmode, print_devmode, finalize_devmode,
equal_devmode, hash_devmode,
devmode_description,
Index: src/dialog-msw.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/dialog-msw.c,v
retrieving revision 1.23
diff -u -r1.23 dialog-msw.c
--- src/dialog-msw.c 2002/07/29 09:21:16 1.23
+++ src/dialog-msw.c 2002/08/07 19:53:30
@@ -187,6 +187,7 @@
#ifdef USE_KKCC
DEFINE_LRECORD_IMPLEMENTATION ("mswindows-dialog-id", mswindows_dialog_id,
+ 0, /* dump-able flag */
mark_mswindows_dialog_id,
internal_object_printer, 0, 0, 0,
mswindows_dialog_id_description,
Index: src/event-msw.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/event-msw.c,v
retrieving revision 1.83
diff -u -r1.83 event-msw.c
--- src/event-msw.c 2002/07/14 23:20:36 1.83
+++ src/event-msw.c 2002/08/07 19:53:45
@@ -949,6 +949,15 @@
Lisp_Object object)
{
Lisp_Object event = Fmake_event (Qnil, Qnil);
+
+#ifdef USE_KKCC
+
+ XSET_EVENT_TYPE (event, misc_user_event);
+ XSET_EVENT_CHANNEL (event, channel);
+ XSET_EVENT_TIMESTAMP (event, GetTickCount());
+ XSET_MISC_USER_DATA_FUNCTION (XEVENT_DATA (event), function);
+ XSET_MISC_USER_DATA_OBJECT (XEVENT_DATA (event), object);
+#else /* not USE_KKCC */
Lisp_Event *e = XEVENT (event);
e->event_type = misc_user_event;
@@ -956,6 +965,7 @@
e->timestamp = GetTickCount ();
e->event.misc.function = function;
e->event.misc.object = object;
+#endif /* not USE_KKCC */
mswindows_enqueue_dispatch_event (event);
}
@@ -964,12 +974,20 @@
mswindows_enqueue_magic_event (HWND hwnd, UINT msg)
{
Lisp_Object emacs_event = Fmake_event (Qnil, Qnil);
+
+#ifdef USE_KKCC
+ XSET_EVENT_CHANNEL (emacs_event, (hwnd ? mswindows_find_frame (hwnd) : Qnil));
+ XSET_EVENT_TIMESTAMP (emacs_event, GetMessageTime ());
+ XSET_EVENT_TYPE (emacs_event, magic_event);
+ XSET_MAGIC_DATA_MSWINDOWS_EVENT (XEVENT_DATA(emacs_event), msg);
+#else /* not USE_KKCC */
Lisp_Event *event = XEVENT (emacs_event);
event->channel = hwnd ? mswindows_find_frame (hwnd) : Qnil;
event->timestamp = GetMessageTime();
event->event_type = magic_event;
EVENT_MSWINDOWS_MAGIC_TYPE (event) = msg;
+#endif /* not USE_KKCC */
mswindows_enqueue_dispatch_event (emacs_event);
}
@@ -982,9 +1000,15 @@
Lisp_Object process = wrap_process (p);
+#ifdef USE_KKCC
+ XSET_EVENT_TYPE (emacs_event, process_event);
+ XSET_EVENT_TIMESTAMP (emacs_event, GetTickCount());
+ XSET_PROCESS_DATA_PROCESS (XEVENT_DATA (emacs_event), process);
+#else /* not USE_KKCC */
event->event_type = process_event;
event->timestamp = GetTickCount ();
event->event.process.process = process;
+#endif /* not USE_KKCC */
mswindows_enqueue_dispatch_event (emacs_event);
}
@@ -1004,6 +1028,35 @@
Lisp_Event *event = XEVENT (emacs_event);
mswindows_handle_sticky_modifiers (0, 0, downp, 0);
+
+ if (downp)
+ {
+#ifdef USE_KKCC
+ XSET_EVENT_TYPE (emacs_event, button_press_event);
+#else /* not USE_KKCC */
+ event->event_type = button_press_event;
+#endif /* not USE_KKCC */
+ }
+ else
+ {
+#ifdef USE_KKCC
+ XSET_EVENT_TYPE (emacs_event, button_release_event);
+#else /* not USE_KKCC */
+ event->event_type = button_release_event;
+#endif /* not USE_KKCC */
+ }
+
+#ifdef USE_KKCC
+ XSET_EVENT_CHANNEL (emacs_event, mswindows_find_frame (hwnd));
+ XSET_EVENT_TIMESTAMP (emacs_event, when);
+ XSET_BUTTON_DATA_BUTTON (XEVENT_DATA (emacs_event),
+ (msg==WM_LBUTTONDOWN || msg==WM_LBUTTONUP) ? 1 :
+ ((msg==WM_RBUTTONDOWN || msg==WM_RBUTTONUP) ? 3 : 2));
+ XSET_BUTTON_DATA_X (XEVENT_DATA (emacs_event), where.x);
+ XSET_BUTTON_DATA_Y (XEVENT_DATA (emacs_event), where.y);
+ XSET_BUTTON_DATA_MODIFIERS (XEVENT_DATA (emacs_event),
+ mswindows_modifier_state (NULL, mods, 0));
+#else /* not USE_KKCC */
event->channel = mswindows_find_frame (hwnd);
event->timestamp = when;
event->event.button.button =
@@ -1012,10 +1065,10 @@
event->event.button.x = where.x;
event->event.button.y = where.y;
event->event.button.modifiers = mswindows_modifier_state (NULL, mods, 0);
+#endif /* not USE_KKCC */
if (downp)
{
- event->event_type = button_press_event;
SetCapture (hwnd);
/* we need this to make sure the main window regains the focus
from control subwindows */
@@ -1027,7 +1080,6 @@
}
else
{
- event->event_type = button_release_event;
ReleaseCapture ();
}
@@ -1038,6 +1090,14 @@
mswindows_enqueue_keypress_event (HWND hwnd, Lisp_Object keysym, int mods)
{
Lisp_Object emacs_event = Fmake_event (Qnil, Qnil);
+
+#ifdef USE_KKCC
+ XSET_EVENT_CHANNEL (emacs_event, mswindows_find_console(hwnd));
+ XSET_EVENT_TIMESTAMP (emacs_event, GetMessageTime());
+ XSET_EVENT_TYPE (emacs_event, key_press_event);
+ XSET_KEY_DATA_KEYSYM (XEVENT_DATA (emacs_event), keysym);
+ XSET_KEY_DATA_MODIFIERS (XEVENT_DATA (emacs_event), mods);
+#else /* not USE_KKCC */
Lisp_Event *event = XEVENT(emacs_event);
event->channel = mswindows_find_console(hwnd);
@@ -1045,6 +1105,7 @@
event->event_type = key_press_event;
event->event.key.keysym = keysym;
event->event.key.modifiers = mods;
+#endif /* not USE_KKCC */
mswindows_enqueue_dispatch_event (emacs_event);
return emacs_event;
}
@@ -1070,11 +1131,19 @@
&mswindows_s_dispatch_event_queue_tail :
&mswindows_u_dispatch_event_queue_tail);
+#ifdef USE_KKCC
+ if (XEVENT_TYPE (event) == key_press_event
+ && (XKEY_DATA_MODIFIERS (XEVENT_DATA(event)) & FAKE_MOD_QUIT))
+ XSET_KEY_DATA_MODIFIERS (XEVENT_DATA (event),
+ XKEY_DATA_MODIFIERS (XEVENT_DATA (event)) &
+ ~(FAKE_MOD_QUIT | FAKE_MOD_QUIT_CRITICAL));
+#else /* not USE_KKCC */
sevt = XEVENT (event);
if (sevt->event_type == key_press_event
&& (sevt->event.key.modifiers & FAKE_MOD_QUIT))
sevt->event.key.modifiers &=
~(FAKE_MOD_QUIT | FAKE_MOD_QUIT_CRITICAL);
+#endif /* not USE_KKCC */
return event;
}
@@ -1105,11 +1174,20 @@
EVENT_CHAIN_LOOP (event, *head)
{
Lisp_Event *e = XEVENT (event);
+#ifdef USE_KKCC
+ if ((EVENT_TYPE (e) == EVENT_TYPE (match)) &&
+ ((EVENT_TYPE (e) == timeout_event) ?
+ (XTIMEOUT_DATA_INTERVAL_ID (EVENT_DATA (e)) ==
+ XTIMEOUT_DATA_INTERVAL_ID (EVENT_DATA (match))) :
+ ((XKEY_DATA_MODIFIERS (EVENT_DATA (e)) &
+ XKEY_DATA_MODIFIERS (EVENT_DATA (match))) != 0)))
+#else /* not USE_KKCC */
if ((e->event_type == match->event_type) &&
((e->event_type == timeout_event) ?
(e->event.timeout.interval_id == match->event.timeout.interval_id) :
/* Must be key_press_event */
((e->event.key.modifiers & match->event.key.modifiers) != 0)))
+#endif /* not USE_KKCC */
{
if (NILP (previous_event))
dequeue_event (head, tail);
@@ -1728,12 +1806,21 @@
if (KillTimer (NULL, id_timer))
--mswindows_pending_timers_count;
+#ifdef USE_KKCC
+ XSET_EVENT_CHANNEL (emacs_event, Qnil);
+ XSET_EVENT_TIMESTAMP (emacs_event, dwtime);
+ XSET_EVENT_TYPE (emacs_event, timeout_event);
+ XSET_TIMEOUT_DATA_INTERVAL_ID (XEVENT_DATA(emacs_event), id_timer);
+ XSET_TIMEOUT_DATA_FUNCTION (XEVENT_DATA(emacs_event), Qnil);
+ XSET_TIMEOUT_DATA_OBJECT (XEVENT_DATA(emacs_event), Qnil);
+#else /* not USE_KKCC */
event->channel = Qnil;
event->timestamp = dwtime;
event->event_type = timeout_event;
event->event.timeout.interval_id = id_timer;
event->event.timeout.function = Qnil;
event->event.timeout.object = Qnil;
+#endif /* not USE_KKCC */
mswindows_enqueue_dispatch_event (emacs_event);
}
@@ -2175,6 +2262,19 @@
};
assert (!NILP (event->channel));
+#ifdef USE_KKCC
+ SET_EVENT_TIMESTAMP (event, GetTickCount());
+ SET_EVENT_TYPE (event, misc_user_event);
+ XSET_MISC_USER_DATA_BUTTON (EVENT_DATA (event), 1);
+ XSET_MISC_USER_DATA_MODIFIERS (EVENT_DATA (event), 0);
+ XSET_MISC_USER_DATA_X (EVENT_DATA (event), -1);
+ XSET_MISC_USER_DATA_Y (EVENT_DATA (event), -1);
+ XSET_MISC_USER_DATA_FUNCTION (EVENT_DATA (event),
+ Qdragdrop_drop_dispatch);
+ XSET_MISC_USER_DATA_OBJECT (EVENT_DATA (event),
+ Fcons (Qdragdrop_URL,
+ Fcons (l_dndlist, Qnil)));
+#else /* not USE_KKCC */
event->timestamp = GetTickCount();
event->event_type = misc_user_event;
event->event.misc.button = 1;
@@ -2184,6 +2284,7 @@
event->event.misc.function = Qdragdrop_drop_dispatch;
event->event.misc.object = Fcons (Qdragdrop_URL,
Fcons (l_dndlist, Qnil));
+#endif /* not USE_KKCC */
mswindows_enqueue_dispatch_event (emacs_event);
UNGCPRO;
return (HDDEDATA) DDE_FACK;
@@ -3218,6 +3319,15 @@
emacs_event = Fmake_event (Qnil, Qnil);
event = XEVENT(emacs_event);
+#ifdef USE_KKCC
+ XSET_EVENT_CHANNEL (emacs_event, mswindows_find_frame(hwnd));
+ XSET_EVENT_TIMESTAMP (emacs_event, GetMessageTime());
+ XSET_EVENT_TYPE (emacs_event, pointer_motion_event);
+ XSET_MOTION_DATA_X (XEVENT_DATA (emacs_event),MAKEPOINTS (lParam).x);
+ XSET_MOTION_DATA_Y (XEVENT_DATA (emacs_event),MAKEPOINTS (lParam).y);
+ XSET_MOTION_DATA_MODIFIERS (XEVENT_DATA(emacs_event),
+ mswindows_modifier_state (NULL, wParam, 0));
+#else /* not USE_KKCC */
event->channel = mswindows_find_frame (hwnd);
event->timestamp = GetMessageTime ();
event->event_type = pointer_motion_event;
@@ -3225,6 +3335,7 @@
event->event.motion.y = MAKEPOINTS (lParam).y;
event->event.motion.modifiers =
mswindows_modifier_state (NULL, wParam, 0);
+#endif /* not USE_KKCC */
mswindows_enqueue_dispatch_event (emacs_event);
}
@@ -3745,6 +3856,18 @@
if (!DragQueryPoint ((HDROP) wParam, &point))
point.x = point.y = -1; /* outside client area */
+#ifdef USE_KKCC
+ XSET_EVENT_TYPE (emacs_event, misc_user_event);
+ XSET_EVENT_CHANNEL (emacs_event, mswindows_find_frame(hwnd));
+ XSET_EVENT_TIMESTAMP (emacs_event, GetMessageTime());
+ XSET_MISC_USER_DATA_BUTTON (XEVENT_DATA (emacs_event), 1);
+ XSET_MISC_USER_DATA_MODIFIERS (XEVENT_DATA (emacs_event),
+ mswindows_modifier_state (NULL, (DWORD) -1, 0));
+ XSET_MISC_USER_DATA_X (XEVENT_DATA (emacs_event), point.x);
+ XSET_MISC_USER_DATA_Y (XEVENT_DATA (emacs_event), point.y);
+ XSET_MISC_USER_DATA_FUNCTION (XEVENT_DATA (emacs_event),
+ Qdragdrop_drop_dispatch);
+#else /* not USE_KKCC */
event->event_type = misc_user_event;
event->channel = mswindows_find_frame (hwnd);
event->timestamp = GetMessageTime();
@@ -3754,6 +3877,7 @@
event->event.misc.x = point.x;
event->event.misc.y = point.y;
event->event.misc.function = Qdragdrop_drop_dispatch;
+#endif /* not USE_KKCC */
filecount = qxeDragQueryFile ((HDROP) wParam, 0xffffffff, NULL, 0);
for (i = 0; i < filecount; i++)
@@ -3929,7 +4053,12 @@
DragFinish ((HDROP) wParam);
+#ifdef USE_KKCC
+ XSET_MISC_USER_DATA_OBJECT (EVENT_DATA (event),
+ Fcons (Qdragdrop_URL, l_dndlist));
+#else /* not USE_KKCC */
event->event.misc.object = Fcons (Qdragdrop_URL, l_dndlist);
+#endif /* not USE_KKCC */
mswindows_enqueue_dispatch_event (emacs_event);
UNGCPRO;
}
@@ -4383,8 +4512,13 @@
/* If there is a dispatch event generated by this
timeout in the queue, we have to remove it too. */
+#ifdef USE_KKCC
+ SET_EVENT_TYPE(&match_against, timeout_event);
+ XSET_TIMEOUT_DATA_INTERVAL_ID (EVENT_DATA (&match_against), id);
+#else /* not USE_KKCC */
match_against.event_type = timeout_event;
match_against.event.timeout.interval_id = id;
+#endif /* not USE_KKCC */
emacs_event = mswindows_cancel_dispatch_event (&match_against);
if (!NILP (emacs_event))
Fdeallocate_event(emacs_event);
@@ -4429,7 +4563,11 @@
{
#define FROB(msg) case msg: write_c_string (pstream, "type=" #msg); break
+#ifdef USE_KKCC
+ switch (XMAGIC_DATA_MSWINDOWS_EVENT (EVENT_DATA(emacs_event)))
+#else /* not USE_KKCC */
switch (EVENT_MSWINDOWS_MAGIC_TYPE (emacs_event))
+#endif /* not USE_KKCC */
{
FROB (XM_BUMPQUEUE);
FROB (WM_PAINT);
@@ -4452,14 +4590,23 @@
static int
emacs_mswindows_compare_magic_event (Lisp_Event *e1, Lisp_Event *e2)
{
+#ifdef USE_KKCC
+ return (XMAGIC_DATA_MSWINDOWS_EVENT (EVENT_DATA (e1)) ==
+ XMAGIC_DATA_MSWINDOWS_EVENT (EVENT_DATA (e2)));
+#else /* not USE_KKCC */
return (e1->event.magic.underlying_mswindows_event ==
e2->event.magic.underlying_mswindows_event);
+#endif /* not USE_KKCC */
}
static Hashcode
emacs_mswindows_hash_magic_event (Lisp_Event *e)
{
+#ifdef USE_KKCC
+ return (XMAGIC_DATA_MSWINDOWS_EVENT (EVENT_DATA (e)));
+#else /* not USE_KKCC */
return e->event.magic.underlying_mswindows_event;
+#endif /* not USE_KKCC */
}
/*
@@ -4468,7 +4615,11 @@
static void
emacs_mswindows_handle_magic_event (Lisp_Event *emacs_event)
{
+#ifdef USE_KKCC
+ switch (XMAGIC_DATA_MSWINDOWS_EVENT (EVENT_DATA(emacs_event)))
+#else /* not USE_KKCC */
switch (EVENT_MSWINDOWS_MAGIC_TYPE (emacs_event))
+#endif /* not USE_KKCC */
{
case XM_BUMPQUEUE:
break;
@@ -4486,7 +4637,12 @@
{
Lisp_Object frame = EVENT_CHANNEL (emacs_event);
struct frame *f = XFRAME (frame);
+#ifdef USE_KKCC
+ int in_p = (XMAGIC_DATA_MSWINDOWS_EVENT (EVENT_DATA(emacs_event))
+ == WM_SETFOCUS);
+#else /* not USE_KKCC */
int in_p = (EVENT_MSWINDOWS_MAGIC_TYPE (emacs_event) == WM_SETFOCUS);
+#endif /* not USE_KKCC */
Lisp_Object conser;
struct gcpro gcpro1;
@@ -4509,7 +4665,11 @@
case XM_UNMAPFRAME:
{
Lisp_Object frame = EVENT_CHANNEL (emacs_event);
+#ifdef USE_KKCC
+ va_run_hook_with_args (XMAGIC_DATA_MSWINDOWS_EVENT (EVENT_DATA(emacs_event))
+#else /* not USE_KKCC */
va_run_hook_with_args (EVENT_MSWINDOWS_MAGIC_TYPE (emacs_event)
+#endif /* not USE_KKCC */
== XM_MAPFRAME ?
Qmap_frame_hook : Qunmap_frame_hook,
1, frame);
@@ -4680,15 +4840,24 @@
Lisp_Object emacs_event;
int critical_p = 0;
+#ifdef USE_KKCC
+ SET_EVENT_TYPE (&match_against, key_press_event);
+ XSET_KEY_DATA_MODIFIERS (EVENT_DATA (&match_against), FAKE_MOD_QUIT);
+#else /* not USE_KKCC */
match_against.event_type = key_press_event;
match_against.event.key.modifiers = FAKE_MOD_QUIT;
+#endif /* not USE_KKCC */
while (mswindows_quit_chars_count > 0)
{
emacs_event = mswindows_cancel_dispatch_event (&match_against);
assert (!NILP (emacs_event));
+#ifdef USE_KKCC
+ if (XKEY_DATA_MODIFIERS (XEVENT_DATA(emacs_event)) &
+#else /* not USE_KKCC */
if (XEVENT (emacs_event)->event.key.modifiers &
+#endif /* not USE_KKCC */
FAKE_MOD_QUIT_CRITICAL)
critical_p = 1;
Index: src/gui-msw.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/gui-msw.c,v
retrieving revision 1.6
diff -u -r1.6 gui-msw.c
--- src/gui-msw.c 2002/06/20 21:18:35 1.6
+++ src/gui-msw.c 2002/08/07 19:53:46
@@ -64,12 +64,21 @@
{
event = Fmake_event (Qnil, Qnil);
+#ifdef USE_KKCC
+ XSET_EVENT_TYPE (event, misc_user_event);
+ XSET_EVENT_CHANNEL (event, frame);
+ XSET_EVENT_TIMESTAMP (event, GetTickCount());
+ XSET_EVAL_DATA_FUNCTION (XEVENT_DATA (event), Qeval);
+ XSET_EVAL_DATA_OBJECT (XEVENT_DATA (event),
+ list4 (Qfuncall, callback_ex, image_instance, event));
+#else /* not USE_KKCC */
XEVENT (event)->event_type = misc_user_event;
XEVENT (event)->channel = frame;
XEVENT (event)->timestamp = GetTickCount ();
XEVENT (event)->event.eval.function = Qeval;
XEVENT (event)->event.eval.object =
list4 (Qfuncall, callback_ex, image_instance, event);
+#endif /* not USE_KKCC */
}
else if (NILP (callback) || UNBOUNDP (callback))
return Qnil;
@@ -80,11 +89,19 @@
event = Fmake_event (Qnil, Qnil);
get_gui_callback (callback, &fn, &arg);
+#ifdef USE_KKCC
+ XSET_EVENT_TYPE (event, misc_user_event);
+ XSET_EVENT_CHANNEL (event, frame);
+ XSET_EVENT_TIMESTAMP (event, GetTickCount());
+ XSET_EVAL_DATA_FUNCTION (XEVENT_DATA (event), fn);
+ XSET_EVAL_DATA_OBJECT (XEVENT_DATA (event), arg);
+#else /* not USE_KKCC */
XEVENT (event)->event_type = misc_user_event;
XEVENT (event)->channel = frame;
XEVENT (event)->timestamp = GetTickCount ();
XEVENT (event)->event.eval.function = fn;
XEVENT (event)->event.eval.object = arg;
+#endif /* not USE_KKCC */
}
mswindows_enqueue_dispatch_event (event);
Index: src/menubar-msw.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/menubar-msw.c,v
retrieving revision 1.33
diff -u -r1.33 menubar-msw.c
--- src/menubar-msw.c 2002/06/20 21:18:37 1.33
+++ src/menubar-msw.c 2002/08/07 19:53:51
@@ -888,8 +888,13 @@
/* Default is to put the menu at the point (10, 10) in frame */
if (eev)
{
+#ifdef USE_KKCC
+ pt.x = XBUTTON_DATA_X (EVENT_DATA (eev));
+ pt.y = XBUTTON_DATA_X (EVENT_DATA (eev));
+#else /* not USE_KKCC */
pt.x = eev->event.button.x;
pt.y = eev->event.button.y;
+#endif /* not USE_KKCC */
ClientToScreen (FRAME_MSWINDOWS_HANDLE (f), &pt);
}
else