pidgin/quail/quail-redux

ecd274c07d13
Parents f545504ba1e1
Children 58c87bdef336
Move to a QApplication to implement the heavy lifting
--- a/Quail-redux.pro Sat Dec 28 15:44:41 2013 +0000
+++ b/Quail-redux.pro Sat Feb 01 07:28:46 2014 +0000
@@ -83,6 +83,8 @@
#LIBS += -L"$(QTDIR)/lib"
LIBS += -lws2_32
TARGET = bin/Quail
+ CONFIG += console
+ #DEFINES += QT_NO_DEBUG_OUTPUT
}
HEADERS += \
--- a/src/QuailEventLoop.cpp Sat Dec 28 15:44:41 2013 +0000
+++ b/src/QuailEventLoop.cpp Sat Feb 01 07:28:46 2014 +0000
@@ -35,21 +35,118 @@
QQuailInputNotifier *notifier;
};
-} QQuailSourceInfo;
+} quail_source_info;
static gboolean qQuailSourceRemove(guint handle);
static guint nextSourceId = 0;
-static QMap<guint, QQuailSourceInfo*> m_sources;
+static QMap<guint, quail_source_info*> m_sources;
//static QuailEventDispatcherMarkTwo *mainEvent = 0;
-//static QThread *quailThread = new QThread();
+//QThread *quail_event_thread = 0;
+static quail_application* quail_app = 0;
+
+quail_application::quail_application(int &argc, char **argv)
+ : QApplication(argc, argv)
+{
+ quail_app = this;
+// quail_event_thread = new QThread(this);
+// quail_event_thread->start();
+}
+
+guint
+quail_application::quail_timeout_add(guint interval, GSourceFunc func, gpointer data)
+{
+ qDebug() << "quail_application::quail_timeout_add" << interval;
+ quail_source_info *info = new quail_source_info;
+ info->handle = nextSourceId++;
+ info->timer = new QQuailTimer(info->handle, func, data);
+ info->timer->setInterval(interval);
+ //QThread* test_thread = new QThread;
+ //info->timer->moveToThread(test_thread);
+ //connect(test_thread, SIGNAL(started()), info->timer, SLOT(startTimer()));
+ qDebug() << "quail_application::quail_timeout_add.1";
+ //m_sources.insert(info->handle, info);
+ //info->timer->startTimer();
+ info->timer->startTimer();
+ //test_thread->start();
+ //info->timer->moveToThread(quail_event_thread);
+ qDebug() << "quail_application::quail_timeout_add.2";
+ qDebug() << "quail_application::quail_timeout_add.end";
+ return info->handle;
+}
+
+gboolean
+quail_application::quail_timeout_remove(guint handle)
+{
+ qDebug() << "quail_application::quail_timeout_remove";
+ qQuailSourceRemove(handle);
+
+ return 0;
+}
+
+guint
+quail_application::quail_input_add(int fd,
+ PurpleInputCondition cond,
+ PurpleInputFunction func,
+ gpointer userData)
+{
+ qDebug() << "quail_application::quail_input_add";
+ quail_source_info *info = new quail_source_info;
+
+ info->handle = nextSourceId++;
+
+ info->notifier = new QQuailInputNotifier(fd, cond, func, userData);
+ m_sources.insert(info->handle, info);
+ qDebug() << "quail_application::quail_input_add.end::" << info->handle;
+ qDebug() << "quail_application::quail_input_add.end::" << m_sources.size();
+ return info->handle;
+}
+
+gboolean
+quail_application::quail_source_remove(guint handle)
+{
+ quail_source_info *info;
+
+ info = m_sources.take(handle);
+ if (info == NULL)
+ return false;
+
+ if (info->timer != NULL) {
+ delete info->timer;
+ info->timer = NULL;
+ } else if (info->notifier != NULL) {
+ delete info->notifier;
+ info->notifier = NULL;
+ }
+ delete info;
+ return true;
+}
+
+int
+quail_application::quail_input_get_error(int /*fd*/, int */*error*/)
+{
+ qDebug() << "quail_application::quail_input_get_error";
+ return 0;
+}
+
+guint
+quail_application::quail_timeout_add_seconds(guint interval,
+ GSourceFunc function,
+ gpointer data)
+{
+ return this->quail_timeout_add(interval * 1000,function, data);
+}
+
QQuailTimer::QQuailTimer(guint sourceId, GSourceFunc func, gpointer data)
- : QTimer(), sourceId(sourceId), func(func), userData(data)
+ : QObject(0)
+ , m_timer(new QTimer(this))
+ , sourceId(sourceId)
+ , func(func)
+ , userData(data)
{
//qDebug() << "QQuailTimer::QQuailTimer.1";
- connect(this, SIGNAL(timeout()),
- this, SLOT(update()));
+ connect(m_timer, SIGNAL(timeout()), this, SLOT(update()));
}
void
@@ -88,7 +185,7 @@
readNotifier = new QSocketNotifier(fd, QSocketNotifier::Read);
connect(readNotifier, SIGNAL(activated(int)),
- this, SLOT(ioInvoke(int)));
+ this, SLOT(ioInvoke(int)), Qt::DirectConnection);
bRead = true;
}
@@ -98,7 +195,7 @@
writeNotifier = new QSocketNotifier(fd, QSocketNotifier::Write);
connect(writeNotifier, SIGNAL(activated(int)),
- this, SLOT(ioInvoke(int)));
+ this, SLOT(ioInvoke(int)), Qt::DirectConnection);
bWrite = true;
}
@@ -135,12 +232,7 @@
qQuailTimeoutAdd(guint interval, GSourceFunc func, gpointer data)
{
qDebug() << "qQuailTimeoutAdd" << interval;
- QQuailSourceInfo *info = new QQuailSourceInfo;
- info->handle = nextSourceId++;
- info->timer = new QQuailTimer(info->handle, func, data);
- m_sources.insert(info->handle, info);
- info->timer->start(interval);
- return info->handle;
+ return quail_app->quail_timeout_add(interval, func, data);
}
static gboolean
@@ -148,7 +240,6 @@
{
qDebug() << "QQuailInputNotifier::qQuailTimeoutRemove";
qQuailSourceRemove(handle);
-
return 0;
}
@@ -159,41 +250,19 @@
gpointer userData)
{
qDebug() << "QQuailInputNotifier::qQuailInputAdd";
- QQuailSourceInfo *info = new QQuailSourceInfo;
-
- info->handle = nextSourceId++;
-
- info->notifier = new QQuailInputNotifier(fd, cond, func, userData);
- m_sources.insert(info->handle, info);
- qDebug() << "QQuailInputNotifier::qQuailInputAdd.end::" << info->handle;
- qDebug() << "QQuailInputNotifier::qQuailInputAdd.end::" << m_sources.size();
- return info->handle;
+ return quail_app->quail_input_add(fd, cond, func, userData);
}
static gboolean
qQuailSourceRemove(guint handle)
{
- QQuailSourceInfo *info;
-
- info = m_sources.take(handle);
- if (info == NULL)
- return false;
-
- if (info->timer != NULL) {
- delete info->timer;
- info->timer = NULL;
- } else if (info->notifier != NULL) {
- delete info->notifier;
- info->notifier = NULL;
- }
- delete info;
- return true;
+ return quail_app->quail_source_remove(handle);
}
static int
qQuailInputGetError(int /*fd*/, int */*error*/)
{
- qDebug() << "QQuailInputNotifier::qQuailInputGetError";
+ qDebug() << "qQuailInputGetError";
return 0;
}
@@ -202,7 +271,7 @@
GSourceFunc function,
gpointer data)
{
- return qQuailTimeoutAdd(interval * 1000,function, data);
+ return quail_app->quail_timeout_add(interval * 1000,function, data);
}
--- a/src/QuailEventLoop.h Sat Dec 28 15:44:41 2013 +0000
+++ b/src/QuailEventLoop.h Sat Feb 01 07:28:46 2014 +0000
@@ -24,18 +24,47 @@
#include <libpurple/eventloop.h>
+#include <QApplication>
#include <QTimer>
#include <QSocketNotifier>
-class QQuailTimer : public QTimer
+class quail_application : public QApplication
+{
+ Q_OBJECT
+
+public:
+ quail_application(int &argc, char **argv);
+
+ guint quail_timeout_add(guint interval, GSourceFunc func, gpointer data);
+ gboolean quail_timeout_remove(guint handle);
+ guint quail_input_add(int fd,
+ PurpleInputCondition cond,
+ PurpleInputFunction func,
+ gpointer userData);
+ gboolean quail_source_remove(guint handle);
+ int quail_input_get_error(int /*fd*/, int */*error*/);
+ guint quail_timeout_add_seconds(guint interval,
+ GSourceFunc function,
+ gpointer data);
+
+private:
+
+};
+
+class QQuailTimer : public QObject
{
Q_OBJECT
public:
QQuailTimer(guint sourceId, GSourceFunc func, gpointer data);
+ QTimer* m_timer;
+ void setInterval(int msec)
+ { m_timer->setInterval(msec); }
public slots:
void update();
+ void startTimer() { m_timer->start(); }
+ void stopTimer() { m_timer->stop(); }
private:
guint sourceId;
--- a/src/QuailMainWindow.cpp Sat Dec 28 15:44:41 2013 +0000
+++ b/src/QuailMainWindow.cpp Sat Feb 01 07:28:46 2014 +0000
@@ -35,6 +35,7 @@
#include <QStackedWidget>
#include <QSystemTrayIcon>
#include <QTimer>
+#include <QThread>
#include <QToolBar>
#include <QVariant>
#include <QVBoxLayout>
@@ -58,7 +59,7 @@
#include "QuailPrefsDialog.h"
#include "QuailRequest.h"
-static QQuailMainWindow *mainWin = 0;
+static QQuailMainWindow *main_win = 0;
/**************************************************************************
* Core stuff
@@ -138,7 +139,7 @@
m_language("en")
{
qDebug() << "QQuailMainWindow";
- mainWin = this;
+ main_win = this;
setWindowIcon(QIcon(":/data/images/logo.png"));
QString configPath(QDir::home().path() + "/.quail");
purple_util_set_user_dir(configPath.toStdString().c_str());
@@ -584,5 +585,5 @@
QQuailMainWindow *
qQuailGetMainWindow()
{
- return mainWin;
+ return main_win;
}
--- a/src/QuailWinGlibEventLoop.cpp Sat Dec 28 15:44:41 2013 +0000
+++ b/src/QuailWinGlibEventLoop.cpp Sat Feb 01 07:28:46 2014 +0000
@@ -217,7 +217,7 @@
QuailEventDispatcherWinGlib *d;
};
-static gboolean postEventSourcePrepare(GSource *s, gint *timeout)
+static gboolean postEventSourcePrepare(GSource *s, gint */*timeout*/)
{
qDebug() << "QuailEventDispatcherWinGlib::postEventSourcePrepare";
// QThreadData *data = QThreadData::current();
--- a/src/main.cpp Sat Dec 28 15:44:41 2013 +0000
+++ b/src/main.cpp Sat Feb 01 07:28:46 2014 +0000
@@ -22,7 +22,7 @@
#include <QApplication>
#include <QDebug>
-#if defined(Q_OS_CYGWIN)
+#if defined(Q_OS_WIN)
#include "QuailWinGlibEventLoop.h"
#endif
#include "QuailEventLoop.h"
@@ -30,12 +30,12 @@
int main(int argc, char *argv[])
{
-#if defined(Q_OS_CYGWIN)
+#if defined(Q_OS_WIN)
qDebug() << "MAIN.1";
- QuailEventDispatcherWinGlib quailEventLoop;
+ //QuailEventDispatcherWinGlib quailEventLoop;
#endif
//QuailEventDispatcherMarkTwo mainEvent;
- QApplication a(argc, argv);
+ quail_application a(argc, argv);
qDebug() << "q";
QQuailMainWindow w;
qDebug() << "q2";