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

Side by Side Diff: ui/events/ozone/layout/xkb/xkb_keyboard_layout_engine.h

Issue 778503002: XKB implementation of Ozone key layout. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@x430194-layout
Patch Set: address review comments (spang) Created 6 years 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #ifndef UI_EVENTS_OZONE_LAYOUT_XKB_XKB_KEYBOARD_LAYOUT_ENGINE_H_
6 #define UI_EVENTS_OZONE_LAYOUT_XKB_XKB_KEYBOARD_LAYOUT_ENGINE_H_
7
8 #include "base/containers/hash_tables.h"
9 #include "base/memory/scoped_ptr.h"
10 #include "base/strings/string16.h"
11 #include "ui/events/ozone/layout/events_ozone_layout_export.h"
12 #include "ui/events/ozone/layout/keyboard_layout_engine.h"
13 #include "ui/events/ozone/layout/xkb/xkb.h"
14
15 namespace ui {
16
17 #if defined(USE_X11)
18 using XkbKeyCode = decltype(XKeyEvent.keycode);
spang 2014/12/08 22:47:28 remove dead code
kpschoedel 2014/12/08 23:15:26 Done.
19 using XkbFlags = decltype(XKeyEvent.state);
20 #else
21 using XkbKeyCode = xkb_keycode_t;
22 using XkbFlags = xkb_mod_mask_t;
23 using XkbKeySym = xkb_keysym_t;
24 #endif
25
26 class EVENTS_OZONE_LAYOUT_EXPORT XkbKeyCodeConverter {
27 public:
28 XkbKeyCodeConverter();
29 virtual ~XkbKeyCodeConverter();
30 XkbKeyCode InvalidXkbKeyCode() const { return invalid_xkb_keycode_; }
31 virtual XkbKeyCode DomCodeToXkbKeyCode(DomCode dom_code) const = 0;
32
33 protected:
34 XkbKeyCode invalid_xkb_keycode_;
35 };
36
37 class EVENTS_OZONE_LAYOUT_EXPORT XkbKeyboardLayoutEngine
38 : public KeyboardLayoutEngine {
39 public:
40 XkbKeyboardLayoutEngine(const XkbKeyCodeConverter& converter);
41 virtual ~XkbKeyboardLayoutEngine();
42
43 // KeyboardLayoutEngine:
44 virtual bool CanSetCurrentLayout() const override;
45 virtual bool SetCurrentLayoutByName(const std::string& layout_name) override;
46
47 virtual bool UsesISOLevel5Shift() const override;
48 virtual bool UsesAltGr() const override;
49
50 virtual bool Lookup(DomCode dom_code,
51 int flags,
52 DomKey* dom_key,
53 base::char16* character,
54 KeyboardCode* key_code) const override;
55
56 private:
57 #if !defined(USE_X11)
58 // Sets a new XKB keymap, updating object fields.
59 void SetKeymap(xkb_keymap* keymap);
60 #endif
61
62 // Returns the XKB modifiers flags corresponding to the given EventFlags.
63 XkbFlags EventFlagsToXkbFlags(int ui_flags) const;
64
65 // Determines the XKB KeySym and character associated with a key.
66 // Returns true on success.
67 bool XkbLookup(XkbKeyCode xkb_keycode,
68 XkbFlags xkb_flags,
69 XkbKeySym* xkb_keysym,
70 base::char16* character) const;
71
72 // Maps DomCode to XkbKeyCode.
73 const XkbKeyCodeConverter& key_code_converter_;
74
75 #if !defined(USE_X11)
76 // libxkbcommon uses explicit reference counting for its structures,
77 // so we need XXX
78 struct XkbContextDeleter {
79 void operator()(xkb_context* context) { xkb_context_unref(context); }
80 };
81 scoped_ptr<xkb_context, XkbContextDeleter> xkb_context_;
82 struct XkbstateDeleter {
83 void operator()(xkb_state* state) { xkb_state_unref(state); }
84 };
85 scoped_ptr<xkb_state, XkbstateDeleter> xkb_state_;
86 #endif
87
88 // Table for EventFlagsToXkbFlags().
89 struct XkbFlagMapEntry {
90 int ui_flag;
91 XkbFlags xkb_flag;
92 };
93 std::vector<XkbFlagMapEntry> xkb_flag_map_;
94 };
95
96 } // namespace ui
97
98 #endif // UI_EVENTS_OZONE_LAYOUT_XKB_XKB_KEYBOARD_LAYOUT_ENGINE_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698