1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 17:17:44 +00:00

Ladybird: Add autocomplete to LocationEdit

This commit is contained in:
Cameron Youell 2023-05-31 11:44:16 +10:00 committed by Sam Atkins
parent 8fcf42f684
commit d68433653a
9 changed files with 453 additions and 8 deletions

View file

@ -5,9 +5,11 @@
*/
#include "LocationEdit.h"
#include "Settings.h"
#include "StringUtils.h"
#include <AK/URL.h>
#include <QCoreApplication>
#include <LibPublicSuffix/URL.h>
#include <QApplication>
#include <QPalette>
#include <QTextLayout>
#include <QTimer>
@ -17,8 +19,50 @@ namespace Ladybird {
LocationEdit::LocationEdit(QWidget* parent)
: QLineEdit(parent)
{
setPlaceholderText("Enter web address");
connect(this, &QLineEdit::editingFinished, this, &LocationEdit::clearFocus);
setPlaceholderText("Search or enter web address");
m_autocomplete = make<AutoComplete>(this);
this->setCompleter(m_autocomplete);
connect(m_autocomplete, &AutoComplete::activated, [&](QModelIndex const&) {
emit returnPressed();
});
connect(this, &QLineEdit::returnPressed, [&] {
clearFocus();
if (!Settings::the()->enable_search())
return;
auto query = ak_deprecated_string_from_qstring(text());
if (auto result = PublicSuffix::absolute_url(query); !result.is_error())
return;
auto search_url_or_error = AutoComplete::search_url_from_query(query);
if (search_url_or_error.is_error()) {
dbgln("LocationEdit::returnPressed: search_url_from_query failed: {}", search_url_or_error.error());
return;
}
auto search_url = search_url_or_error.release_value();
setText(qstring_from_ak_string(search_url));
});
connect(this, &QLineEdit::textEdited, [this] {
if (!Settings::the()->enable_autocomplete()) {
m_autocomplete->clear_suggestions();
return;
}
auto cursor_position = cursorPosition();
auto result = m_autocomplete->get_search_suggestions(ak_deprecated_string_from_qstring(text()));
if (result.is_error()) {
dbgln("LocationEdit::textEdited: get_search_suggestions failed: {}", result.error());
return;
}
setCursorPosition(cursor_position);
});
connect(this, &QLineEdit::textChanged, this, &LocationEdit::highlight_location);
}