mirror of
https://github.com/SerenityOS/serenity.git
synced 2026-11-08 17:49:04 -10:00
To support drag-and-drop for LibWeb, the drag events need the full mime data from WindowServer, not just the list of stringified mime types. We only provided the full data in the drop events. This patch provides the Core::MimeData type, as well as other mouse-event information needed for LibWeb (what buttons / modifiers are pressed). To do this, we add a specific WindowServer IPC to inform the Application of the event. We previously tagged mouse-move events with some drag data and formed the drag event client-side. That extra data is removed in favor of this new IPC.
71 lines
1.8 KiB
C++
71 lines
1.8 KiB
C++
/*
|
|
* Copyright (c) 2020-2023, Andreas Kling <[email protected]>
|
|
* Copyright (c) 2022, the SerenityOS developers.
|
|
*
|
|
* SPDX-License-Identifier: BSD-2-Clause
|
|
*/
|
|
|
|
#include <AK/StringBuilder.h>
|
|
#include <LibCore/MimeData.h>
|
|
#include <LibGUI/Action.h>
|
|
#include <LibGUI/Event.h>
|
|
|
|
namespace GUI {
|
|
|
|
DropEvent::DropEvent(Type type, Gfx::IntPoint position, MouseButton button, u32 buttons, u32 modifiers, ByteString const& text, NonnullRefPtr<Core::MimeData const> mime_data)
|
|
: Event(type)
|
|
, m_position(position)
|
|
, m_button(button)
|
|
, m_buttons(buttons)
|
|
, m_modifiers(modifiers)
|
|
, m_text(text)
|
|
, m_mime_data(move(mime_data))
|
|
{
|
|
}
|
|
|
|
DropEvent::~DropEvent() = default;
|
|
|
|
DragEvent::DragEvent(Type type, Gfx::IntPoint position, MouseButton button, u32 buttons, u32 modifiers, ByteString const& text, NonnullRefPtr<Core::MimeData const> mime_data)
|
|
: DropEvent(type, position, button, buttons, modifiers, text, move(mime_data))
|
|
{
|
|
}
|
|
|
|
DragEvent::~DragEvent() = default;
|
|
|
|
ByteString KeyEvent::to_byte_string() const
|
|
{
|
|
Vector<ByteString, 8> parts;
|
|
|
|
if (m_modifiers & Mod_Ctrl)
|
|
parts.append("Ctrl");
|
|
if (m_modifiers & Mod_Shift)
|
|
parts.append("Shift");
|
|
if (m_modifiers & Mod_Alt)
|
|
parts.append("Alt");
|
|
if (m_modifiers & Mod_Super)
|
|
parts.append("Super");
|
|
|
|
if (auto* key_name = key_code_to_string(static_cast<KeyCode>(m_key)))
|
|
parts.append(key_name);
|
|
else
|
|
parts.append("(Invalid)");
|
|
|
|
StringBuilder builder;
|
|
for (size_t i = 0; i < parts.size(); ++i) {
|
|
builder.append(parts[i]);
|
|
if (i != parts.size() - 1)
|
|
builder.append('+');
|
|
}
|
|
return builder.to_byte_string();
|
|
}
|
|
|
|
ActionEvent::ActionEvent(Type type, Action& action)
|
|
: Event(type)
|
|
, m_action(action)
|
|
{
|
|
}
|
|
|
|
ActionEvent::~ActionEvent() = default;
|
|
|
|
}
|