Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package fcitx5-kkc for openSUSE:Factory checked in at 2026-10-22 18:24:34 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/fcitx5-kkc (Old) and /work/SRC/openSUSE:Factory/.fcitx5-kkc.new.2252680 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "fcitx5-kkc" Thu Oct 22 18:24:34 2026 rev:13 rq:1386587 version:5.1.11 Changes: -------- --- /work/SRC/openSUSE:Factory/fcitx5-kkc/fcitx5-kkc.changes 2026-02-09 11:43:58.019279166 +0100 +++ /work/SRC/openSUSE:Factory/.fcitx5-kkc.new.2252680/fcitx5-kkc.changes 2026-10-22 18:24:41.973706099 +0200 @@ -1,0 +2,10 @@ +Sat Oct 17 19:53:57 UTC 2026 - Martin Pluskal <[email protected]> + +- Update to 5.1.11: + * Fix FindLibKKC (correct kkc-1.0 pkgconfig name, link/compile + cleanup, keep include dirs working with broken CFLAGS) + * UI cleanup: overlay input-method info, signal-driven UI + updates, squashed key-event refreshes + * Raise floor to fcitx5 >= 5.1.22 + +------------------------------------------------------------------- Old: ---- fcitx5-kkc-5.1.9.tar.zst New: ---- fcitx5-kkc-5.1.11.tar.zst ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ fcitx5-kkc.spec ++++++ --- /var/tmp/diff_new_pack.dK38iu/_old 2026-10-22 18:24:42.817740281 +0200 +++ /var/tmp/diff_new_pack.dK38iu/_new 2026-10-22 18:24:42.818740321 +0200 @@ -17,38 +17,40 @@ Name: fcitx5-kkc -Version: 5.1.9 +Version: 5.1.11 Release: 0 Summary: Libkkc input method support for Fcitx5 License: GPL-3.0-or-later -Group: System/I18n/Japanese URL: https://github.com/fcitx/fcitx5-kkc Source: https://download.fcitx-im.org/fcitx5/%{name}/%{name}-%{version}.tar.zst BuildRequires: cmake BuildRequires: extra-cmake-modules -BuildRequires: fcitx5-devel BuildRequires: fcitx5-qt-devel BuildRequires: gcc-c++ BuildRequires: hicolor-icon-theme -BuildRequires: libkkc-devel BuildRequires: pkgconfig BuildRequires: qt6-base-devel BuildRequires: zstd +BuildRequires: pkgconfig(Fcitx5Config) >= 5.1.22 +BuildRequires: pkgconfig(Fcitx5Core) >= 5.1.22 +BuildRequires: pkgconfig(Fcitx5Module) >= 5.1.22 +BuildRequires: pkgconfig(Fcitx5Utils) >= 5.1.22 +BuildRequires: pkgconfig(kkc-1.0) Requires: fcitx5 Requires: kkc-data +Supplements: (fcitx5 and kkc-data) Provides: fcitx-kkc = %{version} Obsoletes: fcitx-kkc <= 0.1.4 Obsoletes: fcitx5-kkc-qt6 <= 5.1.6 -Supplements: (fcitx5 and kkc-data) %if 0%{?suse_version} <= 1520 -BuildRequires: appstream-glib-devel +BuildRequires: pkgconfig(appstream-glib) %endif %description This package provides libkkc input method support for Fcitx5. %prep -%setup -q -n %{name}-%{version} +%setup -q %build %if 0%{?suse_version} == 1500 ++++++ fcitx5-kkc-5.1.9.tar.zst -> fcitx5-kkc-5.1.11.tar.zst ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fcitx5-kkc-5.1.9/CMakeLists.txt new/fcitx5-kkc-5.1.11/CMakeLists.txt --- old/fcitx5-kkc-5.1.9/CMakeLists.txt 2025-12-22 07:18:12.000000000 +0100 +++ new/fcitx5-kkc-5.1.11/CMakeLists.txt 2026-09-06 04:39:57.000000000 +0200 @@ -1,9 +1,9 @@ -cmake_minimum_required(VERSION 3.6) +cmake_minimum_required(VERSION 3.13) # The Project Name -project(fcitx5-kkc VERSION 5.1.9) +project(fcitx5-kkc VERSION 5.1.11) -set(REQUIRED_FCITX_VERSION 5.1.13) +set(REQUIRED_FCITX_VERSION 5.1.22) find_package(ECM REQUIRED 1.0.0) set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/cmake" ${CMAKE_MODULE_PATH}) include(FeatureSummary) @@ -16,9 +16,6 @@ find_package(Fcitx5Core ${REQUIRED_FCITX_VERSION} REQUIRED) find_package(LibKKC REQUIRED) find_package(Gettext REQUIRED) -pkg_check_modules(Gee IMPORTED_TARGET "gee-0.8" REQUIRED) -pkg_check_modules(JSonGlib IMPORTED_TARGET "json-glib-1.0" REQUIRED) -pkg_check_modules(GObject2 IMPORTED_TARGET "gobject-2.0" REQUIRED) if (ENABLE_QT) set(QT_MAJOR_VERSION 6) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fcitx5-kkc-5.1.9/README.md new/fcitx5-kkc-5.1.11/README.md --- old/fcitx5-kkc-5.1.9/README.md 2025-12-22 07:18:12.000000000 +0100 +++ new/fcitx5-kkc-5.1.11/README.md 2026-09-06 04:39:57.000000000 +0200 @@ -3,6 +3,6 @@ This provides libkkc input method support for fcitx5. Released under GPL3+. -[](https://jenkins.fcitx-im.org/job/fcitx5-kkc/) +[](https://jenkins.fcitx-im.org/job/fcitx5-kkc/) [](https://scan.coverity.com/projects/fcitx-fcitx5-kkc) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fcitx5-kkc-5.1.9/cmake/FindLibKKC.cmake new/fcitx5-kkc-5.1.11/cmake/FindLibKKC.cmake --- old/fcitx5-kkc-5.1.9/cmake/FindLibKKC.cmake 2025-12-22 07:18:12.000000000 +0100 +++ new/fcitx5-kkc-5.1.11/cmake/FindLibKKC.cmake 2026-09-06 04:39:57.000000000 +0200 @@ -17,38 +17,40 @@ # use pkg-config to get the directories and then use these values # in the find_path() and find_library() calls find_package(PkgConfig QUIET) -pkg_check_modules(PC_LibKKC QUIET libkkc) +pkg_check_modules(PC_LibKKC QUIET kkc-1.0) find_path(LIBKKC_INCLUDE_DIR NAMES libkkc/libkkc.h HINTS - ${PC_LIBKKC_INCLUDEDIR} - ${PC_LIBKKC_INCLUDE_DIRS} + ${PC_LibKKC_INCLUDEDIR} + ${PC_LibKKC_INCLUDE_DIRS} ) find_library(LIBKKC_LIBRARIES NAMES kkc HINTS - ${PC_LIBKKC_LIBDIR} - ${PC_LIBKKC_LIBRARY_DIRS} + ${PC_LibKKC_LIBDIR} + ${PC_LibKKC_LIBRARY_DIRS} ) -if(PC_LIBKKC_VERSION) - set(LIBKKC_VERSION_STRING ${PC_LIBKKC_VERSION}) +if(PC_LibKKC_FOUND) + set(LIBKKC_VERSION_STRING ${PC_LibKKC_VERSION}) endif() # handle the QUIETLY and REQUIRED arguments and set LIBKKC_FOUND to TRUE if # all listed variables are TRUE include(FindPackageHandleStandardArgs) find_package_handle_standard_args(LibKKC - REQUIRED_VARS LIBKKC_LIBRARIES LIBKKC_INCLUDE_DIR + REQUIRED_VARS LIBKKC_VERSION_STRING LIBKKC_LIBRARIES LIBKKC_INCLUDE_DIR VERSION_VAR LIBKKC_VERSION_STRING) mark_as_advanced(LIBKKC_INCLUDE_DIR LIBKKC_LIBRARIES) if (LIBKKC_FOUND AND NOT TARGET LibKKC::LibKKC) - add_library(LibKKC::LibKKC UNKNOWN IMPORTED) + add_library(LibKKC::LibKKC INTERFACE IMPORTED) set_target_properties(LibKKC::LibKKC PROPERTIES - IMPORTED_LOCATION "${LIBKKC_LIBRARIES}" + INTERFACE_COMPILE_OPTIONS "${PC_LibKKC_CFLAGS}" INTERFACE_INCLUDE_DIRECTORIES "${LIBKKC_INCLUDE_DIR}" + INTERFACE_LINK_OPTIONS "${PC_LibKKC_LDFLAGS_OTHER}" + INTERFACE_LINK_LIBRARIES "${PC_LibKKC_LINK_LIBRARIES}" ) endif() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fcitx5-kkc-5.1.9/gui/CMakeLists.txt new/fcitx5-kkc-5.1.11/gui/CMakeLists.txt --- old/fcitx5-kkc-5.1.9/gui/CMakeLists.txt 2025-12-22 07:18:12.000000000 +0100 +++ new/fcitx5-kkc-5.1.11/gui/CMakeLists.txt 2026-09-06 04:39:57.000000000 +0200 @@ -28,7 +28,7 @@ Qt${QT_MAJOR_VERSION}::Core Qt${QT_MAJOR_VERSION}::Widgets Fcitx5Qt${QT_MAJOR_VERSION}::WidgetsAddons - LibKKC::LibKKC PkgConfig::GObject2 PkgConfig::JSonGlib PkgConfig::Gee + LibKKC::LibKKC ) install(TARGETS fcitx5-kkc-config DESTINATION ${CMAKE_INSTALL_LIBDIR}/fcitx5/qt${QT_MAJOR_VERSION}) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fcitx5-kkc-5.1.9/org.fcitx.Fcitx5.Addon.Kkc.metainfo.xml.in new/fcitx5-kkc-5.1.11/org.fcitx.Fcitx5.Addon.Kkc.metainfo.xml.in --- old/fcitx5-kkc-5.1.9/org.fcitx.Fcitx5.Addon.Kkc.metainfo.xml.in 2025-12-22 07:18:12.000000000 +0100 +++ new/fcitx5-kkc-5.1.11/org.fcitx.Fcitx5.Addon.Kkc.metainfo.xml.in 2026-09-06 04:39:57.000000000 +0200 @@ -14,6 +14,8 @@ <url type="vcs-browser">https://github.com/fcitx/fcitx5-kkc</url> <project_group>Fcitx</project_group> <releases> + <release version="5.1.11" date="2026-09-05"/> + <release version="5.1.10" date="2026-03-17"/> <release version="5.1.9" date="2025-12-21"/> <release version="5.1.8" date="2025-10-16"/> <release version="5.1.7" date="2025-06-15"/> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fcitx5-kkc-5.1.9/po/LINGUAS new/fcitx5-kkc-5.1.11/po/LINGUAS --- old/fcitx5-kkc-5.1.9/po/LINGUAS 2025-12-22 07:18:12.000000000 +0100 +++ new/fcitx5-kkc-5.1.11/po/LINGUAS 2026-09-06 04:39:57.000000000 +0200 @@ -5,8 +5,10 @@ fr he ja +ka ko ru +sv tr vi zh_CN diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fcitx5-kkc-5.1.9/po/ka.po new/fcitx5-kkc-5.1.11/po/ka.po --- old/fcitx5-kkc-5.1.9/po/ka.po 1970-01-01 01:00:00.000000000 +0100 +++ new/fcitx5-kkc-5.1.11/po/ka.po 2026-09-06 04:39:57.000000000 +0200 @@ -0,0 +1,252 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the fcitx5-kkc package. +# +# Translators: +# Temuri Doghonadze <[email protected]>, 2026 +# +msgid "" +msgstr "" +"Project-Id-Version: fcitx5-kkc\n" +"Report-Msgid-Bugs-To: [email protected]\n" +"POT-Creation-Date: 2026-02-01 20:24+0000\n" +"PO-Revision-Date: 2017-12-19 22:05+0000\n" +"Last-Translator: Temuri Doghonadze <[email protected]>, 2026\n" +"Language-Team: Georgian (https://app.transifex.com/fcitx/teams/12005/ka/)\n" +"Language: ka\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n!=1);\n" + +#. i18n: file: gui/addshortcutdialog.ui:42 +#. i18n: ectx: property (text), widget (QLabel, commandLabel_) +#: rc.cpp:9 +#, kde-format +msgid "&Command:" +msgstr "&ბრძანება:" + +#. i18n: file: gui/addshortcutdialog.ui:22 +#. i18n: ectx: property (text), widget (QLabel, inputModeLabel_) +#: rc.cpp:6 +#, kde-format +msgid "&Input Mode:" +msgstr "შეყვანის რეჟიმ&ი:" + +#. i18n: file: gui/addshortcutdialog.ui:71 +#. i18n: ectx: property (text), widget (QLabel, keyLabel_) +#: rc.cpp:12 +#, kde-format +msgid "&Key:" +msgstr "&გასაღები:" + +#. i18n: file: gui/adddictdialog.ui:42 +#. i18n: ectx: property (text), widget (QLabel, pathLabel_) +#: rc.cpp:24 +#, kde-format +msgid "&Path:" +msgstr "&ბილიკი:" + +#. i18n: file: gui/adddictdialog.ui:22 +#. i18n: ectx: property (text), widget (QLabel, typeLabel_) +#: rc.cpp:21 +#, kde-format +msgid "&Type:" +msgstr "&ტიპი:" + +#: src/kkc.h:98 +msgid "Auto Correct" +msgstr "ავტოკორექცია" + +#: src/kkc.h:96 +msgid "Candidate Layout" +msgstr "კანდიდატის განლაგება" + +#: src/kkc.h:108 +msgid "Candidates Page Down" +msgstr "კანდიდატების გვერდი ქვემოთ" + +#: src/kkc.h:102 +msgid "Candidates Page Up" +msgstr "კანდიდატების გვერდი ზემოთ" + +#: src/kkc.h:120 +msgid "Cursor Down" +msgstr "კურსორი ქვემოთ" + +#: src/kkc.h:114 +msgid "Cursor Up" +msgstr "კურსორი ზემოთ" + +#. i18n: file: gui/addshortcutdialog.ui:14 +#. i18n: ectx: property (windowTitle), widget (QDialog, AddShortcutDialog) +#. i18n: file: gui/adddictdialog.ui:14 +#. i18n: ectx: property (windowTitle), widget (QDialog, AddDictDialog) +#: rc.cpp:3 rc.cpp:18 +#, kde-format +msgid "Dialog" +msgstr "ფანჯარა" + +#: src/kkc.h:131 +msgid "Dictionary" +msgstr "ლექსიკონი" + +#: gui/dictwidget.cpp:36 +msgid "Dictionary Manager" +msgstr "ლექსიკონის მმართველი" + +#: gui/shortcutmodel.cpp:38 src/kkc.cpp:144 src/kkc.h:48 +msgid "Direct input" +msgstr "პირდაპირი შეყვანა" + +#. i18n: file: gui/dictwidget.ui:14 +#. i18n: ectx: property (windowTitle), widget (QWidget, KkcDictWidget) +#. i18n: file: gui/shortcutwidget.ui:20 +#. i18n: ectx: property (windowTitle), widget (QWidget, KkcShortcutWidget) +#: rc.cpp:15 rc.cpp:27 +#, kde-format +msgid "Form" +msgstr "ფორმა" + +#: gui/shortcutmodel.cpp:83 +msgid "Function" +msgstr "ფუნქცია" + +#: gui/shortcutmodel.cpp:37 src/kkc.cpp:141 src/kkc.h:47 +msgid "Half width Katakana" +msgstr "ნახევარი სიგანის კატაკანა" + +#: gui/shortcutmodel.cpp:37 src/kkc.cpp:139 src/kkc.h:46 +msgid "Hiragana" +msgstr "ჰირაგანა" + +#: src/kkc.h:40 +msgid "Horizontal" +msgstr "ჰორიზონტალური" + +#: src/kkc.h:91 +msgid "Initial Input Mode" +msgstr "საწყისი შეყვანის რეჟიმი" + +#: gui/shortcutmodel.cpp:79 +msgid "Input Mode" +msgstr "შეყვანის რეჟიმი" + +#: src/kkc.h:42 +msgid "Japanese" +msgstr "იაპონური" + +#: org.fcitx.Fcitx5.Addon.Kkc.metainfo.xml.in:8 +msgid "Japanese input method" +msgstr "შეყვანის იაპონური მეთოდი" + +#: org.fcitx.Fcitx5.Addon.Kkc.metainfo.xml.in:7 +msgid "KKC" +msgstr "KKC" + +#: src/kkc-addon.conf.in.in:2 +msgid "KKC Addon of Fcitx" +msgstr "Kkc-ის დამატება Fcitx-ისთვის" + +#: src/kkc.conf.in:2 +msgid "Kana Kanji" +msgstr "კანა კანჯი" + +#: gui/shortcutmodel.cpp:37 src/kkc.cpp:140 src/kkc.h:46 +msgid "Katakana" +msgstr "კატაკანა" + +#: gui/shortcutmodel.cpp:81 +msgid "Key" +msgstr "გასაღები" + +#: gui/shortcutwidget.cpp:91 +msgid "Key Conflict" +msgstr "ღილაკების კონფლიქტი" + +#: gui/shortcutwidget.cpp:92 +msgid "Key to add is conflict with existing shortcut." +msgstr "დასამატებელი ღილაკი კონფლიქტშია არსებულ მალსახმობთან." + +#: gui/shortcutmodel.cpp:38 src/kkc.cpp:142 src/kkc.h:43 src/kkc.h:47 +msgid "Latin" +msgstr "ლათინური" + +#: src/kkc.h:39 +msgid "Not set" +msgstr "დაყენებული არაა" + +#: src/kkc.h:127 +msgid "Number candidate of Triggers To Show Candidate Window" +msgstr "ტრიგერების ნომერი კანდიდატის ფანჯრის საჩვენებლად" + +#: src/kkc.h:93 +msgid "Page size" +msgstr "გვერდის ზომა" + +#: src/kkc.h:88 +msgid "Punctuation Style" +msgstr "პუნქტუაციის სტილი" + +#. i18n: file: gui/shortcutwidget.ui:28 +#. i18n: ectx: property (text), widget (QLabel, ruleLabel_) +#: rc.cpp:30 +#, kde-format +msgid "R&ule:" +msgstr "_წელი:" + +#: src/kkc.h:86 +msgid "Rule" +msgstr "წესი" + +#: src/kkc.h:129 +msgid "Rule Editor" +msgstr "წესების რედაქტორი" + +#: gui/shortcutwidget.cpp:67 +msgid "Save Changes" +msgstr "ცვლილებების შენახვა" + +#: gui/adddictdialog.cpp:73 +msgid "Select Dictionary Directory" +msgstr "აირჩიეთ ლექსიკონის საქაღალდე" + +#: gui/adddictdialog.cpp:58 +msgid "Select Dictionary File" +msgstr "აირჩიეთ ლექსიკონის ფაილი" + +#: gui/shortcutwidget.cpp:58 +msgid "Shortcut Manager" +msgstr "მალსახმობების მმართველი" + +#: src/kkc.h:123 +msgid "Show Annotation" +msgstr "ანოტაციის ჩვენება" + +#: gui/adddictdialog.cpp:31 +msgid "System" +msgstr "სისტემა" + +#: gui/shortcutwidget.cpp:68 +msgid "" +"The content has changed.\n" +"Do you want to save the changes or discard them?" +msgstr "" +"შემცველობა შეიცვალა.\n" +"გნებავთ, შეინახოთ ცვლილებები თუ მოვაცილო ისინი?" + +#: gui/adddictdialog.cpp:32 +msgid "User" +msgstr "მომხმარებელი" + +#: src/kkc.h:40 +msgid "Vertical" +msgstr "ვერტიკალური" + +#: gui/shortcutmodel.cpp:38 src/kkc.cpp:143 src/kkc.h:43 src/kkc.h:48 +msgid "Wide latin" +msgstr "ფართო ლათინური" + +#: src/kkc.h:44 +msgid "Wide latin Japanese" +msgstr "ფართო ლათინური იაპონური" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fcitx5-kkc-5.1.9/po/sv.po new/fcitx5-kkc-5.1.11/po/sv.po --- old/fcitx5-kkc-5.1.9/po/sv.po 1970-01-01 01:00:00.000000000 +0100 +++ new/fcitx5-kkc-5.1.11/po/sv.po 2026-09-06 04:39:57.000000000 +0200 @@ -0,0 +1,252 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the fcitx5-kkc package. +# +# Translators: +# Daniel Nylander <[email protected]>, 2026 +# +msgid "" +msgstr "" +"Project-Id-Version: fcitx5-kkc\n" +"Report-Msgid-Bugs-To: [email protected]\n" +"POT-Creation-Date: 2026-09-04 20:24+0000\n" +"PO-Revision-Date: 2017-12-19 22:05+0000\n" +"Last-Translator: Daniel Nylander <[email protected]>, 2026\n" +"Language-Team: Swedish (https://app.transifex.com/fcitx/teams/12005/sv/)\n" +"Language: sv\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: gui/shortcutwidget.cpp:58 +msgid "Shortcut Manager" +msgstr "Genvägshanterare" + +#: gui/shortcutwidget.cpp:67 +msgid "Save Changes" +msgstr "Spara ändringar" + +#: gui/shortcutwidget.cpp:68 +msgid "" +"The content has changed.\n" +"Do you want to save the changes or discard them?" +msgstr "" +"Innehållet har ändrats.\n" +"Vill du spara ändringarna eller förkasta dem?" + +#: gui/shortcutwidget.cpp:91 +msgid "Key Conflict" +msgstr "Tangentkonflikt" + +#: gui/shortcutwidget.cpp:92 +msgid "Key to add is conflict with existing shortcut." +msgstr "Tangenten som ska läggas till står i konflikt med en befintlig genväg." + +#: gui/dictwidget.cpp:36 +msgid "Dictionary Manager" +msgstr "Ordbokshanterare" + +#: gui/shortcutmodel.cpp:37 src/kkc.cpp:189 src/kkc.h:46 +msgid "Hiragana" +msgstr "Hiragana" + +#: gui/shortcutmodel.cpp:37 src/kkc.cpp:190 src/kkc.h:46 +msgid "Katakana" +msgstr "Katakana" + +#: gui/shortcutmodel.cpp:37 src/kkc.cpp:191 src/kkc.h:47 +msgid "Half width Katakana" +msgstr "Katakana med halv bredd" + +#: gui/shortcutmodel.cpp:38 src/kkc.cpp:192 src/kkc.h:43 src/kkc.h:47 +msgid "Latin" +msgstr "Latinsk" + +#: gui/shortcutmodel.cpp:38 src/kkc.cpp:193 src/kkc.h:43 src/kkc.h:48 +msgid "Wide latin" +msgstr "Latinsk med full bredd" + +#: gui/shortcutmodel.cpp:38 src/kkc.cpp:194 src/kkc.h:48 +msgid "Direct input" +msgstr "Direktinmatning" + +#: gui/shortcutmodel.cpp:79 +msgid "Input Mode" +msgstr "Inmatningsläge" + +#: gui/shortcutmodel.cpp:81 +msgid "Key" +msgstr "Tangent" + +#: gui/shortcutmodel.cpp:83 +msgid "Function" +msgstr "Funktion" + +#: gui/adddictdialog.cpp:31 +msgid "System" +msgstr "System" + +#: gui/adddictdialog.cpp:32 +msgid "User" +msgstr "Användare" + +#: gui/adddictdialog.cpp:58 +msgid "Select Dictionary File" +msgstr "Välj ordboksfil" + +#: gui/adddictdialog.cpp:73 +msgid "Select Dictionary Directory" +msgstr "Välj ordbokskatalog" + +#: src/kkc.h:39 +msgid "Not set" +msgstr "Inte inställt" + +#: src/kkc.h:40 +msgid "Vertical" +msgstr "Vertikal" + +#: src/kkc.h:40 +msgid "Horizontal" +msgstr "Horisontell" + +#: src/kkc.h:42 +msgid "Japanese" +msgstr "Japanska" + +#: src/kkc.h:44 +msgid "Wide latin Japanese" +msgstr "Japanska med latinsk fullbredd" + +#: src/kkc.h:85 +msgid "Rule" +msgstr "Regel" + +#: src/kkc.h:87 +msgid "Punctuation Style" +msgstr "Interpunktionsstil" + +#: src/kkc.h:90 +msgid "Initial Input Mode" +msgstr "Ursprungligt inmatningsläge" + +#: src/kkc.h:92 +msgid "Page size" +msgstr "Sidstorlek" + +#: src/kkc.h:95 +msgid "Candidate Layout" +msgstr "Kandidatlayout" + +#: src/kkc.h:97 +msgid "Auto Correct" +msgstr "Automatisk korrigering" + +#: src/kkc.h:101 +msgid "Candidates Page Up" +msgstr "Kandidatlista sida upp" + +#: src/kkc.h:107 +msgid "Candidates Page Down" +msgstr "Kandidatlista sida ned" + +#: src/kkc.h:113 +msgid "Cursor Up" +msgstr "Markör upp" + +#: src/kkc.h:119 +msgid "Cursor Down" +msgstr "Markör ned" + +#: src/kkc.h:122 +msgid "Show Annotation" +msgstr "Visa anteckning" + +#: src/kkc.h:126 +msgid "Number candidate of Triggers To Show Candidate Window" +msgstr "Antal kandidater som utlöser kandidatfönstret" + +#: src/kkc.h:128 +msgid "Rule Editor" +msgstr "Regeleditor" + +#: src/kkc.h:130 +msgid "Dictionary" +msgstr "Ordbok" + +#: org.fcitx.Fcitx5.Addon.Kkc.metainfo.xml.in:7 +msgid "KKC" +msgstr "KKC" + +#: org.fcitx.Fcitx5.Addon.Kkc.metainfo.xml.in:8 +msgid "Japanese input method" +msgstr "Japansk inmatningsmetod" + +#. i18n: file: gui/addshortcutdialog.ui:14 +#. i18n: ectx: property (windowTitle), widget (QDialog, AddShortcutDialog) +#. i18n: file: gui/adddictdialog.ui:14 +#. i18n: ectx: property (windowTitle), widget (QDialog, AddDictDialog) +#: rc.cpp:3 rc.cpp:18 +#, kde-format +msgid "Dialog" +msgstr "Dialogruta" + +#. i18n: file: gui/addshortcutdialog.ui:22 +#. i18n: ectx: property (text), widget (QLabel, inputModeLabel_) +#: rc.cpp:6 +#, kde-format +msgid "&Input Mode:" +msgstr "&Inmatningsläge:" + +#. i18n: file: gui/addshortcutdialog.ui:42 +#. i18n: ectx: property (text), widget (QLabel, commandLabel_) +#: rc.cpp:9 +#, kde-format +msgid "&Command:" +msgstr "&Kommando:" + +#. i18n: file: gui/addshortcutdialog.ui:71 +#. i18n: ectx: property (text), widget (QLabel, keyLabel_) +#: rc.cpp:12 +#, kde-format +msgid "&Key:" +msgstr "&Tangent:" + +#. i18n: file: gui/dictwidget.ui:14 +#. i18n: ectx: property (windowTitle), widget (QWidget, KkcDictWidget) +#. i18n: file: gui/shortcutwidget.ui:20 +#. i18n: ectx: property (windowTitle), widget (QWidget, KkcShortcutWidget) +#: rc.cpp:15 rc.cpp:27 +#, kde-format +msgid "Form" +msgstr "Formulär" + +#. i18n: file: gui/adddictdialog.ui:22 +#. i18n: ectx: property (text), widget (QLabel, typeLabel_) +#: rc.cpp:21 +#, kde-format +msgid "&Type:" +msgstr "&Typ:" + +#. i18n: file: gui/adddictdialog.ui:42 +#. i18n: ectx: property (text), widget (QLabel, pathLabel_) +#: rc.cpp:24 +#, kde-format +msgid "&Path:" +msgstr "&Sökväg:" + +#. i18n: file: gui/shortcutwidget.ui:28 +#. i18n: ectx: property (text), widget (QLabel, ruleLabel_) +#: rc.cpp:30 +#, kde-format +msgid "R&ule:" +msgstr "&Regel:" + +#: src/kkc.conf.in:2 +msgid "Kana Kanji" +msgstr "Kana Kanji" + +#: src/kkc-addon.conf.in.in:2 +msgid "KKC Addon of Fcitx" +msgstr "KKC-tillägg för Fcitx" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fcitx5-kkc-5.1.9/src/CMakeLists.txt new/fcitx5-kkc-5.1.11/src/CMakeLists.txt --- old/fcitx5-kkc-5.1.9/src/CMakeLists.txt 2025-12-22 07:18:12.000000000 +0100 +++ new/fcitx5-kkc-5.1.11/src/CMakeLists.txt 2026-09-06 04:39:57.000000000 +0200 @@ -2,7 +2,7 @@ kkc.cpp ) add_fcitx5_addon(kkc ${KKC_SOURCES}) -target_link_libraries(kkc Fcitx5::Core Fcitx5::Config LibKKC::LibKKC PkgConfig::GObject2 PkgConfig::JSonGlib PkgConfig::Gee) +target_link_libraries(kkc Fcitx5::Core Fcitx5::Config LibKKC::LibKKC) target_include_directories(kkc PRIVATE ${PROJECT_BINARY_DIR}) set_target_properties(kkc PROPERTIES PREFIX "") install(TARGETS kkc DESTINATION "${CMAKE_INSTALL_LIBDIR}/fcitx5") diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fcitx5-kkc-5.1.9/src/kkc.cpp new/fcitx5-kkc-5.1.11/src/kkc.cpp --- old/fcitx5-kkc-5.1.9/src/kkc.cpp 2025-12-22 07:18:12.000000000 +0100 +++ new/fcitx5-kkc-5.1.11/src/kkc.cpp 2026-09-06 04:39:57.000000000 +0200 @@ -45,6 +45,7 @@ #include <memory> #include <stdexcept> #include <string> +#include <string_view> #include <utility> #include <vector> @@ -66,39 +67,70 @@ kkc_context_set_dictionaries(context_.get(), parent_->dictionaries()); kkc_context_set_input_mode(context_.get(), *parent_->config().inputMode); - lastMode_ = kkc_context_get_input_mode(context_.get()); applyConfig(); - signal_ = - g_signal_connect(context_.get(), "notify::input-mode", - G_CALLBACK(&KkcState::inputModeChanged), this); - - updateInputMode(); + g_signal_connect(context_.get(), "notify::input-mode", + G_CALLBACK(&KkcState::inputModeChanged), this); + g_signal_connect(context_.get(), "notify::input", + G_CALLBACK(&KkcState::input_changed_cb), this); + g_signal_connect(kkc_context_get_candidates(context_.get()), + "populated", + G_CALLBACK(&KkcState::candidates_populated), this); + g_signal_connect( + kkc_context_get_candidates(context_.get()), "notify::cursor-pos", + G_CALLBACK(&KkcState::candidates_cursor_pos_changed), this); + g_signal_connect(kkc_context_get_candidates(context_.get()), "selected", + G_CALLBACK(&KkcState::candidates_selected), this); } ~KkcState() { - g_signal_handler_disconnect(context_.get(), signal_); + g_signal_handlers_disconnect_by_data( + kkc_context_get_candidates(context_.get()), this); + g_signal_handlers_disconnect_by_data(context_.get(), this); // In order to workaround libkkc context clear the dictionaries upon // context deleting. kkc_context_set_dictionaries(context_.get(), parent_->dummyEmptyDictionaries()); } + void keyEvent(KeyEvent &keyEvent); + void updateUI(); + void doUpdateUI(); + void reset(); + static void inputModeChanged(GObject * /*unused*/, GParamSpec * /*unused*/, gpointer user_data) { auto *that = static_cast<KkcState *>(user_data); that->updateInputMode(); } - void updateInputMode() { - parent_->updateInputMode(ic_); - auto newMode = kkc_context_get_input_mode(context_.get()); - if (newMode != lastMode_) { - lastMode_ = newMode; - modeChanged_ = true; - } + static void input_changed_cb(GObject * /*unused*/, GParamSpec * /*unused*/, + gpointer user_data) { + auto *that = static_cast<KkcState *>(user_data); + that->updateUI(); + } + + static void candidates_populated(GObject * /*unused*/, gpointer user_data) { + auto *that = static_cast<KkcState *>(user_data); + that->updateUI(); + } + + static void candidates_cursor_pos_changed(GObject * /*unused*/, + GParamSpec * /*unused*/, + gpointer user_data) { + auto *that = static_cast<KkcState *>(user_data); + that->updateUI(); + } + + static void candidates_selected(GObject * /*unused*/, + KkcCandidate * /*unused*/, + gpointer user_data) { + auto *that = static_cast<KkcState *>(user_data); + that->updateUI(); } + void updateInputMode() { parent_->updateInputMode(ic_); } + void applyConfig() const { KkcCandidateList *kkcCandidates = kkc_context_get_candidates(context_.get()); @@ -116,12 +148,30 @@ } } + auto *context() { return context_.get(); } + +private: + struct KeyEventScope { + KeyEventScope(KkcState &self) : self_(self) { + self_.inKeyEventScope_ = true; + self_.pendingUpdateUI_ = false; + } + ~KeyEventScope() { + self_.inKeyEventScope_ = false; + if (self_.pendingUpdateUI_) { + self_.doUpdateUI(); + } + } + + private: + KkcState &self_; + }; + + bool inKeyEventScope_ = false; + bool pendingUpdateUI_ = false; KkcEngine *parent_; InputContext *ic_; GObjectUniquePtr<KkcContext> context_; - gulong signal_; - bool modeChanged_ = false; - KkcInputMode lastMode_ = KKC_INPUT_MODE_HIRAGANA; }; namespace { @@ -146,7 +196,7 @@ auto inputModeStatus(KkcEngine *engine, InputContext *ic) { auto *state = engine->state(ic); - auto mode = kkc_context_get_input_mode(state->context_.get()); + auto mode = kkc_context_get_input_mode(state->context()); return (mode >= 0 && mode < FCITX_ARRAY_SIZE(input_mode_status)) ? &input_mode_status[mode] : nullptr; @@ -193,11 +243,11 @@ } bool isChecked(InputContext *ic) const override { auto *state = engine_->state(ic); - return mode_ == kkc_context_get_input_mode(state->context_.get()); + return mode_ == kkc_context_get_input_mode(state->context()); } void activate(InputContext *ic) override { auto *state = engine_->state(ic); - kkc_context_set_input_mode(state->context_.get(), mode_); + kkc_context_set_input_mode(state->context(), mode_); } private: @@ -214,13 +264,11 @@ void select(InputContext *inputContext) const override { auto *state = engine_->state(inputContext); - auto *context = state->context_.get(); + auto *context = state->context(); KkcCandidateList *kkcCandidates = kkc_context_get_candidates(context); - if (kkc_candidate_list_select_at( - kkcCandidates, - idx_ % kkc_candidate_list_get_page_size(kkcCandidates))) { - engine_->updateUI(inputContext); - } + kkc_candidate_list_select_at( + kkcCandidates, + idx_ % kkc_candidate_list_get_page_size(kkcCandidates)); } private: @@ -237,7 +285,7 @@ setPageable(this); setCursorMovable(this); auto *kkcstate = engine_->state(ic_); - auto *context = kkcstate->context_.get(); + auto *context = kkcstate->context(); KkcCandidateList *kkcCandidates = kkc_context_get_candidates(context); gint size = kkc_candidate_list_get_size(kkcCandidates); gint cursor_pos = kkc_candidate_list_get_cursor_pos(kkcCandidates); @@ -315,7 +363,7 @@ private: void paging(bool prev) { auto *kkcstate = engine_->state(ic_); - auto *context = kkcstate->context_.get(); + auto *context = kkcstate->context(); KkcCandidateList *kkcCandidates = kkc_context_get_candidates(context); if (kkc_candidate_list_get_page_visible(kkcCandidates)) { if (prev) { @@ -323,12 +371,11 @@ } else { kkc_candidate_list_page_down(kkcCandidates); } - engine_->updateUI(ic_); } } void moveCursor(bool prev) { auto *kkcstate = engine_->state(ic_); - auto *context = kkcstate->context_.get(); + auto *context = kkcstate->context(); KkcCandidateList *kkcCandidates = kkc_context_get_candidates(context); if (kkc_candidate_list_get_page_visible(kkcCandidates)) { if (prev) { @@ -336,7 +383,6 @@ } else { kkc_candidate_list_cursor_down(kkcCandidates); } - engine_->updateUI(ic_); } } @@ -382,6 +428,116 @@ } // namespace +void KkcState::keyEvent(KeyEvent &keyEvent) { + KeyEventScope scope(*this); + auto state = static_cast<uint32_t>(keyEvent.rawKey().states()); + state &= static_cast<uint32_t>(KeyState::SimpleMask); + if (keyEvent.isRelease()) { + state |= KKC_MODIFIER_TYPE_RELEASE_MASK; + } + + KKC_DEBUG() << "Kkc received key: " << keyEvent.rawKey() + << " isRelease: " << keyEvent.isRelease() + << " keycode: " << keyEvent.rawKey().code(); + + auto *context = context_.get(); + KkcCandidateList *kkcCandidates = kkc_context_get_candidates(context); + if (kkc_candidate_list_get_page_visible(kkcCandidates) && + !keyEvent.isRelease()) { + if (keyEvent.key().checkKeyList(*parent_->config().cursorUpKey)) { + kkc_candidate_list_cursor_up(kkcCandidates); + keyEvent.filterAndAccept(); + } else if (keyEvent.key().checkKeyList( + *parent_->config().cursorDownKey)) { + kkc_candidate_list_cursor_down(kkcCandidates); + keyEvent.filterAndAccept(); + } else if (keyEvent.key().checkKeyList( + *parent_->config().prevPageKey)) { + kkc_candidate_list_page_up(kkcCandidates); + keyEvent.filterAndAccept(); + } else if (keyEvent.key().checkKeyList( + *parent_->config().nextPageKey)) { + kkc_candidate_list_page_down(kkcCandidates); + keyEvent.filterAndAccept(); + } else if (keyEvent.key().isDigit()) { + KeySym syms[] = { + FcitxKey_1, FcitxKey_2, FcitxKey_3, FcitxKey_4, FcitxKey_5, + FcitxKey_6, FcitxKey_7, FcitxKey_8, FcitxKey_9, FcitxKey_0, + }; + + KeyList selectionKey; + KeyStates states; + for (auto sym : syms) { + selectionKey.emplace_back(sym, states); + } + auto idx = keyEvent.key().keyListIndex(selectionKey); + if (idx >= 0) { + kkc_candidate_list_select_at( + kkcCandidates, + idx % kkc_candidate_list_get_page_size(kkcCandidates)); + keyEvent.filterAndAccept(); + } + } + } + + if (keyEvent.filtered()) { + return; + } + + auto key = makeGObjectUnique(kkc_key_event_new_from_x_event( + keyEvent.rawKey().sym(), keyEvent.rawKey().code() - 8, + static_cast<KkcModifierType>(state))); + if (!key) { + KKC_DEBUG() << "Failed to obtain kkc key event"; + return; + } + if (kkc_context_process_key_event(context, key.get())) { + keyEvent.filterAndAccept(); + } + KKC_DEBUG() << "Key event filtered: " << keyEvent.filtered(); +} + +void KkcState::reset() { + kkc_context_reset(context_.get()); + updateUI(); +} + +void KkcState::updateUI() { + if (inKeyEventScope_) { + pendingUpdateUI_ = true; + } else { + doUpdateUI(); + } +} + +void KkcState::doUpdateUI() { + auto *context = this->context(); + + auto &inputPanel = ic_->inputPanel(); + inputPanel.reset(); + Text preedit = kkcContextGetPreedit(context); + if (ic_->capabilityFlags().test(CapabilityFlag::Preedit)) { + inputPanel.setClientPreedit(preedit); + ic_->updatePreedit(); + } else { + inputPanel.setPreedit(preedit); + } + + KkcCandidateList *kkcCandidates = kkc_context_get_candidates(context); + if (kkc_candidate_list_get_page_visible(kkcCandidates)) { + inputPanel.setCandidateList( + std::make_unique<KkcFcitxCandidateList>(parent_, ic_)); + } + + if (kkc_context_has_output(context)) { + gchar *str = kkc_context_poll_output(context); + ic_->commitString(str); + g_free(str); + } + + ic_->updateUserInterface(UserInterfaceComponent::InputPanel); +} + KkcEngine::KkcEngine(Instance *instance) : instance_(instance), factory_([this](InputContext &ic) { return new KkcState(this, ic); }) { @@ -433,9 +589,11 @@ instance_->inputContextManager().registerProperty("kkcState", &factory_); instance_->inputContextManager().foreach([this](InputContext *ic) { auto *state = this->state(ic); - kkc_context_set_input_mode(state->context_.get(), *config_.inputMode); + kkc_context_set_input_mode(state->context(), *config_.inputMode); return true; }); + + constructed_ = true; } KkcEngine::~KkcEngine() {} @@ -450,7 +608,7 @@ InputContextEvent &event) { if (event.type() == EventType::InputContextSwitchInputMethod) { auto *kkcstate = this->state(event.inputContext()); - auto *context = kkcstate->context_.get(); + auto *context = kkcstate->context(); auto text = kkcContextGetPreedit(context); auto str = text.toString(); if (!str.empty()) { @@ -462,73 +620,10 @@ void KkcEngine::keyEvent(const InputMethodEntry & /*entry*/, KeyEvent &keyEvent) { - auto state = static_cast<uint32_t>(keyEvent.rawKey().states()); - state &= static_cast<uint32_t>(KeyState::SimpleMask); - if (keyEvent.isRelease()) { - state |= KKC_MODIFIER_TYPE_RELEASE_MASK; - } - - KKC_DEBUG() << "Kkc received key: " << keyEvent.rawKey() - << " isRelease: " << keyEvent.isRelease() - << " keycode: " << keyEvent.rawKey().code(); - auto *kkcstate = this->state(keyEvent.inputContext()); - auto *context = kkcstate->context_.get(); - KkcCandidateList *kkcCandidates = kkc_context_get_candidates(context); - if (kkc_candidate_list_get_page_visible(kkcCandidates) && - !keyEvent.isRelease()) { - if (keyEvent.key().checkKeyList(*config_.cursorUpKey)) { - kkc_candidate_list_cursor_up(kkcCandidates); - keyEvent.filterAndAccept(); - } else if (keyEvent.key().checkKeyList(*config_.cursorDownKey)) { - kkc_candidate_list_cursor_down(kkcCandidates); - keyEvent.filterAndAccept(); - } else if (keyEvent.key().checkKeyList(*config_.prevPageKey)) { - kkc_candidate_list_page_up(kkcCandidates); - keyEvent.filterAndAccept(); - } else if (keyEvent.key().checkKeyList(*config_.nextPageKey)) { - kkc_candidate_list_page_down(kkcCandidates); - keyEvent.filterAndAccept(); - } else if (keyEvent.key().isDigit()) { - KeySym syms[] = { - FcitxKey_1, FcitxKey_2, FcitxKey_3, FcitxKey_4, FcitxKey_5, - FcitxKey_6, FcitxKey_7, FcitxKey_8, FcitxKey_9, FcitxKey_0, - }; - - KeyList selectionKey; - KeyStates states; - for (auto sym : syms) { - selectionKey.emplace_back(sym, states); - } - auto idx = keyEvent.key().keyListIndex(selectionKey); - if (idx >= 0) { - kkc_candidate_list_select_at( - kkcCandidates, - idx % kkc_candidate_list_get_page_size(kkcCandidates)); - keyEvent.filterAndAccept(); - } - } - } - - if (keyEvent.filtered()) { - updateUI(keyEvent.inputContext()); - return; - } - - auto key = makeGObjectUnique(kkc_key_event_new_from_x_event( - keyEvent.rawKey().sym(), keyEvent.rawKey().code() - 8, - static_cast<KkcModifierType>(state))); - if (!key) { - KKC_DEBUG() << "Failed to obtain kkc key event"; - return; - } - kkcstate->modeChanged_ = false; - if (kkc_context_process_key_event(context, key.get())) { - keyEvent.filterAndAccept(); - updateUI(keyEvent.inputContext()); - } - KKC_DEBUG() << "Key event filtered: " << keyEvent.filtered(); + kkcstate->keyEvent(keyEvent); } + void KkcEngine::reloadConfig() { readAsIni(config_, "conf/kkc.conf"); @@ -546,48 +641,18 @@ void KkcEngine::reset(const InputMethodEntry & /*entry*/, InputContextEvent &event) { auto *state = this->state(event.inputContext()); - auto *context = state->context_.get(); - kkc_context_reset(context); - updateUI(event.inputContext()); + state->reset(); } void KkcEngine::save() { kkc_dictionary_list_save(dictionaries_.get()); } -void KkcEngine::updateUI(InputContext *inputContext) { - auto *state = this->state(inputContext); - auto *context = state->context_.get(); - - auto &inputPanel = inputContext->inputPanel(); - inputPanel.reset(); - Text preedit = kkcContextGetPreedit(context); - if (inputContext->capabilityFlags().test(CapabilityFlag::Preedit)) { - inputPanel.setClientPreedit(preedit); - inputContext->updatePreedit(); - } else { - inputPanel.setPreedit(preedit); - } - - KkcCandidateList *kkcCandidates = kkc_context_get_candidates(context); - if (kkc_candidate_list_get_page_visible(kkcCandidates)) { - inputPanel.setCandidateList( - std::make_unique<KkcFcitxCandidateList>(this, inputContext)); - } - - if (kkc_context_has_output(context)) { - gchar *str = kkc_context_poll_output(context); - inputContext->commitString(str); - g_free(str); - } - - // Ensure we are not composing any text. - if (state->modeChanged_ && preedit.empty() && !inputPanel.candidateList()) { - instance_->showInputMethodInformation(inputContext); +void KkcEngine::updateInputMode(InputContext *ic) { + if (!constructed_) { + return; } - - inputContext->updateUserInterface(UserInterfaceComponent::InputPanel); + modeAction_->update(ic); + instance_->showInputMethodInformation(ic); } -void KkcEngine::updateInputMode(InputContext *ic) { modeAction_->update(ic); } - void KkcEngine::loadDictionary() { kkc_dictionary_list_clear(dictionaries_.get()); auto file = StandardPaths::global().open(StandardPathsType::PkgData, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fcitx5-kkc-5.1.9/src/kkc.h new/fcitx5-kkc-5.1.11/src/kkc.h --- old/fcitx5-kkc-5.1.9/src/kkc.h 2025-12-22 07:18:12.000000000 +0100 +++ new/fcitx5-kkc-5.1.11/src/kkc.h 2026-09-06 04:39:57.000000000 +0200 @@ -57,7 +57,6 @@ EnumAnnotation::dumpDescription(config); int length; auto *rules = kkc_rule_list(&length); - FCITX_INFO() << length; int total = 0; for (int i = 0; i < length; i++) { int priority; @@ -172,8 +171,6 @@ auto model() { return model_.get(); } auto rule() { return userRule_.get(); } - void updateUI(InputContext *inputContext); - std::string subMode(const InputMethodEntry & /*entry*/, InputContext & /*inputContext*/) override; std::string subModeLabelImpl(const fcitx::InputMethodEntry & /*unused*/, @@ -187,6 +184,7 @@ void loadDictionary(); void loadRule(); + bool constructed_ = false; KkcConfig config_; Instance *instance_; FactoryFor<KkcState> factory_;
