[LyX/master] Synchronise the return of GuiInputMethod::inputMethodQuery()
Koji Yokota <[email protected]> Fri, 08 May 2026 00:17:15 +0000
| Newsgroups | gmane.editors.lyx.cvs |
|---|---|
| Message-ID | <[email protected]> |
commit 2a40e522575f3bac3491e48cacc8ad18a8d5c4a5 Author: Koji Yokota <[email protected]> Date: Fri May 8 09:17:07 2026 +0900 Synchronise the return of GuiInputMethod::inputMethodQuery() --- src/frontends/qt/GuiInputMethod.cpp | 33 ++++++++++++++++----------------- src/frontends/qt/GuiInputMethod.h | 3 +-- src/frontends/qt/GuiWorkArea.cpp | 21 +-------------------- src/frontends/qt/GuiWorkArea.h | 1 - 4 files changed, 18 insertions(+), 40 deletions(-) diff --git a/src/frontends/qt/GuiInputMethod.cpp b/src/frontends/qt/GuiInputMethod.cpp index e28ca2fdda..d3aae50069 100644 --- a/src/frontends/qt/GuiInputMethod.cpp +++ b/src/frontends/qt/GuiInputMethod.cpp @@ -904,13 +904,12 @@ int GuiInputMethod::shiftFromCaretToSegmentHead() /* * * * Input Method Query * */ -void GuiInputMethod::inputMethodQuery(Qt::InputMethodQuery query) +QVariant GuiInputMethod::inputMethodQuery(Qt::InputMethodQuery query) { // input method is not ready yet if (d->buffer_view_->inputMethod() == nullptr) { QVariant null_answer; - Q_EMIT queryProcessed(null_answer); - return; + return null_answer; } docstring msg = "Responded to query " + @@ -922,7 +921,7 @@ void GuiInputMethod::inputMethodQuery(Qt::InputMethodQuery query) LYXERR(Debug::KEY, msg << "\"true\""); else LYXERR(Debug::KEY, msg << "\"false\""); - Q_EMIT queryProcessed(d->im_state_.enabled_); + return d->im_state_.enabled_; break; } // this is the CJK-specific composition window position and @@ -942,12 +941,12 @@ void GuiInputMethod::inputMethodQuery(Qt::InputMethodQuery query) LYXERR(Debug::KEY, msg << " x:" << rect->x() << " y:" << rect->y() << " w:" << rect->width() << " h:" << rect->height()); - Q_EMIT queryProcessed(*rect); + return *rect; break; } case Qt::ImCurrentSelection: { LYXERR(Debug::KEY, msg << d->cur_->selectionAsString(false)); - Q_EMIT queryProcessed(toqstr(d->cur_->selectionAsString(false))); + return toqstr(d->cur_->selectionAsString(false)); break; } // plain text around the input area, for example the current paragraph @@ -960,7 +959,7 @@ void GuiInputMethod::inputMethodQuery(Qt::InputMethodQuery query) else LYXERR(Debug::KEY, msg << "\"" << d->im_state_.surrounding_text_.substr(0, 20) << "...\""); - Q_EMIT queryProcessed(toqstr(d->im_state_.surrounding_text_)); + return toqstr(d->im_state_.surrounding_text_); break; } // logical position of the cursor within the entire document @@ -969,7 +968,7 @@ void GuiInputMethod::inputMethodQuery(Qt::InputMethodQuery query) // change in the document setAbsolutePosition(*d->cur_); LYXERR(Debug::KEY, msg << std::dec << d->abs_pos_); - Q_EMIT queryProcessed((qlonglong)d->abs_pos_); + return (qlonglong)d->abs_pos_; break; } // plain text before the cursor @@ -983,7 +982,7 @@ void GuiInputMethod::inputMethodQuery(Qt::InputMethodQuery query) LYXERR(Debug::KEY, msg << "\"..." << d->im_state_.text_before_.substr(0, 20) << "\""); QVariant str(toqstr(d->im_state_.text_before_)); - Q_EMIT queryProcessed(str); + return str; break; } // plain text after the cursor @@ -997,21 +996,21 @@ void GuiInputMethod::inputMethodQuery(Qt::InputMethodQuery query) LYXERR(Debug::KEY, msg << "\"..." << d->im_state_.text_after_.substr(0, 20) << "\""); QVariant str(toqstr(d->im_state_.text_after_)); - Q_EMIT queryProcessed(str); + return str; break; } // logical position of the cursor within the text surrounding the input area case Qt::ImCursorPosition: { updatePosAndSurroundingText(); LYXERR(Debug::KEY, msg << std::dec << d->cur_->pos()); - Q_EMIT queryProcessed((qlonglong)d->cur_->pos()); + return (qlonglong)d->cur_->pos(); break; } // position of the selection anchor case Qt::ImAnchorPosition: { updatePosAndSurroundingText(); LYXERR(Debug::KEY, msg << std::dec << (unsigned int)d->anchor_pos_); - Q_EMIT queryProcessed(QVariant((unsigned int)d->anchor_pos_)); + return QVariant((unsigned int)d->anchor_pos_); break; } case Qt::ImInputItemClipRectangle: { @@ -1022,7 +1021,7 @@ void GuiInputMethod::inputMethodQuery(Qt::InputMethodQuery query) LYXERR(Debug::KEY, msg << "(x,y,w,h) = " << viewport.x() << ", " << viewport.y() << ", " << viewport.width() << ", " << viewport.height() << ")"); - Q_EMIT queryProcessed(viewport); + return viewport; break; } // hints for input method on expected input @@ -1030,7 +1029,7 @@ void GuiInputMethod::inputMethodQuery(Qt::InputMethodQuery query) LYXERR(Debug::KEY, msg << "0x" << std::hex << d->work_area_->inputMethodHints() << std::dec); - Q_EMIT queryProcessed((qlonglong)d->work_area_->inputMethodHints()); + return (qlonglong)d->work_area_->inputMethodHints(); break; } // @@ -1038,7 +1037,7 @@ void GuiInputMethod::inputMethodQuery(Qt::InputMethodQuery query) QLocale locale(toqstr(d->cur_->getFont().language()->code())); QString lang = locale.languageToString(locale.language()); LYXERR(Debug::KEY, msg << lang); - Q_EMIT queryProcessed(lang); + return lang; break; } // Qt::ImAnchorRectangle holds the selection rectangle in preedit. @@ -1049,14 +1048,14 @@ void GuiInputMethod::inputMethodQuery(Qt::InputMethodQuery query) << " y:" << d->im_state_.anchor_rect_.y() << " w:" << d->im_state_.anchor_rect_.width() << " h:" << d->im_state_.anchor_rect_.height()); - Q_EMIT queryProcessed(d->im_state_.anchor_rect_); + return d->im_state_.anchor_rect_; break; } default: { QVariant null; LYXERR(Debug::KEY, "Unsupported query by LyX came in: " << inputMethodQueryFlagsAsString(query)); - Q_EMIT queryProcessed(null); + return null; } } } diff --git a/src/frontends/qt/GuiInputMethod.h b/src/frontends/qt/GuiInputMethod.h index 87e5e3d8f9..66cdeea033 100644 --- a/src/frontends/qt/GuiInputMethod.h +++ b/src/frontends/qt/GuiInputMethod.h @@ -121,14 +121,13 @@ public: bool canWrapAnywhere(pos_type const) override; Q_SIGNALS: void preeditProcessed(QInputMethodEvent* ev); - void queryProcessed(QVariant response); void inputMethodStateChanged(Qt::InputMethodQueries); public Q_SLOTS: /// Process incoming preedit string void inputMethodEvent(QInputMethodEvent* ev); /// Process incoming input method query - void inputMethodQuery(Qt::InputMethodQuery query); + QVariant inputMethodQuery(Qt::InputMethodQuery query); /// Turn off IM in math mode and command phase and turn it on otherwise void toggleInputMethodAcceptance() override; /// Enable the input method diff --git a/src/frontends/qt/GuiWorkArea.cpp b/src/frontends/qt/GuiWorkArea.cpp index 4b36d1b73c..fe937f8860 100644 --- a/src/frontends/qt/GuiWorkArea.cpp +++ b/src/frontends/qt/GuiWorkArea.cpp @@ -188,8 +188,6 @@ void GuiWorkArea::init() connect(&d->caret_timeout_, SIGNAL(timeout()), this, SLOT(toggleCaret())); connect(d->im_, &GuiInputMethod::preeditProcessed, this, &GuiWorkArea::flagPreedit); - connect(d->im_, &GuiInputMethod::queryProcessed, - this, &GuiWorkArea::receiveIMQueryResponse); connect(guiApp, &GuiApplication::keyCommandStateSet, this, &GuiWorkArea::onKeyCommandStateSet); connect(this, &GuiWorkArea::keyCommandStateSet, @@ -1396,18 +1394,7 @@ void GuiWorkArea::inputMethodEvent(QInputMethodEvent * ev) QVariant GuiWorkArea::inputMethodQuery(Qt::InputMethodQuery query) const { - // ask a query - d->im_->inputMethodQuery(query); - - // wait for the response and return - clock_t start = clock(); - while (!d->im_query_responded_) { - // time out in one second - if ((clock() - start)/CLOCKS_PER_SEC >= 1) break; - } - d->im_query_responded_ = false; - - return d->im_query_response_; + return d->im_->inputMethodQuery(query); } @@ -1456,12 +1443,6 @@ void GuiWorkArea::flagPreedit(QInputMethodEvent* ev) } -void GuiWorkArea::receiveIMQueryResponse(QVariant response) { - d->im_query_response_ = response; - // notify the response - d->im_query_responded_ = true; -} - GuiCompleter & GuiWorkArea::completer() { return *d->completer_; diff --git a/src/frontends/qt/GuiWorkArea.h b/src/frontends/qt/GuiWorkArea.h index e007135246..d9bca99ceb 100644 --- a/src/frontends/qt/GuiWorkArea.h +++ b/src/frontends/qt/GuiWorkArea.h @@ -136,7 +136,6 @@ private Q_SLOTS: void fixVerticalScrollBar(); void flagPreedit(QInputMethodEvent* ev); - void receiveIMQueryResponse(QVariant); private: /// Update window titles of all users. -- lyx-cvs mailing list [email protected] https://lists.lyx.org/mailman/listinfo/lyx-cvs