LibWeb+LibWebView+WebContent: Add a setting to control primary pasting
This commit is contained in:
parent
218d82cb65
commit
af7b2b5e8a
7 changed files with 41 additions and 7 deletions
|
|
@ -378,6 +378,16 @@
|
|||
Scroll pages by pressing the middle mouse button and moving the mouse.
|
||||
</p>
|
||||
</div>
|
||||
<hr />
|
||||
<div class="card-group">
|
||||
<div class="inline-container">
|
||||
<label for="enable-primary-paste">Enable primary pasting</label>
|
||||
<input id="enable-primary-paste" type="checkbox" switch />
|
||||
</div>
|
||||
<p class="description">
|
||||
Paste text from the clipboard when the middle mouse button is clicked.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
const enableAutoscroll = document.querySelector("#enable-autoscroll");
|
||||
const enablePrimaryPaste = document.querySelector("#enable-primary-paste");
|
||||
|
||||
let BROWSING_BEHAVIOR = {};
|
||||
|
||||
|
|
@ -6,12 +7,18 @@ const loadSettings = settings => {
|
|||
BROWSING_BEHAVIOR = settings.browsingBehavior || {};
|
||||
|
||||
enableAutoscroll.checked = !!BROWSING_BEHAVIOR.enableAutoscroll;
|
||||
enablePrimaryPaste.checked = !!BROWSING_BEHAVIOR.enablePrimaryPaste;
|
||||
};
|
||||
|
||||
enableAutoscroll.addEventListener("change", () => {
|
||||
BROWSING_BEHAVIOR.enableAutoscroll = enableAutoscroll.checked;
|
||||
ladybird.sendMessage("setBrowsingBehavior", BROWSING_BEHAVIOR);
|
||||
});
|
||||
function addChangeHandler(input, name) {
|
||||
input.addEventListener("change", () => {
|
||||
BROWSING_BEHAVIOR[name] = input.checked;
|
||||
ladybird.sendMessage("setBrowsingBehavior", BROWSING_BEHAVIOR);
|
||||
});
|
||||
}
|
||||
|
||||
addChangeHandler(enableAutoscroll, "enableAutoscroll");
|
||||
addChangeHandler(enablePrimaryPaste, "enablePrimaryPaste");
|
||||
|
||||
document.addEventListener("WebUIMessage", event => {
|
||||
if (event.detail.name === "loadSettings") {
|
||||
|
|
|
|||
|
|
@ -1501,6 +1501,10 @@ static bool is_middle_click_paste_target(DOM::Node const& node)
|
|||
|
||||
bool EventHandler::maybe_request_paste_for_middle_click(DOM::Document& document, CSSPixelPoint visual_viewport_position)
|
||||
{
|
||||
auto& page = m_navigable->page();
|
||||
if (!page.enable_primary_paste())
|
||||
return false;
|
||||
|
||||
auto cursor_hit = paint_root()->hit_test(visual_viewport_position, Painting::HitTestType::TextCursor);
|
||||
if (!cursor_hit.has_value())
|
||||
return false;
|
||||
|
|
@ -1519,7 +1523,7 @@ bool EventHandler::maybe_request_paste_for_middle_click(DOM::Document& document,
|
|||
return false;
|
||||
|
||||
target->set_selection_anchor(*hit_node, cursor_hit->index_in_node);
|
||||
m_navigable->page().client().page_did_request_paste();
|
||||
page.client().page_did_request_paste();
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -132,6 +132,9 @@ public:
|
|||
bool enable_autoscroll() const { return m_enable_autoscroll; }
|
||||
void set_enable_autoscroll(bool b) { m_enable_autoscroll = b; }
|
||||
|
||||
bool enable_primary_paste() const { return m_enable_primary_paste; }
|
||||
void set_enable_primary_paste(bool b) { m_enable_primary_paste = b; }
|
||||
|
||||
bool async_scrolling_enabled() const { return m_async_scrolling_enabled; }
|
||||
void set_async_scrolling_enabled(bool b) { m_async_scrolling_enabled = b; }
|
||||
u64 wheel_event_listener_state_generation() const { return m_wheel_event_listener_state_generation; }
|
||||
|
|
@ -295,6 +298,7 @@ private:
|
|||
bool m_is_scripting_enabled { true };
|
||||
bool m_should_block_pop_ups { true };
|
||||
bool m_enable_autoscroll { true };
|
||||
bool m_enable_primary_paste { true };
|
||||
bool m_async_scrolling_enabled { false };
|
||||
u64 m_wheel_event_listener_state_generation { 0 };
|
||||
|
||||
|
|
|
|||
|
|
@ -35,6 +35,7 @@ static auto DEFAULT_LANGUAGE = "en"_string;
|
|||
|
||||
static constexpr auto BROWSING_BEHAVIOR_KEY = "browsingBehavior"sv;
|
||||
static constexpr auto ENABLE_AUTOSCROLL_KEY = "enableAutoscroll"sv;
|
||||
static constexpr auto ENABLE_PRIMARY_PASTE_KEY = "enablePrimaryPaste"sv;
|
||||
|
||||
static constexpr auto SEARCH_ENGINE_KEY = "searchEngine"sv;
|
||||
static constexpr auto SEARCH_ENGINE_CUSTOM_KEY = "custom"sv;
|
||||
|
|
@ -182,6 +183,7 @@ JsonValue Settings::serialize_json() const
|
|||
|
||||
JsonObject browsing_behavior;
|
||||
browsing_behavior.set(ENABLE_AUTOSCROLL_KEY, m_browsing_behavior.enable_autoscroll);
|
||||
browsing_behavior.set(ENABLE_PRIMARY_PASTE_KEY, m_browsing_behavior.enable_primary_paste);
|
||||
settings.set(BROWSING_BEHAVIOR_KEY, move(browsing_behavior));
|
||||
|
||||
JsonArray custom_search_engines;
|
||||
|
|
@ -355,6 +357,8 @@ BrowsingBehavior Settings::parse_browsing_behavior(JsonValue const& settings)
|
|||
|
||||
if (auto enable_autoscroll = settings.as_object().get_bool(ENABLE_AUTOSCROLL_KEY); enable_autoscroll.has_value())
|
||||
browsing_behavior.enable_autoscroll = *enable_autoscroll;
|
||||
if (auto enable_primary_paste = settings.as_object().get_bool(ENABLE_PRIMARY_PASTE_KEY); enable_primary_paste.has_value())
|
||||
browsing_behavior.enable_primary_paste = *enable_primary_paste;
|
||||
|
||||
return browsing_behavior;
|
||||
}
|
||||
|
|
@ -609,6 +613,7 @@ template<>
|
|||
ErrorOr<void> encode(Encoder& encoder, WebView::BrowsingBehavior const& browsing_behavior)
|
||||
{
|
||||
TRY(encoder.encode(browsing_behavior.enable_autoscroll));
|
||||
TRY(encoder.encode(browsing_behavior.enable_primary_paste));
|
||||
|
||||
return {};
|
||||
}
|
||||
|
|
@ -617,8 +622,9 @@ template<>
|
|||
ErrorOr<WebView::BrowsingBehavior> decode(Decoder& decoder)
|
||||
{
|
||||
auto enable_autoscroll = TRY(decoder.decode<bool>());
|
||||
auto enable_primary_paste = TRY(decoder.decode<bool>());
|
||||
|
||||
return WebView::BrowsingBehavior { enable_autoscroll };
|
||||
return WebView::BrowsingBehavior { enable_autoscroll, enable_primary_paste };
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@ namespace WebView {
|
|||
|
||||
struct BrowsingBehavior {
|
||||
bool enable_autoscroll { true };
|
||||
bool enable_primary_paste { true };
|
||||
};
|
||||
|
||||
struct SiteSetting {
|
||||
|
|
|
|||
|
|
@ -1283,8 +1283,10 @@ void ConnectionFromClient::set_preferred_languages(u64, Vector<String> preferred
|
|||
|
||||
void ConnectionFromClient::set_browsing_behavior(u64 page_id, WebView::BrowsingBehavior browsing_behavior)
|
||||
{
|
||||
if (auto page = this->page(page_id); page.has_value())
|
||||
if (auto page = this->page(page_id); page.has_value()) {
|
||||
page->page().set_enable_autoscroll(browsing_behavior.enable_autoscroll);
|
||||
page->page().set_enable_primary_paste(browsing_behavior.enable_primary_paste);
|
||||
}
|
||||
}
|
||||
|
||||
void ConnectionFromClient::set_enable_global_privacy_control(u64, bool enable)
|
||||
|
|
|
|||
Loading…
Reference in a new issue