fcitx5-qt/qt5/platforminputcontext/hybridinputcontext.h

96 lines
3.0 KiB
C++

/*
* SPDX-FileCopyrightText: 2023~2023 CSSlayer <wengxt@gmail.com>
*
* SPDX-License-Identifier: BSD-3-Clause
*
*/
#ifndef HYBRIDINPUTCONTEXT_H
#define HYBRIDINPUTCONTEXT_H
#include "fcitx4inputcontextproxy.h"
#include "fcitx4watcher.h"
#include "fcitxqtdbustypes.h"
#include "fcitxqtinputcontextproxy.h"
#include "fcitxqtwatcher.h"
#include <QDBusPendingReply>
#include <QObject>
#include <QString>
#include <QTimer>
namespace fcitx {
class HybridInputContext : public QObject {
Q_OBJECT
public:
HybridInputContext(FcitxQtWatcher *watcher, Fcitx4Watcher *fcitx4Watcher,
QObject *parent);
void focusIn();
void focusOut();
void setSurroundingText(const QString &text, unsigned int cursor,
unsigned int anchor);
void setSurroundingTextPosition(unsigned int cursor, unsigned int anchor);
void prevPage();
void nextPage();
void reset();
void selectCandidate(int index);
bool supportInvokeAction() const;
void invokeAction(unsigned int action, int cursor);
bool isValid() const;
void showVirtualKeyboard();
void hideVirtualKeyboard();
bool isVirtualKeyboardVisible() const;
void setDisplay(const QString &display);
void setCapability(quint64 capability);
void setCursorRect(int x, int y, int w, int h);
void setCursorRectV2(int x, int y, int w, int h, double scale);
void setSupportedCapability(quint64 supported);
QDBusPendingCall processKeyEvent(unsigned int keyval, unsigned int keycode,
unsigned int state, bool type,
unsigned int time);
static bool processKeyEventResult(const QDBusPendingCall &call);
Q_SIGNALS:
void commitString(const QString &str);
void currentIM(const QString &name, const QString &uniqueName,
const QString &langCode);
void deleteSurroundingText(int offset, unsigned int nchar);
void forwardKey(unsigned int keyval, unsigned int state, bool isRelease);
void updateFormattedPreedit(const FcitxQtFormattedPreeditList &str,
int cursorpos);
void updateClientSideUI(const FcitxQtFormattedPreeditList &preedit,
int cursorpos,
const FcitxQtFormattedPreeditList &auxUp,
const FcitxQtFormattedPreeditList &auxDown,
const FcitxQtStringKeyValueList &candidates,
int candidateIndex, int layoutHint, bool hasPrev,
bool hasNext);
void inputContextCreated(const QByteArray &uuid);
void notifyFocusOut();
void virtualKeyboardVisibilityChanged(bool visible);
private Q_SLOTS:
void recheck();
void doRecheck(bool skipFcitx5);
void inputContextCreationFailed();
private:
QTimer timer_;
FcitxQtWatcher *watcher_;
Fcitx4Watcher *fcitx4Watcher_;
FcitxQtInputContextProxy *proxy_ = nullptr;
Fcitx4InputContextProxy *proxy4_ = nullptr;
QString display_;
};
} // namespace fcitx
#endif