From 8a50e63ca21a1dc8d3b916f9728916eec8d8a010 Mon Sep 17 00:00:00 2001 From: Jean-Francois Dockes Date: Wed, 3 Mar 2021 17:58:09 +0100 Subject: [PATCH] Add F1 map for shortcut help --- src/qtgui/rclhelp.cpp | 65 +++++++++++++++++++++++++++-------------- src/qtgui/uiprefs.ui | 11 +++++-- src/qtgui/uiprefs_w.cpp | 4 +++ 3 files changed, 56 insertions(+), 24 deletions(-) diff --git a/src/qtgui/rclhelp.cpp b/src/qtgui/rclhelp.cpp index 6cb49ac4..5dcdfd01 100644 --- a/src/qtgui/rclhelp.cpp +++ b/src/qtgui/rclhelp.cpp @@ -19,6 +19,7 @@ #include #include +#include #include "recoll.h" #include "rclhelp.h" @@ -40,34 +41,54 @@ HelpClient::HelpClient(QObject *parent, const char *) bool HelpClient::eventFilter(QObject *obj, QEvent *event) { static time_t last_start; - if (event->type() == QEvent::KeyPress || - event->type() == QEvent::ShortcutOverride) { - // LOGDEB("HelpClient::eventFilter: " << ((int)event->type()) << "\n" ); + if (event->type() != QEvent::KeyPress && + event->type() != QEvent::ShortcutOverride) { + return false; + } QKeyEvent *ke = static_cast(event); - if (ke->key() == Qt::Key_F1 || ke->key() == Qt::Key_Help) { - if (obj->isWidgetType()) { - QWidget *widget = static_cast(obj)->focusWidget(); - map::iterator it = helpmap.end(); - while (widget) { - it = helpmap.find((const char *)widget->objectName().toUtf8()); + if (ke->key() != Qt::Key_F1 && ke->key() != Qt::Key_Help) { + return false; + } + + if (!obj->isWidgetType()) { + return false; + } + + QWidget *widget = dynamic_cast(obj); + if (nullptr == widget) { + // ?? + return false; + } + widget = widget->focusWidget(); + auto it = helpmap.end(); + std::string onm; + while (widget) { + QTabWidget *tw = dynamic_cast(widget); + if (nullptr != tw) { + onm = qs2utf8s(tw->currentWidget()->objectName()); + LOGDEB1("HelpClient: tab name " << onm << "\n"); + it = helpmap.find(onm); if (it != helpmap.end()) + break; + } + onm = qs2utf8s(widget->objectName()); + LOGDEB1("HelpClient: object name " << onm << "\n"); + it = helpmap.find(onm); + if (it != helpmap.end()) break; - widget = widget->parentWidget(); - } - if (time(0) - last_start > 5) { - last_start = time(0); - if (it != helpmap.end()) { - LOGDEB("HelpClient::eventFilter: " << (it->first) << "->" << (it->second) << "\n" ); + widget = widget->parentWidget(); + } + if (time(0) - last_start > 5) { + last_start = time(0); + if (it != helpmap.end()) { + LOGDEB("HelpClient::eventFilter: " << it->first << "->" << it->second << "\n"); startManual(it->second); - } else { - LOGDEB("HelpClient::eventFilter: no help section\n" ); + } else { + LOGDEB("HelpClient::eventFilter: no help section\n"); startManual(""); - } } - } - return true; } - } - return false; + + return true; } diff --git a/src/qtgui/uiprefs.ui b/src/qtgui/uiprefs.ui index 2c79da1a..322a893d 100644 --- a/src/qtgui/uiprefs.ui +++ b/src/qtgui/uiprefs.ui @@ -20,7 +20,7 @@ - 0 + 1 @@ -581,6 +581,13 @@ + + + + Use F1 to access the manual + + + @@ -1520,7 +1527,7 @@ May be slow for big documents. - + diff --git a/src/qtgui/uiprefs_w.cpp b/src/qtgui/uiprefs_w.cpp index fdb833c6..5e7979c8 100644 --- a/src/qtgui/uiprefs_w.cpp +++ b/src/qtgui/uiprefs_w.cpp @@ -57,6 +57,7 @@ #include "rclmain_w.h" #include "ptrans_w.h" #include "scbase.h" +#include "rclhelp.h" void UIPrefsDialog::init() { @@ -102,6 +103,9 @@ void UIPrefsDialog::init() connect(ssNoCompleteCB, SIGNAL(toggled(bool)), ssSearchOnCompleteCB, SLOT(setDisabled(bool))); connect(resetscPB, SIGNAL(clicked()), this, SLOT(resetShortcuts())); + + (void)new HelpClient(this); + HelpClient::installMap("sctab", "RCL.SEARCH.GUI.SHORTCUTS"); setFromPrefs(); }