Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(7831)

Unified Diff: chrome/browser/ui/libgtk2ui/x11_input_method_context_impl_gtk2.cc

Issue 404423002: Listen for key events in SetupXI2ForXWindow() (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: restrict to ChromeOS (plus rebase) Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | ui/events/x/touch_factory_x11.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/ui/libgtk2ui/x11_input_method_context_impl_gtk2.cc
diff --git a/chrome/browser/ui/libgtk2ui/x11_input_method_context_impl_gtk2.cc b/chrome/browser/ui/libgtk2ui/x11_input_method_context_impl_gtk2.cc
index bb263c0d9d93ec795f3b3f37bf2c6316c1d21a8a..d6e18f6427109a9e209b23bea398ab6bfe6dab3a 100644
--- a/chrome/browser/ui/libgtk2ui/x11_input_method_context_impl_gtk2.cc
+++ b/chrome/browser/ui/libgtk2ui/x11_input_method_context_impl_gtk2.cc
@@ -19,6 +19,7 @@
#include "ui/base/ime/composition_text_util_pango.h"
#include "ui/base/ime/text_input_client.h"
#include "ui/events/event.h"
+#include "ui/events/keycodes/keyboard_code_conversion_x.h"
#include "ui/gfx/x/x11_types.h"
namespace libgtk2ui {
@@ -191,8 +192,16 @@ void X11InputMethodContextImplGtk2::ResetXModifierKeycodesCache() {
GdkEvent* X11InputMethodContextImplGtk2::GdkEventFromNativeEvent(
const base::NativeEvent& native_event) {
- const XKeyEvent& xkey = native_event->xkey;
- DCHECK(xkey.type == KeyPress || xkey.type == KeyRelease);
+ XEvent xkeyevent;
+ if (native_event->type == GenericEvent) {
+ // If this is an XI2 key event, build a matching core X event, to avoid
+ // having two cases for every use.
+ ui::InitXKeyEventFromXIDeviceEvent(*native_event, &xkeyevent);
+ } else {
+ DCHECK(native_event->type == KeyPress || native_event->type == KeyRelease);
+ xkeyevent.xkey = native_event->xkey;
+ }
+ XKeyEvent& xkey = xkeyevent.xkey;
// Get a GdkDisplay.
GdkDisplay* display = gdk_x11_lookup_xdisplay(xkey.display);
@@ -207,7 +216,7 @@ GdkEvent* X11InputMethodContextImplGtk2::GdkEventFromNativeEvent(
// Get a keysym and group.
KeySym keysym = NoSymbol;
guint8 keyboard_group = 0;
- XLookupString(&native_event->xkey, NULL, 0, &keysym, NULL);
+ XLookupString(&xkey, NULL, 0, &keysym, NULL);
GdkKeymap* keymap = gdk_keymap_get_for_display(display);
GdkKeymapKey* keys = NULL;
guint* keyvals = NULL;
« no previous file with comments | « no previous file | ui/events/x/touch_factory_x11.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698