| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2006-2009 Google Inc. All rights reserved. | 2 * Copyright (C) 2006-2009 Google Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
| 6 * met: | 6 * met: |
| 7 * | 7 * |
| 8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
| (...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 183 case GDK_KEY_RELEASE: | 183 case GDK_KEY_RELEASE: |
| 184 result.type = WebInputEvent::KeyUp; | 184 result.type = WebInputEvent::KeyUp; |
| 185 break; | 185 break; |
| 186 case GDK_KEY_PRESS: | 186 case GDK_KEY_PRESS: |
| 187 result.type = WebInputEvent::RawKeyDown; | 187 result.type = WebInputEvent::RawKeyDown; |
| 188 break; | 188 break; |
| 189 default: | 189 default: |
| 190 ASSERT_NOT_REACHED(); | 190 ASSERT_NOT_REACHED(); |
| 191 } | 191 } |
| 192 | 192 |
| 193 // According to MSDN: |
| 194 // http://msdn.microsoft.com/en-us/library/ms646286(VS.85).aspx |
| 195 // Key events with Alt modifier and F10 are system key events. |
| 196 // We just emulate this behavior. It's necessary to prevent webkit from |
| 197 // processing keypress event generated by alt-d, etc. |
| 198 // F10 is not special on Linux, so don't treat it as system key. |
| 199 if (result.modifiers & WebInputEvent::AltKey) |
| 200 result.isSystemKey = true; |
| 201 |
| 193 // The key code tells us which physical key was pressed (for example, the | 202 // The key code tells us which physical key was pressed (for example, the |
| 194 // A key went down or up). It does not determine whether A should be lower | 203 // A key went down or up). It does not determine whether A should be lower |
| 195 // or upper case. This is what text does, which should be the keyval. | 204 // or upper case. This is what text does, which should be the keyval. |
| 196 result.windowsKeyCode = gdkEventToWindowsKeyCode(event); | 205 result.windowsKeyCode = gdkEventToWindowsKeyCode(event); |
| 197 result.nativeKeyCode = event->hardware_keycode; | 206 result.nativeKeyCode = event->hardware_keycode; |
| 198 | 207 |
| 199 switch (event->keyval) { | 208 switch (event->keyval) { |
| 200 // We need to treat the enter key as a key press of character \r. This | 209 // We need to treat the enter key as a key press of character \r. This |
| 201 // is apparently just how webkit handles it and what it expects. | 210 // is apparently just how webkit handles it and what it expects. |
| 202 case GDK_ISO_Enter: | 211 case GDK_ISO_Enter: |
| 203 case GDK_KP_Enter: | 212 case GDK_KP_Enter: |
| 204 case GDK_Return: | 213 case GDK_Return: |
| 205 result.unmodifiedText[0] = result.text[0] = static_cast<WebUChar>('\r'); | 214 result.unmodifiedText[0] = result.text[0] = static_cast<WebUChar>('\r'); |
| 206 break; | 215 break; |
| 207 default: | 216 default: |
| 208 // This should set text to 0 when it's not a real character. | 217 // This should set text to 0 when it's not a real character. |
| 209 // FIXME: fix for non BMP chars | 218 // FIXME: fix for non BMP chars |
| 219 // TODO(james.su@gmail.com): |
| 220 // Support control characters input like Windows. |
| 221 // See: http://en.wikipedia.org/wiki/Control_characters |
| 210 result.unmodifiedText[0] = result.text[0] = | 222 result.unmodifiedText[0] = result.text[0] = |
| 211 static_cast<WebUChar>(gdk_keyval_to_unicode(event->keyval)); | 223 static_cast<WebUChar>(gdk_keyval_to_unicode(event->keyval)); |
| 212 } | 224 } |
| 213 | 225 |
| 214 result.setKeyIdentifierFromWindowsKeyCode(); | 226 result.setKeyIdentifierFromWindowsKeyCode(); |
| 215 | 227 |
| 216 // FIXME: Do we need to set IsAutoRepeat or IsKeyPad? | 228 // FIXME: Do we need to set IsAutoRepeat or IsKeyPad? |
| 217 | 229 |
| 218 return result; | 230 return result; |
| 219 } | 231 } |
| 220 | 232 |
| 221 WebKeyboardEvent WebInputEventFactory::keyboardEvent(wchar_t character, int state, double timeStampSeconds) | 233 WebKeyboardEvent WebInputEventFactory::keyboardEvent(wchar_t character, int state, double timeStampSeconds) |
| 222 { | 234 { |
| 223 // keyboardEvent(const GdkEventKey*) depends on the GdkEventKey object and | 235 // keyboardEvent(const GdkEventKey*) depends on the GdkEventKey object and |
| 224 // it is hard to use/ it from signal handlers which don't use GdkEventKey | 236 // it is hard to use/ it from signal handlers which don't use GdkEventKey |
| 225 // objects (e.g. GtkIMContext signal handlers.) For such handlers, this | 237 // objects (e.g. GtkIMContext signal handlers.) For such handlers, this |
| 226 // function creates a WebInputEvent::Char event without using a | 238 // function creates a WebInputEvent::Char event without using a |
| 227 // GdkEventKey object. | 239 // GdkEventKey object. |
| 228 WebKeyboardEvent result; | 240 WebKeyboardEvent result; |
| 229 result.type = WebKit::WebInputEvent::Char; | 241 result.type = WebKit::WebInputEvent::Char; |
| 230 result.timeStampSeconds = timeStampSeconds; | 242 result.timeStampSeconds = timeStampSeconds; |
| 231 result.modifiers = gdkStateToWebEventModifiers(state); | 243 result.modifiers = gdkStateToWebEventModifiers(state); |
| 232 result.windowsKeyCode = character; | 244 result.windowsKeyCode = character; |
| 233 result.nativeKeyCode = character; | 245 result.nativeKeyCode = character; |
| 234 result.text[0] = character; | 246 result.text[0] = character; |
| 235 result.unmodifiedText[0] = character; | 247 result.unmodifiedText[0] = character; |
| 248 |
| 249 // According to MSDN: |
| 250 // http://msdn.microsoft.com/en-us/library/ms646286(VS.85).aspx |
| 251 // Key events with Alt modifier and F10 are system key events. |
| 252 // We just emulate this behavior. It's necessary to prevent webkit from |
| 253 // processing keypress event generated by alt-d, etc. |
| 254 // F10 is not special on Linux, so don't treat it as system key. |
| 255 if (result.modifiers & WebInputEvent::AltKey) |
| 256 result.isSystemKey = true; |
| 257 |
| 236 return result; | 258 return result; |
| 237 } | 259 } |
| 238 | 260 |
| 239 // WebMouseEvent -------------------------------------------------------------- | 261 // WebMouseEvent -------------------------------------------------------------- |
| 240 | 262 |
| 241 WebMouseEvent WebInputEventFactory::mouseEvent(const GdkEventButton* event) | 263 WebMouseEvent WebInputEventFactory::mouseEvent(const GdkEventButton* event) |
| 242 { | 264 { |
| 243 WebMouseEvent result; | 265 WebMouseEvent result; |
| 244 | 266 |
| 245 result.timeStampSeconds = gdkEventTimeToWebEventTime(event->time); | 267 result.timeStampSeconds = gdkEventTimeToWebEventTime(event->time); |
| (...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 361 case GDK_SCROLL_RIGHT: | 383 case GDK_SCROLL_RIGHT: |
| 362 result.deltaX = -scrollbarPixelsPerTick; | 384 result.deltaX = -scrollbarPixelsPerTick; |
| 363 result.wheelTicksX = 1; | 385 result.wheelTicksX = 1; |
| 364 break; | 386 break; |
| 365 } | 387 } |
| 366 | 388 |
| 367 return result; | 389 return result; |
| 368 } | 390 } |
| 369 | 391 |
| 370 } // namespace WebKit | 392 } // namespace WebKit |
| OLD | NEW |