aboutsummaryrefslogtreecommitdiff
path: root/src/platform/gui/xcb/Window.cpp
diff options
context:
space:
mode:
authorYuqian Yang <crupest@crupest.life>2025-09-09 22:34:50 +0800
committerYuqian Yang <crupest@crupest.life>2025-09-09 22:34:50 +0800
commitfee3a550f00f6df4b341ca6ed47ef7e9a748a9ba (patch)
tree88c4584eb92523ee15dceae79237070f7f8bedf5 /src/platform/gui/xcb/Window.cpp
parent20fc1e5595e4f498d297c09934dbfcc005982f54 (diff)
downloadcru-fee3a550f00f6df4b341ca6ed47ef7e9a748a9ba.tar.gz
cru-fee3a550f00f6df4b341ca6ed47ef7e9a748a9ba.tar.bz2
cru-fee3a550f00f6df4b341ca6ed47ef7e9a748a9ba.zip
Implement xcb keyboard.
Diffstat (limited to 'src/platform/gui/xcb/Window.cpp')
-rw-r--r--src/platform/gui/xcb/Window.cpp25
1 files changed, 15 insertions, 10 deletions
diff --git a/src/platform/gui/xcb/Window.cpp b/src/platform/gui/xcb/Window.cpp
index 9562a390..7cbbce47 100644
--- a/src/platform/gui/xcb/Window.cpp
+++ b/src/platform/gui/xcb/Window.cpp
@@ -91,6 +91,12 @@ IEvent<NativeMouseWheelEventArgs> *XcbWindow::MouseWheelEvent() {
return &mouse_wheel_event_;
}
+IEvent<NativeKeyEventArgs> *XcbWindow::KeyDownEvent() {
+ return &key_down_event_;
+}
+
+IEvent<NativeKeyEventArgs> *XcbWindow::KeyUpEvent() { return &key_up_event_; }
+
std::optional<xcb_window_t> XcbWindow::GetXcbWindow() { return xcb_window_; }
xcb_window_t XcbWindow::DoCreateWindow() {
@@ -130,8 +136,7 @@ void XcbWindow::HandleEvent(xcb_generic_event_t *event) {
if (bp->detail >= 4 && bp->detail <= 7) {
NativeMouseWheelEventArgs args(30, Point(bp->event_x, bp->event_y),
- GetCurrentKeyModifiers(application_),
- false);
+ ConvertModifiers(bp->state), false);
if (bp->detail == 5 || bp->detail == 7) {
args.delta = -args.delta;
}
@@ -144,7 +149,7 @@ void XcbWindow::HandleEvent(xcb_generic_event_t *event) {
NativeMouseButtonEventArgs args(ConvertMouseButton(bp->detail),
Point(bp->event_x, bp->event_y),
- GetCurrentKeyModifiers(application_));
+ ConvertModifiers(bp->state));
mouse_down_event_.Raise(std::move(args));
break;
}
@@ -152,7 +157,7 @@ void XcbWindow::HandleEvent(xcb_generic_event_t *event) {
xcb_button_release_event_t *br = (xcb_button_release_event_t *)event;
NativeMouseButtonEventArgs args(ConvertMouseButton(br->detail),
Point(br->event_x, br->event_y),
- GetCurrentKeyModifiers(application_));
+ ConvertModifiers(br->state));
mouse_up_event_.Raise(std::move(args));
break;
}
@@ -179,16 +184,16 @@ void XcbWindow::HandleEvent(xcb_generic_event_t *event) {
}
case XCB_KEY_PRESS: {
xcb_key_press_event_t *kp = (xcb_key_press_event_t *)event;
- print_modifiers(kp->state);
-
- printf("Key pressed in window %" PRIu32 "\n", kp->event);
+ NativeKeyEventArgs args(XorgKeycodeToCruKeyCode(application_, kp->detail),
+ ConvertModifiers(kp->state));
+ key_down_event_.Raise(std::move(args));
break;
}
case XCB_KEY_RELEASE: {
xcb_key_release_event_t *kr = (xcb_key_release_event_t *)event;
- print_modifiers(kr->state);
-
- printf("Key released in window %" PRIu32 "\n", kr->event);
+ NativeKeyEventArgs args(XorgKeycodeToCruKeyCode(application_, kr->detail),
+ ConvertModifiers(kr->state));
+ key_up_event_.Raise(std::move(args));
break;
}
default: