Compare commits

...

3 Commits

Author SHA1 Message Date
Oskari Alaranta f7150056c4 Cleanup debug prints 2026-02-23 03:02:07 +02:00
Oskari Alaranta bb7632d53f Fix input event state and child window
state represents state just before the event, not current

set child window to null if wid == child_wid
2026-02-23 03:00:08 +02:00
Oskari Alaranta 862eaa205a Fix parenthesis being flipped 2026-02-23 02:58:48 +02:00
2 changed files with 25 additions and 15 deletions

View File

@ -941,7 +941,7 @@ static void on_window_focus_event(WINDOW wid, bool focused)
MUST(window.send_event(event, FocusChangeMask)); MUST(window.send_event(event, FocusChangeMask));
} }
static void send_key_button_pointer_event(WINDOW root_wid, BYTE detail, uint32_t event_mask, BYTE event_type) static void send_key_button_pointer_event(WINDOW root_wid, BYTE detail, uint32_t event_mask, BYTE event_type, KeyButMask state)
{ {
int32_t root_x, root_y; int32_t root_x, root_y;
int32_t event_x, event_y; int32_t event_x, event_y;
@ -986,12 +986,12 @@ static void send_key_button_pointer_event(WINDOW root_wid, BYTE detail, uint32_t
.time = static_cast<CARD32>(time(nullptr)), .time = static_cast<CARD32>(time(nullptr)),
.root = g_root.windowId, .root = g_root.windowId,
.event = wid, .event = wid,
.child = child_wid, .child = static_cast<CARD32>(child_wid == wid ? None : child_wid),
.rootX = static_cast<INT16>(root_x), .rootX = static_cast<INT16>(root_x),
.rootY = static_cast<INT16>(root_y), .rootY = static_cast<INT16>(root_y),
.eventX = static_cast<INT16>(event_x), .eventX = static_cast<INT16>(event_x),
.eventY = static_cast<INT16>(event_y), .eventY = static_cast<INT16>(event_y),
.state = static_cast<KeyButMask>(s_keymask | s_butmask), .state = state,
.sameScreen = xTrue, .sameScreen = xTrue,
} }
}}; }};
@ -1057,7 +1057,7 @@ static void on_mouse_move_event(WINDOW wid, int32_t x, int32_t y)
if (s_butmask & Button3Mask) event_mask |= Button3MotionMask; if (s_butmask & Button3Mask) event_mask |= Button3MotionMask;
if (s_butmask & Button4Mask) event_mask |= Button4MotionMask; if (s_butmask & Button4Mask) event_mask |= Button4MotionMask;
if (s_butmask & Button5Mask) event_mask |= Button5MotionMask; if (s_butmask & Button5Mask) event_mask |= Button5MotionMask;
send_key_button_pointer_event(wid, NotifyNormal, event_mask, MotionNotify); send_key_button_pointer_event(wid, NotifyNormal, event_mask, MotionNotify, s_keymask | s_butmask);
} }
static void on_mouse_button_event(WINDOW wid, uint8_t xbutton, bool pressed) static void on_mouse_button_event(WINDOW wid, uint8_t xbutton, bool pressed)
@ -1072,6 +1072,8 @@ static void on_mouse_button_event(WINDOW wid, uint8_t xbutton, bool pressed)
case Button5: mask = Button5Mask; break; case Button5: mask = Button5Mask; break;
} }
const auto state = s_keymask | s_butmask;
if (pressed) if (pressed)
s_butmask |= mask; s_butmask |= mask;
else else
@ -1081,7 +1083,8 @@ static void on_mouse_button_event(WINDOW wid, uint8_t xbutton, bool pressed)
wid, wid,
xbutton, xbutton,
pressed ? ButtonPressMask : ButtonReleaseMask, pressed ? ButtonPressMask : ButtonReleaseMask,
pressed ? ButtonPress : ButtonRelease pressed ? ButtonPress : ButtonRelease,
state
); );
} }
@ -1103,6 +1106,8 @@ static void on_key_event(WINDOW wid, LibGUI::EventPacket::KeyEvent::event_t even
s_pressed_keys[byte] &= ~(1 << bit); s_pressed_keys[byte] &= ~(1 << bit);
} }
const auto state = s_keymask | s_butmask;
s_keymask = 0; s_keymask = 0;
if (event.shift()) if (event.shift())
s_keymask |= ShiftMask; s_keymask |= ShiftMask;
@ -1117,7 +1122,8 @@ static void on_key_event(WINDOW wid, LibGUI::EventPacket::KeyEvent::event_t even
wid, wid,
xkeycode, xkeycode,
event.pressed() ? KeyPressMask : KeyReleaseMask, event.pressed() ? KeyPressMask : KeyReleaseMask,
event.pressed() ? KeyPress : KeyRelease event.pressed() ? KeyPress : KeyRelease,
state
); );
} }
@ -1288,18 +1294,20 @@ BAN::ErrorOr<void> handle_packet(Client& client_info, BAN::ConstByteSpan packet)
switch (i) switch (i)
{ {
case 0: case 0:
dprintln(" background-pixmap: {8h}", value);
if (value == None || value == ParentRelative) if (value == None || value == ParentRelative)
background = LibGUI::Texture::color_invisible; background = LibGUI::Texture::color_invisible;
else
dprintln(" {8h}: {8h}", 1 << i, value);
break; break;
case 1: case 1:
dprintln(" background-pixel: {8h}", value);
background = value; background = value;
break; break;
case 11: case 11:
dprintln(" event-mask: {8h}", value);
event_mask = value; event_mask = value;
break; break;
case 14: case 14:
dprintln(" cursor: {8h}", value);
cursor_id = value; cursor_id = value;
break; break;
default: default:
@ -1385,7 +1393,7 @@ BAN::ErrorOr<void> handle_packet(Client& client_info, BAN::ConstByteSpan packet)
gui_window_ptr->set_mouse_move_event_callback([wid](auto event) { gui_window_ptr->set_mouse_move_event_callback([wid](auto event) {
on_mouse_move_event(wid, event.x, event.y); on_mouse_move_event(wid, event.x, event.y);
}); });
gui_window_ptr->set_mouse_button_event_callback([&client_info, wid](auto event) { gui_window_ptr->set_mouse_button_event_callback([wid](auto event) {
uint8_t xbutton = 0; uint8_t xbutton = 0;
switch (event.button) switch (event.button)
{ {
@ -1446,21 +1454,23 @@ BAN::ErrorOr<void> handle_packet(Client& client_info, BAN::ConstByteSpan packet)
switch (i) switch (i)
{ {
case 0: case 0:
dprintln(" background-pixmap: {8h}", value);
if (value == None || value == ParentRelative) if (value == None || value == ParentRelative)
background = LibGUI::Texture::color_invisible; background = LibGUI::Texture::color_invisible;
else
dprintln(" {8h}: {8h}", 1 << i, value);
break; break;
case 1: case 1:
dprintln(" background-pixel: {8h}", value);
background = value; background = value;
break; break;
case 11: case 11:
dprintln(" event-mask: {8h}", value);
if (value != 0) if (value != 0)
TRY(window.event_masks.emplace_or_assign(&client_info, value)); TRY(window.event_masks.emplace_or_assign(&client_info, value));
else else
window.event_masks.remove(&client_info); window.event_masks.remove(&client_info);
break; break;
case 14: case 14:
dprintln(" cursor: {8h}", value);
cursor_id = value; cursor_id = value;
break; break;
default: default:

View File

@ -159,9 +159,9 @@ static constexpr uint32_t my_key_to_x_keysym(LibInput::Key key)
case Key::Half: case Key::Half:
return XK_onehalf; return XK_onehalf;
case Key::OpenParenthesis: case Key::OpenParenthesis:
return ')';
case Key::CloseParenthesis:
return '('; return '(';
case Key::CloseParenthesis:
return ')';
case Key::OpenSquareBracket: case Key::OpenSquareBracket:
return '['; return '[';
case Key::CloseSquareBracket: case Key::CloseSquareBracket: