UI/Qt: Keep autocomplete popup above web content
Make the autocomplete popup a native child widget on macOS so it can receive mouse events while overlapping the native QRhiWidget web content view. Keep it parented to the top-level browser widget so showing the popup does not steal keyboard focus from the address bar.
This commit is contained in:
parent
4f411dce7b
commit
9551af9a28
1 changed files with 9 additions and 0 deletions
|
|
@ -7,6 +7,7 @@
|
|||
*/
|
||||
|
||||
#include <AK/Base64.h>
|
||||
#include <AK/Platform.h>
|
||||
#include <LibWebView/Autocomplete.h>
|
||||
#include <UI/Qt/Autocomplete.h>
|
||||
#include <UI/Qt/ChromeStyle.h>
|
||||
|
|
@ -359,6 +360,11 @@ Autocomplete::Autocomplete(QLineEdit* anchor)
|
|||
// it never causes the address bar to lose keyboard focus.
|
||||
m_popup = new QFrame();
|
||||
m_popup->setObjectName("LadybirdAutocompletePopup");
|
||||
#if defined(AK_OS_MACOS)
|
||||
// The web content view is a native QRhiWidget on macOS, so the popup must
|
||||
// also be native to receive mouse events while overlapping it.
|
||||
m_popup->setAttribute(Qt::WA_NativeWindow);
|
||||
#endif
|
||||
m_popup->setFocusPolicy(Qt::NoFocus);
|
||||
m_popup->setFrameShape(QFrame::StyledPanel);
|
||||
m_popup->setFrameShadow(QFrame::Raised);
|
||||
|
|
@ -462,6 +468,7 @@ void Autocomplete::show_with_suggestions(Vector<WebView::AutocompleteSuggestion>
|
|||
position_popup();
|
||||
if (!m_popup->isVisible())
|
||||
m_popup->show();
|
||||
m_popup->raise();
|
||||
|
||||
int table_row = m_model->table_row_for_suggestion_index(selected_suggestion_index);
|
||||
if (table_row == -1)
|
||||
|
|
@ -510,6 +517,7 @@ bool Autocomplete::select_next_suggestion()
|
|||
if (!m_popup->isVisible()) {
|
||||
position_popup();
|
||||
m_popup->show();
|
||||
m_popup->raise();
|
||||
int row = step_to_selectable_row(-1, 1);
|
||||
if (row != -1)
|
||||
select_row(row);
|
||||
|
|
@ -532,6 +540,7 @@ bool Autocomplete::select_previous_suggestion()
|
|||
if (!m_popup->isVisible()) {
|
||||
position_popup();
|
||||
m_popup->show();
|
||||
m_popup->raise();
|
||||
int row = step_to_selectable_row(0, -1);
|
||||
if (row != -1)
|
||||
select_row(row);
|
||||
|
|
|
|||
Loading…
Reference in a new issue