summaryrefslogtreecommitdiff
path: root/gdk/win32
diff options
context:
space:
mode:
Diffstat (limited to 'gdk/win32')
-rw-r--r--gdk/win32/gdkdevicemanager-win32.c105
-rw-r--r--gdk/win32/gdkdevicemanager-win32.h3
-rw-r--r--gdk/win32/gdkevents-win32.c371
3 files changed, 253 insertions, 226 deletions
diff --git a/gdk/win32/gdkdevicemanager-win32.c b/gdk/win32/gdkdevicemanager-win32.c
index 85be7bf06b..8ebd1822ab 100644
--- a/gdk/win32/gdkdevicemanager-win32.c
+++ b/gdk/win32/gdkdevicemanager-win32.c
@@ -874,9 +874,8 @@ gdk_device_manager_find_wintab_device (GdkDeviceManagerWin32 *device_manager,
return NULL;
}
-gboolean
+GdkEvent *
gdk_input_other_event (GdkDisplay *display,
- GdkEvent *event,
MSG *msg,
GdkSurface *window)
{
@@ -884,21 +883,29 @@ gdk_input_other_event (GdkDisplay *display,
GdkDeviceWintab *source_device = NULL;
GdkDeviceGrabInfo *last_grab;
guint key_state;
+ GdkEvent *event;
PACKET packet;
gint root_x, root_y;
gint num_axes;
double x, y;
guint translated_buttons, button_diff, button_mask;
+
+ GdkEventType event_type;
+ int event_button;
+ GdkModifierType event_state;
+ double event_x, event_y;
+ double *axes;
+
/* Translation from tablet button state to GDK button state for
* buttons 1-3 - swap button 2 and 3.
*/
static guint button_map[8] = {0, 1, 4, 5, 2, 3, 6, 7};
- if (event->any.surface != wintab_window)
+ if (window != wintab_window)
{
g_warning ("gdk_input_other_event: not wintab_window?");
- return FALSE;
+ return NULL;
}
device_manager = GDK_DEVICE_MANAGER_WIN32 (_gdk_device_manager);
@@ -914,7 +921,7 @@ gdk_input_other_event (GdkDisplay *display,
if (msg->message == WT_PACKET || msg->message == WT_CSRCHANGE)
{
if (!(*p_WTPacket) ((HCTX) msg->lParam, msg->wParam, &packet))
- return FALSE;
+ return NULL;
}
switch (msg->message)
@@ -966,7 +973,7 @@ gdk_input_other_event (GdkDisplay *display,
if (source_device == NULL ||
gdk_device_get_mode (GDK_DEVICE (source_device)) == GDK_MODE_DISABLED)
- return FALSE;
+ return NULL;
/* Don't produce any button or motion events while a window is being
* moved or resized, see bug #151090.
@@ -974,7 +981,7 @@ gdk_input_other_event (GdkDisplay *display,
if (_modal_operation_in_progress & GDK_WIN32_MODAL_OP_SIZEMOVE_MASK)
{
GDK_NOTE (EVENTS_OR_INPUT, g_print ("... ignored when moving/sizing\n"));
- return FALSE;
+ return NULL;
}
last_grab = _gdk_display_get_last_device_grab (display, GDK_DEVICE (source_device));
@@ -989,7 +996,7 @@ gdk_input_other_event (GdkDisplay *display,
if (window == NULL)
{
GDK_NOTE (EVENTS_OR_INPUT, g_print ("... is root\n"));
- return FALSE;
+ return NULL;
}
num_axes = 0;
@@ -1018,7 +1025,7 @@ gdk_input_other_event (GdkDisplay *display,
button_diff = translated_buttons ^ source_device->button_state;
/* Gdk buttons are numbered 1.. */
- event->button.button = 1;
+ event_button = 1;
for (button_mask = 1; button_mask != 0x80000000;
button_mask <<= 1, event->button.button++)
@@ -1032,47 +1039,49 @@ gdk_input_other_event (GdkDisplay *display,
if (!(translated_buttons & button_mask))
{
- event->any.type = GDK_BUTTON_RELEASE;
+ event_type = GDK_BUTTON_RELEASE;
}
else
{
- event->any.type = GDK_BUTTON_PRESS;
+ event_type = GDK_BUTTON_PRESS;
}
source_device->button_state ^= button_mask;
}
else
{
- event->any.type = GDK_MOTION_NOTIFY;
+ event_type = GDK_MOTION_NOTIFY;
}
- event->any.surface = window;
key_state = get_modifier_key_state ();
- if (event->any.type == GDK_BUTTON_PRESS ||
- event->any.type == GDK_BUTTON_RELEASE)
+ if (event_type == GDK_BUTTON_PRESS ||
+ event_type == GDK_BUTTON_RELEASE)
{
- event->button.time = _gdk_win32_get_next_tick (msg->time);
- if (source_device->sends_core)
- gdk_event_set_device (event, device_manager->core_pointer);
- gdk_event_set_source_device (event, GDK_DEVICE (source_device));
-
- event->button.axes = g_new (gdouble, num_axes);
- gdk_surface_get_origin (window, &root_x, &root_y);
+ axes = g_new (gdouble, num_axes);
_gdk_device_wintab_translate_axes (source_device,
window,
- event->button.axes,
- &event->button.x,
- &event->button.y);
-
- event->button.x_root = event->button.x + root_x;
- event->button.y_root = event->button.y + root_y;
+ axes,
+ &event_x,
+ &event_y);
- event->button.state =
+ event_state =
key_state | ((source_device->button_state << 8)
& (GDK_BUTTON1_MASK | GDK_BUTTON2_MASK
| GDK_BUTTON3_MASK | GDK_BUTTON4_MASK
| GDK_BUTTON5_MASK));
+ event = gdk_event_button_new (event_type,
+ window,
+ device_manager->core_pointer,
+ source_device,
+ NULL,
+ _gdk_win32_get_next_tick (msg->time),
+ event_state,
+ event_button,
+ event_x,
+ event_y,
+ axes);
+
GDK_NOTE (EVENTS_OR_INPUT,
g_print ("WINTAB button %s:%d %g,%g\n",
(event->any.type == GDK_BUTTON_PRESS ?
@@ -1082,33 +1091,33 @@ gdk_input_other_event (GdkDisplay *display,
}
else
{
- event->motion.time = _gdk_win32_get_next_tick (msg->time);
- gdk_event_set_device (event, device_manager->core_pointer);
- gdk_event_set_source_device (event, GDK_DEVICE (source_device));
-
- event->motion.axes = g_new (gdouble, num_axes);
- gdk_surface_get_origin (window, &root_x, &root_y);
-
+ axes = g_new (gdouble, num_axes);
_gdk_device_wintab_translate_axes (source_device,
window,
- event->motion.axes,
- &event->motion.x,
- &event->motion.y);
+ axes,
+ &event_x,
+ &event_y);
- event->motion.x_root = event->motion.x + root_x;
- event->motion.y_root = event->motion.y + root_y;
-
- event->motion.state =
+ event_state =
key_state | ((source_device->button_state << 8)
& (GDK_BUTTON1_MASK | GDK_BUTTON2_MASK
| GDK_BUTTON3_MASK | GDK_BUTTON4_MASK
| GDK_BUTTON5_MASK));
+ event = gdk_event_motion_new (window,
+ device_manager->core_pointer,
+ source_device,
+ NULL,
+ _gdk_win32_get_next_tick (msg->time),
+ event_state,
+ event_x,
+ event_y,
+ axes);
GDK_NOTE (EVENTS_OR_INPUT,
g_print ("WINTAB motion: %g,%g\n",
event->motion.x, event->motion.y));
}
- return TRUE;
+ return event;
case WT_CSRCHANGE:
if (device_manager->dev_entered_proximity > 0)
@@ -1117,7 +1126,7 @@ gdk_input_other_event (GdkDisplay *display,
if ((source_device = gdk_device_manager_find_wintab_device (device_manager,
(HCTX) msg->lParam,
packet.pkCursor)) == NULL)
- return FALSE;
+ return NULL;
if (source_device->sends_core &&
gdk_device_get_mode (GDK_DEVICE (source_device)) != GDK_MODE_DISABLED)
@@ -1127,7 +1136,7 @@ gdk_input_other_event (GdkDisplay *display,
_gdk_input_ignore_core += 1;
}
- return FALSE;
+ return NULL;
case WT_PROXIMITY:
if (LOWORD (msg->lParam) == 0)
@@ -1146,8 +1155,8 @@ gdk_input_other_event (GdkDisplay *display,
device_manager->dev_entered_proximity += 1;
}
- return FALSE;
+ return NULL;
}
- return FALSE;
+ return NULL;
}
diff --git a/gdk/win32/gdkdevicemanager-win32.h b/gdk/win32/gdkdevicemanager-win32.h
index fc8ead5a10..53411d7c5c 100644
--- a/gdk/win32/gdkdevicemanager-win32.h
+++ b/gdk/win32/gdkdevicemanager-win32.h
@@ -57,8 +57,7 @@ struct _GdkDeviceManagerWin32Class
GType gdk_device_manager_win32_get_type (void) G_GNUC_CONST;
void _gdk_input_set_tablet_active (void);
-gboolean gdk_input_other_event (GdkDisplay *display,
- GdkEvent *event,
+GdkEvent * gdk_input_other_event (GdkDisplay *display,
MSG *msg,
GdkSurface *window);
diff --git a/gdk/win32/gdkevents-win32.c b/gdk/win32/gdkevents-win32.c
index 56541e71e7..d997ec55fb 100644
--- a/gdk/win32/gdkevents-win32.c
+++ b/gdk/win32/gdkevents-win32.c
@@ -205,11 +205,7 @@ generate_focus_event (GdkDeviceManagerWin32 *device_manager,
device = GDK_DEVICE_MANAGER_WIN32 (device_manager)->core_keyboard;
source_device = GDK_DEVICE_MANAGER_WIN32 (device_manager)->system_keyboard;
- event = gdk_event_new (GDK_FOCUS_CHANGE);
- event->any.surface = window;
- event->focus_change.in = in;
- gdk_event_set_device (event, device);
- gdk_event_set_source_device (event, source_device);
+ event = gdk_event_focus_new (window, device, source_device, in);
_gdk_win32_append_event (event);
}
@@ -220,28 +216,26 @@ generate_grab_broken_event (GdkDeviceManagerWin32 *device_manager,
gboolean keyboard,
GdkSurface *grab_window)
{
- GdkEvent *event = gdk_event_new (GDK_GRAB_BROKEN);
+ GdkEvent *event;
GdkDevice *device;
GdkDevice *source_device;
if (keyboard)
{
- device = GDK_DEVICE_MANAGER_WIN32 (device_manager)->core_keyboard;
- source_device = GDK_DEVICE_MANAGER_WIN32 (device_manager)->system_keyboard;
+ device = device_manager->core_keyboard;
+ source_device = device_manager->system_keyboard;
}
else
{
- device = GDK_DEVICE_MANAGER_WIN32 (device_manager)->core_pointer;
- source_device = GDK_DEVICE_MANAGER_WIN32 (device_manager)->system_pointer;
+ device = device_manager->core_pointer;
+ source_device = device_manager->system_pointer;
}
- event->any.surface = window;
- event->any.send_event = 0;
- event->grab_broken.keyboard = keyboard;
- event->grab_broken.implicit = FALSE;
- event->grab_broken.grab_surface = grab_window;
- gdk_event_set_device (event, device);
- gdk_event_set_source_device (event, source_device);
+ event = gdk_event_grab_broken_new (window,
+ device,
+ source_device,
+ grab_window,
+ FALSE);
_gdk_win32_append_event (event);
}
@@ -633,51 +627,62 @@ find_window_for_mouse_event (GdkSurface* reported_window,
return event_surface;
}
-static void
-build_key_event_state (GdkEvent *event,
- BYTE *key_state)
+static GdkModifierType
+build_key_event_state (BYTE *key_state)
{
+ GdkModifierType state;
GdkWin32Keymap *keymap;
- event->key.state = 0;
+ state = 0;
if (key_state[VK_SHIFT] & 0x80)
- event->key.state |= GDK_SHIFT_MASK;
+ state |= GDK_SHIFT_MASK;
if (key_state[VK_CAPITAL] & 0x01)
- event->key.state |= GDK_LOCK_MASK;
+ state |= GDK_LOCK_MASK;
if (key_state[VK_LBUTTON] & 0x80)
- event->key.state |= GDK_BUTTON1_MASK;
+ state |= GDK_BUTTON1_MASK;
if (key_state[VK_MBUTTON] & 0x80)
- event->key.state |= GDK_BUTTON2_MASK;
+ state |= GDK_BUTTON2_MASK;
if (key_state[VK_RBUTTON] & 0x80)
- event->key.state |= GDK_BUTTON3_MASK;
+ state |= GDK_BUTTON3_MASK;
if (key_state[VK_XBUTTON1] & 0x80)
- event->key.state |= GDK_BUTTON4_MASK;
+ state |= GDK_BUTTON4_MASK;
if (key_state[VK_XBUTTON2] & 0x80)
- event->key.state |= GDK_BUTTON5_MASK;
+ state |= GDK_BUTTON5_MASK;
keymap = GDK_WIN32_KEYMAP (_gdk_win32_display_get_keymap (_gdk_display));
- event->key.group = _gdk_win32_keymap_get_active_group (keymap);
if (_gdk_win32_keymap_has_altgr (keymap) &&
(key_state[VK_LCONTROL] & 0x80) &&
(key_state[VK_RMENU] & 0x80))
{
- event->key.state |= GDK_MOD2_MASK;
+ state |= GDK_MOD2_MASK;
if (key_state[VK_RCONTROL] & 0x80)
- event->key.state |= GDK_CONTROL_MASK;
+ state |= GDK_CONTROL_MASK;
if (key_state[VK_LMENU] & 0x80)
- event->key.state |= GDK_MOD1_MASK;
+ state |= GDK_MOD1_MASK;
}
else
{
if (key_state[VK_CONTROL] & 0x80)
- event->key.state |= GDK_CONTROL_MASK;
+ state |= GDK_CONTROL_MASK;
if (key_state[VK_MENU] & 0x80)
- event->key.state |= GDK_MOD1_MASK;
+ state |= GDK_MOD1_MASK;
}
+
+ return state;
+}
+
+static guint8
+get_active_group (void)
+{
+ GdkWin32Keymap *keymap;
+
+ keymap = GDK_WIN32_KEYMAP (_gdk_win32_display_get_keymap (_gdk_display));
+
+ return _gdk_win32_keymap_get_active_group (keymap);
}
static gint
@@ -727,20 +732,6 @@ build_pointer_event_state (MSG *msg)
return state;
}
-static void
-build_wm_ime_composition_event (GdkEvent *event,
- MSG *msg,
- wchar_t wc,
- BYTE *key_state)
-{
- event->key.time = _gdk_win32_get_next_tick (msg->time);
-
- build_key_event_state (event, key_state);
-
- event->key.hardware_keycode = 0; /* FIXME: What should it be? */
- event->key.keyval = gdk_unicode_to_keyval (wc);
-}
-
#ifdef G_ENABLE_DEBUG
static void
@@ -1098,23 +1089,17 @@ send_crossing_event (GdkDisplay *display,
pt = *screen_pt;
ScreenToClient (GDK_SURFACE_HWND (window), &pt);
- event = gdk_event_new (type);
- event->any.surface = window;
- event->crossing.child_surface = subwindow;
- event->crossing.time = _gdk_win32_get_next_tick (time_);
- event->crossing.x = pt.x / impl->surface_scale;
- event->crossing.y = pt.y / impl->surface_scale;
- event->crossing.x_root = (screen_pt->x + _gdk_offset_x) / impl->surface_scale;
- event->crossing.y_root = (screen_pt->y + _gdk_offset_y) / impl->surface_scale;
- event->crossing.mode = mode;
- event->crossing.detail = notify_type;
- event->crossing.mode = mode;
- event->crossing.detail = notify_type;
- event->crossing.focus = FALSE;
- event->crossing.state = mask;
- gdk_event_set_device (event, device_manager->core_pointer);
- gdk_event_set_source_device (event, device_manager->system_pointer);
-
+ event = gdk_event_crossing_new (type,
+ window,
+ device_manager->core_pointer,
+ device_manager->system_pointer,
+ _gdk_win32_next_tick (time_),
+ mask,
+ pt.x / impl->surface_scale,
+ pt.y / impl->surface_scale,
+ mode,
+ notify_type);
+
_gdk_win32_append_event (event);
}
@@ -1601,7 +1586,7 @@ generate_button_event (GdkEventType type,
GdkSurface *window,
MSG *msg)
{
- GdkEvent *event = gdk_event_new (type);
+ GdkEvent *event;
GdkDeviceManagerWin32 *device_manager;
GdkWin32Surface *impl = GDK_WIN32_SURFACE (window);
@@ -1610,18 +1595,21 @@ generate_button_event (GdkEventType type,
device_manager = GDK_DEVICE_MANAGER_WIN32 (_gdk_device_manager);
- event->any.surface = window;
- event->button.time = _gdk_win32_get_next_tick (msg->time);
- event->button.x = current_x = (gint16) GET_X_LPARAM (msg->lParam) / impl->surface_scale;
- event->button.y = current_y = (gint16) GET_Y_LPARAM (msg->lParam) / impl->surface_scale;
- event->button.x_root = (msg->pt.x + _gdk_offset_x) / impl->surface_scale;
- event->button.y_root = (msg->pt.y + _gdk_offset_y) / impl->surface_scale;
- event->button.axes = NULL;
- event->button.state = build_pointer_event_state (msg);
- event->button.button = button;
- gdk_event_set_device (event, device_manager->core_pointer);
- gdk_event_set_source_device (event, device_manager->system_pointer);
-
+ current_x = (gint16) GET_X_LPARAM (msg->lParam) / impl->surface_scale;
+ current_y = (gint16) GET_Y_LPARAM (msg->lParam) / impl->surface_scale;
+
+ event = gdk_event_button_new (type,
+ window,
+ device_manager->core_pointer,
+ device_manager->system_pointer,
+ NULL,
+ _gdk_win32_get_next_tick (msg->time),
+ build_pointer_event_state (msg),
+ button,
+ current_x,
+ current_y,
+ NULL);
+
_gdk_win32_append_event (event);
}
@@ -2078,6 +2066,16 @@ gdk_event_translate (MSG *msg,
int i;
+ GdkModifierType state;
+ guint keyval;
+ guint16 keycode;
+ guint16 scancode;
+ guint8 group;
+ gboolean is_modifier;
+
+ double delta_x, delta_y;
+ GdkScrollDirection direction;
+
display = gdk_display_get_default ();
win32_display = GDK_WIN32_DISPLAY (display);
@@ -2150,17 +2148,17 @@ gdk_event_translate (MSG *msg,
gdk_display_setting_changed (display, "gtk-im-module");
/* Generate a dummy key event to "nudge" IMContext */
- event = gdk_event_new (GDK_KEY_PRESS);
- event->any.surface = window;
- event->key.time = _gdk_win32_get_next_tick (msg->time);
- event->key.keyval = GDK_KEY_VoidSymbol;
- event->key.hardware_keycode = 0;
- event->key.group = 0;
- gdk_event_set_scancode (event, 0);
- gdk_event_set_device (event, device_manager_win32->core_keyboard);
- gdk_event_set_source_device (event, device_manager_win32->system_keyboard);
- event->key.is_modifier = FALSE;
- event->key.state = 0;
+ event = gdk_event_key_new (GDK_KEY_PRESS,
+ window,
+ device_manager_win32->core_keyboard,
+ device_manager_win32->system_keyboard,
+ _gdk_win32_get_next_tick (msg->time),
+ 0,
+ GDK_KEY_VoidSymbol,
+ 0,
+ 0,
+ 0,
+ FALSE);
_gdk_win32_append_event (event);
break;
@@ -2244,44 +2242,38 @@ gdk_event_translate (MSG *msg,
}
}
- event = gdk_event_new ((msg->message == WM_KEYDOWN ||
- msg->message == WM_SYSKEYDOWN) ?
- GDK_KEY_PRESS : GDK_KEY_RELEASE);
- event->any.surface = window;
- event->key.time = _gdk_win32_get_next_tick (msg->time);
- event->key.keyval = GDK_KEY_VoidSymbol;
- event->key.hardware_keycode = msg->wParam;
- /* save original scancode */
- gdk_event_set_scancode (event, msg->lParam >> 16);
- gdk_event_set_device (event, device_manager_win32->core_keyboard);
- gdk_event_set_source_device (event, device_manager_win32->system_keyboard);
+ keyval = GDK_KEY_VoidSymbol;
+ keycode = msg->wParam;
+ scancode = msg->lParam >> 16;
+
if (HIWORD (msg->lParam) & KF_EXTENDED)
{
switch (msg->wParam)
{
case VK_CONTROL:
- event->key.hardware_keycode = VK_RCONTROL;
+ keycode = VK_RCONTROL;
break;
case VK_SHIFT: /* Actually, KF_EXTENDED is not set
* for the right shift key.
*/
- event->key.hardware_keycode = VK_RSHIFT;
+ keycode = VK_RSHIFT;
break;
case VK_MENU:
- event->key.hardware_keycode = VK_RMENU;
+ keycode = VK_RMENU;
break;
}
}
else if (msg->wParam == VK_SHIFT &&
LOBYTE (HIWORD (msg->lParam)) == _gdk_win32_keymap_get_rshift_scancode (GDK_WIN32_KEYMAP (_gdk_win32_display_get_keymap (_gdk_display))))
- event->key.hardware_keycode = VK_RSHIFT;
+ keycode = VK_RSHIFT;
- event->key.is_modifier = (msg->wParam == VK_CONTROL ||
- msg->wParam == VK_SHIFT ||
- msg->wParam == VK_MENU);
+ is_modifier = (msg->wParam == VK_CONTROL ||
+ msg->wParam == VK_SHIFT ||
+ msg->wParam == VK_MENU);
/* g_print ("ctrl:%02x lctrl:%02x rctrl:%02x alt:%02x lalt:%02x ralt:%02x\n", key_state[VK_CONTROL], key_state[VK_LCONTROL], key_state[VK_RCONTROL], key_state[VK_MENU], key_state[VK_LMENU], key_state[VK_RMENU]); */
- build_key_event_state (event, key_state);
+ state = build_key_event_state (key_state);
+ group = get_active_group ();
if (msg->wParam == VK_PACKET && ccount == 1)
{
@@ -2298,20 +2290,20 @@ gdk_event_translate (MSG *msg,
else
leading = impl->leading_surrogate_keyup;
- event->key.keyval = gdk_unicode_to_keyval ((leading - 0xD800) * 0x400 + wbuf[0] - 0xDC00 + 0x10000);
+ keyval = gdk_unicode_to_keyval ((leading - 0xD800) * 0x400 + wbuf[0] - 0xDC00 + 0x10000);
}
else
{
- event->key.keyval = gdk_unicode_to_keyval (wbuf[0]);
+ keyval = gdk_unicode_to_keyval (wbuf[0]);
}
}
else
{
gdk_keymap_translate_keyboard_state (_gdk_win32_display_get_keymap (display),
- event->key.hardware_keycode,
- event->key.state,
- event->key.group,
- &event->key.keyval,
+ keycode,
+ state,
+ group,
+ &keyval,
NULL, NULL, NULL);
}
@@ -2354,7 +2346,21 @@ gdk_event_translate (MSG *msg,
/* Reset MOD1_MASK if it is the Alt key itself */
if (msg->wParam == VK_MENU)
- event->key.state &= ~GDK_MOD1_MASK;
+ state &= ~GDK_MOD1_MASK;
+
+ event = gdk_event_key_new ((msg->message == WM_KEYDOWN || msg->message == WM_SYSKEYDOWN)
+ ? GDK_KEY_PRESS
+ : GDK_KEY_RELEASE,
+ window,
+ device_manager_win32->core_keyboard,
+ device_manager_win32->system_keyboard,
+ _gdk_win32_get_next_tick (msg->time),
+ state,
+ keyval,
+ keycode,
+ scancode,
+ group,
+ is_modifier);
_gdk_win32_append_event (event);
@@ -2416,20 +2422,32 @@ gdk_event_translate (MSG *msg,
for (i = 0; i < ccount; i++)
{
/* Build a key press event */
- event = gdk_event_new (GDK_KEY_PRESS);
- event->any.surface = window;
- gdk_event_set_device (event, device_manager_win32->core_keyboard);
- gdk_event_set_source_device (event, device_manager_win32->system_keyboard);
- build_wm_ime_composition_event (event, msg, wbuf[i], key_state);
+ event = gdk_event_key_new (GDK_KEY_PRESS,
+ window,
+ device_manager_win32->core_keyboard,
+ device_manager_win32->system_keyboard,
+ _gdk_win32_get_next_tick (msg->time),
+ build_key_event_state (key_state),
+ gdk_unicode_to_keyval (wbuf[i]),
+ 0,
+ 0,
+ get_active_group (),
+ FALSE);
_gdk_win32_append_event (event);
/* Build a key release event. */
- event = gdk_event_new (GDK_KEY_RELEASE);
- event->any.surface = window;
- gdk_event_set_device (event, device_manager_win32->core_keyboard);
- gdk_event_set_source_device (event, device_manager_win32->system_keyboard);
- build_wm_ime_composition_event (event, msg, wbuf[i], key_state);
+ event = gdk_event_key_new (GDK_KEY_RELEASE,
+ window,
+ device_manager_win32->core_keyboard,
+ device_manager_win32->system_keyboard,
+ _gdk_win32_get_next_tick (msg->time),
+ build_key_event_state (key_state),
+ gdk_unicode_to_keyval (wbuf[i]),
+ 0,
+ 0,
+ get_active_group (),
+ FALSE);
_gdk_win32_append_event (event);
}
@@ -2631,17 +2649,18 @@ gdk_event_translate (MSG *msg,
}
else if (_gdk_input_ignore_core == 0)
{
- event = gdk_event_new (GDK_MOTION_NOTIFY);
- event->any.surface = window;
- event->motion.time = _gdk_win32_get_next_tick (msg->time);
- event->motion.x = current_x = (gint16) GET_X_LPARAM (msg->lParam) / impl->surface_scale;
- event->motion.y = current_y = (gint16) GET_Y_LPARAM (msg->lParam) / impl->surface_scale;
- event->motion.x_root = current_root_x;
- event->motion.y_root = current_root_y;
- event->motion.axes = NULL;
- event->motion.state = build_pointer_event_state (msg);
- gdk_event_set_device (event, device_manager_win32->core_pointer);
- gdk_event_set_source_device (event, device_manager_win32->system_pointer);
+ current_x = (gint16) GET_X_LPARAM (msg->lParam) / impl->surface_scale;
+ current_y = (gint16) GET_Y_LPARAM (msg->lParam) / impl->surface_scale;
+
+ event = gdk_event_motion_new (window,
+ device_manager_win32->core_pointer,
+ device_manager_win32->system_pointer,
+ NULL,
+ _gdk_win32_get_next_tick (msg->time),
+ build_pointer_event_state (msg),
+ current_x,
+ current_y,
+ NULL);
_gdk_win32_append_event (event);
}
@@ -2748,44 +2767,48 @@ gdk_event_translate (MSG *msg,
impl = GDK_WIN32_SURFACE (window);
ScreenToClient (msg->hwnd, &point);
- event = gdk_event_new (GDK_SCROLL);
- event->any.surface = window;
- event->scroll.direction = GDK_SCROLL_SMOOTH;
+ delta_x = delta_y = 0.0;
if (msg->message == WM_MOUSEWHEEL)
- {
- event->scroll.delta_y = (gdouble) GET_WHEEL_DELTA_WPARAM (msg->wParam) / (gdouble) WHEEL_DELTA;
- }
+ delta_y = (double) GET_WHEEL_DELTA_WPARAM (msg->wParam) / (gdouble) WHEEL_DELTA;
else if (msg->message == WM_MOUSEHWHEEL)
- {
- event->scroll.delta_x = (gdouble) GET_WHEEL_DELTA_WPARAM (msg->wParam) / (gdouble) WHEEL_DELTA;
- }
+ delta_x = (double) GET_WHEEL_DELTA_WPARAM (msg->wParam) / (gdouble) WHEEL_DELTA;
/* Positive delta scrolls up, not down,
see API documentation for WM_MOUSEWHEEL message.
*/
- event->scroll.delta_y *= -1.0;
- event->scroll.time = _gdk_win32_get_next_tick (msg->time);
- event->scroll.x = (gint16) point.x / impl->surface_scale;
- event->scroll.y = (gint16) point.y / impl->surface_scale;
- event->scroll.x_root = ((gint16) GET_X_LPARAM (msg->lParam) + _gdk_offset_x) / impl->surface_scale;
- event->scroll.y_root = ((gint16) GET_Y_LPARAM (msg->lParam) + _gdk_offset_y) / impl->surface_scale;
- event->scroll.state = build_pointer_event_state (msg);
- gdk_event_set_device (event, device_manager_win32->core_pointer);
- gdk_event_set_source_device (event, device_manager_win32->system_pointer);
- gdk_event_set_pointer_emulated (event, FALSE);
-
- _gdk_win32_append_event (gdk_event_copy (event));
+ delta_y *= -1.0;
+
+ event = gdk_event_scroll_new (window,
+ device_manager_win32->core_pointer,
+ device_manager_win32->system_pointer,
+ NULL,
+ _gdk_win32_get_next_tick (msg->time),
+ build_pointer_event_state (msg),
+ delta_x,
+ delta_y,
+ FALSE);
+
+ _gdk_win32_append_event (event);
/* Append the discrete version too */
+ direction = 0;
if (msg->message == WM_MOUSEWHEEL)
- event->scroll.direction = (((short) HIWORD (msg->wParam)) > 0) ?
- GDK_SCROLL_UP : GDK_SCROLL_DOWN;
+ direction = (((short) HIWORD (msg->wParam)) > 0)
+ ? GDK_SCROLL_UP
+ : GDK_SCROLL_DOWN;
else if (msg->message == WM_MOUSEHWHEEL)
- event->scroll.direction = (((short) HIWORD (msg->wParam)) > 0) ?
- GDK_SCROLL_RIGHT : GDK_SCROLL_LEFT;
- event->scroll.delta_x = 0;
- event->scroll.delta_y = 0;
- gdk_event_set_pointer_emulated (event, TRUE);
+ direction = (((short) HIWORD (msg->wParam)) > 0)
+ ? GDK_SCROLL_RIGHT
+ : GDK_SCROLL_LEFT;
+
+ event = gdk_event_scroll_new (window,
+ device_manager_win32->core_pointer,
+ device_manager_win32->system_pointer,
+ NULL,
+ _gdk_win32_get_next_tick (msg->time),
+ build_pointer_event_state (msg),
+ direction,
+ TRUE);
_gdk_win32_append_event (event);
@@ -3414,8 +3437,7 @@ gdk_event_translate (MSG *msg,
if (GDK_SURFACE_DESTROYED (window))
break;
- event = gdk_event_new (GDK_DELETE);
- event->any.surface = window;
+ event = gdk_event_delete_new (window);
_gdk_win32_append_event (event);
@@ -3449,8 +3471,7 @@ gdk_event_translate (MSG *msg,
if (window == NULL || GDK_SURFACE_DESTROYED (window))
break;
- event = gdk_event_new (GDK_DESTROY);
- event->any.surface = window;
+ event = gdk_event_delete_new (window);
_gdk_win32_append_event (event);
@@ -3563,14 +3584,12 @@ gdk_event_translate (MSG *msg,
/* Fall through */
wintab:
- event = gdk_event_new (GDK_NOTHING);
- event->any.surface = window;
- g_object_ref (window);
-
- if (gdk_input_other_event (display, event, msg, window))
- _gdk_win32_append_event (event);
- else
- g_object_unref (event);
+ event = gdk_input_other_event (display, msg, window);
+ if (event)
+ {
+ _gdk_win32_append_event (event);
+ g_object_unref (event);
+ }
break;
}