Tizen - handling application lifecycle
authorTomasz Olszak <olszak.tomasz@gmail.com>
Thu, 26 Feb 2015 14:40:58 +0000 (15:40 +0100)
committerTomasz Olszak <olszak.tomasz@gmail.com>
Thu, 26 Feb 2015 14:40:58 +0000 (15:40 +0100)
Change-Id: I47763f2d42e400df3e0e60515468ada8c8546128
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com>
Reviewed-by: Tomasz Olszak <olszak.tomasz@gmail.com>
src/plugins/platforms/xcb/qxcbconnection.cpp
src/plugins/platforms/xcb/qxcbconnection.h
src/plugins/platforms/xcb/qxcbintegration.cpp
src/plugins/platforms/xcb/qxcbwindow.cpp
src/plugins/platforms/xcb/xcb-plugin.pro

index 5510c3b1b4d2d070b28dbf4af419eab4c261162c..7b2a37239ab0b1fbd8af844dbb37ae2848637ed6 100644 (file)
@@ -1536,6 +1536,9 @@ static const char * xcb_atomnames = {
     "Rel Vert Wheel\0"
     "Rel Horiz Scroll\0"
     "Rel Vert Scroll\0"
+#ifdef Q_OS_LINUX_TIZEN
+    "_X_ILLUME_DEACTIVATE_WINDOW\0"
+#endif
     "_XSETTINGS_SETTINGS\0"
     "_COMPIZ_DECOR_PENDING\0"
     "_COMPIZ_DECOR_REQUEST\0"
index 7286b6b89b32c5f28abc3bb97d8e60d1bdb18a03..b5082852e4fcd0304eb1e58a64b4e99a69b4e7c2 100644 (file)
@@ -273,6 +273,9 @@ namespace QXcbAtom {
         RelHorizScroll,
         RelVertScroll,
 
+#ifdef Q_OS_LINUX_TIZEN
+        _X_ILLUME_DEACTIVATE_WINDOW,
+#endif
         _XSETTINGS_SETTINGS,
 
         _COMPIZ_DECOR_PENDING,
index f0c4a7f69145fc583e880db3f2ccb17a5ad9f7ba..12d7ff3f54c61fbefae3f583d01d5fb46a273e34 100644 (file)
 #endif
 #endif
 
+#ifdef Q_OS_LINUX_TIZEN
+#include <aul/aul.h>
+#endif // Q_OS_LINUX_TIZEN
+
 #include <QtCore/QFileInfo>
 
 QT_BEGIN_NAMESPACE
@@ -118,12 +122,38 @@ static bool runningUnderDebugger()
 #endif
 }
 
+#ifdef Q_OS_LINUX_TIZEN
+static int aul_handler(aul_type type, bundle *, void *)
+{
+    switch (type) {
+    case AUL_START:
+        QWindowSystemInterface::handleApplicationStateChanged(Qt::ApplicationActive);
+        break;
+    case AUL_RESUME:
+        if (!QGuiApplication::topLevelWindows().isEmpty())
+            QGuiApplication::topLevelWindows().first()->requestActivate();
+        break;
+    case AUL_TERMINATE:
+        QCoreApplication::quit();
+        break;
+    }
+    return 0;
+}
+#endif // Q_OS_LINUX_TIZEN
+
 QXcbIntegration::QXcbIntegration(const QStringList &parameters, int &argc, char **argv)
     : m_services(new QGenericUnixServices)
     , m_instanceName(0)
     , m_canGrab(true)
 {
+
     qRegisterMetaType<QXcbWindow*>();
+
+#ifdef Q_OS_LINUX_TIZEN
+    aul_launch_init(aul_handler, 0);
+    aul_launch_argv_handler(argc, argv);
+#endif // Q_OS_LINUX_TIZEN
+
 #ifdef XCB_USE_XLIB
     XInitThreads();
 #endif
@@ -321,6 +351,9 @@ bool QXcbIntegration::hasCapability(QPlatformIntegration::Capability cap) const
     case ForeignWindows: return true;
     case SyncState: return true;
     case RasterGLSurface: return true;
+#ifdef Q_OS_LINUX_TIZEN
+    case ApplicationState: return true;
+#endif
     default: return QPlatformIntegration::hasCapability(cap);
     }
 }
index 00942787d923a40c0434204c098ce573e81850f3..8dbebb73845a63bab0588c69df8ac4f527c56742 100644 (file)
@@ -1838,6 +1838,10 @@ void QXcbWindow::handleClientMessageEvent(const xcb_client_message_event_t *even
                || event->type == atom(QXcbAtom::WM_CHANGE_STATE)) {
         // Ignore _NET_WM_STATE, MANAGER which are relate to tray icons
         // and other messages.
+#ifdef Q_OS_LINUX_TIZEN
+    } else if (event->type == atom(QXcbAtom::_X_ILLUME_DEACTIVATE_WINDOW)) {
+        QWindowSystemInterface::handleApplicationStateChanged(Qt::ApplicationHidden);
+#endif // Q_OS_LINUX_TIZEN
     } else if (event->type == atom(QXcbAtom::_COMPIZ_DECOR_PENDING)
             || event->type == atom(QXcbAtom::_COMPIZ_DECOR_REQUEST)
             || event->type == atom(QXcbAtom::_COMPIZ_DECOR_DELETE_PIXMAP)) {
index 129076c916226ada2029eb59a29a4c93d5d205b3..7cfbe40ea86457115719f200a967078a3bf0aadd 100644 (file)
@@ -119,3 +119,5 @@ contains(QT_CONFIG, xkbcommon-qt): {
     LIBS += $$QMAKE_LIBS_XKBCOMMON
     QMAKE_CXXFLAGS += $$QMAKE_CFLAGS_XKBCOMMON
 }
+
+tizen:LIBS += -laul