mirror of https://github.com/cutefishos/appmotor
				
				
				
			[mapplauncherd] Remove Qt boosters and related tests
These have been split to a separate repository and package.pull/1/head
							parent
							
								
									6fd7197814
								
							
						
					
					
						commit
						adef09cd6f
					
				@ -1,5 +0,0 @@
 | 
			
		||||
# Tell qmake to use pkg-config to get correct compiler and linker
 | 
			
		||||
# flags to make an application usable with applauncherd.
 | 
			
		||||
 | 
			
		||||
CONFIG += link_pkgconfig
 | 
			
		||||
PKGCONFIG += qdeclarative-boostable
 | 
			
		||||
@ -1,5 +0,0 @@
 | 
			
		||||
# Tell qmake to use pkg-config to get correct compiler and linker
 | 
			
		||||
# flags to make an application usable with applauncherd.
 | 
			
		||||
 | 
			
		||||
CONFIG += link_pkgconfig
 | 
			
		||||
PKGCONFIG += qt-boostable
 | 
			
		||||
@ -1,6 +0,0 @@
 | 
			
		||||
Name: qdeclarative-boostable
 | 
			
		||||
Description: make application boostable by applauncherd
 | 
			
		||||
Version: 0.2.0
 | 
			
		||||
Libs: -pie -rdynamic -lmdeclarativecache
 | 
			
		||||
Cflags: -fPIC -fvisibility=hidden -fvisibility-inlines-hidden -I/usr/include/applauncherd
 | 
			
		||||
 | 
			
		||||
@ -1,5 +0,0 @@
 | 
			
		||||
Name: qt-boostable
 | 
			
		||||
Description: make application boostable by applauncherd
 | 
			
		||||
Version: 0.2.0
 | 
			
		||||
Libs: -pie -rdynamic 
 | 
			
		||||
Cflags: -fPIC -fvisibility=hidden -fvisibility-inlines-hidden
 | 
			
		||||
@ -1,42 +0,0 @@
 | 
			
		||||
include(FindX11)
 | 
			
		||||
 | 
			
		||||
# Find Qt4
 | 
			
		||||
find_package(Qt4 4.6.0 REQUIRED)
 | 
			
		||||
include(${QT_USE_FILE})
 | 
			
		||||
if (${QTVERSION} VERSION_LESS 4.6.0)
 | 
			
		||||
    message(FATAL_ERROR "You need Qt4.6, found ${QTVERSION}.")
 | 
			
		||||
endif (${QTVERSION} VERSION_LESS 4.6.0)
 | 
			
		||||
 | 
			
		||||
set(LAUNCHER "${CMAKE_HOME_DIRECTORY}/src/launcherlib")
 | 
			
		||||
 | 
			
		||||
include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${LAUNCHER} "${CMAKE_HOME_DIRECTORY}/src/common")
 | 
			
		||||
 | 
			
		||||
# Set sources
 | 
			
		||||
set(PLUGINSRC qdeclarativebooster.cpp pluginfactory.cpp)
 | 
			
		||||
 | 
			
		||||
set(LIBSRC mdeclarativecache.cpp mdeclarativecache.h mdeclarativecache_p.h eventhandler.cpp eventhandler.h)
 | 
			
		||||
set(MOC_HDRS eventhandler.h)
 | 
			
		||||
qt4_wrap_cpp(MOC_SRC ${MOC_HDRS})
 | 
			
		||||
 | 
			
		||||
# Set executables
 | 
			
		||||
add_library(mdeclarativecache SHARED ${LIBSRC} ${MOC_SRC})
 | 
			
		||||
set_target_properties(mdeclarativecache PROPERTIES
 | 
			
		||||
  VERSION 0.1 SOVERSION 0)
 | 
			
		||||
if ($ENV{HARMATTAN})
 | 
			
		||||
  set_target_properties(mdeclarativecache PROPERTIES COMPILE_FLAGS -DHAVE_PATH_REINIT)
 | 
			
		||||
endif ($ENV{HARMATTAN})
 | 
			
		||||
target_link_libraries(mdeclarativecache ${LIBDL} ${QT_QTCORE_LIBRARY} ${QT_QTDECLARATIVE_LIBRARY} ${QT_QTGUI_LIBRARY} ${X11_LIBRARIES} "-L../launcherlib -lapplauncherd")
 | 
			
		||||
add_dependencies(mdeclarativecache applauncherd)
 | 
			
		||||
 | 
			
		||||
add_library(qdeclarativebooster MODULE ${PLUGINSRC})
 | 
			
		||||
set_target_properties(qdeclarativebooster PROPERTIES 
 | 
			
		||||
  COMPILE_FLAGS -fvisibility=hidden)
 | 
			
		||||
target_link_libraries(qdeclarativebooster ${LIBDL} "-L. -lmdeclarativecache -L../launcherlib -lapplauncherd")
 | 
			
		||||
add_dependencies(qdeclarativebooster applauncherd mdeclarativecache)
 | 
			
		||||
 | 
			
		||||
# Add install rule
 | 
			
		||||
install(TARGETS qdeclarativebooster DESTINATION /usr/lib/applauncherd/)
 | 
			
		||||
install(TARGETS mdeclarativecache DESTINATION /usr/lib)
 | 
			
		||||
install(FILES mdeclarativecache.h MDeclarativeCache eventhandler.h DESTINATION /usr/include/applauncherd
 | 
			
		||||
  PERMISSIONS OWNER_READ GROUP_READ WORLD_READ)
 | 
			
		||||
 | 
			
		||||
@ -1,2 +0,0 @@
 | 
			
		||||
#include "mdeclarativecache.h"
 | 
			
		||||
 | 
			
		||||
@ -1,256 +0,0 @@
 | 
			
		||||
This File
 | 
			
		||||
=========
 | 
			
		||||
 | 
			
		||||
This document describes how to use to speed up QML application startup
 | 
			
		||||
in Harmattan/MeeGo using the applauncherd daemon and the qdeclarative booster.
 | 
			
		||||
 | 
			
		||||
For a more general description of the launcher concept and technical
 | 
			
		||||
details, see the README file in the meegotouch-applauncherd source
 | 
			
		||||
tree.
 | 
			
		||||
 | 
			
		||||
1. COMPILING YOUR APPLICATION TO BE LAUNCHABLE
 | 
			
		||||
 | 
			
		||||
Binaries intended to be run with applauncherd should be compiled with -fPIC option
 | 
			
		||||
to produce position independent code. In order to produce a position independent
 | 
			
		||||
executable, -pie option and -rdynamic options can be used in linking. This allows
 | 
			
		||||
the result to be executed both traditionally and with the launcher.
 | 
			
		||||
 | 
			
		||||
To improve linking and loading times of shared object libraries it is
 | 
			
		||||
encouraged to hide any unnecessary symbols from the resulting binary by using
 | 
			
		||||
-fvisibility=hidden and -fvisibility-inlines-hidden flags as well.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
1.1 Build configuration
 | 
			
		||||
 | 
			
		||||
These instructions describe how to build your application so that it
 | 
			
		||||
can be launched using applauncherd. Only Debian packaging is considered,
 | 
			
		||||
you have to creatively apply the instructions if you are doing RPM packaging.
 | 
			
		||||
 | 
			
		||||
  Using QMake
 | 
			
		||||
  -----------
 | 
			
		||||
 | 
			
		||||
  If you are using QMake, making your application boostable is just a
 | 
			
		||||
  matter of adding a suitable configuration option.
 | 
			
		||||
 | 
			
		||||
  For Qt Declarative (QML) applications, the configuration option is
 | 
			
		||||
  provided by the applauncherd-dev package. If you are building a
 | 
			
		||||
  Debian package, you have to add a build dependency to
 | 
			
		||||
  applauncherd-dev. The configuration option is:
 | 
			
		||||
 | 
			
		||||
    CONFIG += qdeclarative-boostable
 | 
			
		||||
 | 
			
		||||
  If you want to use pkg-config directly for some reason (like getting
 | 
			
		||||
  error messages), you can add explicit pkg-config calls in the appropriate
 | 
			
		||||
  flags:
 | 
			
		||||
 | 
			
		||||
    QMAKE_CXXFLAGS += `pkg-config --cflags qdeclarative-boostable`
 | 
			
		||||
    QMAKE_LFLAGS += `pkg-config --libs qdeclarative-boostable`
 | 
			
		||||
 | 
			
		||||
  You can also manually set the options in your .pro file like this:
 | 
			
		||||
 | 
			
		||||
    QMAKE_CXXFLAGS += -fPIC -fvisibility=hidden -fvisibility-inlines-hidden
 | 
			
		||||
    QMAKE_LFLAGS += -pie -rdynamic
 | 
			
		||||
 | 
			
		||||
  Note that you have to update the flags manually if there are any changes in
 | 
			
		||||
  the required flags.
 | 
			
		||||
 | 
			
		||||
  Using CMake
 | 
			
		||||
  ---------------------------
 | 
			
		||||
 | 
			
		||||
  You can utilize pkg-config in CMake by including FindPkgConfig in CMakeLists.txt:
 | 
			
		||||
 | 
			
		||||
  include(FindPkgConfig) 
 | 
			
		||||
 | 
			
		||||
  To get Debian packages built correctly, make the package
 | 
			
		||||
  build-depend on applauncherd-dev. To obtain the compiler and linker
 | 
			
		||||
  flags, add the following lines in CMakeLists.txt:
 | 
			
		||||
 | 
			
		||||
  pkg_check_modules(QDECLARATIVE_BOOSTABLE REQUIRED qdeclarative-boostable)
 | 
			
		||||
  add_definitions(${QDECLARATIVE_BOOSTABLE_CFLAGS})
 | 
			
		||||
  link_libraries(${QDECLARATIVE_BOOSTABLE_LDFLAGS})
 | 
			
		||||
  
 | 
			
		||||
  If you do not want to use pkg-config for some reason, you can manually add the
 | 
			
		||||
  compiler and linker flags like this:
 | 
			
		||||
 | 
			
		||||
  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC -fvisibility=hidden 
 | 
			
		||||
      -fvisibility-inlines-hidden")
 | 
			
		||||
  set(CMAKE_EXE_LINKER_FLAGS "-pie -rdynamic")
 | 
			
		||||
  
 | 
			
		||||
  Again, this requires you to update the flags if something changes.
 | 
			
		||||
 | 
			
		||||
  Automatic settings with pkg-config (any build system)
 | 
			
		||||
  -----------------------------------------------------
 | 
			
		||||
 | 
			
		||||
  To get Debian packages built correctly, make the package
 | 
			
		||||
  build-depend on applauncherd-dev. The correct flags can be
 | 
			
		||||
  automatically obtained with:
 | 
			
		||||
 | 
			
		||||
    pkg-config --cflags qdeclarative-boostable
 | 
			
		||||
    pkg-config --libs qdeclarative-boostable
 | 
			
		||||
 | 
			
		||||
1.3 Changes to the code
 | 
			
		||||
 | 
			
		||||
With -fvisibility=hidden you must make sure that the symbol for main() is
 | 
			
		||||
exported, because otherwise the launcher is not able to find the entry point
 | 
			
		||||
for your application. This can be done like this:
 | 
			
		||||
 | 
			
		||||
  #include <QtCore/QtGlobal>
 | 
			
		||||
  
 | 
			
		||||
  Q_DECL_EXPORT int main(int argc, char **argv)
 | 
			
		||||
  {
 | 
			
		||||
  ...
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
The application cannot directly instantiate QApplication and
 | 
			
		||||
QDeclarativeView. Instead of writing e.g.
 | 
			
		||||
 | 
			
		||||
      QApplication app;
 | 
			
		||||
      QDeclarativeView view;
 | 
			
		||||
 | 
			
		||||
you need to pick up instances of QApplication and QDeclarativeView from a cache:
 | 
			
		||||
 | 
			
		||||
     QApplication *app = MDeclarativeCache::qApplication(argc, argv);
 | 
			
		||||
     QDeclarativeView *window = MDeclarativeCache::qDeclarativeView();
 | 
			
		||||
 | 
			
		||||
The ownership of the instances is currently transferred from the cache to the
 | 
			
		||||
application code, but this is subject to change if there is a need to align
 | 
			
		||||
the API with Symbian.
 | 
			
		||||
 | 
			
		||||
If you plan to use QCoreApplication::applicationDirPath() or
 | 
			
		||||
QCoreApplication::applicationFilePath(), please see KNOWN ISSUES below.
 | 
			
		||||
 | 
			
		||||
2. LAUNCHING YOUR APPLICATION USING INVOKER
 | 
			
		||||
 | 
			
		||||
The application to be launched must be "invoked" using the invoker binary.  The
 | 
			
		||||
invoker then sends the application data, essentially arguments and environment
 | 
			
		||||
variables, to the launcher daemon via a socket connection. The launched
 | 
			
		||||
application will see its real binary name in its argv[0].
 | 
			
		||||
 | 
			
		||||
2.1 Launch from the command-line
 | 
			
		||||
 | 
			
		||||
Use --type=d for Qt Declarative applications:
 | 
			
		||||
 | 
			
		||||
  /usr/bin/invoker --type=d <application_name>
 | 
			
		||||
 | 
			
		||||
2.2 D-Bus launch
 | 
			
		||||
 | 
			
		||||
If you are using D-Bus to launch your application, it can be done
 | 
			
		||||
straightly in the .service-file and without any wrapper scripts slowing
 | 
			
		||||
things down:
 | 
			
		||||
 | 
			
		||||
  [D-BUS Service]
 | 
			
		||||
  Name=com.nokia.<application_name>
 | 
			
		||||
  Exec=/usr/bin/invoker --type=d /usr/bin/<application_name>
 | 
			
		||||
 | 
			
		||||
By default, invoker waits for the application to terminate and exits with
 | 
			
		||||
the same exit code. Unix signals are also forwarded.
 | 
			
		||||
  
 | 
			
		||||
Note 1: If --no-wait and --delay is used, it is important to add enough delay to
 | 
			
		||||
invoker so that it won't exit before the launched application gets its
 | 
			
		||||
(possible) D-Bus service registered. Otherwise D-Bus daemon may think that the
 | 
			
		||||
application just died. 
 | 
			
		||||
 | 
			
		||||
Note 2: There is a slight difference in the application start-up time if you use a
 | 
			
		||||
wrapper script instead of the actual binary in Exec-field of .desktop and .service files. 
 | 
			
		||||
Therefore, it is recommended that you always use the actual invoker call with the 
 | 
			
		||||
binary name as presented above. 
 | 
			
		||||
 | 
			
		||||
Note 3: When .desktop file contains the X-Maemo-Service field, the application
 | 
			
		||||
is started by default through D-Bus. This might cause some delay for
 | 
			
		||||
application start-up time. Therefore it is recommended to use the single
 | 
			
		||||
instance launch functionality (see below) instead of a X-Maemo-Service if
 | 
			
		||||
possible
 | 
			
		||||
 | 
			
		||||
See invoker --help for all possible command-line parameters.
 | 
			
		||||
 | 
			
		||||
2.3 Single instance launch
 | 
			
		||||
 | 
			
		||||
Usually user wants the application to be run as a single instance. This means,
 | 
			
		||||
that if the launched application is already running, the existing application
 | 
			
		||||
window is activated and no new application processes are started.
 | 
			
		||||
 | 
			
		||||
This can be achieved by adding --single-instance to the invoker command:
 | 
			
		||||
 | 
			
		||||
  [D-BUS Service]
 | 
			
		||||
  Name=com.nokia.<application_name>
 | 
			
		||||
  Exec=/usr/bin/invoker --single-instance --type=d /usr/bin/<application_name>
 | 
			
		||||
 
 | 
			
		||||
As a result, a lock file $HOME/.single-instance-locks/<application_name>/instance.lock 
 | 
			
		||||
is created.  If applauncherd cannot acquire the lock, it tries to find the
 | 
			
		||||
corresponding window and activates it.
 | 
			
		||||
 | 
			
		||||
This functionality is implemented in a position-independent executable called
 | 
			
		||||
single-instance. Applauncherd uses the executable as a library, but it can be
 | 
			
		||||
used as an ordinary program to start anything as a single instance:
 | 
			
		||||
 | 
			
		||||
  /usr/bin/single-instance <application_name>
 | 
			
		||||
 | 
			
		||||
Note, that in this case the launcher is not used.
 | 
			
		||||
 | 
			
		||||
Consider using --single-instance instead of the single instance functionality
 | 
			
		||||
provided by D-Bus, because it very likely is much faster.
 | 
			
		||||
 | 
			
		||||
2.4 Splash screen
 | 
			
		||||
 | 
			
		||||
Applauncherd supports showing a splash screen if there is mcompositor
 | 
			
		||||
(the MeeGo window manager) running.
 | 
			
		||||
 | 
			
		||||
The splash screen is not shown by default. If an application wants it
 | 
			
		||||
to be shown, it must pass --splash, and optionally --splash-landscape
 | 
			
		||||
arguments to the invoker.
 | 
			
		||||
 | 
			
		||||
For instance,
 | 
			
		||||
 | 
			
		||||
/usr/bin/invoker --splash=/usr/share/application_name/splash.jpg \
 | 
			
		||||
		 --splash-landscape=/usr/share/application_name/splash-l.jpg \
 | 
			
		||||
		 --type=d \
 | 
			
		||||
		 /usr/bin/application_name
 | 
			
		||||
 | 
			
		||||
shows the splash screen with splash.jpg as its content when the device
 | 
			
		||||
is in the portrait orientation. Otherwise splash-l.jpg is shown. If
 | 
			
		||||
only --splash is given, that image is shown in both orientations.
 | 
			
		||||
 | 
			
		||||
Invoker passes the splash request to the booster. The booster sends
 | 
			
		||||
the splash request to the window manager by setting a window property
 | 
			
		||||
to window manager's window.
 | 
			
		||||
 | 
			
		||||
If the filenames do not include absolute paths, the window manager
 | 
			
		||||
looks for the files from a default location.
 | 
			
		||||
 | 
			
		||||
3. PACKAGE DEPENDENCIES
 | 
			
		||||
 | 
			
		||||
Applications using the launcher must depend on the applauncherd Debian package.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
4. CURRENT KNOWN ISSUES
 | 
			
		||||
 | 
			
		||||
4.1 Forking
 | 
			
		||||
 | 
			
		||||
Using QApplication or QDeclarativeView fetched from the cache in a child
 | 
			
		||||
process does not work, because they would share the X11 connection with the
 | 
			
		||||
parent.
 | 
			
		||||
 | 
			
		||||
4.2 Non-working QCoreApplication methods
 | 
			
		||||
 | 
			
		||||
The following methods of QCoreApplication are known not to work with
 | 
			
		||||
qdeclarative booster:
 | 
			
		||||
 | 
			
		||||
    QCoreApplication::applicationDirPath()
 | 
			
		||||
    QCoreApplication::applicationFilePath()
 | 
			
		||||
 | 
			
		||||
The reason for this that the methods get the path from the /proc file system,
 | 
			
		||||
so they return the path to the booster rather than the path to the launched
 | 
			
		||||
application. This is unlikely to be fixed for Qt 4.7.
 | 
			
		||||
 | 
			
		||||
The MDeclarativeCache class provides the replacements
 | 
			
		||||
MDeclarativeCache::applicationDirPath() and
 | 
			
		||||
MDeclarativeCache::applicationFilePath(), which are identical to the
 | 
			
		||||
QCoreApplication counterparts, except that in the boosted case they use argv[0]
 | 
			
		||||
of the boosted application.
 | 
			
		||||
 | 
			
		||||
5. COMMAND-LINE PARAMETERS
 | 
			
		||||
 | 
			
		||||
All parameters are listed by:
 | 
			
		||||
 | 
			
		||||
invoker --help
 | 
			
		||||
applauncherd --help
 | 
			
		||||
@ -1,120 +0,0 @@
 | 
			
		||||
#include <QtConcurrentRun>
 | 
			
		||||
#include <QApplication>
 | 
			
		||||
 | 
			
		||||
#include "eventhandler.h"
 | 
			
		||||
#include "connection.h"
 | 
			
		||||
#include "logger.h"
 | 
			
		||||
#include "booster.h"
 | 
			
		||||
#include <sys/socket.h>
 | 
			
		||||
 | 
			
		||||
int EventHandler::m_sighupFd[2];
 | 
			
		||||
struct sigaction EventHandler::m_oldSigAction;
 | 
			
		||||
 | 
			
		||||
EventHandler::EventHandler(Booster* parent)
 | 
			
		||||
    : m_parent(parent)
 | 
			
		||||
{
 | 
			
		||||
    m_sighupFd[0] = -1;
 | 
			
		||||
    m_sighupFd[1] = -1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
EventHandler::~EventHandler()
 | 
			
		||||
{
 | 
			
		||||
    if (m_sighupFd[0] != -1)
 | 
			
		||||
        ::close(m_sighupFd[0]);
 | 
			
		||||
 | 
			
		||||
    if (m_sighupFd[1] != -1)
 | 
			
		||||
        ::close(m_sighupFd[1]);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void EventHandler::runEventLoop()
 | 
			
		||||
{
 | 
			
		||||
    // Exit from event loop when invoker is ready to connect
 | 
			
		||||
    connect(this, SIGNAL(connectionAccepted()), QApplication::instance(), SLOT(quit()));
 | 
			
		||||
    connect(this, SIGNAL(connectionRejected()), QApplication::instance(), SLOT(quit()));
 | 
			
		||||
 | 
			
		||||
    // Start another thread to listen connection from invoker
 | 
			
		||||
    QtConcurrent::run(this, &EventHandler::accept);
 | 
			
		||||
 | 
			
		||||
    // Create socket pair for SIGHUP
 | 
			
		||||
    bool handlerIsSet = false;
 | 
			
		||||
    if (::socketpair(AF_UNIX, SOCK_STREAM, 0, m_sighupFd))
 | 
			
		||||
    {
 | 
			
		||||
        Logger::logError("EventHandler: Couldn't create HUP socketpair");
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
    {
 | 
			
		||||
        // Install signal handler e.g. to exit cleanly if launcher dies.
 | 
			
		||||
        // This is a problem because MBooster runs a Qt event loop.
 | 
			
		||||
        EventHandler::setupUnixSignalHandlers();
 | 
			
		||||
 | 
			
		||||
        // Install a socket notifier on the socket
 | 
			
		||||
        connect(new QSocketNotifier(m_sighupFd[1], QSocketNotifier::Read, this),
 | 
			
		||||
                SIGNAL(activated(int)), this, SLOT(handleSigHup()));
 | 
			
		||||
 | 
			
		||||
        handlerIsSet = true;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Run event loop so application instance can receive notifications
 | 
			
		||||
    QApplication::exec();
 | 
			
		||||
 | 
			
		||||
    // Restore signal handlers to previous values
 | 
			
		||||
    if (handlerIsSet)
 | 
			
		||||
    {
 | 
			
		||||
        restoreUnixSignalHandlers();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void EventHandler::accept()
 | 
			
		||||
{
 | 
			
		||||
    if (m_parent->connection()->accept(m_parent->appData()))
 | 
			
		||||
    {
 | 
			
		||||
        emit connectionAccepted();
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
    {
 | 
			
		||||
        emit connectionRejected();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//
 | 
			
		||||
// All this signal handling code is taken from Qt's Best Practices:
 | 
			
		||||
// http://doc.qt.nokia.com/latest/unix-signals.html
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
void EventHandler::hupSignalHandler(int)
 | 
			
		||||
{
 | 
			
		||||
    char a = 1;
 | 
			
		||||
    ::write(m_sighupFd[0], &a, sizeof(a));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void EventHandler::handleSigHup()
 | 
			
		||||
{
 | 
			
		||||
    QApplication::quit();
 | 
			
		||||
    _exit(EXIT_SUCCESS);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool EventHandler::setupUnixSignalHandlers()
 | 
			
		||||
{
 | 
			
		||||
    struct sigaction hup;
 | 
			
		||||
 | 
			
		||||
    hup.sa_handler = hupSignalHandler;
 | 
			
		||||
    sigemptyset(&hup.sa_mask);
 | 
			
		||||
    hup.sa_flags = SA_RESTART;
 | 
			
		||||
 | 
			
		||||
    if (sigaction(SIGHUP, &hup, &m_oldSigAction) > 0)
 | 
			
		||||
    {
 | 
			
		||||
        return false;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool EventHandler::restoreUnixSignalHandlers()
 | 
			
		||||
{
 | 
			
		||||
    if (sigaction(SIGHUP, &m_oldSigAction, 0) > 0)
 | 
			
		||||
    {
 | 
			
		||||
        return false;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return true;
 | 
			
		||||
}
 | 
			
		||||
@ -1,63 +0,0 @@
 | 
			
		||||
#ifndef EVENTHANDLER_H
 | 
			
		||||
#define EVENTHANDLER_H
 | 
			
		||||
 | 
			
		||||
#include <QObject>
 | 
			
		||||
#include <QSocketNotifier>
 | 
			
		||||
#include <signal.h>
 | 
			
		||||
#include <tr1/memory>
 | 
			
		||||
 | 
			
		||||
using std::tr1::shared_ptr;
 | 
			
		||||
 | 
			
		||||
class Connection;
 | 
			
		||||
class Booster;
 | 
			
		||||
 | 
			
		||||
class EventHandler : public QObject
 | 
			
		||||
{
 | 
			
		||||
    Q_OBJECT
 | 
			
		||||
 | 
			
		||||
public:
 | 
			
		||||
    //! \brief Constructor
 | 
			
		||||
    EventHandler(Booster* parent);
 | 
			
		||||
 | 
			
		||||
    //! \brief Destructor
 | 
			
		||||
    virtual ~EventHandler();
 | 
			
		||||
 | 
			
		||||
    void runEventLoop();
 | 
			
		||||
 | 
			
		||||
    //! UNIX signal handler for SIGHUP
 | 
			
		||||
    static void hupSignalHandler(int unused);
 | 
			
		||||
 | 
			
		||||
    //! Setup UNIX signal handlers
 | 
			
		||||
    static bool setupUnixSignalHandlers();
 | 
			
		||||
 | 
			
		||||
    //! Restore UNIX signal handlers to previous values
 | 
			
		||||
    static bool restoreUnixSignalHandlers();
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
 | 
			
		||||
    //! wait for socket connection
 | 
			
		||||
    void accept();
 | 
			
		||||
 | 
			
		||||
    //! Socket pair used to get SIGHUP
 | 
			
		||||
    static int m_sighupFd[2];
 | 
			
		||||
 | 
			
		||||
    //! Socket notifier used for m_sighupFd
 | 
			
		||||
    shared_ptr<QSocketNotifier> m_snHup;
 | 
			
		||||
 | 
			
		||||
    //! Old sigaction struct
 | 
			
		||||
    static struct sigaction m_oldSigAction;
 | 
			
		||||
 | 
			
		||||
    // Parent object
 | 
			
		||||
    Booster* m_parent;
 | 
			
		||||
 | 
			
		||||
private slots:
 | 
			
		||||
 | 
			
		||||
    //! Qt signal handler for SIGHUP.
 | 
			
		||||
    void handleSigHup();
 | 
			
		||||
 | 
			
		||||
signals:
 | 
			
		||||
    void connectionAccepted();
 | 
			
		||||
    void connectionRejected();
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
@ -1,263 +0,0 @@
 | 
			
		||||
/***************************************************************************
 | 
			
		||||
**
 | 
			
		||||
** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
 | 
			
		||||
** All rights reserved.
 | 
			
		||||
** Contact: Nokia Corporation (directui@nokia.com)
 | 
			
		||||
**
 | 
			
		||||
** This file is part of applauncherd
 | 
			
		||||
**
 | 
			
		||||
** If you have questions regarding the use of this file, please contact
 | 
			
		||||
** Nokia at directui@nokia.com.
 | 
			
		||||
**
 | 
			
		||||
** This library is free software; you can redistribute it and/or
 | 
			
		||||
** modify it under the terms of the GNU Lesser General Public
 | 
			
		||||
** License version 2.1 as published by the Free Software Foundation
 | 
			
		||||
** and appearing in the file LICENSE.LGPL included in the packaging
 | 
			
		||||
** of this file.
 | 
			
		||||
**
 | 
			
		||||
****************************************************************************/
 | 
			
		||||
 | 
			
		||||
#include <Qt/QtDeclarative>
 | 
			
		||||
#include <QX11Info>
 | 
			
		||||
#include <QtPlugin>
 | 
			
		||||
#include <QPluginLoader>
 | 
			
		||||
#include <QLibraryInfo>
 | 
			
		||||
#include <QApplication>
 | 
			
		||||
 | 
			
		||||
#include "mdeclarativecache.h"
 | 
			
		||||
#include "mdeclarativecache_p.h"
 | 
			
		||||
 | 
			
		||||
#ifdef Q_WS_X11
 | 
			
		||||
#include <X11/Xlib.h>
 | 
			
		||||
#include <X11/Xutil.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
MDeclarativeCachePrivate * const MDeclarativeCache::d_ptr = new MDeclarativeCachePrivate;
 | 
			
		||||
const int MDeclarativeCachePrivate::ARGV_LIMIT = 32;
 | 
			
		||||
 | 
			
		||||
MDeclarativeCachePrivate::MDeclarativeCachePrivate() :
 | 
			
		||||
    qApplicationInstance(0),
 | 
			
		||||
    qDeclarativeViewInstance(0),
 | 
			
		||||
    initialArgc(ARGV_LIMIT),
 | 
			
		||||
    initialArgv(new char* [initialArgc]),
 | 
			
		||||
    appDirPath(QString()),
 | 
			
		||||
    appFilePath(QString()),
 | 
			
		||||
    cachePopulated(false),
 | 
			
		||||
    testabilityInterface(0)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
MDeclarativeCachePrivate::~MDeclarativeCachePrivate()
 | 
			
		||||
{
 | 
			
		||||
    delete qDeclarativeViewInstance;
 | 
			
		||||
    delete[] initialArgv;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void MDeclarativeCachePrivate::populate()
 | 
			
		||||
{
 | 
			
		||||
    // Record the fact that the cache has been populated
 | 
			
		||||
    cachePopulated = true;
 | 
			
		||||
    
 | 
			
		||||
    static const char *const emptyString = "";
 | 
			
		||||
    static const QString appNameFormat = "mdeclarativecache_pre_initialized_qapplication-%1";
 | 
			
		||||
    static QByteArray appName;
 | 
			
		||||
 | 
			
		||||
    // Append pid to appName to make it unique. This is required because the
 | 
			
		||||
    // libminputcontext.so instantiates MComponentData, which in turn registers
 | 
			
		||||
    // a dbus service with the application's name.
 | 
			
		||||
    appName = appNameFormat.arg(getpid()).toLatin1();
 | 
			
		||||
 | 
			
		||||
    // We support at most ARGV_LIMIT arguments in QCoreApplication. These will be set when real
 | 
			
		||||
    // arguments are known (in MDeclarativeCachePrivate::qApplication). 
 | 
			
		||||
    initialArgv[0] = const_cast<char *>(appName.constData());
 | 
			
		||||
    for (int i = 1; i < initialArgc; i++) {
 | 
			
		||||
        initialArgv[i] = const_cast<char *>(emptyString);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (qApplicationInstance == 0) {
 | 
			
		||||
        qApplicationInstance = new QApplication(initialArgc, initialArgv);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    qDeclarativeViewInstance = new QDeclarativeView();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
QApplication* MDeclarativeCachePrivate::qApplication(int &argc, char **argv)
 | 
			
		||||
{
 | 
			
		||||
    if (qApplicationInstance == 0) 
 | 
			
		||||
    {
 | 
			
		||||
        qApplicationInstance = new QApplication(argc, argv);
 | 
			
		||||
    } 
 | 
			
		||||
    else 
 | 
			
		||||
    {
 | 
			
		||||
        if (argc > ARGV_LIMIT) 
 | 
			
		||||
        {
 | 
			
		||||
            qWarning("MDeclarativeCache: QCoreApplication::arguments() will not contain all arguments.");
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        // Copy arguments to QCoreApplication 
 | 
			
		||||
        for (int i = 0; i < qMin(argc, ARGV_LIMIT); i++) 
 | 
			
		||||
        {
 | 
			
		||||
            qApp->argv()[i] = argv[i];
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        // This changes argc in QCoreApplication
 | 
			
		||||
        initialArgc = qMin(argc, ARGV_LIMIT);
 | 
			
		||||
 | 
			
		||||
        // Take application name from argv
 | 
			
		||||
        QString appName = QFileInfo(argv[0]).fileName();
 | 
			
		||||
 | 
			
		||||
        // Set object name
 | 
			
		||||
        qApp->setObjectName(appName);
 | 
			
		||||
 | 
			
		||||
        bool loadTestabilityArg = false;
 | 
			
		||||
        const char* testabilityArg = "-testability";
 | 
			
		||||
        for (int i = 0; i < argc; i++) 
 | 
			
		||||
        {
 | 
			
		||||
            if (strcmp(argv[i], testabilityArg) == 0)
 | 
			
		||||
            {
 | 
			
		||||
                loadTestabilityArg = true;
 | 
			
		||||
                break;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        bool loadTestabilityEnv = !qgetenv("QT_LOAD_TESTABILITY").isNull();
 | 
			
		||||
        if (loadTestabilityEnv || loadTestabilityArg)
 | 
			
		||||
            testabilityInit();
 | 
			
		||||
 | 
			
		||||
#ifdef Q_WS_X11
 | 
			
		||||
        // Currently QDeclarativeView is "Alien" widget and doesn't have it's XWindow. The procedure below is not needed.
 | 
			
		||||
        // Call to winId() converts the widget to "Native" and makes it slow.
 | 
			
		||||
        // If things get changed to use the procedure need to define QDV_USE_NATIVE_WIDGETS
 | 
			
		||||
        // In this case it should be considered to add XErrorHandler around XSetCommand and XSetClassHint
 | 
			
		||||
        // because those can generate BadAlloc and BadWindow errors.
 | 
			
		||||
#ifdef QDV_USE_NATIVE_WIDGETS
 | 
			
		||||
        // reinit WM_COMMAND X11 property
 | 
			
		||||
        if (qDeclarativeViewInstance) 
 | 
			
		||||
        {
 | 
			
		||||
            Display *display = QX11Info::display();
 | 
			
		||||
            if (display) 
 | 
			
		||||
            {
 | 
			
		||||
                qDeclarativeViewInstance->winId();
 | 
			
		||||
                XSetCommand(display, qDeclarativeViewInstance->effectiveWinId(), argv, argc);
 | 
			
		||||
 | 
			
		||||
                // set correct WM_CLASS properties
 | 
			
		||||
                QString appClass = appName.left(1).toUpper();
 | 
			
		||||
                if (appName.length() > 1)
 | 
			
		||||
                    appClass += appName.right(appName.length() - 1);
 | 
			
		||||
 | 
			
		||||
                // reserve memory for C strings
 | 
			
		||||
                QByteArray arrName(appName.toLatin1());
 | 
			
		||||
                QByteArray arrClass(appClass.toLatin1());
 | 
			
		||||
 | 
			
		||||
                XClassHint class_hint;
 | 
			
		||||
                class_hint.res_name = arrName.data();
 | 
			
		||||
                class_hint.res_class = arrClass.data();
 | 
			
		||||
 | 
			
		||||
                XSetClassHint(display, qDeclarativeViewInstance->effectiveWinId(), &class_hint);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
#endif
 | 
			
		||||
#endif
 | 
			
		||||
        if (cachePopulated) 
 | 
			
		||||
        {
 | 
			
		||||
            // In Qt 4.7, QCoreApplication::applicationDirPath() and
 | 
			
		||||
            // QCoreApplication::applicationFilePath() look up the paths in /proc,
 | 
			
		||||
            // which does not work when the booster is used. As a workaround, we
 | 
			
		||||
            // use argv[0] to provide the correct values in the cache class.
 | 
			
		||||
            appFilePath = QString(argv[0]);
 | 
			
		||||
            appDirPath = QString(argv[0]);
 | 
			
		||||
            appDirPath.chop(appDirPath.size() - appDirPath.lastIndexOf("/"));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_PATH_REINIT
 | 
			
		||||
    // Set the magic attribute so that paths are reinitialized
 | 
			
		||||
    qApplicationInstance->setAttribute(Qt::AA_LinuxReinitPathsFromArgv0, true);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    return qApplicationInstance;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void MDeclarativeCachePrivate::testabilityInit()
 | 
			
		||||
{
 | 
			
		||||
    // Activate testability plugin if exists
 | 
			
		||||
    QString testabilityPluginPostfix = ".so";
 | 
			
		||||
    QString testabilityPlugin = "testability/libtestability";
 | 
			
		||||
 | 
			
		||||
    testabilityPlugin = QLibraryInfo::location(QLibraryInfo::PluginsPath) + QDir::separator() + testabilityPlugin + testabilityPluginPostfix;
 | 
			
		||||
    QPluginLoader loader(testabilityPlugin.toLatin1().data());
 | 
			
		||||
 | 
			
		||||
    QObject *plugin = loader.instance();
 | 
			
		||||
    
 | 
			
		||||
    if (plugin) 
 | 
			
		||||
    {
 | 
			
		||||
        testabilityInterface = qobject_cast<TestabilityInterface *>(plugin);
 | 
			
		||||
 | 
			
		||||
        if (testabilityInterface) 
 | 
			
		||||
        {
 | 
			
		||||
            testabilityInterface->Initialize();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
QDeclarativeView* MDeclarativeCachePrivate::qDeclarativeView()
 | 
			
		||||
{
 | 
			
		||||
    QDeclarativeView *returnValue = 0;
 | 
			
		||||
    if (qDeclarativeViewInstance != 0) {
 | 
			
		||||
        returnValue = qDeclarativeViewInstance;
 | 
			
		||||
        qDeclarativeViewInstance = 0;
 | 
			
		||||
    } else {
 | 
			
		||||
        returnValue = new QDeclarativeView();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return returnValue;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
QString MDeclarativeCachePrivate::applicationDirPath()
 | 
			
		||||
{
 | 
			
		||||
    if (cachePopulated) {
 | 
			
		||||
        // In the booster case use the workaround
 | 
			
		||||
        return appDirPath;
 | 
			
		||||
    } else {
 | 
			
		||||
        return QCoreApplication::applicationDirPath();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
QString MDeclarativeCachePrivate::applicationFilePath()
 | 
			
		||||
{
 | 
			
		||||
    if (cachePopulated) {
 | 
			
		||||
        // In the booster case use the workaround
 | 
			
		||||
        return appFilePath;
 | 
			
		||||
    } else {
 | 
			
		||||
        return QCoreApplication::applicationFilePath();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
QDeclarativeView *MDeclarativeCache::populate()
 | 
			
		||||
{
 | 
			
		||||
    d_ptr->populate();
 | 
			
		||||
    return d_ptr->qDeclarativeViewInstance;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
QApplication* MDeclarativeCache::qApplication(int &argc, char **argv)
 | 
			
		||||
{    
 | 
			
		||||
    return d_ptr->qApplication(argc, argv);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
QDeclarativeView* MDeclarativeCache::qDeclarativeView()
 | 
			
		||||
{
 | 
			
		||||
    return d_ptr->qDeclarativeView();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
QString MDeclarativeCache::applicationDirPath()
 | 
			
		||||
{
 | 
			
		||||
    return d_ptr->applicationDirPath();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
QString MDeclarativeCache::applicationFilePath()
 | 
			
		||||
{
 | 
			
		||||
    return d_ptr->applicationFilePath();
 | 
			
		||||
}
 | 
			
		||||
@ -1,96 +0,0 @@
 | 
			
		||||
/*!
 | 
			
		||||
**
 | 
			
		||||
** @copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
 | 
			
		||||
** @license GNU Lesser General Public License version 2.1
 | 
			
		||||
** All rights reserved.
 | 
			
		||||
** Contact: Nokia Corporation (directui@nokia.com)
 | 
			
		||||
**
 | 
			
		||||
** This file is part of applauncherd
 | 
			
		||||
**
 | 
			
		||||
** If you have questions regarding the use of this file, please contact
 | 
			
		||||
** Nokia at directui@nokia.com.
 | 
			
		||||
**
 | 
			
		||||
** This library is free software; you can redistribute it and/or
 | 
			
		||||
** modify it under the terms of the GNU Lesser General Public
 | 
			
		||||
** License version 2.1 as published by the Free Software Foundation
 | 
			
		||||
** and appearing in the file LICENSE.LGPL included in the packaging
 | 
			
		||||
** of this file.
 | 
			
		||||
**
 | 
			
		||||
****************************************************************************/
 | 
			
		||||
 | 
			
		||||
#ifndef MDECLARATIVECACHE_H
 | 
			
		||||
#define MDECLARATIVECACHE_H
 | 
			
		||||
 | 
			
		||||
#include <QString>
 | 
			
		||||
 | 
			
		||||
class MDeclarativeCachePrivate;
 | 
			
		||||
class QApplication;
 | 
			
		||||
class QDeclarativeView;
 | 
			
		||||
 | 
			
		||||
/*!
 | 
			
		||||
 * \class MDeclarativeCache.
 | 
			
		||||
 * \brief Cache class for QDeclarativeBooster.
 | 
			
		||||
 */
 | 
			
		||||
class MDeclarativeCache
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
 | 
			
		||||
    //! Constructor.
 | 
			
		||||
    MDeclarativeCache() {};
 | 
			
		||||
 | 
			
		||||
    //! Destructor.
 | 
			
		||||
    virtual ~MDeclarativeCache() {};
 | 
			
		||||
 | 
			
		||||
    //! Populate cache with QApplication and QDeclarativeView
 | 
			
		||||
    /*!
 | 
			
		||||
     * Returns the cached QDeclarativeView instance, which can be used for booster-specific
 | 
			
		||||
     * initialization.
 | 
			
		||||
     */
 | 
			
		||||
    static QDeclarativeView *populate();
 | 
			
		||||
 | 
			
		||||
    //! Returns QApplication instance from cache or creates a new one.
 | 
			
		||||
    /*!
 | 
			
		||||
     * Ownership of the returned object is passed to the caller.
 | 
			
		||||
     * NOTE: This is subject to change.
 | 
			
		||||
     */
 | 
			
		||||
    static QApplication *qApplication(int &argc, char **argv);
 | 
			
		||||
 | 
			
		||||
    //! Returns QDeclarativeView instance from cache or creates a new one.
 | 
			
		||||
    /*!
 | 
			
		||||
     * Ownership of the returned object is passed to the caller.
 | 
			
		||||
     * NOTE: This is subject to change.
 | 
			
		||||
     */
 | 
			
		||||
    static QDeclarativeView *qDeclarativeView();
 | 
			
		||||
 | 
			
		||||
    //! Returns the directory that contains the application executable.
 | 
			
		||||
    /*!
 | 
			
		||||
     * This function is deprecated. It used to be a workaround for QApplication::applicationDirPath()
 | 
			
		||||
     * not working on harmattan with qdeclarativebooster and Qt 4.7, but this has been fixed.
 | 
			
		||||
     */
 | 
			
		||||
    static QString applicationDirPath() __attribute__ ((deprecated));
 | 
			
		||||
 | 
			
		||||
    //! Returns the file path of the application executable.
 | 
			
		||||
    /*!
 | 
			
		||||
     * This function is deprecated. It used to be a workaround for QApplication::applicationFilePath()
 | 
			
		||||
     * not working on harmattan with qdeclarativebooster and Qt 4.7, but this has been fixed.
 | 
			
		||||
     */
 | 
			
		||||
    static QString applicationFilePath() __attribute__ ((deprecated));
 | 
			
		||||
 | 
			
		||||
protected:
 | 
			
		||||
 | 
			
		||||
    static MDeclarativeCachePrivate* const d_ptr;
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
 | 
			
		||||
    //! Disable copy-constructor
 | 
			
		||||
    MDeclarativeCache(const MDeclarativeCache & r);
 | 
			
		||||
 | 
			
		||||
    //! Disable assignment operator
 | 
			
		||||
    MDeclarativeCache & operator= (const MDeclarativeCache & r);
 | 
			
		||||
 | 
			
		||||
#ifdef UNIT_TEST
 | 
			
		||||
    friend class Ut_MDeclarativeCache;
 | 
			
		||||
#endif
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif //MDECLARATIVECACHE_H
 | 
			
		||||
@ -1,61 +0,0 @@
 | 
			
		||||
/***************************************************************************
 | 
			
		||||
**
 | 
			
		||||
** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
 | 
			
		||||
** All rights reserved.
 | 
			
		||||
** Contact: Nokia Corporation (directui@nokia.com)
 | 
			
		||||
**
 | 
			
		||||
** This file is part of applauncherd
 | 
			
		||||
**
 | 
			
		||||
** If you have questions regarding the use of this file, please contact
 | 
			
		||||
** Nokia at directui@nokia.com.
 | 
			
		||||
**
 | 
			
		||||
** This library is free software; you can redistribute it and/or
 | 
			
		||||
** modify it under the terms of the GNU Lesser General Public
 | 
			
		||||
** License version 2.1 as published by the Free Software Foundation
 | 
			
		||||
** and appearing in the file LICENSE.LGPL included in the packaging
 | 
			
		||||
** of this file.
 | 
			
		||||
**
 | 
			
		||||
****************************************************************************/
 | 
			
		||||
 | 
			
		||||
#ifndef MDECLARATIVECACHE_P_H
 | 
			
		||||
#define MDECLARATIVECACHE_P_H
 | 
			
		||||
 | 
			
		||||
#include <QString>
 | 
			
		||||
#include "testabilityinterface.h"
 | 
			
		||||
 | 
			
		||||
class MDeclarativeCache;
 | 
			
		||||
class QApplication;
 | 
			
		||||
class QDeclarativeView;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class MDeclarativeCachePrivate
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
    MDeclarativeCachePrivate();
 | 
			
		||||
    virtual ~MDeclarativeCachePrivate();
 | 
			
		||||
    void populate();
 | 
			
		||||
    QApplication* qApplication(int &argc, char **argv);
 | 
			
		||||
    QDeclarativeView* qDeclarativeView();
 | 
			
		||||
    QString applicationDirPath();
 | 
			
		||||
    QString applicationFilePath();
 | 
			
		||||
    void testabilityInit();
 | 
			
		||||
 | 
			
		||||
    static const int ARGV_LIMIT;
 | 
			
		||||
    QApplication *qApplicationInstance;
 | 
			
		||||
    QDeclarativeView *qDeclarativeViewInstance;
 | 
			
		||||
    int initialArgc;
 | 
			
		||||
    char **initialArgv;
 | 
			
		||||
    QString appDirPath;
 | 
			
		||||
    QString appFilePath;
 | 
			
		||||
    bool cachePopulated;
 | 
			
		||||
    TestabilityInterface *testabilityInterface;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifdef UNIT_TEST
 | 
			
		||||
    friend class Ut_MDeclarativeCache;
 | 
			
		||||
#endif
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif // MDECLARATIVECACHE_P_H
 | 
			
		||||
@ -1,45 +0,0 @@
 | 
			
		||||
/***************************************************************************
 | 
			
		||||
**
 | 
			
		||||
** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
 | 
			
		||||
** All rights reserved.
 | 
			
		||||
** Contact: Nokia Corporation (directui@nokia.com)
 | 
			
		||||
**
 | 
			
		||||
** This file is part of applauncherd
 | 
			
		||||
**
 | 
			
		||||
** If you have questions regarding the use of this file, please contact
 | 
			
		||||
** Nokia at directui@nokia.com.
 | 
			
		||||
**
 | 
			
		||||
** This library is free software; you can redistribute it and/or
 | 
			
		||||
** modify it under the terms of the GNU Lesser General Public
 | 
			
		||||
** License version 2.1 as published by the Free Software Foundation
 | 
			
		||||
** and appearing in the file LICENSE.LGPL included in the packaging
 | 
			
		||||
** of this file.
 | 
			
		||||
**
 | 
			
		||||
****************************************************************************/
 | 
			
		||||
 | 
			
		||||
#include <QtCore>
 | 
			
		||||
#include "qdeclarativebooster.h"
 | 
			
		||||
 | 
			
		||||
extern "C" 
 | 
			
		||||
{
 | 
			
		||||
    // Create a new plugin instance.
 | 
			
		||||
    Q_DECL_EXPORT void * create()
 | 
			
		||||
    {
 | 
			
		||||
        return new QDeclarativeBooster;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    Q_DECL_EXPORT char type()
 | 
			
		||||
    {
 | 
			
		||||
        return QDeclarativeBooster::type();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    Q_DECL_EXPORT const char * socketName()
 | 
			
		||||
    {
 | 
			
		||||
        return QDeclarativeBooster::socketName().c_str();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    Q_DECL_EXPORT const char * temporaryProcessName()
 | 
			
		||||
    {
 | 
			
		||||
        return QDeclarativeBooster::temporaryProcessName().c_str();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -1,112 +0,0 @@
 | 
			
		||||
/***************************************************************************
 | 
			
		||||
**
 | 
			
		||||
** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
 | 
			
		||||
** All rights reserved.
 | 
			
		||||
** Contact: Nokia Corporation (directui@nokia.com)
 | 
			
		||||
**
 | 
			
		||||
** This file is part of applauncherd
 | 
			
		||||
**
 | 
			
		||||
** If you have questions regarding the use of this file, please contact
 | 
			
		||||
** Nokia at directui@nokia.com.
 | 
			
		||||
**
 | 
			
		||||
** This library is free software; you can redistribute it and/or
 | 
			
		||||
** modify it under the terms of the GNU Lesser General Public
 | 
			
		||||
** License version 2.1 as published by the Free Software Foundation
 | 
			
		||||
** and appearing in the file LICENSE.LGPL included in the packaging
 | 
			
		||||
** of this file.
 | 
			
		||||
**
 | 
			
		||||
****************************************************************************/
 | 
			
		||||
 | 
			
		||||
#include "qdeclarativebooster.h"
 | 
			
		||||
#include "mdeclarativecache.h"
 | 
			
		||||
#include "connection.h"
 | 
			
		||||
 | 
			
		||||
const string QDeclarativeBooster::m_socketId = "/tmp/boostd";
 | 
			
		||||
const string QDeclarativeBooster::m_temporaryProcessName = "booster-d";
 | 
			
		||||
 | 
			
		||||
const string & QDeclarativeBooster::socketId() const
 | 
			
		||||
{
 | 
			
		||||
    return m_socketId;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const string & QDeclarativeBooster::socketName()
 | 
			
		||||
{
 | 
			
		||||
    return m_socketId;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const string & QDeclarativeBooster::temporaryProcessName()
 | 
			
		||||
{
 | 
			
		||||
    return m_temporaryProcessName;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const string & QDeclarativeBooster::boosterTemporaryProcessName() const
 | 
			
		||||
{
 | 
			
		||||
    return temporaryProcessName();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
char QDeclarativeBooster::type()
 | 
			
		||||
{
 | 
			
		||||
    return 'd';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool QDeclarativeBooster::preload()
 | 
			
		||||
{
 | 
			
		||||
    MDeclarativeCache::populate();
 | 
			
		||||
    return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool QDeclarativeBooster::receiveDataFromInvoker(int socketFd)
 | 
			
		||||
{
 | 
			
		||||
    // Use the default implementation if in boot mode
 | 
			
		||||
    // (it won't require QApplication running).
 | 
			
		||||
 | 
			
		||||
    if (bootMode())
 | 
			
		||||
    {
 | 
			
		||||
        return Booster::receiveDataFromInvoker(socketFd);
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
    {
 | 
			
		||||
        // Setup the conversation channel with the invoker.
 | 
			
		||||
        setConnection(new Connection(socketFd));
 | 
			
		||||
 | 
			
		||||
        EventHandler handler(this);
 | 
			
		||||
        handler.runEventLoop();
 | 
			
		||||
 | 
			
		||||
        if (!connection()->connected())
 | 
			
		||||
        {
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // Receive application data from the invoker
 | 
			
		||||
        if(!connection()->receiveApplicationData(appData()))
 | 
			
		||||
        {
 | 
			
		||||
            connection()->close();
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // Close the connection if exit status doesn't need
 | 
			
		||||
        // to be sent back to invoker
 | 
			
		||||
        if (!connection()->isReportAppExitStatusNeeded())
 | 
			
		||||
        {
 | 
			
		||||
            connection()->close();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return true;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void QDeclarativeBooster::preinit()
 | 
			
		||||
{
 | 
			
		||||
    QString appName = QFileInfo(m_appData->argv()[0]).fileName();
 | 
			
		||||
 | 
			
		||||
    QString appClass = appName.left(1).toUpper();
 | 
			
		||||
    if (appName.length() > 1)
 | 
			
		||||
        appClass += appName.right(appName.length() - 1);
 | 
			
		||||
 | 
			
		||||
    // char* app_name = qstrdup(appName.toLatin1().data());
 | 
			
		||||
    // QApplication::setAppName(app_name);
 | 
			
		||||
 | 
			
		||||
    // char* app_class = qstrdup(appClass.toLatin1().data());
 | 
			
		||||
    // QApplication::setAppClass(app_class);
 | 
			
		||||
}
 | 
			
		||||
@ -1,98 +0,0 @@
 | 
			
		||||
/***************************************************************************
 | 
			
		||||
**
 | 
			
		||||
** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
 | 
			
		||||
** All rights reserved.
 | 
			
		||||
** Contact: Nokia Corporation (directui@nokia.com)
 | 
			
		||||
**
 | 
			
		||||
** This file is part of applauncherd
 | 
			
		||||
**
 | 
			
		||||
** If you have questions regarding the use of this file, please contact
 | 
			
		||||
** Nokia at directui@nokia.com.
 | 
			
		||||
**
 | 
			
		||||
** This library is free software; you can redistribute it and/or
 | 
			
		||||
** modify it under the terms of the GNU Lesser General Public
 | 
			
		||||
** License version 2.1 as published by the Free Software Foundation
 | 
			
		||||
** and appearing in the file LICENSE.LGPL included in the packaging
 | 
			
		||||
** of this file.
 | 
			
		||||
**
 | 
			
		||||
****************************************************************************/
 | 
			
		||||
 | 
			
		||||
#ifndef QDECLARATIVEBOOSTER_H
 | 
			
		||||
#define QDECLARATIVEBOOSTER_H
 | 
			
		||||
 | 
			
		||||
#include <QApplication>
 | 
			
		||||
#include "QFileInfo"
 | 
			
		||||
 | 
			
		||||
#include "eventhandler.h"
 | 
			
		||||
#include "booster.h"
 | 
			
		||||
 | 
			
		||||
/*!
 | 
			
		||||
 * \class QDeclarativeBooster.
 | 
			
		||||
 * \brief QDeclarative-specific version of the Booster.
 | 
			
		||||
 */
 | 
			
		||||
class QDeclarativeBooster : public Booster
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
 | 
			
		||||
    //! Constructor.
 | 
			
		||||
    QDeclarativeBooster() {};
 | 
			
		||||
 | 
			
		||||
    //! Destructor.
 | 
			
		||||
    virtual ~QDeclarativeBooster() {};
 | 
			
		||||
 | 
			
		||||
    /*!
 | 
			
		||||
     * \brief Return the socket name common to all QDeclarativeBooster objects.
 | 
			
		||||
     * \return Path to the socket file.
 | 
			
		||||
     */
 | 
			
		||||
    static const string & socketName();
 | 
			
		||||
 | 
			
		||||
    //! Return the process name to be used when booster is not
 | 
			
		||||
    //! yet transformed into a running application
 | 
			
		||||
    static const string & temporaryProcessName();
 | 
			
		||||
 | 
			
		||||
    //! \reimp
 | 
			
		||||
    virtual const string & boosterTemporaryProcessName() const;
 | 
			
		||||
 | 
			
		||||
    //! \reimp
 | 
			
		||||
    virtual char boosterType() const { return type(); }
 | 
			
		||||
 | 
			
		||||
    /*!
 | 
			
		||||
     * \brief Return a unique character ('d') represtenting the type of QDeclarativeBoosters.
 | 
			
		||||
     * \return Type character.
 | 
			
		||||
     */
 | 
			
		||||
    static char type();
 | 
			
		||||
 | 
			
		||||
    //! \reimp
 | 
			
		||||
    virtual bool preload();
 | 
			
		||||
 | 
			
		||||
protected:
 | 
			
		||||
 | 
			
		||||
    //! \reimp
 | 
			
		||||
    virtual const string & socketId() const;
 | 
			
		||||
 | 
			
		||||
    //! \reimp
 | 
			
		||||
    virtual bool receiveDataFromInvoker(int socketFd);
 | 
			
		||||
 | 
			
		||||
    //! \reimp
 | 
			
		||||
    virtual void preinit();
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
 | 
			
		||||
    //! Disable copy-constructor
 | 
			
		||||
    QDeclarativeBooster(const QDeclarativeBooster & r);
 | 
			
		||||
 | 
			
		||||
    //! Disable assignment operator
 | 
			
		||||
    QDeclarativeBooster & operator= (const QDeclarativeBooster & r);
 | 
			
		||||
 | 
			
		||||
    static const string m_socketId;
 | 
			
		||||
 | 
			
		||||
    //! Process name to be used when booster is not
 | 
			
		||||
    //! yet transformed into a running application
 | 
			
		||||
    static const string m_temporaryProcessName;
 | 
			
		||||
 | 
			
		||||
#ifdef UNIT_TEST
 | 
			
		||||
    friend class Ut_DBooster;
 | 
			
		||||
#endif
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif //QDECLARATIVEBOOSTER_H
 | 
			
		||||
@ -1,41 +0,0 @@
 | 
			
		||||
/***************************************************************************
 | 
			
		||||
**
 | 
			
		||||
** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
 | 
			
		||||
** All rights reserved.
 | 
			
		||||
** Contact: Nokia Corporation (directui@nokia.com)
 | 
			
		||||
**
 | 
			
		||||
** This file is part of applauncherd
 | 
			
		||||
**
 | 
			
		||||
** If you have questions regarding the use of this file, please contact
 | 
			
		||||
** Nokia at directui@nokia.com.
 | 
			
		||||
**
 | 
			
		||||
** This library is free software; you can redistribute it and/or
 | 
			
		||||
** modify it under the terms of the GNU Lesser General Public
 | 
			
		||||
** License version 2.1 as published by the Free Software Foundation
 | 
			
		||||
** and appearing in the file LICENSE.LGPL included in the packaging
 | 
			
		||||
** of this file.
 | 
			
		||||
**
 | 
			
		||||
****************************************************************************/
 | 
			
		||||
 | 
			
		||||
#ifndef DBOOSTERTESTABILITYINTERFACE_H
 | 
			
		||||
#define DBOOSTERTESTABILITYINTERFACE_H
 | 
			
		||||
 | 
			
		||||
class TestabilityInterface
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
    virtual ~TestabilityInterface() {}
 | 
			
		||||
 | 
			
		||||
    /*!
 | 
			
		||||
 | 
			
		||||
      Initializes the plugin once loaded.
 | 
			
		||||
 | 
			
		||||
    */
 | 
			
		||||
    virtual void Initialize() = 0;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
Q_DECLARE_INTERFACE(TestabilityInterface,
 | 
			
		||||
                    "com.nokia.testability.TestabilityInterface/1.0")
 | 
			
		||||
 | 
			
		||||
#endif // DBOOSTERTESTABILITYINTERFACE_H
 | 
			
		||||
@ -1,27 +0,0 @@
 | 
			
		||||
# Find Qt4
 | 
			
		||||
find_package(Qt4 4.6.0 REQUIRED)
 | 
			
		||||
include(${QT_USE_FILE})
 | 
			
		||||
if (${QTVERSION} VERSION_LESS 4.6.0)
 | 
			
		||||
    message(FATAL_ERROR "You need Qt4.6, found ${QTVERSION}.")
 | 
			
		||||
endif (${QTVERSION} VERSION_LESS 4.6.0)
 | 
			
		||||
 | 
			
		||||
set(LAUNCHER "${CMAKE_HOME_DIRECTORY}/src/launcherlib")
 | 
			
		||||
 | 
			
		||||
include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_HOME_DIRECTORY}/src/common ${LAUNCHER})
 | 
			
		||||
 | 
			
		||||
# Hide all symbols except the ones explicitly exported in the code (like main())
 | 
			
		||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden")
 | 
			
		||||
 | 
			
		||||
# Set sources
 | 
			
		||||
set(SRC qtbooster.cpp pluginfactory.cpp)
 | 
			
		||||
 | 
			
		||||
# Set libraries to be linked.
 | 
			
		||||
link_libraries("-L../launcherlib -lapplauncherd" ${LIBDL} ${QT_QTCORE_LIBRARY})
 | 
			
		||||
 | 
			
		||||
# Set executable
 | 
			
		||||
add_library(qtbooster MODULE ${SRC})
 | 
			
		||||
add_dependencies(qtbooster applauncherd)
 | 
			
		||||
 | 
			
		||||
# Add install rule
 | 
			
		||||
install(TARGETS qtbooster DESTINATION /usr/lib/applauncherd/)
 | 
			
		||||
 | 
			
		||||
@ -1,45 +0,0 @@
 | 
			
		||||
/***************************************************************************
 | 
			
		||||
**
 | 
			
		||||
** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
 | 
			
		||||
** All rights reserved.
 | 
			
		||||
** Contact: Nokia Corporation (directui@nokia.com)
 | 
			
		||||
**
 | 
			
		||||
** This file is part of applauncherd
 | 
			
		||||
**
 | 
			
		||||
** If you have questions regarding the use of this file, please contact
 | 
			
		||||
** Nokia at directui@nokia.com.
 | 
			
		||||
**
 | 
			
		||||
** This library is free software; you can redistribute it and/or
 | 
			
		||||
** modify it under the terms of the GNU Lesser General Public
 | 
			
		||||
** License version 2.1 as published by the Free Software Foundation
 | 
			
		||||
** and appearing in the file LICENSE.LGPL included in the packaging
 | 
			
		||||
** of this file.
 | 
			
		||||
**
 | 
			
		||||
****************************************************************************/
 | 
			
		||||
 | 
			
		||||
#include <QtCore>
 | 
			
		||||
#include "qtbooster.h"
 | 
			
		||||
 | 
			
		||||
extern "C" 
 | 
			
		||||
{
 | 
			
		||||
    // Create a new plugin instance.
 | 
			
		||||
    Q_DECL_EXPORT void * create()
 | 
			
		||||
    {
 | 
			
		||||
        return new QtBooster;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    Q_DECL_EXPORT char type()
 | 
			
		||||
    {
 | 
			
		||||
        return QtBooster::type();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    Q_DECL_EXPORT const char * socketName()
 | 
			
		||||
    {
 | 
			
		||||
        return QtBooster::socketName().c_str();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    Q_DECL_EXPORT const char * temporaryProcessName()
 | 
			
		||||
    {
 | 
			
		||||
        return QtBooster::temporaryProcessName().c_str();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -1,53 +0,0 @@
 | 
			
		||||
/***************************************************************************
 | 
			
		||||
**
 | 
			
		||||
** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
 | 
			
		||||
** All rights reserved.
 | 
			
		||||
** Contact: Nokia Corporation (directui@nokia.com)
 | 
			
		||||
**
 | 
			
		||||
** This file is part of applauncherd
 | 
			
		||||
**
 | 
			
		||||
** If you have questions regarding the use of this file, please contact
 | 
			
		||||
** Nokia at directui@nokia.com.
 | 
			
		||||
**
 | 
			
		||||
** This library is free software; you can redistribute it and/or
 | 
			
		||||
** modify it under the terms of the GNU Lesser General Public
 | 
			
		||||
** License version 2.1 as published by the Free Software Foundation
 | 
			
		||||
** and appearing in the file LICENSE.LGPL included in the packaging
 | 
			
		||||
** of this file.
 | 
			
		||||
**
 | 
			
		||||
****************************************************************************/
 | 
			
		||||
 | 
			
		||||
#include "qtbooster.h"
 | 
			
		||||
 | 
			
		||||
const string QtBooster::m_socketId = "/tmp/boostq";
 | 
			
		||||
const string QtBooster::m_temporaryProcessName = "booster-q";
 | 
			
		||||
 | 
			
		||||
const string & QtBooster::socketId() const
 | 
			
		||||
{
 | 
			
		||||
    return m_socketId;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const string & QtBooster::socketName()
 | 
			
		||||
{
 | 
			
		||||
    return m_socketId;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const string & QtBooster::temporaryProcessName()
 | 
			
		||||
{
 | 
			
		||||
    return m_temporaryProcessName;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const string & QtBooster::boosterTemporaryProcessName() const
 | 
			
		||||
{
 | 
			
		||||
    return temporaryProcessName();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
char QtBooster::type()
 | 
			
		||||
{
 | 
			
		||||
    return 'q';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool QtBooster::preload()
 | 
			
		||||
{
 | 
			
		||||
    return true;
 | 
			
		||||
}
 | 
			
		||||
@ -1,88 +0,0 @@
 | 
			
		||||
/***************************************************************************
 | 
			
		||||
**
 | 
			
		||||
** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
 | 
			
		||||
** All rights reserved.
 | 
			
		||||
** Contact: Nokia Corporation (directui@nokia.com)
 | 
			
		||||
**
 | 
			
		||||
** This file is part of applauncherd
 | 
			
		||||
**
 | 
			
		||||
** If you have questions regarding the use of this file, please contact
 | 
			
		||||
** Nokia at directui@nokia.com.
 | 
			
		||||
**
 | 
			
		||||
** This library is free software; you can redistribute it and/or
 | 
			
		||||
** modify it under the terms of the GNU Lesser General Public
 | 
			
		||||
** License version 2.1 as published by the Free Software Foundation
 | 
			
		||||
** and appearing in the file LICENSE.LGPL included in the packaging
 | 
			
		||||
** of this file.
 | 
			
		||||
**
 | 
			
		||||
****************************************************************************/
 | 
			
		||||
 | 
			
		||||
#ifndef QTBOOSTER_H
 | 
			
		||||
#define QTBOOSTER_H
 | 
			
		||||
 | 
			
		||||
#include "booster.h"
 | 
			
		||||
 | 
			
		||||
/*!
 | 
			
		||||
 * \class QtBooster.
 | 
			
		||||
 * \brief Qt-specific version of the Booster.
 | 
			
		||||
 */
 | 
			
		||||
class QtBooster : public Booster
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
 | 
			
		||||
    //! Constructor.
 | 
			
		||||
    QtBooster() {};
 | 
			
		||||
 | 
			
		||||
    //! Destructor.
 | 
			
		||||
    virtual ~QtBooster() {};
 | 
			
		||||
 | 
			
		||||
    /*!
 | 
			
		||||
     * \brief Return the socket name common to all QtBooster objects.
 | 
			
		||||
     * \return Path to the socket file.
 | 
			
		||||
     */
 | 
			
		||||
    static const string & socketName();
 | 
			
		||||
 | 
			
		||||
    //! Return the process name to be used when booster is not
 | 
			
		||||
    //! yet transformed into a running application
 | 
			
		||||
    static const string & temporaryProcessName();
 | 
			
		||||
 | 
			
		||||
    //! \reimp
 | 
			
		||||
    virtual const string & boosterTemporaryProcessName() const;
 | 
			
		||||
 | 
			
		||||
    //! \reimp
 | 
			
		||||
    virtual char boosterType() const { return type(); }
 | 
			
		||||
 | 
			
		||||
    /*!
 | 
			
		||||
     * \brief Return a unique character ('q') represtenting the type of QtBoosters.
 | 
			
		||||
     * \return Type character.
 | 
			
		||||
     */
 | 
			
		||||
    static char type();
 | 
			
		||||
 | 
			
		||||
protected:
 | 
			
		||||
 | 
			
		||||
    //! \reimp
 | 
			
		||||
    virtual bool preload();
 | 
			
		||||
 | 
			
		||||
    //! \reimp
 | 
			
		||||
    virtual const string & socketId() const;
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
 | 
			
		||||
    //! Disable copy-constructor
 | 
			
		||||
    QtBooster(const QtBooster & r);
 | 
			
		||||
 | 
			
		||||
    //! Disable assignment operator
 | 
			
		||||
    QtBooster & operator= (const QtBooster & r);
 | 
			
		||||
 | 
			
		||||
    static const string m_socketId;
 | 
			
		||||
 | 
			
		||||
    //! Process name to be used when booster is not
 | 
			
		||||
    //! yet transformed into a running application
 | 
			
		||||
    static const string m_temporaryProcessName;
 | 
			
		||||
 | 
			
		||||
#ifdef UNIT_TEST
 | 
			
		||||
    friend class Ut_QtBooster;
 | 
			
		||||
#endif
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif //QTBOOSTER_H
 | 
			
		||||
@ -1,33 +0,0 @@
 | 
			
		||||
# Set sources
 | 
			
		||||
set(SRC fala_dbus.cpp)
 | 
			
		||||
 | 
			
		||||
link_libraries(${QT_QTCORE_LIBRARY} ${QT_QTGUI_LIBRARY} ${QT_QTDBUS_LIBRARY})
 | 
			
		||||
 | 
			
		||||
include(${QT_USE_FILE})
 | 
			
		||||
 | 
			
		||||
SET (QT_USE_QTDBUS true)
 | 
			
		||||
INCLUDE_DIRECTORIES(${QT_QTDBUS_INCLUDE_DIR})
 | 
			
		||||
 | 
			
		||||
execute_process(COMMAND "env" 
 | 
			
		||||
                         "PKG_CONFIG_PATH=${CMAKE_SOURCE_DIR}/data/pkgconfig" 
 | 
			
		||||
                         "/usr/bin/pkg-config" 
 | 
			
		||||
                         "--cflags" 
 | 
			
		||||
                         "qt-boostable" 
 | 
			
		||||
                WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} 
 | 
			
		||||
                OUTPUT_VARIABLE booster_cflags 
 | 
			
		||||
                OUTPUT_STRIP_TRAILING_WHITESPACE)
 | 
			
		||||
execute_process(COMMAND "env" 
 | 
			
		||||
                        "PKG_CONFIG_PATH=${CMAKE_SOURCE_DIR}/data/pkgconfig" 
 | 
			
		||||
                        "/usr/bin/pkg-config" "--libs" 
 | 
			
		||||
                        "qt-boostable" 
 | 
			
		||||
                WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} 
 | 
			
		||||
                OUTPUT_VARIABLE booster_libs 
 | 
			
		||||
                OUTPUT_STRIP_TRAILING_WHITESPACE)
 | 
			
		||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${booster_cflags}")
 | 
			
		||||
set(CMAKE_EXE_LINKER_FLAGS ${booster_libs})
 | 
			
		||||
 | 
			
		||||
add_executable(fala_dbus ${SRC})
 | 
			
		||||
 | 
			
		||||
# Install
 | 
			
		||||
install(PROGRAMS fala_dbus DESTINATION /usr/bin/ )
 | 
			
		||||
 | 
			
		||||
@ -1,40 +0,0 @@
 | 
			
		||||
/***************************************************************************
 | 
			
		||||
**
 | 
			
		||||
** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
 | 
			
		||||
** All rights reserved.
 | 
			
		||||
** Contact: Nokia Corporation (directui@nokia.com)
 | 
			
		||||
**
 | 
			
		||||
** This file is part of applauncherd
 | 
			
		||||
**
 | 
			
		||||
** If you have questions regarding the use of this file, please contact
 | 
			
		||||
** Nokia at directui@nokia.com.
 | 
			
		||||
**
 | 
			
		||||
** This library is free software; you can redistribute it and/or
 | 
			
		||||
** modify it under the terms of the GNU Lesser General Public
 | 
			
		||||
** License version 2.1 as published by the Free Software Foundation
 | 
			
		||||
** and appearing in the file LICENSE.LGPL included in the packaging
 | 
			
		||||
** of this file.
 | 
			
		||||
**
 | 
			
		||||
****************************************************************************/
 | 
			
		||||
 | 
			
		||||
#include <QApplication>
 | 
			
		||||
#include <QDBusConnection>
 | 
			
		||||
#include <QDBusMessage>
 | 
			
		||||
#include <QString>
 | 
			
		||||
#include <syslog.h>
 | 
			
		||||
#include <iostream>
 | 
			
		||||
 | 
			
		||||
Q_DECL_EXPORT int main(int argc, char ** argv)
 | 
			
		||||
{
 | 
			
		||||
    QApplication app(argc, argv);
 | 
			
		||||
    Q_UNUSED(app);
 | 
			
		||||
    QDBusConnection bus = QDBusConnection::systemBus();
 | 
			
		||||
    QDBusMessage msg = QDBusMessage::createMethodCall("com.nokia.dsme", "/com/nokia/dsme/request", "com.nokia.dsme.request", "req_powerup");
 | 
			
		||||
    QDBusMessage reply = bus.call(msg,QDBus::AutoDetect, 5);
 | 
			
		||||
    QString dbusReplyError = reply.errorName();
 | 
			
		||||
    openlog ("qfala_dbus", LOG_NDELAY | LOG_PID | LOG_PERROR, LOG_DAEMON);
 | 
			
		||||
    syslog (LOG_DAEMON | LOG_NOTICE, "fala_dbus connection error: '%s'", dbusReplyError.toLocal8Bit().data());    
 | 
			
		||||
    closelog();
 | 
			
		||||
    std::cerr << "fala_dbus connection error:" << dbusReplyError.toLocal8Bit().data() << "\n";
 | 
			
		||||
    _exit(0);
 | 
			
		||||
}
 | 
			
		||||
@ -1,42 +0,0 @@
 | 
			
		||||
# Set sources
 | 
			
		||||
set(SRC main.cpp)
 | 
			
		||||
 | 
			
		||||
# Use the compiler and linker flags given in qdeclarative-boostable.pc
 | 
			
		||||
# in the source tree.
 | 
			
		||||
execute_process(COMMAND "env" 
 | 
			
		||||
                         "PKG_CONFIG_PATH=${CMAKE_SOURCE_DIR}/data/pkgconfig" 
 | 
			
		||||
                         "/usr/bin/pkg-config" 
 | 
			
		||||
                         "--cflags" 
 | 
			
		||||
                         "qdeclarative-boostable" 
 | 
			
		||||
                WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} 
 | 
			
		||||
                OUTPUT_VARIABLE booster_cflags 
 | 
			
		||||
                OUTPUT_STRIP_TRAILING_WHITESPACE)
 | 
			
		||||
execute_process(COMMAND "env" 
 | 
			
		||||
                        "PKG_CONFIG_PATH=${CMAKE_SOURCE_DIR}/data/pkgconfig" 
 | 
			
		||||
                        "/usr/bin/pkg-config" "--libs" 
 | 
			
		||||
                        "qdeclarative-boostable" 
 | 
			
		||||
                WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} 
 | 
			
		||||
                OUTPUT_VARIABLE booster_libs 
 | 
			
		||||
                OUTPUT_STRIP_TRAILING_WHITESPACE)
 | 
			
		||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${booster_cflags}")
 | 
			
		||||
 | 
			
		||||
include_directories(${CMAKE_SOURCE_DIR}/src/qdeclarativebooster)
 | 
			
		||||
 | 
			
		||||
# Compile resources
 | 
			
		||||
QT4_ADD_RESOURCES(RESOURCE_SRC main.qrc)
 | 
			
		||||
 | 
			
		||||
# Enable Qt-support
 | 
			
		||||
include(${QT_USE_FILE})
 | 
			
		||||
 | 
			
		||||
link_libraries(${QT_QTCORE_LIBRARY} ${QT_QTGUI_LIBRARY} ${QT_QTDECLARATIVE_LIBRARY} "-L${CMAKE_SOURCE_DIR}/src/launcherlib -lapplauncherd -L${CMAKE_SOURCE_DIR}/src/qdeclarativebooster ${booster_libs}")
 | 
			
		||||
add_executable(fala_qml ${SRC} ${RESOURCE_SRC})
 | 
			
		||||
add_dependencies(fala_qml applauncherd mdeclarativecache)
 | 
			
		||||
 | 
			
		||||
# Install
 | 
			
		||||
install(PROGRAMS fala_qml DESTINATION /usr/bin/ RENAME fala_qml_wol)
 | 
			
		||||
install(PROGRAMS fala_qml DESTINATION /usr/bin/ RENAME fala_qml_helloworld)
 | 
			
		||||
install(PROGRAMS fala_qml DESTINATION /usr/bin/ RENAME fala_qml_wl)
 | 
			
		||||
install(PROGRAMS fala_qml DESTINATION /usr/share/fala_images RENAME fala_qml_helloworld)
 | 
			
		||||
install(FILES fala_qml_wl.desktop DESTINATION /usr/share/applications)
 | 
			
		||||
install(FILES fala_qml_wol.desktop DESTINATION /usr/share/applications)
 | 
			
		||||
install(SCRIPT scripts/create_links.cmake)
 | 
			
		||||
@ -1,7 +0,0 @@
 | 
			
		||||
[Desktop Entry]
 | 
			
		||||
Type=Application
 | 
			
		||||
Name=fala_qml_wl
 | 
			
		||||
Icon=icon-l-video
 | 
			
		||||
Exec=invoker --single-instance --type=d /usr/bin/fala_qml_wl
 | 
			
		||||
Categories=X-MeeGo;X-Demos;
 | 
			
		||||
OnlyShowIn=X-MeeGo;
 | 
			
		||||
@ -1,7 +0,0 @@
 | 
			
		||||
[Desktop Entry]
 | 
			
		||||
Type=Application
 | 
			
		||||
Name=fala_qml_wol
 | 
			
		||||
Icon=icon-l-video
 | 
			
		||||
Exec=single-instance /usr/bin/fala_qml_wol
 | 
			
		||||
Categories=X-MeeGo;X-Demos;
 | 
			
		||||
OnlyShowIn=X-MeeGo;
 | 
			
		||||
@ -1,144 +0,0 @@
 | 
			
		||||
/***************************************************************************
 | 
			
		||||
**
 | 
			
		||||
** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
 | 
			
		||||
** All rights reserved.
 | 
			
		||||
** Contact: Nokia Corporation (directui@nokia.com)
 | 
			
		||||
**
 | 
			
		||||
** This file is part of applauncherd
 | 
			
		||||
**
 | 
			
		||||
** If you have questions regarding the use of this file, please contact
 | 
			
		||||
** Nokia at directui@nokia.com.
 | 
			
		||||
**
 | 
			
		||||
** This library is free software; you can redistribute it and/or
 | 
			
		||||
** modify it under the terms of the GNU Lesser General Public
 | 
			
		||||
** License version 2.1 as published by the Free Software Foundation
 | 
			
		||||
** and appearing in the file LICENSE.LGPL included in the packaging
 | 
			
		||||
** of this file.
 | 
			
		||||
**
 | 
			
		||||
****************************************************************************/
 | 
			
		||||
 | 
			
		||||
#include <Qt/QtDeclarative>
 | 
			
		||||
#include <QFile>
 | 
			
		||||
#include <sys/time.h>
 | 
			
		||||
#include "mdeclarativecache.h"
 | 
			
		||||
#include <exception>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
QString log_file = "/tmp/fala_qml_helloworld.log";
 | 
			
		||||
 | 
			
		||||
void FANGORNLOG(const char* s, bool eol = true)
 | 
			
		||||
{
 | 
			
		||||
    QFile f(log_file);
 | 
			
		||||
    f.open(QIODevice::Append);
 | 
			
		||||
    f.write(s, qstrlen(s));
 | 
			
		||||
    if (eol) {
 | 
			
		||||
        f.write("\n", 1);
 | 
			
		||||
    }
 | 
			
		||||
    f.close();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void FANGORNLOG(const QString& s, bool eol = true)
 | 
			
		||||
{
 | 
			
		||||
    QByteArray ba = s.toLocal8Bit();
 | 
			
		||||
    char *p = new char[ba.size() + 1];
 | 
			
		||||
    strcpy(p, ba.data());
 | 
			
		||||
    FANGORNLOG(p, eol);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void timestamp(const char *s)
 | 
			
		||||
{
 | 
			
		||||
    timeval tim;
 | 
			
		||||
    char msg[80];
 | 
			
		||||
    gettimeofday(&tim, NULL);
 | 
			
		||||
    snprintf(msg, 80, "%d%03d %s", 
 | 
			
		||||
             static_cast<int>(tim.tv_sec), static_cast<int>(tim.tv_usec/1000), s);
 | 
			
		||||
    FANGORNLOG(msg);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void timestamp(const QString& s)
 | 
			
		||||
{
 | 
			
		||||
    QByteArray ba = s.toLocal8Bit();
 | 
			
		||||
    char *p = new char[ba.size() + 1];
 | 
			
		||||
    strcpy(p, ba.data());
 | 
			
		||||
    timestamp(p);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Q_DECL_EXPORT int main(int argc, char **argv)
 | 
			
		||||
{
 | 
			
		||||
    QApplication *app;
 | 
			
		||||
    try
 | 
			
		||||
    {
 | 
			
		||||
 | 
			
		||||
        QString appName(argv[0]);
 | 
			
		||||
        if (appName.endsWith("fala_qml_wl"))
 | 
			
		||||
        {
 | 
			
		||||
            log_file = "/tmp/fala_qml_wl.log";
 | 
			
		||||
        }
 | 
			
		||||
        else if (appName.endsWith("fala_qml_wol"))
 | 
			
		||||
        {
 | 
			
		||||
            log_file = "/tmp/fala_qml_wol.log";
 | 
			
		||||
        }
 | 
			
		||||
        timestamp("application main");
 | 
			
		||||
 | 
			
		||||
        app = MDeclarativeCache::qApplication(argc, argv);
 | 
			
		||||
        timestamp("QApplication from cache");
 | 
			
		||||
 | 
			
		||||
        QDeclarativeView *window = NULL;
 | 
			
		||||
 | 
			
		||||
        bool bWindowNotFromCache = false;
 | 
			
		||||
        const QString sWindowNotFromCache = "window-not-from-cache";
 | 
			
		||||
        for (int i = 1; i < argc; i++) {
 | 
			
		||||
            QString sArg = QString(argv[i]);
 | 
			
		||||
            if (sArg.contains(sWindowNotFromCache,Qt::CaseInsensitive)) {
 | 
			
		||||
		bWindowNotFromCache = true;
 | 
			
		||||
		break;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (bWindowNotFromCache) {
 | 
			
		||||
            window = new QDeclarativeView();
 | 
			
		||||
            timestamp("QDeclarativeView NOT from cache");
 | 
			
		||||
        } else {
 | 
			
		||||
            window = MDeclarativeCache::qDeclarativeView();
 | 
			
		||||
            timestamp("QDeclarativeView from cache");
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        timestamp(QString("applicationDirPath: ").append(QApplication::applicationDirPath()));
 | 
			
		||||
        timestamp(QString("applicationFilePath: ").append(QApplication::applicationFilePath()));
 | 
			
		||||
 | 
			
		||||
        if (argc > 2 && QString(argv[1]) == QString("--log-args")) {
 | 
			
		||||
            FANGORNLOG("argv:", false);
 | 
			
		||||
            for (int i = 0; i < argc; i++) {
 | 
			
		||||
                FANGORNLOG(" ", false);
 | 
			
		||||
                FANGORNLOG(argv[i], false);
 | 
			
		||||
            }
 | 
			
		||||
            FANGORNLOG("");
 | 
			
		||||
 | 
			
		||||
            FANGORNLOG("argv:", false);
 | 
			
		||||
            QStringList args = QCoreApplication::arguments();
 | 
			
		||||
            for (int i = 0; i < args.size(); i++) {
 | 
			
		||||
                FANGORNLOG(" ", false);
 | 
			
		||||
                FANGORNLOG(args.at(i), false);
 | 
			
		||||
            }
 | 
			
		||||
            FANGORNLOG("");
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        window->setWindowTitle("Applauncherd QML testapp");
 | 
			
		||||
 | 
			
		||||
        window->setResizeMode(QDeclarativeView::SizeRootObjectToView);
 | 
			
		||||
 | 
			
		||||
        //window->setSource(QUrl::fromLocalFile("/usr/share/fala_qml_helloworld/main.qml"));
 | 
			
		||||
        window->setSource(QUrl("qrc:/main.qml"));
 | 
			
		||||
        window->showFullScreen();
 | 
			
		||||
 | 
			
		||||
        timestamp("Calling app->exec()");
 | 
			
		||||
    }
 | 
			
		||||
    catch(std::exception& e)
 | 
			
		||||
    {
 | 
			
		||||
        return -1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    _exit(app->exec());
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -1,12 +0,0 @@
 | 
			
		||||
import Qt 4.7
 | 
			
		||||
 | 
			
		||||
Rectangle {
 | 
			
		||||
    width: 853
 | 
			
		||||
    height: 480
 | 
			
		||||
    Text {
 | 
			
		||||
        id: text1
 | 
			
		||||
        anchors.centerIn: parent
 | 
			
		||||
        text: "Hello QML World!"
 | 
			
		||||
        font.pixelSize: 80
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -1,5 +0,0 @@
 | 
			
		||||
<RCC>
 | 
			
		||||
    <qresource prefix="/">
 | 
			
		||||
        <file>main.qml</file>
 | 
			
		||||
    </qresource>
 | 
			
		||||
</RCC>
 | 
			
		||||
@ -1,4 +0,0 @@
 | 
			
		||||
execute_process(COMMAND echo "Creating symlinks for fala_qml_helloworld..")
 | 
			
		||||
execute_process(COMMAND ln -v -s /usr/bin/fala_qml_helloworld $ENV{DESTDIR}/usr/bin/fala_qml_helloworld1)
 | 
			
		||||
execute_process(COMMAND ln -v -s /usr/bin/fala_qml_helloworld $ENV{DESTDIR}/usr/bin/fala_qml_helloworld2)
 | 
			
		||||
 | 
			
		||||
@ -1,30 +0,0 @@
 | 
			
		||||
# Set sources
 | 
			
		||||
set(SRC fala_windowless.cpp)
 | 
			
		||||
 | 
			
		||||
execute_process(COMMAND "env" 
 | 
			
		||||
                         "PKG_CONFIG_PATH=${CMAKE_SOURCE_DIR}/data/pkgconfig" 
 | 
			
		||||
                         "/usr/bin/pkg-config" 
 | 
			
		||||
                         "--cflags" 
 | 
			
		||||
                         "qt-boostable" 
 | 
			
		||||
                WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} 
 | 
			
		||||
                OUTPUT_VARIABLE booster_cxxflags 
 | 
			
		||||
                OUTPUT_STRIP_TRAILING_WHITESPACE)
 | 
			
		||||
execute_process(COMMAND "env" 
 | 
			
		||||
                        "PKG_CONFIG_PATH=${CMAKE_SOURCE_DIR}/data/pkgconfig" 
 | 
			
		||||
                        "/usr/bin/pkg-config" "--libs" 
 | 
			
		||||
                        "qt-boostable" 
 | 
			
		||||
                WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} 
 | 
			
		||||
                OUTPUT_VARIABLE booster_libs 
 | 
			
		||||
                OUTPUT_STRIP_TRAILING_WHITESPACE)
 | 
			
		||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${booster_cxxflags}")
 | 
			
		||||
set(CMAKE_EXE_LINKER_FLAGS ${booster_libs})
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
include(${QT_USE_FILE})
 | 
			
		||||
 | 
			
		||||
link_libraries(${QT_QTCORE_LIBRARY} ${QT_QTGUI_LIBRARY})
 | 
			
		||||
add_executable(fala_windowless ${SRC})
 | 
			
		||||
 | 
			
		||||
install(PROGRAMS fala_windowless DESTINATION /usr/bin/)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -1,26 +0,0 @@
 | 
			
		||||
/***************************************************************************
 | 
			
		||||
**
 | 
			
		||||
** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
 | 
			
		||||
** All rights reserved.
 | 
			
		||||
** Contact: Nokia Corporation (directui@nokia.com)
 | 
			
		||||
**
 | 
			
		||||
** This file is part of applauncherd
 | 
			
		||||
**
 | 
			
		||||
** If you have questions regarding the use of this file, please contact
 | 
			
		||||
** Nokia at directui@nokia.com.
 | 
			
		||||
**
 | 
			
		||||
** This library is free software; you can redistribute it and/or
 | 
			
		||||
** modify it under the terms of the GNU Lesser General Public
 | 
			
		||||
** License version 2.1 as published by the Free Software Foundation
 | 
			
		||||
** and appearing in the file LICENSE.LGPL included in the packaging
 | 
			
		||||
** of this file.
 | 
			
		||||
**
 | 
			
		||||
****************************************************************************/
 | 
			
		||||
 | 
			
		||||
#include <QApplication>
 | 
			
		||||
 | 
			
		||||
Q_DECL_EXPORT int main(int argc, char ** argv)
 | 
			
		||||
{
 | 
			
		||||
    QApplication app(argc, argv);
 | 
			
		||||
    app.exec();
 | 
			
		||||
}
 | 
			
		||||
@ -1,4 +0,0 @@
 | 
			
		||||
# Install
 | 
			
		||||
install(PROGRAMS fala_focus DESTINATION /usr/bin/ )
 | 
			
		||||
install(FILES view.qml DESTINATION /usr/share/applauncherd-testscripts/)
 | 
			
		||||
 | 
			
		||||
@ -1,18 +0,0 @@
 | 
			
		||||
#!/usr/bin/python
 | 
			
		||||
# -*- coding: utf-8 -*-
 | 
			
		||||
 
 | 
			
		||||
import sys
 | 
			
		||||
from PySide.QtCore import *
 | 
			
		||||
from PySide.QtGui import *
 | 
			
		||||
from PySide.QtDeclarative import QDeclarativeView
 | 
			
		||||
 
 | 
			
		||||
# Create Qt application and the QDeclarative view
 | 
			
		||||
app = QApplication(sys.argv)
 | 
			
		||||
view = QDeclarativeView()
 | 
			
		||||
# Create an URL to the QML file
 | 
			
		||||
url = QUrl('/usr/share/applauncherd-testscripts/view.qml')
 | 
			
		||||
# Set the QML file and show
 | 
			
		||||
view.setSource(url)
 | 
			
		||||
view.show()
 | 
			
		||||
# Enter Qt main loop
 | 
			
		||||
sys.exit(app.exec_())
 | 
			
		||||
@ -1,12 +0,0 @@
 | 
			
		||||
import Qt 4.7
 | 
			
		||||
 
 | 
			
		||||
Rectangle {
 | 
			
		||||
    width: 200
 | 
			
		||||
    height: 200
 | 
			
		||||
    color: "red"
 | 
			
		||||
 
 | 
			
		||||
    Text {
 | 
			
		||||
        text: "Hello World"
 | 
			
		||||
        anchors.centerIn: parent
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -1,34 +0,0 @@
 | 
			
		||||
# Set sources
 | 
			
		||||
set(SRC main.cpp)
 | 
			
		||||
 | 
			
		||||
execute_process(COMMAND "env" 
 | 
			
		||||
                         "PKG_CONFIG_PATH=${CMAKE_SOURCE_DIR}/data/pkgconfig" 
 | 
			
		||||
                         "/usr/bin/pkg-config" 
 | 
			
		||||
                         "--cflags" 
 | 
			
		||||
                         "qt-boostable" 
 | 
			
		||||
                WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} 
 | 
			
		||||
                OUTPUT_VARIABLE booster_cflags 
 | 
			
		||||
                OUTPUT_STRIP_TRAILING_WHITESPACE)
 | 
			
		||||
execute_process(COMMAND "env" 
 | 
			
		||||
                        "PKG_CONFIG_PATH=${CMAKE_SOURCE_DIR}/data/pkgconfig" 
 | 
			
		||||
                        "/usr/bin/pkg-config" "--libs" 
 | 
			
		||||
                        "qt-boostable" 
 | 
			
		||||
                WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} 
 | 
			
		||||
                OUTPUT_VARIABLE booster_libs 
 | 
			
		||||
                OUTPUT_STRIP_TRAILING_WHITESPACE)
 | 
			
		||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${booster_cflags}")
 | 
			
		||||
set(CMAKE_EXE_LINKER_FLAGS ${booster_libs})
 | 
			
		||||
 | 
			
		||||
# Enable Qt-support
 | 
			
		||||
include(${QT_USE_FILE})
 | 
			
		||||
link_libraries(${QT_QTCORE_LIBRARY} ${QT_QTGUI_LIBRARY})
 | 
			
		||||
add_executable(fala_testapp ${SRC})
 | 
			
		||||
 | 
			
		||||
# Install
 | 
			
		||||
install(PROGRAMS fala_testapp DESTINATION /usr/bin RENAME fala_wol)
 | 
			
		||||
install(PROGRAMS fala_testapp DESTINATION /usr/bin RENAME fala_wl)
 | 
			
		||||
install(FILES com.nokia.fala_testapp.service com.nokia.fala_wl.service com.nokia.fala_wol.service DESTINATION /usr/share/dbus-1/services)
 | 
			
		||||
install(FILES fala_wl.desktop fala_wol.desktop DESTINATION /usr/share/applications/)
 | 
			
		||||
install(FILES images/landscape.jpg DESTINATION /usr/share/fala_images/)
 | 
			
		||||
install(FILES images/portrait.jpg DESTINATION /usr/share/fala_images/)
 | 
			
		||||
 | 
			
		||||
@ -1,4 +0,0 @@
 | 
			
		||||
[D-BUS Service]
 | 
			
		||||
Name=com.nokia.fala_testapp
 | 
			
		||||
Exec=/usr/bin/fala_testapp -prestart
 | 
			
		||||
 | 
			
		||||
@ -1,3 +0,0 @@
 | 
			
		||||
[D-BUS Service]
 | 
			
		||||
Name=com.nokia.fala_wl
 | 
			
		||||
Exec=/usr/bin/fala_wl
 | 
			
		||||
@ -1,3 +0,0 @@
 | 
			
		||||
[D-BUS Service]
 | 
			
		||||
Name=com.nokia.fala_wol
 | 
			
		||||
Exec=/usr/bin/fala_wol.sh
 | 
			
		||||
@ -1,7 +0,0 @@
 | 
			
		||||
[Desktop Entry]
 | 
			
		||||
Type=Application
 | 
			
		||||
Name=fala_wl
 | 
			
		||||
Icon=icon-l-video
 | 
			
		||||
Exec=/usr/bin/invoker --test-mode --type=q /usr/bin/fala_wl
 | 
			
		||||
Categories=X-MeeGo;X-Demos;
 | 
			
		||||
OnlyShowIn=X-MeeGo;
 | 
			
		||||
@ -1,7 +0,0 @@
 | 
			
		||||
[Desktop Entry]
 | 
			
		||||
Type=Application
 | 
			
		||||
Name=fala_wol
 | 
			
		||||
Icon=icon-l-video
 | 
			
		||||
Exec=/usr/bin/fala_wol
 | 
			
		||||
Categories=X-MeeGo;X-Demos;
 | 
			
		||||
OnlyShowIn=X-MeeGo;
 | 
			
		||||
											
												Binary file not shown.
											
										
									
								| 
		 Before Width: | Height: | Size: 10 KiB  | 
											
												Binary file not shown.
											
										
									
								| 
		 Before Width: | Height: | Size: 6.0 KiB  | 
@ -1,102 +0,0 @@
 | 
			
		||||
/***************************************************************************
 | 
			
		||||
**
 | 
			
		||||
** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
 | 
			
		||||
** All rights reserved.
 | 
			
		||||
** Contact: Nokia Corporation (directui@nokia.com)
 | 
			
		||||
**
 | 
			
		||||
** This file is part of applauncherd
 | 
			
		||||
**
 | 
			
		||||
** If you have questions regarding the use of this file, please contact
 | 
			
		||||
** Nokia at directui@nokia.com.
 | 
			
		||||
**
 | 
			
		||||
** This library is free software; you can redistribute it and/or
 | 
			
		||||
** modify it under the terms of the GNU Lesser General Public
 | 
			
		||||
** License version 2.1 as published by the Free Software Foundation
 | 
			
		||||
** and appearing in the file LICENSE.LGPL included in the packaging
 | 
			
		||||
** of this file.
 | 
			
		||||
**
 | 
			
		||||
****************************************************************************/
 | 
			
		||||
 | 
			
		||||
#include <QApplication>
 | 
			
		||||
#include <QFile>
 | 
			
		||||
#include <QBrush>
 | 
			
		||||
#include <QColor>
 | 
			
		||||
#include <sys/time.h>
 | 
			
		||||
 | 
			
		||||
#include <exception>
 | 
			
		||||
 | 
			
		||||
QString log_file = "/tmp/fala_testapp.log";
 | 
			
		||||
 | 
			
		||||
void FANGORNLOG(const char* s, bool eol = true)
 | 
			
		||||
{
 | 
			
		||||
    QFile f(log_file);
 | 
			
		||||
    f.open(QIODevice::Append);
 | 
			
		||||
    f.write(s, qstrlen(s));
 | 
			
		||||
    if (eol) {
 | 
			
		||||
        f.write("\n", 1);
 | 
			
		||||
    }
 | 
			
		||||
    f.close();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void FANGORNLOG(const QString& s, bool eol = true)
 | 
			
		||||
{
 | 
			
		||||
    QByteArray ba = s.toLocal8Bit();
 | 
			
		||||
    char *p = new char[ba.size() + 1];
 | 
			
		||||
    strcpy(p, ba.data());
 | 
			
		||||
    FANGORNLOG(p, eol);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void timestamp(const char *s)
 | 
			
		||||
{
 | 
			
		||||
    timeval tim;
 | 
			
		||||
    char msg[80];
 | 
			
		||||
    gettimeofday(&tim, NULL);
 | 
			
		||||
    snprintf(msg, 80, "%d%03d %s", 
 | 
			
		||||
             static_cast<int>(tim.tv_sec), static_cast<int>(tim.tv_usec)/1000, s);
 | 
			
		||||
    FANGORNLOG(msg);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Q_DECL_EXPORT int main(int argc, char **argv)
 | 
			
		||||
{
 | 
			
		||||
    QApplication *app;
 | 
			
		||||
    try
 | 
			
		||||
    {
 | 
			
		||||
        QString appName(argv[0]);
 | 
			
		||||
        if (appName.endsWith("fala_wl"))
 | 
			
		||||
        {
 | 
			
		||||
            log_file = "/tmp/fala_wl.log";
 | 
			
		||||
        }
 | 
			
		||||
        else if (appName.endsWith("fala_wol"))
 | 
			
		||||
        {
 | 
			
		||||
            log_file = "/tmp/fala_wol.log";
 | 
			
		||||
        }
 | 
			
		||||
        timestamp("application main");
 | 
			
		||||
 | 
			
		||||
        app = new QApplication(argc, argv);
 | 
			
		||||
        timestamp("app created without cache");
 | 
			
		||||
 | 
			
		||||
        if (argc > 2 && QString(argv[1]) == QString("--log-args")) {
 | 
			
		||||
            FANGORNLOG("argv:", false);
 | 
			
		||||
            for (int i = 0; i < argc; i++) {
 | 
			
		||||
                FANGORNLOG(" ", false);
 | 
			
		||||
                FANGORNLOG(argv[i], false);
 | 
			
		||||
            }
 | 
			
		||||
            FANGORNLOG("");
 | 
			
		||||
 | 
			
		||||
            FANGORNLOG("argv:", false);
 | 
			
		||||
            QStringList args = QCoreApplication::arguments();
 | 
			
		||||
            for (int i = 0; i < args.size(); i++) {
 | 
			
		||||
                FANGORNLOG(" ", false);
 | 
			
		||||
                FANGORNLOG(args.at(i), false);
 | 
			
		||||
            }
 | 
			
		||||
            FANGORNLOG("");
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    catch(std::exception& e)
 | 
			
		||||
    {
 | 
			
		||||
        return -1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    _exit(app->exec());
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -1,9 +0,0 @@
 | 
			
		||||
# Set sources
 | 
			
		||||
set(SRC main.cpp)
 | 
			
		||||
link_libraries(-lX11 ${QT_QTCORE_LIBRARY} ${QT_QTGUI_LIBRARY})
 | 
			
		||||
 | 
			
		||||
add_executable(xsendevent ${SRC})
 | 
			
		||||
 | 
			
		||||
# Install
 | 
			
		||||
install(PROGRAMS xsendevent DESTINATION /usr/bin/)
 | 
			
		||||
 | 
			
		||||
@ -1,10 +0,0 @@
 | 
			
		||||
xsendevent - tool for sending various xevents to windows on command line
 | 
			
		||||
 | 
			
		||||
# Usage:
 | 
			
		||||
# Close window
 | 
			
		||||
xsendevent close [windowId]
 | 
			
		||||
 | 
			
		||||
# Move window to task switcher
 | 
			
		||||
xsendevent iconify [windowId]
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -1,90 +0,0 @@
 | 
			
		||||
#include <QApplication>
 | 
			
		||||
#include <QX11Info>
 | 
			
		||||
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <X11/Xlib.h>
 | 
			
		||||
#include <X11/Xutil.h>
 | 
			
		||||
 | 
			
		||||
void printUsage()
 | 
			
		||||
{
 | 
			
		||||
    printf("Usage: xsendevent [event windowid]...\n");
 | 
			
		||||
    printf("Supported events:\n");
 | 
			
		||||
    printf("   close    - sends _NET_CLOSE_WINDOW(windowid) the root window\n");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void sendCloseEvent(Window window)
 | 
			
		||||
{
 | 
			
		||||
    Display *display = QX11Info::display();
 | 
			
		||||
 | 
			
		||||
    Window rootWin = QX11Info::appRootWindow(QX11Info::appScreen());
 | 
			
		||||
    
 | 
			
		||||
    XEvent ev;
 | 
			
		||||
    memset(&ev, 0, sizeof(ev));
 | 
			
		||||
 | 
			
		||||
    Atom closeWindowAtom = XInternAtom(display, "_NET_CLOSE_WINDOW", False);
 | 
			
		||||
 | 
			
		||||
    ev.xclient.type         = ClientMessage;
 | 
			
		||||
    ev.xclient.window       = window;
 | 
			
		||||
    ev.xclient.message_type = closeWindowAtom;
 | 
			
		||||
    ev.xclient.format       = 32;
 | 
			
		||||
    ev.xclient.data.l[0]    = CurrentTime;
 | 
			
		||||
    ev.xclient.data.l[1]    = rootWin;
 | 
			
		||||
    XSendEvent(display, rootWin, False, SubstructureRedirectMask, &ev);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void iconifyWindow(Window window)
 | 
			
		||||
{
 | 
			
		||||
    Display *display = QX11Info::display();
 | 
			
		||||
 | 
			
		||||
    Window rootWin = QX11Info::appRootWindow(QX11Info::appScreen());
 | 
			
		||||
 | 
			
		||||
    XEvent e;
 | 
			
		||||
    memset(&e, 0, sizeof(e));
 | 
			
		||||
 | 
			
		||||
    Atom iconicAtom = XInternAtom(display, "WM_CHANGE_STATE", True);
 | 
			
		||||
 | 
			
		||||
    e.xclient.type = ClientMessage;
 | 
			
		||||
    e.xclient.message_type = iconicAtom;
 | 
			
		||||
    e.xclient.display = display;
 | 
			
		||||
    e.xclient.window = window;
 | 
			
		||||
    e.xclient.format = 32;
 | 
			
		||||
    e.xclient.data.l[0] = IconicState;
 | 
			
		||||
    XSendEvent(display, rootWin, False, SubstructureRedirectMask, &e);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int main (int argc, char **argv)
 | 
			
		||||
{
 | 
			
		||||
    QApplication app(argc, argv); // connect to the X server
 | 
			
		||||
    
 | 
			
		||||
    for (int i = 1; i < argc; i++)
 | 
			
		||||
    {
 | 
			
		||||
        if (QString(argv[i]) == "-h" ||
 | 
			
		||||
            QString(argv[i]) == "-help" ||
 | 
			
		||||
            QString(argv[i]) == "--help"
 | 
			
		||||
            ) {
 | 
			
		||||
            printUsage();
 | 
			
		||||
            return 0;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (QString(argv[i]) == "close") {
 | 
			
		||||
            Window window;
 | 
			
		||||
 | 
			
		||||
            // coverity[secure_coding]
 | 
			
		||||
            sscanf(argv[++i], "%lx", &window);
 | 
			
		||||
 | 
			
		||||
            sendCloseEvent(window);
 | 
			
		||||
            return 0;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (QString(argv[i]) == "iconify") {
 | 
			
		||||
            Window window;
 | 
			
		||||
 | 
			
		||||
            // coverity[secure_coding]
 | 
			
		||||
            sscanf(argv[++i], "%lx", &window);
 | 
			
		||||
 | 
			
		||||
            iconifyWindow(window);
 | 
			
		||||
            return 0;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -1,31 +0,0 @@
 | 
			
		||||
set(LAUNCHER ${CMAKE_HOME_DIRECTORY}/src/launcherlib)
 | 
			
		||||
set(DBOOSTER ${CMAKE_HOME_DIRECTORY}/src/qdeclarativebooster)
 | 
			
		||||
 | 
			
		||||
# Set sources
 | 
			
		||||
set(SRC ut_dbooster.cpp ${LAUNCHER}/appdata.cpp ${LAUNCHER}/booster.cpp
 | 
			
		||||
${LAUNCHER}/connection.cpp ${LAUNCHER}/logger.cpp ${DBOOSTER}/qdeclarativebooster.cpp
 | 
			
		||||
${LAUNCHER}/singleinstance.cpp ${LAUNCHER}/socketmanager.cpp)
 | 
			
		||||
 | 
			
		||||
# Set moc headers
 | 
			
		||||
set(MOC_HDRS ut_dbooster.h)
 | 
			
		||||
 | 
			
		||||
# Run moc
 | 
			
		||||
qt4_wrap_cpp(MOC_SRC ${MOC_HDRS})
 | 
			
		||||
 | 
			
		||||
# Enable test library
 | 
			
		||||
set(QT_USE_QTTEST TRUE)
 | 
			
		||||
 | 
			
		||||
# Set include paths
 | 
			
		||||
include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${LAUNCHER} ${CMAKE_HOME_DIRECTORY}/src/common ${DBOOSTER})
 | 
			
		||||
 | 
			
		||||
link_libraries(${QT_QTCORE_LIBRARY} ${QT_QTGUI_LIBRARY} ${QT_QTTEST_LIBRARY} "-L${CMAKE_SOURCE_DIR}/src/qdeclarativebooster -lmdeclarativecache" -ldl -lX11)
 | 
			
		||||
 | 
			
		||||
# Enable Qt (may not be needed, because already defined on higher level)
 | 
			
		||||
include(${QT_USE_FILE})
 | 
			
		||||
 | 
			
		||||
add_executable(ut_dbooster ${SRC} ${MOC_SRC} )
 | 
			
		||||
add_dependencies(ut_dbooster mdeclarativecache)
 | 
			
		||||
 | 
			
		||||
# Install
 | 
			
		||||
install(PROGRAMS ut_dbooster DESTINATION /usr/share/applauncherd-tests/)
 | 
			
		||||
 | 
			
		||||
@ -1,81 +0,0 @@
 | 
			
		||||
/***************************************************************************
 | 
			
		||||
**
 | 
			
		||||
** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
 | 
			
		||||
** All rights reserved.
 | 
			
		||||
** Contact: Nokia Corporation (directui@nokia.com)
 | 
			
		||||
**
 | 
			
		||||
** This file is part of applauncherd
 | 
			
		||||
**
 | 
			
		||||
** If you have questions regarding the use of this file, please contact
 | 
			
		||||
** Nokia at directui@nokia.com.
 | 
			
		||||
**
 | 
			
		||||
** This library is free software; you can redistribute it and/or
 | 
			
		||||
** modify it under the terms of the GNU Lesser General Public
 | 
			
		||||
** License version 2.1 as published by the Free Software Foundation
 | 
			
		||||
** and appearing in the file LICENSE.LGPL included in the packaging
 | 
			
		||||
** of this file.
 | 
			
		||||
**
 | 
			
		||||
****************************************************************************/
 | 
			
		||||
 | 
			
		||||
#include "ut_dbooster.h"
 | 
			
		||||
#include "qdeclarativebooster.h"
 | 
			
		||||
#include "mdeclarativecache.h"
 | 
			
		||||
 | 
			
		||||
Ut_DBooster::Ut_DBooster() :
 | 
			
		||||
    m_subject(new QDeclarativeBooster)
 | 
			
		||||
{}
 | 
			
		||||
 | 
			
		||||
Ut_DBooster::~Ut_DBooster()
 | 
			
		||||
{}
 | 
			
		||||
 | 
			
		||||
void Ut_DBooster::initTestCase()
 | 
			
		||||
{}
 | 
			
		||||
 | 
			
		||||
void Ut_DBooster::cleanupTestCase()
 | 
			
		||||
{}
 | 
			
		||||
 | 
			
		||||
void Ut_DBooster::testSocketName()
 | 
			
		||||
{
 | 
			
		||||
    QVERIFY(QDeclarativeBooster::socketName() == QDeclarativeBooster::m_socketId);
 | 
			
		||||
    QVERIFY(m_subject->socketId() == QDeclarativeBooster::m_socketId);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Ut_DBooster::testType()
 | 
			
		||||
{
 | 
			
		||||
    QVERIFY(QDeclarativeBooster::type() == 'd');
 | 
			
		||||
    QVERIFY(m_subject->boosterType() == 'd');
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Ut_DBooster::testPreload()
 | 
			
		||||
{
 | 
			
		||||
    m_subject->preload();
 | 
			
		||||
 | 
			
		||||
    const char * argv[] = {"foo"};
 | 
			
		||||
    int argc = 1;
 | 
			
		||||
 | 
			
		||||
    // TODO: Somehow make sure that MDeclarativeCache really returns the cached
 | 
			
		||||
    //       QApplication instead of creating a new one here.
 | 
			
		||||
    QApplication * app = MDeclarativeCache::qApplication(argc, const_cast<char **>(argv));
 | 
			
		||||
    QVERIFY(app);
 | 
			
		||||
 | 
			
		||||
    QStringList args = app->arguments();
 | 
			
		||||
    QVERIFY(args.length() == 1);
 | 
			
		||||
    QVERIFY(args[0] == "foo");
 | 
			
		||||
 | 
			
		||||
    QVERIFY(MDeclarativeCache::qDeclarativeView());
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Ut_DBooster::testTemporaryProcessName()
 | 
			
		||||
{
 | 
			
		||||
    QVERIFY(QDeclarativeBooster::temporaryProcessName() == QDeclarativeBooster::m_temporaryProcessName);
 | 
			
		||||
    QVERIFY(m_subject->temporaryProcessName() == QDeclarativeBooster::m_temporaryProcessName);
 | 
			
		||||
    QVERIFY(m_subject->boosterTemporaryProcessName() == QDeclarativeBooster::m_temporaryProcessName);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Ut_DBooster::testReceiveDataFromInvokerWithBadSocket()
 | 
			
		||||
{
 | 
			
		||||
   QVERIFY(m_subject->receiveDataFromInvoker(-100) == false);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
QTEST_APPLESS_MAIN(Ut_DBooster);
 | 
			
		||||
 | 
			
		||||
@ -1,53 +0,0 @@
 | 
			
		||||
/***************************************************************************
 | 
			
		||||
**
 | 
			
		||||
** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
 | 
			
		||||
** All rights reserved.
 | 
			
		||||
** Contact: Nokia Corporation (directui@nokia.com)
 | 
			
		||||
**
 | 
			
		||||
** This file is part of applauncherd
 | 
			
		||||
**
 | 
			
		||||
** If you have questions regarding the use of this file, please contact
 | 
			
		||||
** Nokia at directui@nokia.com.
 | 
			
		||||
**
 | 
			
		||||
** This library is free software; you can redistribute it and/or
 | 
			
		||||
** modify it under the terms of the GNU Lesser General Public
 | 
			
		||||
** License version 2.1 as published by the Free Software Foundation
 | 
			
		||||
** and appearing in the file LICENSE.LGPL included in the packaging
 | 
			
		||||
** of this file.
 | 
			
		||||
**
 | 
			
		||||
****************************************************************************/
 | 
			
		||||
 | 
			
		||||
#ifndef UT_DBOOSTER_H
 | 
			
		||||
#define UT_DBOOSTER_H
 | 
			
		||||
 | 
			
		||||
#include<QtTest/QtTest>
 | 
			
		||||
#include<QObject>
 | 
			
		||||
 | 
			
		||||
#include <tr1/memory>
 | 
			
		||||
 | 
			
		||||
#define UNIT_TEST
 | 
			
		||||
 | 
			
		||||
class QDeclarativeBooster;
 | 
			
		||||
 | 
			
		||||
class Ut_DBooster : public QObject
 | 
			
		||||
{
 | 
			
		||||
    Q_OBJECT
 | 
			
		||||
 | 
			
		||||
public:
 | 
			
		||||
    Ut_DBooster();
 | 
			
		||||
    virtual ~Ut_DBooster();
 | 
			
		||||
 | 
			
		||||
private Q_SLOTS:
 | 
			
		||||
    void initTestCase();
 | 
			
		||||
    void cleanupTestCase();
 | 
			
		||||
    void testSocketName();
 | 
			
		||||
    void testType();
 | 
			
		||||
    void testPreload();
 | 
			
		||||
    void testTemporaryProcessName();
 | 
			
		||||
    void testReceiveDataFromInvokerWithBadSocket();
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
    std::tr1::shared_ptr<QDeclarativeBooster> m_subject;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif // UT_DBOOSTER_H
 | 
			
		||||
@ -1,27 +0,0 @@
 | 
			
		||||
set(LAUNCHER  ${CMAKE_HOME_DIRECTORY}/src/launcherlib)
 | 
			
		||||
set(QTBOOSTER ${CMAKE_HOME_DIRECTORY}/src/qtbooster)
 | 
			
		||||
 | 
			
		||||
# Set sources
 | 
			
		||||
set(SRC ut_qtbooster.cpp ${LAUNCHER}/appdata.cpp ${LAUNCHER}/booster.cpp
 | 
			
		||||
${LAUNCHER}/connection.cpp ${LAUNCHER}/logger.cpp ${QTBOOSTER}/qtbooster.cpp
 | 
			
		||||
${LAUNCHER}/singleinstance.cpp ${LAUNCHER}/socketmanager.cpp)
 | 
			
		||||
 | 
			
		||||
# Set moc headers
 | 
			
		||||
set(MOC_HDRS ut_qtbooster.h)
 | 
			
		||||
 | 
			
		||||
# Run moc
 | 
			
		||||
qt4_wrap_cpp(MOC_SRC ${MOC_HDRS})
 | 
			
		||||
 | 
			
		||||
# Enable test library
 | 
			
		||||
set(QT_USE_QTTEST TRUE)
 | 
			
		||||
 | 
			
		||||
# Set include paths
 | 
			
		||||
include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_HOME_DIRECTORY}/src/common ${LAUNCHER} ${QTBOOSTER})
 | 
			
		||||
link_libraries(${QT_QTCORE_LIBRARY} ${QT_QTTEST_LIBRARY} ${X11_LIBRARIES} -ldl)
 | 
			
		||||
 | 
			
		||||
# Enable Qt (may not be needed, because already defined on higher level)
 | 
			
		||||
include(${QT_USE_FILE})
 | 
			
		||||
add_executable(ut_qtbooster ${SRC} ${MOC_SRC})
 | 
			
		||||
 | 
			
		||||
# Install
 | 
			
		||||
install(PROGRAMS ut_qtbooster DESTINATION /usr/share/applauncherd-tests/)
 | 
			
		||||
@ -1,56 +0,0 @@
 | 
			
		||||
/***************************************************************************
 | 
			
		||||
**
 | 
			
		||||
** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
 | 
			
		||||
** All rights reserved.
 | 
			
		||||
** Contact: Nokia Corporation (directui@nokia.com)
 | 
			
		||||
**
 | 
			
		||||
** This file is part of applauncherd
 | 
			
		||||
**
 | 
			
		||||
** If you have questions regarding the use of this file, please contact
 | 
			
		||||
** Nokia at directui@nokia.com.
 | 
			
		||||
**
 | 
			
		||||
** This library is free software; you can redistribute it and/or
 | 
			
		||||
** modify it under the terms of the GNU Lesser General Public
 | 
			
		||||
** License version 2.1 as published by the Free Software Foundation
 | 
			
		||||
** and appearing in the file LICENSE.LGPL included in the packaging
 | 
			
		||||
** of this file.
 | 
			
		||||
**
 | 
			
		||||
****************************************************************************/
 | 
			
		||||
 | 
			
		||||
#include "ut_qtbooster.h"
 | 
			
		||||
#include "qtbooster.h"
 | 
			
		||||
 | 
			
		||||
Ut_QtBooster::Ut_QtBooster() :
 | 
			
		||||
    m_subject(new QtBooster)
 | 
			
		||||
{}
 | 
			
		||||
 | 
			
		||||
Ut_QtBooster::~Ut_QtBooster()
 | 
			
		||||
{}
 | 
			
		||||
 | 
			
		||||
void Ut_QtBooster::initTestCase()
 | 
			
		||||
{}
 | 
			
		||||
 | 
			
		||||
void Ut_QtBooster::cleanupTestCase()
 | 
			
		||||
{}
 | 
			
		||||
 | 
			
		||||
void Ut_QtBooster::testSocketName()
 | 
			
		||||
{
 | 
			
		||||
    QVERIFY2(QtBooster::socketName() == QtBooster::m_socketId, "Failure");
 | 
			
		||||
    QVERIFY2(m_subject->socketId() == QtBooster::m_socketId, "Failure");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Ut_QtBooster::testType()
 | 
			
		||||
{
 | 
			
		||||
    QVERIFY2(QtBooster::type() == 'q', "Failure");
 | 
			
		||||
    QVERIFY2(m_subject->boosterType() == 'q', "Failure");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Ut_QtBooster::testTemporaryProcessName()
 | 
			
		||||
{
 | 
			
		||||
    QVERIFY(QtBooster::temporaryProcessName() == QtBooster::m_temporaryProcessName);
 | 
			
		||||
    QVERIFY(m_subject->temporaryProcessName() == QtBooster::m_temporaryProcessName);
 | 
			
		||||
    QVERIFY(m_subject->boosterTemporaryProcessName() == QtBooster::m_temporaryProcessName);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
QTEST_APPLESS_MAIN(Ut_QtBooster);
 | 
			
		||||
 | 
			
		||||
@ -1,51 +0,0 @@
 | 
			
		||||
/***************************************************************************
 | 
			
		||||
**
 | 
			
		||||
** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
 | 
			
		||||
** All rights reserved.
 | 
			
		||||
** Contact: Nokia Corporation (directui@nokia.com)
 | 
			
		||||
**
 | 
			
		||||
** This file is part of applauncherd
 | 
			
		||||
**
 | 
			
		||||
** If you have questions regarding the use of this file, please contact
 | 
			
		||||
** Nokia at directui@nokia.com.
 | 
			
		||||
**
 | 
			
		||||
** This library is free software; you can redistribute it and/or
 | 
			
		||||
** modify it under the terms of the GNU Lesser General Public
 | 
			
		||||
** License version 2.1 as published by the Free Software Foundation
 | 
			
		||||
** and appearing in the file LICENSE.LGPL included in the packaging
 | 
			
		||||
** of this file.
 | 
			
		||||
**
 | 
			
		||||
****************************************************************************/
 | 
			
		||||
 | 
			
		||||
#ifndef UT_QTBOOSTER_H
 | 
			
		||||
#define UT_QTBOOSTER_H
 | 
			
		||||
 | 
			
		||||
#include<QtTest/QtTest>
 | 
			
		||||
#include<QObject>
 | 
			
		||||
 | 
			
		||||
#include <tr1/memory>
 | 
			
		||||
 | 
			
		||||
#define UNIT_TEST
 | 
			
		||||
 | 
			
		||||
class QtBooster;
 | 
			
		||||
 | 
			
		||||
class Ut_QtBooster : public QObject
 | 
			
		||||
{
 | 
			
		||||
    Q_OBJECT
 | 
			
		||||
 | 
			
		||||
public:
 | 
			
		||||
    Ut_QtBooster();
 | 
			
		||||
    virtual ~Ut_QtBooster();
 | 
			
		||||
 | 
			
		||||
private Q_SLOTS:
 | 
			
		||||
    void initTestCase();
 | 
			
		||||
    void cleanupTestCase();
 | 
			
		||||
    void testSocketName();
 | 
			
		||||
    void testType();
 | 
			
		||||
    void testTemporaryProcessName();
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
    std::tr1::shared_ptr<QtBooster> m_subject;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif // UT_QTBOOSTER_H
 | 
			
		||||
					Loading…
					
					
				
		Reference in New Issue