Tizen - handling application lifecycle
authorTomasz Olszak <olszak.tomasz@gmail.com>
Thu, 18 Jul 2013 21:51:09 +0000 (21:51 +0000)
committerTomasz Olszak <olszak.tomasz@gmail.com>
Mon, 15 Dec 2014 20:29:04 +0000 (21:29 +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 f31ecf8e033f2266c0fa1f9d7838577116353315..713955c04f81b39a21aaf1773233b2055320cd0c 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 52269bafea3b03f0d6d8fa0d304c4dc112051976..b901a5d3d886e3200589c7af72ccfcb9ae5bae10 100644 (file)
 #endif
 #endif
 
+#ifdef Q_OS_LINUX_TIZEN
+#include <aul/aul.h>
+#endif // Q_OS_LINUX_TIZEN
+
 #include <QtCore/QFileInfo>
 
 QT_BEGIN_NAMESPACE
@@ -116,11 +120,37 @@ 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)
 {
+
     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
@@ -302,6 +332,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 5d3206b097b88df994cbeba939fdcc3fc2767d15..ab864c7fb7101afdb8f340203909a4a88276d097 100644 (file)
@@ -1822,6 +1822,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 f14fcde73f4731761e05a2abbdef3d0b95a71ffb..72871b1cec14491e65edb7ef4fd878fa65d7dd4c 100644 (file)
@@ -124,3 +124,5 @@ contains(QT_CONFIG, xkbcommon-qt): {
     LIBS += $$QMAKE_LIBS_XKBCOMMON
     QMAKE_CXXFLAGS += $$QMAKE_CFLAGS_XKBCOMMON
 }
+
+tizen:LIBS += -laul