1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-30 21:58:10 +00:00

WindowServer+LibGUI: Notify hovered window when drag&drop is cancelled

The hovered window may want to react to a drag being cancelled, even
if the drag originated in some other window.
This commit is contained in:
Andreas Kling 2021-01-08 23:47:53 +01:00
parent 9acb72e804
commit c17fa67f51
2 changed files with 9 additions and 2 deletions

View file

@ -1084,8 +1084,15 @@ void WindowManager::event(Core::Event& event)
auto& key_event = static_cast<const KeyEvent&>(event);
m_keyboard_modifiers = key_event.modifiers();
// Escape key cancels an ongoing drag.
if (key_event.type() == Event::KeyDown && key_event.key() == Key_Escape && m_dnd_client) {
// Notify the drag-n-drop client that the drag was cancelled.
m_dnd_client->post_message(Messages::WindowClient::DragCancelled());
// Also notify the currently hovered window (if any) that the ongoing drag was cancelled.
if (m_hovered_window && m_hovered_window->client() && m_hovered_window->client() != m_dnd_client)
m_hovered_window->client()->post_message(Messages::WindowClient::DragCancelled());
end_dnd_drag();
return;
}