diff --git a/src/lib/3rdparty/lineedit.cpp b/src/lib/3rdparty/lineedit.cpp index 7368416f6..fa58896be 100644 --- a/src/lib/3rdparty/lineedit.cpp +++ b/src/lib/3rdparty/lineedit.cpp @@ -23,6 +23,7 @@ #include #include #include +#include SideWidget::SideWidget(QWidget* parent) : QWidget(parent) @@ -185,6 +186,33 @@ int LineEdit::textMargin(WidgetPosition position) const return w + spacing * 2; } +int LineEdit::leftMargin() const +{ + return m_leftMargin; +} + +// http://stackoverflow.com/a/14424003 +void LineEdit::setTextFormat(const LineEdit::TextFormat &format) +{ + QList attributes; + + foreach (const QTextLayout::FormatRange &fr, format) { + QInputMethodEvent::AttributeType type = QInputMethodEvent::TextFormat; + int start = fr.start - cursorPosition(); + int length = fr.length; + QVariant value = fr.format; + attributes.append(QInputMethodEvent::Attribute(type, start, length, value)); + } + + QInputMethodEvent event(QString(), attributes); + QApplication::sendEvent(this, &event); +} + +void LineEdit::clearTextFormat() +{ + setTextFormat(TextFormat()); +} + void LineEdit::updateTextMargins() { int left = m_leftMargin < 0 ? m_leftWidget->sizeHint().width() : m_leftMargin; diff --git a/src/lib/3rdparty/lineedit.h b/src/lib/3rdparty/lineedit.h index ae4f409d0..ac8dbcfc8 100644 --- a/src/lib/3rdparty/lineedit.h +++ b/src/lib/3rdparty/lineedit.h @@ -47,6 +47,7 @@ * ============================================================ */ #include +#include #include "qzcommon.h" class QHBoxLayout; @@ -68,6 +69,8 @@ class QUPZILLA_EXPORT LineEdit : public QLineEdit Q_PROPERTY(int leftMargin READ leftMargin WRITE setLeftMargin) public: + typedef QList TextFormat; + enum WidgetPosition { LeftSide, RightSide @@ -81,8 +84,10 @@ public: void setWidgetSpacing(int spacing); int widgetSpacing() const; int textMargin(WidgetPosition position) const; + int leftMargin() const; - int leftMargin() { return m_leftMargin; } + void setTextFormat(const TextFormat &format); + void clearTextFormat(); public slots: void setLeftMargin(int margin); diff --git a/src/lib/navigation/completer/locationcompleter.cpp b/src/lib/navigation/completer/locationcompleter.cpp index cbe2aecd9..64cb0cfd0 100644 --- a/src/lib/navigation/completer/locationcompleter.cpp +++ b/src/lib/navigation/completer/locationcompleter.cpp @@ -37,7 +37,7 @@ LocationCompleter::LocationCompleter(QObject* parent) , m_window(0) , m_locationBar(0) , m_lastRefreshTimestamp(0) - , m_showingMostVisited(false) + , m_popupClosed(false) { if (!s_view) { s_model = new LocationCompleterModel; @@ -56,37 +56,22 @@ void LocationCompleter::setLocationBar(LocationBar* locationBar) m_locationBar = locationBar; } -QString LocationCompleter::domainCompletion() const -{ - return qzSettings->useInlineCompletion ? m_domainCompletion : QString(); -} - -bool LocationCompleter::isShowingMostVisited() const -{ - return m_showingMostVisited; -} - -bool LocationCompleter::isPopupVisible() const -{ - return s_view->isVisible(); -} - void LocationCompleter::closePopup() { - m_domainCompletion.clear(); - m_showingMostVisited = false; + m_popupClosed = true; s_view->close(); } void LocationCompleter::complete(const QString &string) { - m_domainCompletion.clear(); - m_showingMostVisited = string.isEmpty(); + QString trimmedStr = string.trimmed(); - LocationCompleterRefreshJob* job = new LocationCompleterRefreshJob(string); - connect(job, SIGNAL(finished()), this, SLOT(refreshJobFinished())); + // Indicates that new completion was requested by user + // Eg. popup was not closed yet this completion session + m_popupClosed = false; - emit domainCompletionChanged(); + LocationCompleterRefreshJob* job = new LocationCompleterRefreshJob(trimmedStr); + connect(job, SIGNAL(finished()), this, SLOT(refreshJobFinished())); } void LocationCompleter::showMostVisited() @@ -94,15 +79,25 @@ void LocationCompleter::showMostVisited() complete(QString()); } -void LocationCompleter::currentChanged(const QModelIndex &index) +void LocationCompleter::refreshJobFinished() { - QString completion = index.data().toString(); + LocationCompleterRefreshJob* job = qobject_cast(sender()); + Q_ASSERT(job); - if (completion.isEmpty()) { - completion = m_originalText; + // Don't show result of older jobs + // Also don't open the popup again when it was already closed + if (job->timestamp() > m_lastRefreshTimestamp && !m_popupClosed) { + s_model->setCompletions(job->completions()); + m_lastRefreshTimestamp = job->timestamp(); + + showPopup(); + + if (qzSettings->useInlineCompletion) { + emit showDomainCompletion(job->domainCompletion()); + } } - emit showCompletion(completion); + job->deleteLater(); } void LocationCompleter::slotPopupClosed() @@ -117,21 +112,15 @@ void LocationCompleter::slotPopupClosed() emit popupClosed(); } -void LocationCompleter::refreshJobFinished() +void LocationCompleter::currentChanged(const QModelIndex &index) { - LocationCompleterRefreshJob* job = qobject_cast(sender()); - Q_ASSERT(job); - - if (job->timestamp() > m_lastRefreshTimestamp) { - m_domainCompletion = job->domainCompletion(); - s_model->setCompletions(job->completions()); - m_lastRefreshTimestamp = job->timestamp(); + QString completion = index.data().toString(); - showPopup(); - emit domainCompletionChanged(); + if (completion.isEmpty()) { + completion = m_originalText; } - job->deleteLater(); + emit showCompletion(completion); } void LocationCompleter::indexActivated(const QModelIndex &index) diff --git a/src/lib/navigation/completer/locationcompleter.h b/src/lib/navigation/completer/locationcompleter.h index 6c3753ee4..c30354dd6 100644 --- a/src/lib/navigation/completer/locationcompleter.h +++ b/src/lib/navigation/completer/locationcompleter.h @@ -39,27 +39,22 @@ public: void setMainWindow(BrowserWindow* window); void setLocationBar(LocationBar* locationBar); - QString domainCompletion() const; - bool isShowingMostVisited() const; - - bool isPopupVisible() const; void closePopup(); +public slots: + void complete(const QString &string); + void showMostVisited(); + signals: void showCompletion(const QString &completion); + void showDomainCompletion(const QString &completion); void loadCompletion(); void clearCompletion(); - void domainCompletionChanged(); - void popupClosed(); -public slots: - void complete(const QString &string); - void showMostVisited(); - private slots: - void slotPopupClosed(); void refreshJobFinished(); + void slotPopupClosed(); void currentChanged(const QModelIndex &index); @@ -77,10 +72,9 @@ private: BrowserWindow* m_window; LocationBar* m_locationBar; - QString m_originalText; - QString m_domainCompletion; qint64 m_lastRefreshTimestamp; - bool m_showingMostVisited; + QString m_originalText; + bool m_popupClosed; static LocationCompleterView* s_view; static LocationCompleterModel* s_model; diff --git a/src/lib/navigation/completer/locationcompleterrefreshjob.cpp b/src/lib/navigation/completer/locationcompleterrefreshjob.cpp index 50859e664..de5200307 100644 --- a/src/lib/navigation/completer/locationcompleterrefreshjob.cpp +++ b/src/lib/navigation/completer/locationcompleterrefreshjob.cpp @@ -24,7 +24,12 @@ #include "bookmarks.h" #include -#include + +#if QT_VERSION >= 0x050000 +#include +#else +#include +#endif LocationCompleterRefreshJob::LocationCompleterRefreshJob(const QString &searchString) : QObject() @@ -197,15 +202,15 @@ void LocationCompleterRefreshJob::completeMostVisited() QString LocationCompleterRefreshJob::createDomainCompletion(const QString &completion) const { - QString str = completion; + // Make sure search string and completion matches - if (m_searchString.startsWith(QLatin1String("www."))) { - return str.mid(m_searchString.size()); + if (m_searchString.startsWith(QL1S("www.")) && !completion.startsWith(QL1S("www."))) { + return QL1S("www.") + completion; } - if (str.startsWith(QLatin1String("www."))) { - str = str.mid(4); + if (!m_searchString.startsWith(QL1S("www.")) && completion.startsWith(QL1S("www."))) { + return completion.mid(4); } - return str.mid(m_searchString.size()); + return completion; } diff --git a/src/lib/navigation/locationbar.cpp b/src/lib/navigation/locationbar.cpp index 8d24192c5..5901c7917 100644 --- a/src/lib/navigation/locationbar.cpp +++ b/src/lib/navigation/locationbar.cpp @@ -45,6 +45,8 @@ #include #include #include +#include +#include LocationBar::LocationBar(BrowserWindow* window) : LineEdit(window) @@ -56,9 +58,6 @@ LocationBar::LocationBar(BrowserWindow* window) , m_holdingAlt(false) , m_loadProgress(0) , m_progressVisible(false) - , m_forcePaintEvent(false) - , m_inlineCompletionVisible(false) - , m_popupClosed(false) { setObjectName("locationbar"); setDragEnabled(true); @@ -87,10 +86,15 @@ LocationBar::LocationBar(BrowserWindow* window) m_completer->setMainWindow(m_window); m_completer->setLocationBar(this); connect(m_completer, SIGNAL(showCompletion(QString)), this, SLOT(showCompletion(QString))); + connect(m_completer, SIGNAL(showDomainCompletion(QString)), this, SLOT(showDomainCompletion(QString))); connect(m_completer, SIGNAL(loadCompletion()), this, SLOT(urlEnter())); connect(m_completer, SIGNAL(clearCompletion()), this, SLOT(clearCompletion())); - connect(m_completer, SIGNAL(domainCompletionChanged()), this, SLOT(inlineCompletionChanged())); - connect(m_completer, SIGNAL(popupClosed()), this, SLOT(completionPopupClosed())); + + m_domainCompleterModel = new QStringListModel(this); + QCompleter* domainCompleter = new QCompleter(this); + domainCompleter->setCompletionMode(QCompleter::InlineCompletion); + domainCompleter->setModel(m_domainCompleterModel); + setCompleter(domainCompleter); connect(this, SIGNAL(textEdited(QString)), this, SLOT(textEdit())); connect(m_goIcon, SIGNAL(clicked(QPoint)), this, SLOT(urlEnter())); @@ -110,6 +114,11 @@ LocationBar::LocationBar(BrowserWindow* window) QTimer::singleShot(0, this, SLOT(updatePlaceHolderText())); } +TabbedWebView* LocationBar::webView() const +{ + return m_webView; +} + void LocationBar::setWebView(TabbedWebView* view) { m_webView = view; @@ -127,7 +136,8 @@ void LocationBar::setWebView(TabbedWebView* view) void LocationBar::setText(const QString &text) { LineEdit::setText(text); - m_forcePaintEvent = true; + + refreshTextFormat(); } void LocationBar::updatePlaceHolderText() @@ -140,8 +150,6 @@ void LocationBar::updatePlaceHolderText() void LocationBar::showCompletion(const QString &completion) { - m_inlineCompletionVisible = false; - LineEdit::setText(completion); // Move cursor to the end @@ -154,18 +162,12 @@ void LocationBar::clearCompletion() showUrl(m_webView->url()); } -void LocationBar::completionPopupClosed() -{ - m_inlineCompletionVisible = false; - m_popupClosed = true; -} - -void LocationBar::inlineCompletionChanged() +void LocationBar::showDomainCompletion(const QString &completion) { - repaint(); + m_domainCompleterModel->setStringList(QStringList() << completion); } -QUrl LocationBar::createUrl() +QUrl LocationBar::createUrl() const { QUrl urlToLoad; @@ -181,10 +183,6 @@ QUrl LocationBar::createUrl() } } - if (isInlineCompletionVisible()) { - urlToLoad = WebView::guessUrlFromString(text() + m_completer->domainCompletion()); - } - if (urlToLoad.isEmpty()) { QUrl guessedUrl = WebView::guessUrlFromString(text()); if (!guessedUrl.isEmpty()) { @@ -214,9 +212,43 @@ QString LocationBar::convertUrlToText(const QUrl &url) const return stringUrl; } -bool LocationBar::isInlineCompletionVisible() const +void LocationBar::refreshTextFormat() { - return m_inlineCompletionVisible && !m_completer->domainCompletion().isEmpty(); + if (!m_webView) { + return; + } + + TextFormat textFormat; + const QString hostName = m_webView->url().isEmpty() ? QUrl(text()).host() : m_webView->url().host(); + + if (!hostName.isEmpty()) { + const int hostPos = text().indexOf(hostName); + + if (hostPos > 0) { + QTextCharFormat format; + format.setForeground(Colors::mid(palette().color(QPalette::Base), palette().color(QPalette::Text), 1, 1)); + + QTextLayout::FormatRange schemePart; + schemePart.start = 0; + schemePart.length = hostPos; + schemePart.format = format; + + QTextLayout::FormatRange hostPart; + hostPart.start = hostPos; + hostPart.length = hostName.size(); + + QTextLayout::FormatRange remainingPart; + remainingPart.start = hostPos + hostName.size(); + remainingPart.length = text().size() - remainingPart.start; + remainingPart.format = format; + + textFormat.append(schemePart); + textFormat.append(hostPart); + textFormat.append(remainingPart); + } + } + + setTextFormat(textFormat); } void LocationBar::urlEnter() @@ -238,7 +270,6 @@ void LocationBar::textEdit() { if (!text().isEmpty()) { m_completer->complete(text()); - m_inlineCompletionVisible = true; } else { m_completer->closePopup(); @@ -332,8 +363,6 @@ void LocationBar::pasteAndGo() void LocationBar::contextMenuEvent(QContextMenuEvent* event) { - Q_UNUSED(event) - if (!m_pasteAndGoAction) { m_pasteAndGoAction = new QAction(QIcon::fromTheme("edit-paste"), tr("Paste And &Go"), this); m_pasteAndGoAction->setShortcut(QKeySequence("Ctrl+Shift+V")); @@ -392,6 +421,13 @@ void LocationBar::contextMenuEvent(QContextMenuEvent* event) tempMenu->deleteLater(); } +void LocationBar::showEvent(QShowEvent* event) +{ + LineEdit::showEvent(event); + + refreshTextFormat(); +} + void LocationBar::focusInEvent(QFocusEvent* event) { if (m_webView) { @@ -403,9 +439,29 @@ void LocationBar::focusInEvent(QFocusEvent* event) } } + clearTextFormat(); LineEdit::focusInEvent(event); } +void LocationBar::focusOutEvent(QFocusEvent* event) +{ + // Context menu or completer popup were opened + // Let's block focusOutEvent to trick QLineEdit and paint cursor properly + if (event->reason() == Qt::PopupFocusReason) { + return; + } + + LineEdit::focusOutEvent(event); + + hideGoButton(); + + if (text().trimmed().isEmpty()) { + clear(); + } + + refreshTextFormat(); +} + void LocationBar::dropEvent(QDropEvent* event) { if (event->mimeData()->hasUrls()) { @@ -439,24 +495,6 @@ void LocationBar::dropEvent(QDropEvent* event) LineEdit::dropEvent(event); } -void LocationBar::focusOutEvent(QFocusEvent* event) -{ - LineEdit::focusOutEvent(event); - - if (event->reason() == Qt::PopupFocusReason - || (!selectedText().isEmpty() && event->reason() != Qt::TabFocusReason)) { - return; - } - - m_popupClosed = false; - m_forcePaintEvent = true; - hideGoButton(); - - if (text().trimmed().isEmpty()) { - clear(); - } -} - void LocationBar::keyPressEvent(QKeyEvent* event) { switch (event->key()) { @@ -468,46 +506,12 @@ void LocationBar::keyPressEvent(QKeyEvent* event) } break; - case Qt::Key_A: - if (event->modifiers() == Qt::ControlModifier && m_inlineCompletionVisible) { - m_inlineCompletionVisible = false; - } - break; - case Qt::Key_Down: m_completer->complete(text()); break; - case Qt::Key_End: - case Qt::Key_Right: { - const QString completionText = m_completer->domainCompletion(); - if (m_inlineCompletionVisible && !completionText.isEmpty()) { - m_inlineCompletionVisible = false; - - setText(text() + completionText); - setCursorPosition(text().size()); - m_completer->closePopup(); - } - - if (m_completer->isPopupVisible()) { - m_completer->closePopup(); - } - break; - } - case Qt::Key_Left: - if (m_completer->isPopupVisible()) { - m_completer->closePopup(); - } - break; - - case Qt::Key_Delete: - if (m_inlineCompletionVisible) { - m_inlineCompletionVisible = false; - - update(); - event->accept(); - } + m_completer->closePopup(); break; case Qt::Key_Escape: @@ -626,102 +630,24 @@ void LocationBar::hideProgress() void LocationBar::paintEvent(QPaintEvent* event) { - QStyleOptionFrameV3 option; - initStyleOption(&option); - - int lm, tm, rm, bm; - getTextMargins(&lm, &tm, &rm, &bm); - - QRect contentsRect = style()->subElementRect(QStyle::SE_LineEditContents, &option, this); - contentsRect.adjust(lm, tm, -rm, -bm); - - const QFontMetrics fm = fontMetrics(); - const int x = contentsRect.x() + 4; - const int y = contentsRect.y() + (contentsRect.height() - fm.height() + 1) / 2; - const int width = contentsRect.width() - 6; - const int height = fm.height(); - const QRect textRect(x, y, width, height); - - QTextOption opt; - opt.setWrapMode(QTextOption::NoWrap); - - QPainter p(this); - p.setRenderHint(QPainter::Antialiasing, true); - p.setRenderHint(QPainter::TextAntialiasing, true); - - if (hasFocus() && m_inlineCompletionVisible) { - // Draw inline domain completion if available - const QString completionText = m_completer->domainCompletion(); - - if (!completionText.isEmpty()) { - QRect completionRect = textRect; - completionRect.setX(completionRect.x() + fm.width(text()) + 1); - completionRect.setWidth(fm.width(completionText) + 1); - - style()->drawPrimitive(QStyle::PE_PanelLineEdit, &option, &p, this); - // Text part - p.drawText(textRect, text(), opt); - // Completion part - p.fillRect(completionRect, palette().color(QPalette::Highlight)); - p.setPen(palette().color(QPalette::HighlightedText)); - p.drawText(completionRect, completionText, opt); - return; - } - } - - if (m_completer->isPopupVisible() && !m_completer->isShowingMostVisited()) { - // We need to draw cursor when popup is visible - // But don't paint it if we are just showing most visited sites - const int cursorWidth = style()->pixelMetric(QStyle::PM_TextCursorWidth, &option, this); - const int cursorHeight = fm.height(); - - QString textPart = text().left(cursorPosition()); - int cursorXpos = x + fontMetrics().width(textPart); - - QRect cursor = cursorRect(); - cursor.setX(cursorXpos + 1); - cursor.setWidth(cursorWidth); - cursor.setHeight(cursorHeight); - - style()->drawPrimitive(QStyle::PE_PanelLineEdit, &option, &p, this); + if (qzSettings->showLoadingProgress && m_progressVisible) { + QStyleOptionFrameV3 option; + initStyleOption(&option); - QRect actualTextRect = textRect; - actualTextRect.setWidth(fontMetrics().width(text()) + 1); + int lm, tm, rm, bm; + getTextMargins(&lm, &tm, &rm, &bm); - // When popup is visible, Ctrl + A (Select All) is the only way to select text - if (selectedText() == text()) { - p.fillRect(actualTextRect, palette().color(QPalette::Highlight)); - p.setPen(palette().color(QPalette::HighlightedText)); - } + QRect contentsRect = style()->subElementRect(QStyle::SE_LineEditContents, &option, this); + contentsRect.adjust(lm, tm, -rm, -bm); - p.drawText(actualTextRect, text(), opt); - - if (textRect.contains(cursor.center().x(), cursor.center().y())) { - p.fillRect(cursor, option.palette.text().color()); - } - return; - } - - if (/*hasFocus() ||*/ text().isEmpty() || m_forcePaintEvent) { LineEdit::paintEvent(event); - if (m_forcePaintEvent) { - m_forcePaintEvent = false; - update(); - } - return; - } - - style()->drawPrimitive(QStyle::PE_PanelLineEdit, &option, &p, this); - QPen oldPen = p.pen(); - - if (qzSettings->showLoadingProgress && m_progressVisible) { QColor bg = m_progressColor; if (!bg.isValid() || bg.alpha() == 0) { - bg = Colors::mid(palette().color(QPalette::Base), - palette().color(QPalette::Text), - m_progressStyle > 0 ? 4 : 8, 1); + bg = Colors::mid(palette().color(QPalette::Base), palette().color(QPalette::Text), m_progressStyle > 0 ? 4 : 8, 1); } + + QPainter p(this); p.setBrush(QBrush(bg)); QPen outlinePen(bg.darker(110), 0.8); @@ -748,57 +674,16 @@ void LocationBar::paintEvent(QPaintEvent* event) outlinePen.setWidthF(0.3); outlinePen.setColor(outlinePen.color().darker(130)); p.setPen(outlinePen); - QRect bar(contentsRect.x(), contentsRect.top() + 1, - contentsRect.width() * m_loadProgress / 100.0, 3); + QRect bar(contentsRect.x(), contentsRect.top() + 1, contentsRect.width() * m_loadProgress / 100.0, 3); p.drawRoundedRect(bar, 1, 1); break; } default: break; } - } - - p.setPen(oldPen); - const QString hostName = m_webView->url().host(); - QString currentText = text(); - QRect currentRect = textRect; - if (!hostName.isEmpty()) { - const int hostPos = currentText.indexOf(hostName); - if (hostPos > 0) { - QPen lightPen = oldPen; - QColor lightColor = Colors::mid(palette().color(QPalette::Base), - palette().color(QPalette::Text), - 1, 1); - lightPen.setColor(lightColor); - - p.setPen(lightPen); - currentText = text().mid(0, hostPos); - currentRect.setWidth(fm.width(currentText)); - p.drawText(currentRect, currentText, opt); - - p.setPen(oldPen); - currentRect.setX(currentRect.x() + currentRect.width()); - const int hostWidth = fm.width(hostName); - currentRect.setWidth(hostWidth); - p.drawText(currentRect, hostName, opt); - - p.setFont(font()); - currentText = text().mid(hostPos + hostName.length()); - currentRect.setX(currentRect.x() + hostWidth); - currentRect.setWidth(textRect.width() - currentRect.x() + textRect.x()); - p.setPen(lightPen); - - if (currentText.isRightToLeft()) { - // Insert unicode control characters: prepend LRE then append LRM+PDF - currentText.prepend(QChar(0x202A)).append(QChar(0x200E)).append(QChar(0x202C)); - } - } + return; } - p.drawText(currentRect, currentText, opt); -} - -LocationBar::~LocationBar() -{ + LineEdit::paintEvent(event); } diff --git a/src/lib/navigation/locationbar.h b/src/lib/navigation/locationbar.h index e4c1475fe..77799ae3a 100644 --- a/src/lib/navigation/locationbar.h +++ b/src/lib/navigation/locationbar.h @@ -23,6 +23,8 @@ #include "qzcommon.h" #include "lineedit.h" +class QStringListModel; + class BrowserWindow; class LineEdit; class LocationCompleter; @@ -43,21 +45,20 @@ class QUPZILLA_EXPORT LocationBar : public LineEdit public: explicit LocationBar(BrowserWindow* window); - ~LocationBar(); + TabbedWebView* webView() const; void setWebView(TabbedWebView* view); - TabbedWebView* webView() { return m_webView; } - -signals: - void loadUrl(const QUrl &url); public slots: - void showUrl(const QUrl &url); void setText(const QString &text); + void showUrl(const QUrl &url); protected: void paintEvent(QPaintEvent* event); +signals: + void loadUrl(const QUrl &url); + private slots: void textEdit(); void urlEnter(); @@ -70,9 +71,8 @@ private slots: void updatePlaceHolderText(); void showCompletion(const QString &completion); + void showDomainCompletion(const QString &completion); void clearCompletion(); - void completionPopupClosed(); - void inlineCompletionChanged(); void onLoadStarted(); void onLoadProgress(int progress); @@ -89,20 +89,22 @@ private: }; void contextMenuEvent(QContextMenuEvent* event); + void showEvent(QShowEvent* event); void focusInEvent(QFocusEvent* event); void focusOutEvent(QFocusEvent* event); void keyPressEvent(QKeyEvent* event); void keyReleaseEvent(QKeyEvent* event); void dropEvent(QDropEvent* event); - QUrl createUrl(); + QUrl createUrl() const; QString convertUrlToText(const QUrl &url) const; - bool isInlineCompletionVisible() const; + void refreshTextFormat(); void showGoButton(); void hideGoButton(); LocationCompleter* m_completer; + QStringListModel* m_domainCompleterModel; BookmarksIcon* m_bookmarkIcon; GoIcon* m_goIcon; @@ -123,10 +125,6 @@ private: bool m_progressVisible; ProgressStyle m_progressStyle; QColor m_progressColor; - - bool m_forcePaintEvent; - bool m_inlineCompletionVisible; - bool m_popupClosed; }; #endif // LOCATIONBAR_H diff --git a/src/lib/navigation/websearchbar.cpp b/src/lib/navigation/websearchbar.cpp index 43e866e04..9d279d556 100644 --- a/src/lib/navigation/websearchbar.cpp +++ b/src/lib/navigation/websearchbar.cpp @@ -114,6 +114,7 @@ void WebSearchBar::addSuggestions(const QStringList &list) if (qzSettings->showSearchSuggestions) { QStringList list_ = list.mid(0, 6); m_completerModel->setStringList(list_); + m_completer->complete(); } }