/* Input event support for Emacs on the Microsoft W32 API.
- Copyright (C) 1992, 1993, 1995 Free Software Foundation, Inc.
+ Copyright (C) 1992, 1993, 1995, 2001, 2002, 2003, 2004,
+ 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
This file is part of GNU Emacs.
GNU Emacs is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
+the Free Software Foundation; either version 3, or (at your option)
any later version.
GNU Emacs is distributed in the hope that it will be useful,
You should have received a copy of the GNU General Public License
along with GNU Emacs; see the file COPYING. If not, write to
-the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA.
+the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+Boston, MA 02110-1301, USA.
Drew Bliss 01-Oct-93
Adapted from ntkbd.c by Tim Fleehart
}
if (event->uChar.AsciiChar == 0)
return 0;
- XSETINT (emacs_ev->code, event->uChar.AsciiChar);
+ emacs_ev->code = event->uChar.AsciiChar;
}
else
{
emacs_ev->kind = NON_ASCII_KEYSTROKE_EVENT;
- XSETINT (emacs_ev->code, event->wVirtualKeyCode);
+ emacs_ev->code = event->wVirtualKeyCode;
}
XSETFRAME (emacs_ev->frame_or_window, get_frame ());
*part = 0;
SELECTED_FRAME ()->mouse_moved = 0;
- *x = movement_pos.X;
- *y = movement_pos.Y;
+ XSETINT(*x, movement_pos.X);
+ XSETINT(*y, movement_pos.Y);
*time = movement_time;
UNBLOCK_INPUT;
if (but_change & mask)
{
if (i < NUM_TRANSLATED_MOUSE_BUTTONS)
- XSETINT (emacs_ev->code, emacs_button_translation[i]);
+ emacs_ev->code = emacs_button_translation[i];
else
- XSETINT (emacs_ev->code, i);
+ emacs_ev->code = i;
break;
}
}
int
-w32_console_read_socket (struct input_event *bufp, int numchars,
- int expected)
+w32_console_read_socket (struct terminal *terminal,
+ int expected,
+ struct input_event *hold_quit)
{
BOOL no_events = TRUE;
int nev, ret = 0, add;
return nev;
}
- while (nev > 0 && numchars > 0)
+ while (nev > 0)
{
+ struct input_event inev;
+
+ EVENT_INIT (inev);
+ inev.kind = NO_EVENT;
+ inev.arg = Qnil;
+
switch (queue_ptr->EventType)
{
case KEY_EVENT:
- add = key_event (&queue_ptr->Event.KeyEvent, bufp, &isdead);
+ add = key_event (&queue_ptr->Event.KeyEvent, &inev, &isdead);
if (add == -1) /* 95.7.25 by himi */
{
queue_ptr--;
add = 1;
}
- bufp += add;
- ret += add;
- numchars -= add;
+ if (add)
+ kbd_buffer_store_event_hold (&inev, hold_quit);
break;
case MOUSE_EVENT:
- add = do_mouse_event (&queue_ptr->Event.MouseEvent, bufp);
- bufp += add;
- ret += add;
- numchars -= add;
+ add = do_mouse_event (&queue_ptr->Event.MouseEvent, &inev);
+ if (add)
+ kbd_buffer_store_event_hold (&inev, hold_quit);
break;
case WINDOW_BUFFER_SIZE_EVENT: