Get rid of fcitx utils dependency.
This commit is contained in:
parent
974504b0ff
commit
070456f71c
|
@ -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)
|
||||
|
|
|
@ -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")
|
|
@ -19,7 +19,6 @@ set_target_properties(fcitx5platforminputcontextplugin PROPERTIES
|
|||
)
|
||||
|
||||
target_link_libraries(fcitx5platforminputcontextplugin
|
||||
Fcitx5::Utils
|
||||
Qt5::Core
|
||||
Qt5::Gui
|
||||
Qt5::DBus
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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) {
|
||||
|
|
Loading…
Reference in New Issue