Skip to content

Commit 0240758

Browse files
committed
Enforce static registry to be a function, not a variable.
1 parent 916f46e commit 0240758

File tree

6 files changed

+19
-13
lines changed

6 files changed

+19
-13
lines changed

src/CMakeLists.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ if (ENABLE_SERVER)
1414
fcitx5_get_addon_targets(ADDON_TARGETS modules frontend im ui)
1515

1616
fcitx5_import_addons(fcitx5
17-
REGISTRY_VARNAME staticAddon
17+
REGISTRY_VARNAME getStaticAddon
1818
ADDONS ${ADDON_TARGETS}
1919
)
2020
endif()

src/lib/fcitx-utils/Fcitx5Macros.cmake

+1-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ function(fcitx5_import_addons target)
2424
set(filename "${CMAKE_CURRENT_BINARY_DIR}/${target}-${addon}-import-addon.cpp")
2525
file(WRITE "${filename}" "
2626
#include <fcitx/addonloader.h>
27-
extern fcitx::StaticAddonRegistry ${FCITX5_IMPORT_REGISTRY_VARNAME};
27+
extern fcitx::StaticAddonRegistry ${FCITX5_IMPORT_REGISTRY_VARNAME}();
2828
FCITX_IMPORT_ADDON_FACTORY(${FCITX5_IMPORT_REGISTRY_VARNAME}, ${addon});
2929
")
3030
target_sources(${target} PRIVATE ${filename})

src/lib/fcitx/addoninstance.h

+10-4
Original file line numberDiff line numberDiff line change
@@ -208,20 +208,26 @@ class FCITXCORE_EXPORT AddonInstance {
208208
} \
209209
}
210210

211+
#define FCITX_DEFINE_STATIC_ADDON_REGISTRY(Name, ...) \
212+
::fcitx::StaticAddonRegistry &Name() { \
213+
static ::fcitx::StaticAddonRegistry registry{__VA_ARGS__}; \
214+
return registry; \
215+
}
216+
211217
#define FCITX_ADDON_FACTORY_V2_BACKWARDS(AddonName, ClassName) \
212218
FCITX_ADDON_FACTORY_V2(AddonName, ClassName) \
213219
FCITX_ADDON_FACTORY(ClassName)
214220

215-
#define FCITX_IMPORT_ADDON_FACTORY(StaticRegistry, AddonName) \
221+
#define FCITX_IMPORT_ADDON_FACTORY(StaticRegistryGetter, AddonName) \
216222
extern "C" { \
217223
::fcitx::AddonFactory *fcitx_addon_factory_instance_##AddonName(); \
218224
} \
219225
class StaticAddonRegistrar_##AddonName { \
220226
public: \
221227
StaticAddonRegistrar_##AddonName() { \
222-
(StaticRegistry) \
223-
.emplace(FCITX_STRINGIFY(AddonName), \
224-
fcitx_addon_factory_instance_##AddonName()); \
228+
(StaticRegistryGetter)().emplace( \
229+
FCITX_STRINGIFY(AddonName), \
230+
fcitx_addon_factory_instance_##AddonName()); \
225231
} \
226232
}; \
227233
StaticAddonRegistrar_##AddonName staticAddonRegistrar_##AddonName

src/server/main.cpp

+3-3
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,9 @@ using namespace fcitx;
3131
int selfpipe[2];
3232
std::string crashlog;
3333

34-
StaticAddonRegistry staticAddon;
34+
FCITX_DEFINE_STATIC_ADDON_REGISTRY(getStaticAddon)
3535
#ifdef ENABLE_KEYBOARD
36-
FCITX_IMPORT_ADDON_FACTORY(staticAddon, keyboard);
36+
FCITX_IMPORT_ADDON_FACTORY(getStaticAddon, keyboard);
3737
#endif
3838

3939
int main(int argc, char *argv[]) {
@@ -71,7 +71,7 @@ int main(int argc, char *argv[]) {
7171
Instance instance(argc, argv);
7272
instance.setBinaryMode();
7373
instance.setSignalPipe(selfpipe[0]);
74-
instance.addonManager().registerDefaultLoader(&staticAddon);
74+
instance.addonManager().registerDefaultLoader(&getStaticAddon());
7575

7676
ret = instance.exec();
7777
restart = instance.isRestartRequested();

test/testcompose.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222

2323
using namespace fcitx;
2424

25-
StaticAddonRegistry staticAddon;
25+
FCITX_DEFINE_STATIC_ADDON_REGISTRY(staticAddon);
2626
FCITX_IMPORT_ADDON_FACTORY(staticAddon, keyboard);
2727

2828
void scheduleEvent(EventDispatcher *dispatcher, Instance *instance) {
@@ -96,7 +96,7 @@ int main() {
9696
instance.privateData()->xkbContext_.get(), testCompose,
9797
FCITX_ARRAY_SIZE(testCompose), "", XKB_COMPOSE_FORMAT_TEXT_V1,
9898
XKB_COMPOSE_COMPILE_NO_FLAGS));
99-
instance.addonManager().registerDefaultLoader(&staticAddon);
99+
instance.addonManager().registerDefaultLoader(&staticAddon());
100100
EventDispatcher dispatcher;
101101
dispatcher.attach(&instance.eventLoop());
102102
scheduleEvent(&dispatcher, &instance);

test/testspell.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121

2222
using namespace fcitx;
2323

24-
StaticAddonRegistry staticAddon;
24+
FCITX_DEFINE_STATIC_ADDON_REGISTRY(staticAddon);
2525
FCITX_IMPORT_ADDON_FACTORY(staticAddon, keyboard);
2626

2727
void scheduleEvent(EventDispatcher *dispatcher, Instance *instance) {
@@ -78,7 +78,7 @@ int main() {
7878
char arg2[] = "--enable=keyboard,testfrontend,spell,testui";
7979
char *argv[] = {arg0, arg1, arg2};
8080
Instance instance(FCITX_ARRAY_SIZE(argv), argv);
81-
instance.addonManager().registerDefaultLoader(&staticAddon);
81+
instance.addonManager().registerDefaultLoader(&staticAddon());
8282
EventDispatcher dispatcher;
8383
dispatcher.attach(&instance.eventLoop());
8484
scheduleEvent(&dispatcher, &instance);

0 commit comments

Comments
 (0)