30SearchWidget::SearchWidget(QHelpSearchEngine *engine, QWidget *parent)
33 , searchEngine(engine)
36 QVBoxLayout *vLayout =
new QVBoxLayout(
this);
38 resultWidget = searchEngine->resultWidget();
39 QHelpSearchQueryWidget *queryWidget = searchEngine->queryWidget();
41 vLayout->addWidget(queryWidget);
42 vLayout->addWidget(resultWidget);
44 setFocusProxy(queryWidget);
46 connect(queryWidget, &QHelpSearchQueryWidget::search,
47 this, &SearchWidget::search);
48 connect(resultWidget, &QHelpSearchResultWidget::requestShowLink,
49 this, &SearchWidget::requestShowLink);
51 connect(searchEngine, &QHelpSearchEngine::searchingStarted,
52 this, &SearchWidget::searchingStarted);
53 connect(searchEngine, &QHelpSearchEngine::searchingFinished,
54 this, &SearchWidget::searchingFinished);
56 QTextBrowser* browser = resultWidget->findChild<QTextBrowser*>();
58 browser->viewport()->installEventFilter(
this);
122 QTextBrowser* browser = resultWidget->findChild<QTextBrowser*>();
123 if (browser && o == browser->viewport()
124 && e->type() == QEvent::MouseButtonRelease){
125 QMouseEvent *me =
static_cast<QMouseEvent*>(e);
126 QUrl link = resultWidget->linkAt(me->pos());
127 if (!link.isEmpty() || link.isValid()) {
128 bool controlPressed = me->modifiers() & Qt::ControlModifier;
129 if ((me->button() == Qt::LeftButton && controlPressed)
130 || (me->button() == Qt::MiddleButton)) {
131 emit requestShowLinkInNewTab(link);
135 return QWidget::eventFilter(o,e);
151 QPoint point = contextMenuEvent->globalPos();
153 QTextBrowser* browser = resultWidget->findChild<QTextBrowser*>();
157 point = browser->mapFromGlobal(point);
158 if (!browser->rect().contains(point,
true))
161 QUrl link = browser->anchorAt(point);
164#if QT_CONFIG(clipboard)
165 keySeq = QKeySequence::Copy;
166 QAction *copyAction = menu.addAction(tr(
"&Copy") + u'\t' +
167 keySeq.toString(QKeySequence::NativeText));
168 copyAction->setEnabled(QTextCursor(browser->textCursor()).hasSelection());
170 QAction *copyAnchorAction = menu.addAction(tr(
"Copy &Link Location"));
171 copyAnchorAction->setEnabled(!link.isEmpty() && link.isValid());
174 keySeq = QKeySequence(Qt::CTRL);
175 QAction *newTabAction = menu.addAction(tr(
"Open Link in New Tab") + u'\t'
176 + keySeq.toString(QKeySequence::NativeText) +
"LMB"_L1);
177 newTabAction->setEnabled(!link.isEmpty() && link.isValid());
181 keySeq = QKeySequence::SelectAll;
182 QAction *selectAllAction =
183 menu.addAction(tr(
"Select All") + u'\t' + keySeq.toString(QKeySequence::NativeText));
185 QAction *usedAction = menu.exec(mapToGlobal(contextMenuEvent->pos()));
186#if QT_CONFIG(clipboard)
187 if (usedAction == copyAction) {
188 QTextCursor cursor = browser->textCursor();
189 if (!cursor.isNull() && cursor.hasSelection()) {
190 QString selectedText = cursor.selectedText();
191 QMimeData *data =
new QMimeData();
192 data->setText(selectedText);
193 QApplication::clipboard()->setMimeData(data);
196 else if (usedAction == copyAnchorAction) {
197 QApplication::clipboard()->setText(link.toString());
201 if (usedAction == newTabAction) {
202 emit requestShowLinkInNewTab(link);
204 else if (usedAction == selectAllAction) {
205 browser->selectAll();
static void activateCurrentBrowser()