From 26b6c20a6b774bef0f028dab6fba6c9772bd002a Mon Sep 17 00:00:00 2001 From: Daniel Tang Date: Sun, 5 Feb 2023 09:57:14 -0500 Subject: [PATCH] Implement Wayland xcb layout options --- src/lib/fcitx/inputmethodconfig_p.h | 1 + src/lib/fcitx/inputmethodgroup.cpp | 12 ++++++++++++ src/lib/fcitx/inputmethodgroup.h | 2 ++ src/lib/fcitx/inputmethodmanager.cpp | 3 +++ src/modules/wayland/waylandmodule.cpp | 6 ++++-- 5 files changed, 22 insertions(+), 2 deletions(-) diff --git a/src/lib/fcitx/inputmethodconfig_p.h b/src/lib/fcitx/inputmethodconfig_p.h index 825f35e78..d3e007b38 100644 --- a/src/lib/fcitx/inputmethodconfig_p.h +++ b/src/lib/fcitx/inputmethodconfig_p.h @@ -23,6 +23,7 @@ FCITX_CONFIGURATION( Option> items{this, "Items", "Items"}; Option defaultLayout{this, "Default Layout", "Layout"}; + Option defaultLayoutOptions{this, "Default Layout Options", "XKB Layout Options"}; Option defaultInputMethod{this, "DefaultIM", "Default Input Method"};); diff --git a/src/lib/fcitx/inputmethodgroup.cpp b/src/lib/fcitx/inputmethodgroup.cpp index a174b76d0..3680dffbd 100644 --- a/src/lib/fcitx/inputmethodgroup.cpp +++ b/src/lib/fcitx/inputmethodgroup.cpp @@ -32,6 +32,7 @@ class InputMethodGroupPrivate { std::vector inputMethodList_; std::string defaultInputMethod_; std::string defaultLayout_; + std::string defaultLayoutOptions_; }; InputMethodGroupItem::InputMethodGroupItem(const std::string &name) @@ -132,4 +133,15 @@ const std::string &InputMethodGroup::defaultLayout() const { FCITX_D(); return d->defaultLayout_; } + +void InputMethodGroup::setDefaultLayoutOptions( + const std::string &layoutOptions) { + FCITX_D(); + d->defaultLayoutOptions_ = layoutOptions; +} + +const std::string &InputMethodGroup::defaultLayoutOptions() const { + FCITX_D(); + return d->defaultLayoutOptions_; +} } // namespace fcitx diff --git a/src/lib/fcitx/inputmethodgroup.h b/src/lib/fcitx/inputmethodgroup.h index 752e104d2..43c082a1d 100644 --- a/src/lib/fcitx/inputmethodgroup.h +++ b/src/lib/fcitx/inputmethodgroup.h @@ -45,6 +45,8 @@ class FCITXCORE_EXPORT InputMethodGroup { const std::string &name() const; void setDefaultLayout(const std::string &layout); const std::string &defaultLayout() const; + void setDefaultLayoutOptions(const std::string &layoutOptions); + const std::string &defaultLayoutOptions() const; std::vector &inputMethodList(); const std::vector &inputMethodList() const; const std::string &defaultInputMethod() const; diff --git a/src/lib/fcitx/inputmethodmanager.cpp b/src/lib/fcitx/inputmethodmanager.cpp index ce53b2863..dca6406c9 100644 --- a/src/lib/fcitx/inputmethodmanager.cpp +++ b/src/lib/fcitx/inputmethodmanager.cpp @@ -90,6 +90,8 @@ void InputMethodManagerPrivate::loadConfig( tempOrder.push_back(groupConfig.name.value()); auto &group = result.first->second; group.setDefaultLayout(groupConfig.defaultLayout.value()); + group.setDefaultLayoutOptions( + groupConfig.defaultLayoutOptions.value()); const auto &items = groupConfig.items.value(); for (const auto &item : items) { if (!entries_.count(item.name.value())) { @@ -406,6 +408,7 @@ void InputMethodManager::save() { auto &groupConfig = groups.back(); groupConfig.name.setValue(group.name()); groupConfig.defaultLayout.setValue(group.defaultLayout()); + groupConfig.defaultLayoutOptions.setValue(group.defaultLayoutOptions()); groupConfig.defaultInputMethod.setValue(group.defaultInputMethod()); std::vector itemsConfig; for (auto &item : group.inputMethodList()) { diff --git a/src/modules/wayland/waylandmodule.cpp b/src/modules/wayland/waylandmodule.cpp index 2dc2bf515..227dabd4e 100644 --- a/src/modules/wayland/waylandmodule.cpp +++ b/src/modules/wayland/waylandmodule.cpp @@ -201,8 +201,8 @@ WaylandModule::WaylandModule(fcitx::Instance *instance) return; } - auto layoutAndVariant = parseLayout( - instance_->inputMethodManager().currentGroup().defaultLayout()); + auto group = instance_->inputMethodManager().currentGroup(); + auto layoutAndVariant = parseLayout(group.defaultLayout()); if (layoutAndVariant.first.empty()) { return; @@ -213,6 +213,8 @@ WaylandModule::WaylandModule(fcitx::Instance *instance) config.setValueByPath("Layout/LayoutList", layoutAndVariant.first); config.setValueByPath("Layout/VariantList", layoutAndVariant.second); + config.setValueByPath("Layout/Options", + group.defaultLayoutOptions()); config.setValueByPath("Layout/DisplayNames", ""); config.setValueByPath("Layout/Use", "true");