1 /*
2  * SPDX-FileCopyrightText: 2012~2017 CSSlayer <wengxt@gmail.com>
3  *
4  * SPDX-License-Identifier: BSD-3-Clause
5  *
6  */
7 #ifndef _DBUSADDONS_FCITXQTINPUTCONTEXTPROXY_H_
8 #define _DBUSADDONS_FCITXQTINPUTCONTEXTPROXY_H_
9 
10 #include "fcitx5qt6dbusaddons_export.h"
11 
12 #include "fcitxqtdbustypes.h"
13 #include <QDBusConnection>
14 #include <QDBusPendingReply>
15 #include <QDBusServiceWatcher>
16 #include <QObject>
17 
18 class QDBusPendingCallWatcher;
19 
20 namespace fcitx {
21 
22 class FcitxQtWatcher;
23 class FcitxQtInputContextProxyPrivate;
24 
25 class FCITX5QT6DBUSADDONS_EXPORT FcitxQtInputContextProxy : public QObject {
26     Q_OBJECT
27 public:
28     FcitxQtInputContextProxy(FcitxQtWatcher *watcher, QObject *parent);
29     ~FcitxQtInputContextProxy();
30 
31     bool isValid() const;
32     void setDisplay(const QString &display);
33     const QString &display() const;
34 
35 public Q_SLOTS:
36     QDBusPendingReply<> focusIn();
37     QDBusPendingReply<> focusOut();
38     QDBusPendingReply<bool> processKeyEvent(unsigned int keyval,
39                                             unsigned int keycode,
40                                             unsigned int state, bool type,
41                                             unsigned int time);
42     QDBusPendingReply<> reset();
43     QDBusPendingReply<> setCapability(qulonglong caps);
44     QDBusPendingReply<> setCursorRect(int x, int y, int w, int h);
45     QDBusPendingReply<> setCursorRectV2(int x, int y, int w, int h,
46                                         double scale);
47     QDBusPendingReply<> setSurroundingText(const QString &text,
48                                            unsigned int cursor,
49                                            unsigned int anchor);
50     QDBusPendingReply<> setSurroundingTextPosition(unsigned int cursor,
51                                                    unsigned int anchor);
52     QDBusPendingReply<> prevPage();
53     QDBusPendingReply<> nextPage();
54     QDBusPendingReply<> selectCandidate(int i);
55 
56 Q_SIGNALS:
57     void commitString(const QString &str);
58     void currentIM(const QString &name, const QString &uniqueName,
59                    const QString &langCode);
60     void deleteSurroundingText(int offset, unsigned int nchar);
61     void forwardKey(unsigned int keyval, unsigned int state, bool isRelease);
62     void updateFormattedPreedit(const FcitxQtFormattedPreeditList &str,
63                                 int cursorpos);
64     void updateClientSideUI(const FcitxQtFormattedPreeditList &preedit,
65                             int cursorpos,
66                             const FcitxQtFormattedPreeditList &auxUp,
67                             const FcitxQtFormattedPreeditList &auxDown,
68                             const FcitxQtStringKeyValueList &candidates,
69                             int candidateIndex, int layoutHint, bool hasPrev,
70                             bool hasNext);
71     void inputContextCreated(const QByteArray &uuid);
72 
73 private:
74     FcitxQtInputContextProxyPrivate *const d_ptr;
75     Q_DECLARE_PRIVATE(FcitxQtInputContextProxy);
76 };
77 
78 } // namespace fcitx
79 
80 #endif // _DBUSADDONS_FCITXQTINPUTCONTEXTPROXY_H_
81