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

Unified Diff: ui/events/ozone/evdev/keyboard_evdev.h

Issue 1287103004: Sync ui/events to chromium @ https://codereview.chromium.org/1210203002 (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: rebased Created 5 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 | « ui/events/ozone/evdev/input_injector_evdev_unittest.cc ('k') | ui/events/ozone/evdev/keyboard_evdev.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/events/ozone/evdev/keyboard_evdev.h
diff --git a/ui/events/ozone/evdev/keyboard_evdev.h b/ui/events/ozone/evdev/keyboard_evdev.h
new file mode 100644
index 0000000000000000000000000000000000000000..8cc1916f00d8c96d94f69ce484748cb308adf758
--- /dev/null
+++ b/ui/events/ozone/evdev/keyboard_evdev.h
@@ -0,0 +1,110 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef UI_EVENTS_OZONE_EVDEV_KEYBOARD_EVDEV_H_
+#define UI_EVENTS_OZONE_EVDEV_KEYBOARD_EVDEV_H_
+
+#include <bitset>
+#include <linux/input.h>
+
+#include "base/time/time.h"
+#include "base/timer/timer.h"
+#include "ui/events/ozone/evdev/event_device_util.h"
+#include "ui/events/ozone/evdev/event_dispatch_callback.h"
+#include "ui/events/ozone/evdev/events_ozone_evdev_export.h"
+#include "ui/events/ozone/layout/keyboard_layout_engine.h"
+
+namespace ui {
+
+class EventModifiersEvdev;
+enum class DomCode;
+
+// Keyboard for evdev.
+//
+// This object is responsible for combining all attached keyboards into
+// one logical keyboard, applying modifiers & implementing key repeat.
+//
+// It also currently also applies the layout.
+class EVENTS_OZONE_EVDEV_EXPORT KeyboardEvdev {
+ public:
+ KeyboardEvdev(EventModifiersEvdev* modifiers,
+ KeyboardLayoutEngine* keyboard_layout_engine,
+ const EventDispatchCallback& callback);
+ ~KeyboardEvdev();
+
+ // Handlers for raw key presses & releases.
+ //
+ // |code| is a Linux key code (from <linux/input.h>). |down| represents the
+ // key state. |suppress_auto_repeat| prevents the event from triggering
+ // auto-repeat, if enabled. |device_id| uniquely identifies the source
+ // keyboard device.
+ void OnKeyChange(unsigned int code,
+ bool down,
+ bool suppress_auto_repeat,
+ base::TimeDelta timestamp,
+ int device_id);
+
+ // Handle Caps Lock modifier.
+ void SetCapsLockEnabled(bool enabled);
+ bool IsCapsLockEnabled();
+
+ // Configuration for key repeat.
+ bool IsAutoRepeatEnabled();
+ void SetAutoRepeatEnabled(bool enabled);
+ void SetAutoRepeatRate(const base::TimeDelta& delay,
+ const base::TimeDelta& interval);
+ void GetAutoRepeatRate(base::TimeDelta* delay, base::TimeDelta* interval);
+
+ private:
+ void UpdateModifier(int modifier_flag, bool down);
+ void UpdateCapsLockLed();
+ void UpdateKeyRepeat(unsigned int key,
+ bool down,
+ bool suppress_auto_repeat,
+ int device_id);
+ void StartKeyRepeat(unsigned int key, int device_id);
+ void StopKeyRepeat();
+ void ScheduleKeyRepeat(const base::TimeDelta& delay);
+ void OnRepeatTimeout(unsigned int sequence);
+ void OnRepeatCommit(unsigned int sequence);
+ void DispatchKey(unsigned int key,
+ bool down,
+ bool repeat,
+ base::TimeDelta timestamp,
+ int device_id);
+
+ // Aggregated key state. There is only one bit of state per key; we do not
+ // attempt to count presses of the same key on multiple keyboards.
+ //
+ // A key is down iff the most recent event pertaining to that key was a key
+ // down event rather than a key up event. Therefore, a particular key position
+ // can be considered released even if it is being depresssed on one or more
+ // keyboards.
+ std::bitset<KEY_CNT> key_state_;
+
+ // Callback for dispatching events.
+ EventDispatchCallback callback_;
+
+ // Shared modifier state.
+ EventModifiersEvdev* modifiers_;
+
+ // Shared layout engine.
+ KeyboardLayoutEngine* keyboard_layout_engine_;
+
+ // Key repeat state.
+ bool auto_repeat_enabled_ = true;
+ unsigned int repeat_key_ = KEY_RESERVED;
+ unsigned int repeat_sequence_ = 0;
+ int repeat_device_id_ = 0;
+ base::TimeDelta repeat_delay_;
+ base::TimeDelta repeat_interval_;
+
+ base::WeakPtrFactory<KeyboardEvdev> weak_ptr_factory_;
+
+ DISALLOW_COPY_AND_ASSIGN(KeyboardEvdev);
+};
+
+} // namespace ui
+
+#endif // UI_EVENTS_OZONE_EVDEV_KEYBOARD_EVDEV_H_
« no previous file with comments | « ui/events/ozone/evdev/input_injector_evdev_unittest.cc ('k') | ui/events/ozone/evdev/keyboard_evdev.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698