From 9d0fad6d0c67d08fb4cb75bcffd3b1cba2297b85 Mon Sep 17 00:00:00 2001 From: Weng Xuetian Date: Sat, 30 Apr 2022 15:19:10 -0700 Subject: [PATCH] Allow check update and restart within flatpak. --- src/lib/fcitx/instance.cpp | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/src/lib/fcitx/instance.cpp b/src/lib/fcitx/instance.cpp index f68281ac9..4de67465b 100644 --- a/src/lib/fcitx/instance.cpp +++ b/src/lib/fcitx/instance.cpp @@ -490,6 +490,8 @@ class InstancePrivate : public QPtrHolder { AddonInstance *notifications_ = nullptr; std::string lastGroup_; + + const bool inFlatpak_ = fs::isreg("/.flatpak-info"); }; InputState::InputState(InstancePrivate *d, InputContext *ic) @@ -1445,12 +1447,17 @@ void Instance::initialize() { save(); if (d->restart_) { auto fcitxBinary = StandardPath::fcitxPath("bindir", "fcitx5"); - std::vector command{fcitxBinary.begin(), fcitxBinary.end()}; - command.push_back('\0'); - char *const argv[] = {command.data(), nullptr}; - execv(argv[0], argv); - perror("Restart failed: execvp:"); - _exit(1); + if (d->inFlatpak_) { + startProcess({"flatpak-spawn", fcitxBinary, "-r"}); + } else { + std::vector command{fcitxBinary.begin(), + fcitxBinary.end()}; + command.push_back('\0'); + char *const argv[] = {command.data(), nullptr}; + execv(argv[0], argv); + perror("Restart failed: execvp:"); + _exit(1); + } } return false; }); @@ -2398,7 +2405,8 @@ void Instance::showInputMethodInformation(InputContext *ic) { bool Instance::checkUpdate() const { FCITX_D(); - return d->addonManager_.checkUpdate() || d->imManager_.checkUpdate() || + return (d->inFlatpak_ && fs::isreg("/app/.updated")) || + d->addonManager_.checkUpdate() || d->imManager_.checkUpdate() || postEvent(CheckUpdateEvent()); }