Get rid of fcitx utils dependency.

This commit is contained in:
Weng Xuetian 2020-05-08 07:14:00 -07:00
parent 974504b0ff
commit 070456f71c
5 changed files with 97 additions and 43 deletions

View File

@ -15,10 +15,9 @@ option(BUILD_ONLY_PLUGIN "Build only plugin" Off)
if (BUILD_ONLY_PLUGIN)
set(LIBRARY_TYPE STATIC)
set(LIBRARY_COMPILE_FLAGS "-fvisibility=hidden -fPIC")
set(LIBRARY_COMPILE_FLAGS "-fPIC")
else()
set(LIBRARY_TYPE SHARED)
set(LIBRARY_COMPILE_FLAGS "-fvisibility=hidden")
add_definitions(-DFCITX_GETTEXT_DOMAIN=\"fcitx5-qt\")
endif()
add_definitions(-DFCITX5_QT_VERSION=\"${FCITX5_QT_VERSION}\")
@ -32,7 +31,9 @@ include(ECMUninstallTarget)
find_package(XCB REQUIRED COMPONENTS XCB)
find_package(XKBCommon 0.5.0 REQUIRED COMPONENTS XKBCommon)
if (NOT BUILD_ONLY_PLUGIN)
find_package(Fcitx5Utils REQUIRED)
endif()
find_package(X11 REQUIRED)
add_library(X11Import UNKNOWN IMPORTED)
@ -40,7 +41,12 @@ set_target_properties(X11Import PROPERTIES
IMPORTED_LOCATION "${X11_X11_LIB}"
INTERFACE_INCLUDE_DIRECTORIES "${X11_X11_INCLUDE_PATH}")
if (BUILD_ONLY_PLUGIN)
# Dup a little bit option here.
include(CompilerSettings)
else()
include("${FCITX_INSTALL_CMAKECONFIG_DIR}/Fcitx5Utils/Fcitx5CompilerSettings.cmake")
endif()
set(Fcitx5Qt5_INCLUDE_INSTALL_DIR ${CMAKE_INSTALL_FULL_INCLUDEDIR}/Fcitx5Qt5)
set(Fcitx5Qt4_INCLUDE_INSTALL_DIR ${CMAKE_INSTALL_FULL_INCLUDEDIR}/Fcitx5Qt4)

View File

@ -0,0 +1,23 @@
set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_CXX_STANDARD_REQUIRED TRUE)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_C_STANDARD_REQUIRED TRUE)
set(CMAKE_C_STANDARD 99)
set(CMAKE_C_FLAGS "-Wall -Wextra ${CMAKE_C_FLAGS}")
set(CMAKE_CXX_FLAGS "-Wall -Wextra ${CMAKE_CXX_FLAGS}")
set(CMAKE_SHARED_LINKER_FLAGS "-Wl,--no-undefined -Wl,--as-needed ${CMAKE_SHARED_LINKER_FLAGS}")
set(CMAKE_MODULE_LINKER_FLAGS "-Wl,--no-undefined -Wl,--as-needed ${CMAKE_MODULE_LINKER_FLAGS}")
set(CMAKE_CXX_VISIBILITY_PRESET hidden)
set(CMAKE_VISIBILITY_INLINES_HIDDEN On)
# RPATH
list(FIND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES "${CMAKE_INSTALL_FULL_LIBDIR}" _isSystemPlatformLibDir)
list(FIND CMAKE_CXX_IMPLICIT_LINK_DIRECTORIES "${CMAKE_INSTALL_FULL_LIBDIR}" _isSystemCxxLibDir)
if("${_isSystemPlatformLibDir}" STREQUAL "-1" AND "${_isSystemCxxLibDir}" STREQUAL "-1")
set(CMAKE_SKIP_BUILD_RPATH FALSE)
set(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE)
set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_FULL_LIBDIR}")
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
endif("${_isSystemPlatformLibDir}" STREQUAL "-1" AND "${_isSystemCxxLibDir}" STREQUAL "-1")

View File

@ -19,7 +19,6 @@ set_target_properties(fcitx5platforminputcontextplugin PROPERTIES
)
target_link_libraries(fcitx5platforminputcontextplugin
Fcitx5::Utils
Qt5::Core
Qt5::Gui
Qt5::DBus

View File

@ -41,10 +41,6 @@
#include "fcitxqtinputcontextproxy.h"
#include "qfcitxplatforminputcontext.h"
#include <fcitx-utils/key.h>
#include <fcitx-utils/textformatflags.h>
#include <fcitx-utils/utf8.h>
#include <memory>
#include <xcb/xcb.h>
@ -262,9 +258,9 @@ void QFcitxPlatformInputContext::update(Qt::InputMethodQueries queries) {
#define CHECK_HINTS(_HINTS, _CAPABILITY) \
if (hints & _HINTS) \
addCapability(data, fcitx::CapabilityFlag::_CAPABILITY); \
addCapability(data, FcitxCapabilityFlag_##_CAPABILITY); \
else \
removeCapability(data, fcitx::CapabilityFlag::_CAPABILITY);
removeCapability(data, FcitxCapabilityFlag_##_CAPABILITY);
CHECK_HINTS(Qt::ImhHiddenText, Password)
CHECK_HINTS(Qt::ImhSensitiveData, Sensitive)
@ -291,8 +287,8 @@ void QFcitxPlatformInputContext::update(Qt::InputMethodQueries queries) {
if (!((queries & Qt::ImSurroundingText) &&
(queries & Qt::ImCursorPosition)))
break;
if (data.capability.test(fcitx::CapabilityFlag::Password) ||
data.capability.test(fcitx::CapabilityFlag::Sensitive))
if ((data.capability & FcitxCapabilityFlag_Password) ||
(data.capability & FcitxCapabilityFlag_Sensitive))
break;
QVariant var = query.value(Qt::ImSurroundingText);
QVariant var1 = query.value(Qt::ImCursorPosition);
@ -304,7 +300,7 @@ void QFcitxPlatformInputContext::update(Qt::InputMethodQueries queries) {
#define SURROUNDING_THRESHOLD 4096
if (text.length() < SURROUNDING_THRESHOLD) {
if (checkUtf8(text.toUtf8())) {
addCapability(data, fcitx::CapabilityFlag::SurroundingText);
addCapability(data, FcitxCapabilityFlag_SurroundingText);
int cursor = var1.toInt();
int anchor;
@ -335,7 +331,7 @@ void QFcitxPlatformInputContext::update(Qt::InputMethodQueries queries) {
data.surroundingAnchor = -1;
data.surroundingCursor = -1;
data.surroundingText = QString();
removeCapability(data, fcitx::CapabilityFlag::SurroundingText);
removeCapability(data, FcitxCapabilityFlag_SurroundingText);
}
} while (0);
}
@ -427,19 +423,19 @@ void QFcitxPlatformInputContext::createInputContextFinished(
}
}
fcitx::CapabilityFlags flag;
flag |= fcitx::CapabilityFlag::Preedit;
flag |= fcitx::CapabilityFlag::FormattedPreedit;
flag |= fcitx::CapabilityFlag::ClientUnfocusCommit;
flag |= fcitx::CapabilityFlag::GetIMInfoOnFocus;
quint64 flag = 0;
flag |= FcitxCapabilityFlag_Preedit;
flag |= FcitxCapabilityFlag_FormattedPreedit;
flag |= FcitxCapabilityFlag_ClientUnfocusCommit;
flag |= FcitxCapabilityFlag_GetIMInfoOnFocus;
useSurroundingText_ =
get_boolean_env("FCITX_QT_ENABLE_SURROUNDING_TEXT", true);
if (useSurroundingText_) {
flag |= fcitx::CapabilityFlag::SurroundingText;
flag |= FcitxCapabilityFlag_SurroundingText;
}
if (qApp && qApp->platformName() == "wayland") {
flag |= fcitx::CapabilityFlag::RelativeRect;
flag |= FcitxCapabilityFlag_RelativeRect;
}
addCapability(*data, flag, true);
@ -479,28 +475,22 @@ void QFcitxPlatformInputContext::updateFormattedPreedit(
QList<QInputMethodEvent::Attribute> attrList;
Q_FOREACH (const FcitxQtFormattedPreedit &preedit, preeditList) {
str += preedit.string();
if (!(fcitx::TextFormatFlags(preedit.format()) &
fcitx::TextFormatFlag::DontCommit))
if (!(preedit.format() & FcitxTextFormatFlag_DontCommit))
commitStr += preedit.string();
QTextCharFormat format;
if (fcitx::TextFormatFlags(preedit.format()) &
fcitx::TextFormatFlag::Underline) {
if (preedit.format() & FcitxTextFormatFlag_Underline) {
format.setUnderlineStyle(QTextCharFormat::DashUnderline);
}
if (fcitx::TextFormatFlags(preedit.format()) &
fcitx::TextFormatFlag::Strike) {
if (preedit.format() & FcitxTextFormatFlag_Strike) {
format.setFontStrikeOut(true);
}
if (fcitx::TextFormatFlags(preedit.format()) &
fcitx::TextFormatFlag::Bold) {
if (preedit.format() & FcitxTextFormatFlag_Bold) {
format.setFontWeight(QFont::Bold);
}
if (fcitx::TextFormatFlags(preedit.format()) &
fcitx::TextFormatFlag::Italic) {
if (preedit.format() & FcitxTextFormatFlag_Italic) {
format.setFontItalic(true);
}
if (fcitx::TextFormatFlags(preedit.format()) &
fcitx::TextFormatFlag::HighLight) {
if (preedit.format() & FcitxTextFormatFlag_HighLight) {
QBrush brush;
QPalette palette;
palette = QGuiApplication::palette();
@ -654,24 +644,28 @@ void QFcitxPlatformInputContext::createICData(QWindow *w) {
}
}
QKeyEvent *QFcitxPlatformInputContext::createKeyEvent(uint keyval, uint _state,
QKeyEvent *QFcitxPlatformInputContext::createKeyEvent(uint keyval, uint state,
bool isRelease) {
Qt::KeyboardModifiers qstate = Qt::NoModifier;
fcitx::KeyStates state(_state);
enum FcitxKeyStates {
FcitxKeyState_Alt = 1 << 3,
FcitxKeyState_Shift = 1 << 0,
FcitxKeyState_Ctrl = 1 << 0,
};
int count = 1;
if (state & fcitx::KeyState::Alt) {
if (state & FcitxKeyState_Alt) {
qstate |= Qt::AltModifier;
count++;
}
if (state & fcitx::KeyState::Shift) {
if (state & FcitxKeyState_Shift) {
qstate |= Qt::ShiftModifier;
count++;
}
if (state & fcitx::KeyState::Ctrl) {
if (state & FcitxKeyState_Ctrl) {
qstate |= Qt::ControlModifier;
count++;
}
@ -686,7 +680,7 @@ QKeyEvent *QFcitxPlatformInputContext::createKeyEvent(uint keyval, uint _state,
QKeyEvent *keyevent =
new QKeyEvent(isRelease ? (QEvent::KeyRelease) : (QEvent::KeyPress),
key, qstate, 0, keyval, _state, text, false, count);
key, qstate, 0, keyval, state, text, false, count);
return keyevent;
}

View File

@ -30,7 +30,6 @@
#include <QPointer>
#include <QRect>
#include <QWindow>
#include <fcitx-utils/capabilityflags.h>
#include <qpa/qplatforminputcontext.h>
#include <unordered_map>
#include <xkbcommon/xkbcommon-compose.h>
@ -39,13 +38,47 @@ namespace fcitx {
class FcitxQtConnection;
// This need to keep sync with fcitx5.
enum FcitxCapabilityFlag : uint64_t {
FcitxCapabilityFlag_Preedit = (1 << 1),
FcitxCapabilityFlag_Password = (1 << 3),
FcitxCapabilityFlag_FormattedPreedit = (1 << 4),
FcitxCapabilityFlag_ClientUnfocusCommit = (1 << 5),
FcitxCapabilityFlag_SurroundingText = (1 << 6),
FcitxCapabilityFlag_Email = (1 << 7),
FcitxCapabilityFlag_Digit = (1 << 8),
FcitxCapabilityFlag_Uppercase = (1 << 9),
FcitxCapabilityFlag_Lowercase = (1 << 10),
FcitxCapabilityFlag_NoAutoUpperCase = (1 << 11),
FcitxCapabilityFlag_Url = (1 << 12),
FcitxCapabilityFlag_Dialable = (1 << 13),
FcitxCapabilityFlag_Number = (1 << 14),
FcitxCapabilityFlag_NoSpellCheck = (1 << 17),
FcitxCapabilityFlag_Alpha = (1 << 21),
FcitxCapabilityFlag_GetIMInfoOnFocus = (1 << 23),
FcitxCapabilityFlag_RelativeRect = (1 << 24),
FcitxCapabilityFlag_Multiline = (1ull << 35),
FcitxCapabilityFlag_Sensitive = (1ull << 36),
};
enum FcitxTextFormatFlag : int {
FcitxTextFormatFlag_Underline = (1 << 3), /**< underline is a flag */
FcitxTextFormatFlag_HighLight = (1 << 4), /**< highlight the preedit */
FcitxTextFormatFlag_DontCommit = (1 << 5),
FcitxTextFormatFlag_Bold = (1 << 6),
FcitxTextFormatFlag_Strike = (1 << 7),
FcitxTextFormatFlag_Italic = (1 << 8),
FcitxTextFormatFlag_None = 0,
};
struct FcitxQtICData {
FcitxQtICData(FcitxQtWatcher *watcher)
: proxy(new FcitxQtInputContextProxy(watcher, watcher)),
surroundingAnchor(-1), surroundingCursor(-1) {}
FcitxQtICData(const FcitxQtICData &that) = delete;
~FcitxQtICData() { delete proxy; }
fcitx::CapabilityFlags capability;
quint64 capability;
FcitxQtInputContextProxy *proxy;
QRect rect;
QString surroundingText;
@ -132,7 +165,7 @@ private:
bool processCompose(uint keyval, uint state, bool isRelaese);
QKeyEvent *createKeyEvent(uint keyval, uint state, bool isRelaese);
void addCapability(FcitxQtICData &data, fcitx::CapabilityFlags capability,
void addCapability(FcitxQtICData &data, quint64 capability,
bool forceUpdate = false) {
auto newcaps = data.capability | capability;
if (data.capability != newcaps || forceUpdate) {
@ -141,8 +174,7 @@ private:
}
}
void removeCapability(FcitxQtICData &data,
fcitx::CapabilityFlags capability,
void removeCapability(FcitxQtICData &data, quint64 capability,
bool forceUpdate = false) {
auto newcaps = data.capability & (~capability);
if (data.capability != newcaps || forceUpdate) {