Tizen - handling application lifecycle
authorTomasz Olszak <olszak.tomasz@gmail.com>
Tue, 10 Nov 2015 14:41:47 +0000 (15:41 +0100)
committerTomasz Olszak <olszak.tomasz@gmail.com>
Tue, 10 Nov 2015 14:41:47 +0000 (15:41 +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 e612cff9a3fa05e6afc7d005df543f9a11d9e2c3..e82626d3be64781a166de3ab4d3a37f6e4cbd8e5 100644 (file)
@@ -1740,6 +1740,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 4a0348aa0cbdc92c3021d6d4864dadd6f2d23cfd..967939f0a577720d0859416cc2b4bb34a2ea9eb0 100644 (file)
@@ -281,6 +281,9 @@ namespace QXcbAtom {
         RelHorizScroll,
         RelVertScroll,
 
+#ifdef Q_OS_LINUX_TIZEN
+        _X_ILLUME_DEACTIVATE_WINDOW,
+#endif
         _XSETTINGS_SETTINGS,
 
         _COMPIZ_DECOR_PENDING,
index 9cedfa77ad6cd0026352abd4f502b84dc4b6265f..bea685862eedb6bab174223779c7018ae0d8d05b 100644 (file)
 #endif
 #endif
 
+#ifdef Q_OS_LINUX_TIZEN
+#include <aul/aul.h>
+#endif // Q_OS_LINUX_TIZEN
+
 #include <QtCore/QFileInfo>
 
 QT_BEGIN_NAMESPACE
@@ -112,6 +116,25 @@ static bool runningUnderDebugger()
 
 QXcbIntegration *QXcbIntegration::m_instance = Q_NULLPTR;
 
+#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)
@@ -121,6 +144,12 @@ QXcbIntegration::QXcbIntegration(const QStringList &parameters, int &argc, char
     m_instance = this;
 
     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
@@ -252,6 +281,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 1ff052f2c0253c603adebeade0df85bc7cbe64af..f7affd5e8c1087f7bbc8994c0c81c7ffcaa7accd 100644 (file)
@@ -1969,6 +1969,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 09ab1ad77a93b2cd1aba0df363f70bc6ef400846..0a4fcae2ec6f323636a1e1f69ea47770308d7bf1 100644 (file)
@@ -11,3 +11,5 @@ SOURCES = \
     qxcbmain.cpp
 OTHER_FILES += xcb.json README
 
+
+tizen:LIBS += -laul