[SOLVED] Single instance applications on N950
-
DESKTOP ICON - SOLVED
The problem of the lost desktop icon depends on a strange behavior, probably a bug in Qt-Creator. When the icon is selected in the project window of Qt-Creator the file is encoded and set at the bottom of the control file in the folder qtc_packaging/debian_harmattan
Managing the packagin files for some reason - else if the icon remain the same and the file too - the value in the control file don't match resulting in the green icon on the device instead of the correct icon file.The workaround is simple: it is sufficient to follow the instructions of the Qt-Creator documentation explained in packaging your applications section regarding how-to change the icon file.
Opening the project window the icon file should be reloaded and after repackaging the application the icon is shown correctly. And obviously the application runs in single-instance mode.
Many thansk to matrixx !!! :)
-
Me too, this is the great of this tricks of Nokia :)
Cheers
-
Invoker use requires that your application is relocatable, which can be done by adding @CONFIG+= declaratibe-boostable@ to .pro. This only works with harmattan-nokia-meego-api target. harmattan-platform-api target does not have requiret package installed and you have to set flags manualy eg something like:
@QMAKE_CXXFLAGS += -fPIC -fvisibility=hidden -fvisibility-inlines-hidden
QMAKE_LFLAGS += -pie -rdynamic@
I think the bug which removes invoker line from .desktop is caused by too smart buildsystem =)
You can try running your application from terminal with invoker and it should tell you why it fails.edit:
Oh sorry there was multiple pages =) but still those two targets have some differences. -
Thank you Tomma,
me too sometimes see too late that a thread is multipage ;)
At this point I have not clear what you means. The essential steps are the following:
Starting point
- The compiled/packaged applications for Qt-Meego are not single-instance
- Multi-instance is prohibitied
- This is a bug of Qt-Creator (or the SDK or both, not sure of the origin)
Workaround
-
Open with a external editor the rules file in the qtc_packaging/debian_harmattan folder changing the following line
@
[TAB]$(MAKE)*[SPACE]*INSTALL_ROOT="$(CURDIR)"/debian/<application_name> install
@
to
@
[TAB]$(MAKE)[SPACE][SPACE]INSTALL_ROOT="$(CURDIR)"/debian/<application_name> install
@
as is add a second SPACE character after $(MAKE) leaving the initial TAB character
_This solve the problem of the multi-instance but at this point the .desktop file don'work correctly -
Edit in Qt-Creator the .desktop file setting the correct Icon pointer that should be
@
Icon=/usr/share/icons/hicolor/64x64/apps/<application_name>.png
@
At this point it is probable that the icon is now shown in the program. As a matter of fact the application icon (those shown on the device main page) depends from the encoded icon in the control file. To avoid this problem it is necessary to open the project section in Qt-Creator, open the run tab in the Harmattan target expanding the Create Package group. Select the icon again and confirm. -
The .desktop file at this point works correctly trying to launch the application using the invoker command in a line like the following:
@
Exec=invoker --single-instance --type=d /opt/<application_name>/bin/<application_name>
@
Tapping on the application icon the program don't start. Launching the invoker with the same command line from the device terminal this is the received error:
@
invoker: Invoking execution: '/opt/<application_name>/bin/<application_name>'
Booster: Loading symbol 'main'
failed: '/opt/<application_name>/bin/<application_name>:
undefined symbol: main'
@ -
The QtDeclarative main() is not exported by default so - as explained by matrixx - it is necessary to change the main() function declaration in the main.cpp source as follows:
@
Q_DECL_EXPORT int main(int argc, char *argv[])
{
...
}
@
At this point, recompiling, packaging and deploying to the device the application works fine.
Returning to the initial comment Tomma it is not clear how your suggestion can take place in this procedure. Please can you explain?Many thanks.
Hopefyully this procedure may be good for other developers so I have added the how-to page in the wiki "How to create single-instance applications for N9 Harmattan Meego 1.2":http://developer.qt.nokia.com/wiki/Single_Instance_Harmattan_Applications
Due that it is originated by a bug I have no idea for how much time this problem will persist in the future versions/updates of the packages. -
@Alicemirror: If you are creating an application with the "Harmattan Application" template on QtCreator, you don't have to care about those lines Tomma mentioned, they are automatically added to your .pro file by QtCreator.
Instead, if you are porting an existing application and want to use your original .pro file, you need to add those lines manually to be able to use the single-instance invoker.
That might be a good addition to the wiki, if someone wants to port apps without creating a new project template and copying over existing files of the project.
-
@matrixx: thank you for the precision. In effect the first application that I have created with the template had not this omission, but the problem of the export appeared only at the end of the solution of the qt-complex project ported from a first symbian version. I should add tnis to the wiki page.
I am also planning to write a page with the elemts that should change between a symbian and harmattan QML application using the two different imports of the new Qt Quick components for page navigation and page stack management.
Many thanks
-
Hi
Alicemirror I followed instrution from here -http://developer.qt.nokia.com/wiki/Single_Instance_Harmattan_Applications#57bd2611a5f660693bc0b0d96860058e
and changed my desktop entry as follows
@[Desktop Entry]
Encoding=UTF-8
Version=1.0
Type=Application
Terminal=false
Name=insulincal
Exec=Exec=invoker --single-instance --type=e /opt/insulincal/bin/insulincal
Icon=/usr/share/icons/hicolor/64x64/apps/insulincal.png
X-Window-Icon=
X-HildonDesk-ShowInToolbar=true
X-Osso-Type=application/x-executable
@
insulincal is my app name.
I still get multiple app launches in N950 [on remote data access - I am still waiting for my device]
Can you pl check what is wrong above ?Thanks -
-
hi senu188,
following the wiki page the described method includes also the suggestion of matrixx.
What I see in your code is that in line 7 of the post above there is the repetition of Exec= that is an error. Please try again correcting this bug and let me know if it works.Cheers.
-
@Alicemirror
I believe someone has been modifying the wiki page, cause the "rules hack" is not there. -
[quote author="Alicemirror" date="1313055734"]hi senu188,
following the wiki page the described method includes also the suggestion of matrixx.
What I see in your code is that in line 7 of the post above there is the repetition of Exec= that is an error. Please try again correcting this bug and let me know if it works.Cheers.[/quote]
I immediately removed one 'Exec' as mentioned in my similar post posted separately[http://developer.qt.nokia.com/forums/viewthread/8687 ]. I am now trying to change the 'rule' file but I seem to have broken the build. I am trying again. The wiki page doesn't have anything about 'rule' I guess someone edited it off. Thanks will try and report -
Mistery solved !!!
Please take a look to this post: "Wiki pages edited without control":http://developer.qt.nokia.com/forums/viewthread/8699/
Now the page is complete again. Please senu188, check if it works fine.
Thank you.
-
I did the following in 'insulincal.desktop' - insulincal is my app name
@[Desktop Entry]
Encoding=UTF-8
Version=1.0
Type=Application
Terminal=false
Name=insulincal
Exec=invoker --single-instance --type=e /opt/usr/bin/insulincal
Icon=/usr/share/icons/hicolor/64x64/apps/insulincal.png
X-Window-Icon=
X-HildonDesk-ShowInToolbar=true
X-Osso-Type=application/x-executable@The deb is built but still multi-instance so
I added a space after $(MAKE) in 'rules' file
@
$(MAKE) INSTALL_ROOT="$(CURDIR)"/debian/insulincal installI get packaging error
Packaging Error: Command 'c:/qtsdk/madde/bin/mad dpkg-buildpackage -nc -uc -us' failed.Exit code: 2
@
I tried in 2 ways to add space-- I just add a space using spacebar in rules file inside Qt creator
- I copy the rules file and paste it in Notepad, add a space and again paste that in Qt creator and rebuild
In both cases I get error. Is there any other way to add space so build will be proper. Thanks for help
-
Sure you get error.
The problem is just there: the rules file includes special characters i.e. tabs starting on every line and - I think - linefeeds instead of cr/lf at the end of line. The fact is that you should edit anyway this file with a binary editor else when you save it some essential character is lost.
I use Mac with a binary editor, but I am sure that you can find some opensource editor in windows. Wincommander for example has a hex editor and binary editor and other files too. you can try to send me this file (those original working) and I edit it for you. When we are sure that this is the only problem, you search for an adequate program.
-
Sorry, I read again your post.
If you open the rules file in the editor then try in any other way - correct or wrong - you loose the original formatting so the file remain fake at all :)
Please send it to me so I try with one of mine that is working recovery the special characters.
-
This is interesting, I have not trusted in Qt creator. If it is sufficient to set how to manage the tabs I'll use next time I need. Thanks.
-
[quote author="Alicemirror" date="1312095237"]Later I will try with different operating systems than Mac, What platform do you used ? Mac or Win?[/quote]
Hi Enrico,
Please excuse me for the delay in my answer. I am using Qt SDK on Win XP.
Cheers,
Leon