summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHuang Peng <shawn.p.huang@gmail.com>2008-09-19 13:46:31 +0800
committerHuang Peng <shawn.p.huang@gmail.com>2008-09-19 13:46:31 +0800
commit36e2eeabd2f3d6a99ea2aeba88fd8186767683f9 (patch)
treeec7c5cd777a104baccf5e296d54ba0ae2fa22c50
parentb445ab022c2b71325ceee836499cc0534780ab54 (diff)
downloadibus-qt3.tar.gz
ibus-qt3.tar.xz
ibus-qt3.zip
WIP.qt3
-rw-r--r--client/qt4/ibus-client.cpp209
-rw-r--r--client/qt4/ibus-client.h38
-rw-r--r--client/qt4/ibus-input-context.h12
3 files changed, 213 insertions, 46 deletions
diff --git a/client/qt4/ibus-client.cpp b/client/qt4/ibus-client.cpp
index 24b9177..9c96363 100644
--- a/client/qt4/ibus-client.cpp
+++ b/client/qt4/ibus-client.cpp
@@ -19,13 +19,23 @@
* Free Software Foundation, Inc., 59 Temple Place, Suite 330,
* Boston, MA 02111-1307 USA
*/
+
#include <config.h>
-#include <QtDebug>
-#include <QFile>
-#include <QDBusConnection>
-#include <QCoreApplication>
-#include <QDBusMessage>
-#include <QDBusArgument>
+
+#ifdef QT4
+# include <QFile>
+# include <QtDebug>
+# include <QDBusConnection>
+# include <QCoreApplication>
+# include <QDBusMessage>
+# include <QDBusArgument>
+#else
+# include <qvariant.h>
+# include <qfile.h>
+# include <dbus/qdbusconnection.h>
+# include <dbus/qdbusdata.h>
+# include <stdlib.h>
+#endif
#include <pwd.h>
@@ -33,20 +43,78 @@
#include "ibus-input-context.h"
#ifdef Q_WS_X11
-# include <QX11Info>
-# include <X11/Xlib.h>
-# include <X11/keysym.h>
-# include <X11/Xutil.h>
-# ifdef HAVE_X11_XKBLIB_H
-# define HAVE_XKB
-# include <X11/XKBlib.h>
-# endif
+# ifdef QT4
+# include <QX11Info>
+# else
+# include <qpaintdevice.h>
+# endif
+# include <X11/Xlib.h>
+# include <X11/keysym.h>
+# include <X11/Xutil.h>
+# ifdef HAVE_X11_XKBLIB_H
+# define HAVE_XKB
+# include <X11/XKBlib.h>
+# endif
#endif
#define IBUS_NAME "org.freedesktop.IBus"
#define IBUS_PATH "/org/freedesktop/IBus"
#define IBUS_INTERFACE "org.freedesktop.IBus"
+#ifdef QT4
+class MyDBusConnection : public QDBusConnection {
+};
+class MyDBusMessage : public QDBusMessage {
+};
+#else
+class MyDBusConnection : public QDBusConnection {
+public:
+ MyDBusConnection (const QDBusConnection & other) : QDBusConnection (other) {}
+ QDBusMessage call ( const QDBusMessage & message) const {
+ return this->sendWithReply (message);
+ }
+};
+class MyDBusMessage: public QDBusMessage {
+public:
+ MyDBusMessage (const QDBusMessage & other) : QDBusMessage (other) {}
+
+#if 0
+ MyDBusMessage &operator<< (const bool &arg) {
+ append (QDBusData::fromBool (arg));
+ return *this;
+ }
+#endif
+
+ MyDBusMessage &operator<< (const QVariant &arg) {
+ if (arg.type () == QVariant::String) {
+ append (QDBusData::fromString (arg.toString ()));
+ }
+ else if (arg.type () == QVariant::Int) {
+ append (QDBusData::fromInt32 (arg.toInt ()));
+ }
+ else if (arg.type () == QVariant::UInt) {
+ append (QDBusData::fromUInt32 (arg.toUInt ()));
+ }
+ else {
+ qWarning ("We can not append %s", arg.typeName ());
+ }
+ return *this;
+ }
+
+ QValueList<QDBusData> & arguments () {
+ return *this;
+ }
+
+public:
+ static QDBusMessage createMethodCall ( const QString & service,
+ const QString & path,
+ const QString & interface,
+ const QString & method ) {
+ return QDBusMessage::methodCall (service, path, interface, method);
+ }
+};
+#endif
+
IBusClient::IBusClient ()
: ibus (NULL), japan_groups (0)
@@ -79,7 +147,11 @@ IBusClient::IBusClient ()
username = getenv ("LNAME");
session = getenv ("DISPLAY");
+#ifdef QT4
if (session.indexOf (".") == -1) {
+#else
+ if (session.find (".") == -1) {
+#endif
session += ".0";
}
session.replace (":", "-");
@@ -88,6 +160,7 @@ IBusClient::IBusClient ()
ibus_addr = QString("unix:path=/tmp/ibus-%1/ibus-%2").arg (username, session);
connectToBus ();
+#ifdef QT4
QObject::connect (
&watcher,
SIGNAL(directoryChanged(const QString &)),
@@ -98,6 +171,7 @@ IBusClient::IBusClient ()
ibus_dir = QString ("/tmp/ibus-%1/").arg (username);
watcher.addPath (ibus_dir);
+#endif
}
IBusClient::~IBusClient ()
@@ -111,19 +185,23 @@ IBusClient::createInputContextRemote ()
{
QString ic;
if (ibus) {
- QDBusMessage message = QDBusMessage::createMethodCall (
+ MyDBusMessage message = MyDBusMessage::createMethodCall (
IBUS_NAME,
IBUS_PATH,
IBUS_INTERFACE,
"CreateInputContext");
+#ifdef QT4
message << QCoreApplication::applicationName ();
+#else
+ message << QString ("QT3Application");
+#endif
message = ibus->call (message);
if (message.type () == QDBusMessage::ErrorMessage) {
- qWarning() << message.errorMessage ();
+ qWarning ("Call CreateInputContext failed!");
}
else if (message.type () == QDBusMessage::ReplyMessage) {
- ic = message.arguments () [0].toString ();
+ ic = message.arguments ()[0].toString ();
}
}
return ic;
@@ -143,23 +221,34 @@ IBusClient::findYenBarKeys ()
int group;
KeySym *map = NULL, *syms;
+#ifdef QT4
+ Display *display = QX11Info::display ();
+#else
+ Display *display = QPaintDevice::x11AppDisplay ();
+#endif
+
japan_groups = 0;
+
+#ifdef QT4
japan_yen_bar_keys.clear ();
+#else
+ japan_yen_bar_keys.truncate (0);
+#endif
- desc = XkbGetMap (QX11Info::display (), 0, XkbUseCoreKbd);
+ desc = XkbGetMap (display, 0, XkbUseCoreKbd);
if (desc == NULL) {
qWarning ("Can not allocate XkbDescRec!");
goto _out;
}
retval =
- Success == (status = XkbGetControls (QX11Info::display (),
+ Success == (status = XkbGetControls (display,
XkbSlowKeysMask,
desc)) &&
- Success == (status = XkbGetNames (QX11Info::display (),
+ Success == (status = XkbGetNames (display,
XkbGroupNamesMask | XkbIndicatorNamesMask,
desc)) &&
- Success == (status = XkbGetIndicatorMap (QX11Info::display (),
+ Success == (status = XkbGetIndicatorMap (display,
XkbAllIndicatorsMask,
desc));
if (retval) {
@@ -169,7 +258,7 @@ IBusClient::findYenBarKeys ()
QString group_name;
if (*pa == None)
continue;
- group_name = XGetAtomName (QX11Info::display (), *pa);
+ group_name = XGetAtomName (display, *pa);
if (group_name == "Japan") {
japan_groups |= (1 << i);
}
@@ -181,9 +270,9 @@ IBusClient::findYenBarKeys ()
}
- XDisplayKeycodes (QX11Info::display (), &min_keycode, &max_keycode);
+ XDisplayKeycodes (display, &min_keycode, &max_keycode);
keycode_count = max_keycode - min_keycode + 1;
- map = XGetKeyboardMapping (QX11Info::display (),
+ map = XGetKeyboardMapping (display,
min_keycode, keycode_count, &keysyms_per_keycode);
if (map == NULL) {
goto _out;
@@ -196,7 +285,12 @@ IBusClient::findYenBarKeys ()
keycode++, syms += keysyms_per_keycode) {
if (syms[group * 2] != XK_backslash || syms[group * 2 + 1] != XK_bar)
continue;
+#ifdef QT4
japan_yen_bar_keys.append (keycode);
+#else
+ japan_yen_bar_keys.resize (japan_yen_bar_keys.size () + 1);
+ japan_yen_bar_keys[japan_yen_bar_keys.size () - 1] = keycode;
+#endif
}
}
@@ -223,7 +317,7 @@ IBusClient::createInputContext ()
context_list.append (ctx);
if (! ic.isEmpty ()) {
- context_dict[ic] = ctx;
+ context_dict.insert (ic, ctx);
}
return (QInputContext *) ctx;
@@ -237,6 +331,7 @@ IBusClient::releaseInputContext (IBusInputContext *ctx)
QString ic = ctx->getIC ();
if (ibus && !ic.isEmpty ()) {
+#ifdef QT4
QDBusMessage message = QDBusMessage::createMethodCall (
IBUS_NAME,
IBUS_PATH,
@@ -248,9 +343,26 @@ IBusClient::releaseInputContext (IBusInputContext *ctx)
if (message.type () == QDBusMessage::ErrorMessage) {
qWarning() << message.errorMessage ();
}
+#else
+ QDBusMessage message = QDBusMessage::methodCall (
+ IBUS_NAME,
+ IBUS_PATH,
+ IBUS_INTERFACE,
+ "ReleaseInputContext");
+ message.append (QDBusData::fromString(ctx->getIC ()));
+ message = ibus->sendWithReply (message);
+
+ if (message.type () == QDBusMessage::ErrorMessage) {
+ qWarning ("Call ReleaseInputContext failed!");
+ }
+#endif
context_dict.remove (ic);
}
+#ifdef QT4
context_list.removeAll (ctx);
+#else
+ while (context_list.remove (ctx)) ;
+#endif
}
#ifndef Q_WS_X11
@@ -341,12 +453,17 @@ IBusClient::x11FilterEvent (IBusInputContext *ctx, QWidget * /* keywidget */, XE
#ifdef HAVE_XKB
int group = XkbGroupForCoreState (state);
if (keyval == XK_backslash && japan_groups & (1 << group)) {
+#ifdef QT4
if (japan_yen_bar_keys.indexOf (xevent->xkey.keycode) != -1) {
+#else
+ if (japan_yen_bar_keys.find (xevent->xkey.keycode) != -1) {
+#endif
keyval = XK_yen;
}
}
#endif
+#ifdef QT4
QDBusMessage message = QDBusMessage::createMethodCall (
IBUS_NAME,
IBUS_PATH,
@@ -366,6 +483,28 @@ IBusClient::x11FilterEvent (IBusInputContext *ctx, QWidget * /* keywidget */, XE
else {
return message.arguments ()[0].toBool ();
}
+#else
+ QDBusMessage message = QDBusMessage::methodCall (
+ IBUS_NAME,
+ IBUS_PATH,
+ IBUS_INTERFACE,
+ "ProcessKeyEvent");
+ message.append (QDBusData::fromString (ctx->getIC ()));
+ message.append (QDBusData::fromUInt32 (keyval));
+ message.append (QDBusData::fromBool (is_press));
+ message.append (QDBusData::fromUInt32 (state));
+
+ message = ibus->sendWithReply (message);
+
+ if (message.type() == QDBusMessage::ErrorMessage) {
+ qWarning ("Call ProcessKeyEvent Failed");
+ return false;
+ }
+ else {
+ return message[0].toBool ();
+ }
+
+#endif
}
#endif
@@ -383,7 +522,7 @@ IBusClient::setCursorLocation (IBusInputContext *ctx, QRect &rect)
return;
}
- QDBusMessage message = QDBusMessage::createMethodCall (
+ MyDBusMessage message = MyDBusMessage::createMethodCall (
IBUS_NAME,
IBUS_PATH,
IBUS_INTERFACE,
@@ -395,7 +534,7 @@ IBusClient::setCursorLocation (IBusInputContext *ctx, QRect &rect)
message << rect.height ();
message = ibus->call (message);
if (message.type() == QDBusMessage::ErrorMessage) {
- qWarning() << message.errorMessage ();
+ qWarning("Call SetCursorLocation failed!");
}
}
@@ -408,7 +547,7 @@ IBusClient::reset (IBusInputContext *ctx)
return;
}
- QDBusMessage message = QDBusMessage::createMethodCall (
+ MyDBusMessage message = MyDBusMessage::createMethodCall (
IBUS_NAME,
IBUS_PATH,
IBUS_INTERFACE,
@@ -417,7 +556,7 @@ IBusClient::reset (IBusInputContext *ctx)
message = ibus->call (message);
if (message.type() == QDBusMessage::ErrorMessage) {
- qWarning() << message.errorMessage ();
+ qWarning ("Call Reset failed");
}
}
@@ -430,7 +569,7 @@ IBusClient::focusIn (IBusInputContext *ctx)
return;
}
- QDBusMessage message = QDBusMessage::createMethodCall (
+ MyDBusMessage message = MyDBusMessage::createMethodCall (
IBUS_NAME,
IBUS_PATH,
IBUS_INTERFACE,
@@ -439,7 +578,7 @@ IBusClient::focusIn (IBusInputContext *ctx)
message = ibus->call (message);
if (message.type() == QDBusMessage::ErrorMessage) {
- qWarning() << message.errorMessage ();
+ qWarning ("Call FocusIn failed");
}
}
@@ -453,7 +592,7 @@ IBusClient::focusOut (IBusInputContext *ctx)
return;
}
- QDBusMessage message = QDBusMessage::createMethodCall (
+ MyDBusMessage message = MyDBusMessage::createMethodCall (
IBUS_NAME,
IBUS_PATH,
IBUS_INTERFACE,
@@ -462,7 +601,7 @@ IBusClient::focusOut (IBusInputContext *ctx)
message = ibus->call (message);
if (message.type() == QDBusMessage::ErrorMessage) {
- qWarning() << message.errorMessage ();
+ qWarning ("Call FocusOut failed");
}
}
@@ -475,7 +614,7 @@ IBusClient::setCapabilities (IBusInputContext *ctx, int caps)
return;
}
- QDBusMessage message = QDBusMessage::createMethodCall (
+ MyDBusMessage message = MyDBusMessage::createMethodCall (
IBUS_NAME,
IBUS_PATH,
IBUS_INTERFACE,
@@ -485,7 +624,7 @@ IBusClient::setCapabilities (IBusInputContext *ctx, int caps)
message = ibus->call (message);
if (message.type() == QDBusMessage::ErrorMessage) {
- qWarning() << message.errorMessage ();
+ qWarning ("Call SetCapabilities failed");
}
}
diff --git a/client/qt4/ibus-client.h b/client/qt4/ibus-client.h
index c2c79ab..97e4d1c 100644
--- a/client/qt4/ibus-client.h
+++ b/client/qt4/ibus-client.h
@@ -21,14 +21,25 @@
*/
#ifndef __IBUS_CLIENT_H_
#define __IBUS_CLIENT_H_
-#include <QObject>
-#include <QList>
-#include <QHash>
-#include <QInputContext>
-#include <QFileSystemWatcher>
-#include <QDBusMessage>
-class QDBusConnection;
+#ifdef QT4
+# include <QObject>
+# include <QList>
+# include <QVector>
+# include <QHash>
+# include <QInputContext>
+# include <QFileSystemWatcher>
+# include <QDBusMessage>
+#else
+# include <qobject.h>
+# include <qptrlist.h>
+# include <qmemarray.h>
+# include <qdict.h>
+# include <qinputcontext.h>
+# include <dbus/qdbusmessage.h>
+#endif
+
+class MyDBusConnection;
class IBusInputContext;
class IBusClient : public QObject {
@@ -76,10 +87,15 @@ private:
QString createInputContextRemote ();
void findYenBarKeys ();
- QDBusConnection *ibus;
- QFileSystemWatcher watcher;
+ MyDBusConnection *ibus;
+#ifdef QT4
QList <IBusInputContext *> context_list;
+ QFileSystemWatcher watcher;
QHash <QString, IBusInputContext *>context_dict;
+#else
+ QPtrList <IBusInputContext> context_list;
+ QDict <IBusInputContext>context_dict;
+#endif
QString username;
QString session;
QString ibus_path;
@@ -87,7 +103,11 @@ private:
/* hack japan keyboard */
unsigned int japan_groups;
+#ifdef QT4
QVector <unsigned int> japan_yen_bar_keys;
+#else
+ QMemArray <unsigned int> japan_yen_bar_keys;
+#endif
};
diff --git a/client/qt4/ibus-input-context.h b/client/qt4/ibus-input-context.h
index a17e594..2515aa4 100644
--- a/client/qt4/ibus-input-context.h
+++ b/client/qt4/ibus-input-context.h
@@ -21,8 +21,16 @@
*/
#ifndef __IBUS_INPUT_CONTEXT_H_
#define __IBUS_INPUT_CONTEXT_H_
-#include <QInputContext>
-#include <QList>
+
+#ifdef QT4
+# include <QInputContext>
+# include <QList>
+#else
+# include <qinputcontext.h>
+# include <qlist.h>
+typedef unsigned int quint32;
+#endif
+
#include "ibus-client.h"
class IBusClient;