[KDE/Mac] new year's resolution: opening files "the Mac way" (TM)
Christoph Cullmann
cullmann at absint.com
Sat Jan 2 18:56:28 UTC 2016
Hi,
> Hi,
>
>
> I have gotten a bit further. As I thought it is critical to have a correct
> Info.plist (or else the event is never sent), and it isn't trivial to edit that
> file "in place" and have the system recognise its new content (easiest way is
> to copy the entire app bundle in the Finder).
>
> You also need to set a flag (LSMultipleInstancesProhibited) in the Info.plist to
> avoid launching multiple copies; for some reason the mechanism that is in place
> to prevent that doesn't work when you drop a document on Kate's app icon in the
> Finder (or the Dock). So:
>
> <key>NSPrincipalClass</key>
> <string>NSApplication</string>
> <key>NSSupportsAutomaticGraphicsSwitching</key>
> <true/>
> <key>LSMultipleInstancesProhibited</key>
> <true/>
> <key>CFBundleDocumentTypes</key>
> <array>
> <dict>
> <key>CFBundleTypeExtensions</key>
> <array>
> <string>*</string>
> </array>
> <key>CFBundleTypeName</key>
> <string>NSStringPboardType</string>
> <key>CFBundleTypeRole</key>
> <string>Editor</string>
> </dict>
> </array>
>
> (The NSSupportsAutomaticGraphicsSwitching comes from QtCreator; I haven't check
> what it does exactly but it shouldn't harm).
Thanks for the hint with the plist file!
>
> With this, I see the events arrive in kate's main.cpp when I add the following:
>
> #include <QFileOpenEvent>
> class FileOpenHandler : public QObject
> {
> Q_OBJECT
> public:
> FileOpenHandler(QObject *parent=Q_NULLPTR)
> : QObject(parent)
> {}
> bool eventFilter(QObject *obj, QEvent *event)
> {
> if (event->type() == QEvent::FileOpen) {
> QFileOpenEvent *foe = static_cast<QFileOpenEvent*>(event);
> qDebug() << Q_FUNC_INFO << "FileOpen event" << foe;
> // call KateApp::openUrl(foe->url() ...) from here
> return true;
> } else {
> return QObject::eventFilter(obj, event);
> }
> }
> };
>
> and then just before starting the main loop:
>
> #ifdef Q_OS_OSX
> FileOpenHandler *fileOpenHandler = new FileOpenHandler(qApp);
> qApp->installEventFilter(fileOpenHandler);
> #endif
I have added this now just to KateApp.
https://quickgit.kde.org/?p=kate.git&a=commit&h=cd6ec201725cf627a336015d472c39f5ff73b2a7
>
> Question is: what about the encoding parameter?
Can be just set to empty QString like done in my commit above.
>
> Also, for a local/MacPorts KDE4 implementation of this : if I add a signal to
> the KApplication class, do I need to rebuild all dependents to avoid
> ABI-related crashing, or only those that are modified to connect to the new
> signal?
> (IOW, can you add a signal to a class without breaking backwards compatibility?)
Signal adding should be binary compatible, but I doubt that is a good idea.
Why not just add the matching code to the applications you want to have support?
They will anyway need adjustments.
Greetings
Christoph
--
----------------------------- Dr.-Ing. Christoph Cullmann ---------
AbsInt Angewandte Informatik GmbH Email: cullmann at AbsInt.com
Science Park 1 Tel: +49-681-38360-22
66123 Saarbrücken Fax: +49-681-38360-20
GERMANY WWW: http://www.AbsInt.com
--------------------------------------------------------------------
Geschäftsführung: Dr.-Ing. Christian Ferdinand
Eingetragen im Handelsregister des Amtsgerichts Saarbrücken, HRB 11234
More information about the Kde-frameworks-devel
mailing list