Use two separate options to control the behavior of virtual keyboard when the object gets focus or loses focus

In some GUI frameworks like Qt, it provides good support to show virtual keyboard
and provides poor support to hide virtual keyboard. So Qt IM module has the need to
disable the default behavior of virtual keyboard when the object get focus and enable
the default behavior of virtual keyboard when the object loses focus. Qt can decide if
it should show virtual keyboard when the object gets focus. However, fcitx will hide
virtual keyboard when the object loses focus.
This commit is contained in:
liulinsong 2022-11-16 15:09:28 +08:00 committed by hanteng
parent 36ebc2b4bb
commit 102d8a0517
5 changed files with 29 additions and 12 deletions

View File

@ -129,10 +129,12 @@ public:
return method(std::move(message));
});
setClientControlVirtualkeyboardVisibility(
getArgument(args, "clientControlVirtualkeyboardVisibility",
setClientControlVirtualkeyboardShow(
getArgument(args, "clientControlVirtualkeyboardShow",
"false") == "true");
setClientControlVirtualkeyboardHide(
getArgument(args, "clientControlVirtualkeyboardHide",
"false") == "true");
created();
setFocusGroup(

View File

@ -163,14 +163,24 @@ void InputContext::hideVirtualKeyboard() const {
return instance->userInterfaceManager().hideVirtualKeyboard();
}
bool InputContext::clientControlVirtualkeyboardVisibility() const {
bool InputContext::clientControlVirtualkeyboardShow() const {
FCITX_D();
return d->clientControlVirtualkeyboardVisibility_;
return d->clientControlVirtualkeyboardShow_;
}
void InputContext::setClientControlVirtualkeyboardVisibility(bool show) {
void InputContext::setClientControlVirtualkeyboardShow(bool show) {
FCITX_D();
d->clientControlVirtualkeyboardVisibility_ = show;
d->clientControlVirtualkeyboardShow_ = show;
}
bool InputContext::clientControlVirtualkeyboardHide() const {
FCITX_D();
return d->clientControlVirtualkeyboardHide_;
}
void InputContext::setClientControlVirtualkeyboardHide(bool hide) {
FCITX_D();
d->clientControlVirtualkeyboardHide_ = hide;
}
CapabilityFlags calculateFlags(CapabilityFlags flag, bool isPreeditEnabled) {

View File

@ -267,9 +267,13 @@ public:
void hideVirtualKeyboard() const;
bool clientControlVirtualkeyboardVisibility() const;
bool clientControlVirtualkeyboardShow() const;
void setClientControlVirtualkeyboardVisibility(bool show);
void setClientControlVirtualkeyboardShow(bool show);
bool clientControlVirtualkeyboardHide() const;
void setClientControlVirtualkeyboardHide(bool show);
protected:
/**

View File

@ -137,7 +137,8 @@ public:
InputPanel inputPanel_;
StatusArea statusArea_;
bool hasFocus_ = false;
bool clientControlVirtualkeyboardVisibility_ = false;
bool clientControlVirtualkeyboardShow_ = false;
bool clientControlVirtualkeyboardHide_ = false;
std::string program_;
CapabilityFlags capabilityFlags_;
bool isPreeditEnabled_ = true;

View File

@ -988,7 +988,7 @@ Instance::Instance(int argc, char **argv) {
if (virtualKeyboardAutoShow()) {
auto *inputContext = icEvent.inputContext();
if (!inputContext->clientControlVirtualkeyboardVisibility()) {
if (!inputContext->clientControlVirtualkeyboardShow()) {
inputContext->showVirtualKeyboard();
}
}
@ -1030,7 +1030,7 @@ Instance::Instance(int argc, char **argv) {
deactivateInputMethod(icEvent);
if (virtualKeyboardAutoHide()) {
auto *inputContext = icEvent.inputContext();
if (!inputContext->clientControlVirtualkeyboardVisibility()) {
if (!inputContext->clientControlVirtualkeyboardHide()) {
inputContext->hideVirtualKeyboard();
}
}