[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-mac
Subject: Re: [KDE/Mac] Fixing graphics problems in KDE/Qt on Apple OS X
From: Ian Wadham <iandw.au () gmail ! com>
Date: 2014-04-27 3:34:31
Message-ID: 6DCD8059-33E3-4CB7-B67F-B59F4B032117 () gmail ! com
[Download RAW message or body]
Hi Nicolas,
On 26/04/2014, at 9:57 PM, Nicolas Pavillon wrote:
> Thanks for the impressively detailed discussion. I do not intend to discuss the \
> details of the graphical approaches as I am essentially ignorant about them, but \
> more on the way of introducing this change in practice.
>
> > I found I could force it to switch in one of three ways [2]:
> >
> > 1. Put --args -graphicssystem raster on the "open" command-line.
> > 2. Define environment variable QT_GRAPHICSSYSTEM=raster,
> > either by exporting it or by prepending it to the command line.
> > 3. Execute QApplication::setGraphicsSystem("raster") in the app's
> > code before the QApplication object is constructed.
> [snip]
>
> > I think either of 1 or 2 could be made part of MacPorts installations of
> > all KDE apps and maybe also Qt apps.
> >
> > So can we proceed with method 1 or 2 in MacPorts as soon as possible?
I take it that you agree in principle, but I see there are some practical
difficulties … ;-(
> Indeed method 3 seems overkill, as patching is usually not the preferred option.
> However, I see some possible complications with approaches 1 and 2. To my
> understanding, they both imply launching applications from the command line, which
> is not the usual way on Mac, with most KDE applications being shipped as Mac \
> application bundles.
I had in mind that we could use a modified plist file, adding something like
ProgramArguments in file /System/Library/LaunchDaemons/com.apple.taskgated.plist,
but it seems to be not that easy.
I have done some further digging. From what I can tell, KDE relies on CMake to
generate its plist files from the template file
/opt/local/share/cmake-2.8/Modules/MacOSXBundleInfo.plist.in,
as described in two CMake manual sections at
http://www.cmake.org/cmake/help/v2.8.12/cmake.html#prop_tgt:MACOSX_BUNDLE
> So, method 1 would not work, unless the whole process of application bundle \
> generation is modified, which seems rather drastic. It would require to create \
> wrapper bundles in which a specific bash command is prepared to launch the \
> application with the desired arguments.
The relevant KDE build code is at 'macro (KDE4_ADD_EXECUTABLE _target_NAME)'
in source file kdelibs/cmake/modules/KDE4Macros.cmake. It would have to find a
unique custom Info.plist template from some unique location. That template would be
just like the CMake template, but adding the lines:
<key>ProgramArguments</key>
<array>
<string>${MACOSX_BUNDLE_EXECUTABLE_PATH}</string>
<string>-graphicssystem</string>
<string>raster</string>
</array>
and then supplying a full executable path as the parameter value.
This is tricky, but I am willing to have a go at it if you are interested and the KDE \
build guys have no objection to modifying KDE4Macros.cmake some more for Mac OS X.
> Similarly method 2 would be in the same situation, as application bundles blatantly \
> ignore all environment variables set the “normal” way through a .bash_profile, for \
> example. And while Macports can create its own build environment, it does not set \
> anything at runtime (I imagine Homebrew is the same, even though I don’t really \
> know).
> Method 2 could eventually be automated by setting an environment variable for \
> bundle applications, but this approach has been pretty unreliable to my \
> experience. One way is to globally set variables in the file \
> ~/.MacOSX/environment.plist, but this global approach would be up to the user, and \
> is not supported from 10.7.
I tried the ~/.MacOSX/environment.plist approach and it worked (I am on Lion, \
10.7.5), except that QT_GRAPHICSSYSTEM was then defined for *every* environment (e.g.
Terminal). Not too bad, I suppose. It is unlikely there are any synonyms for that \
symbol in non-Qt apps.
> There is also the possibility of assigning application-specific variables in the \
> Info.plist file of bundles, through the LSEnvironment key. This approach could be \
> used by automatically patching the Info.plist of KDE applications, but I don’t know \
> how well it is supported (I remember cases with previous OSs where it did not seem \
> to work for me). I made a dummy Cocoa application on 10.9, where it seems to work, \
> but I don’t know if it is also a valid approach for KDE applications.
I tried this, but it does not work for me. According to StackOverflow it is new in \
Mountain Lion. http://stackoverflow.com/questions/12165385/how-to-set-environment-variables-to-an-application-on-osx-mountain-lion
http://stackoverflow.com/questions/7501678/set-environment-variables-on-mac-os-x-lion
I'd like to have a closer look at option 3 [make sure the code does
QApplication::setGraphicsSystem("raster");
before the QApplication object is created]. This is a one-line change in \
libkdegames. The code to do it is already there. It just needs to be enabled for \
Q_OS_MAC [1]. That would be better than nothing. At least it would cure the \
problems in KDE Games, including KBounce and Palapeli. I have the access required to \
make that change.
But similar bugs might surface in other KDE apps, so I'll have a look and see if
there is somewhere in kdelibs to slot it in. If there is, I could go on bended knee
to the powers-that-be of KDE, OR we could add it as a downstream patch for
KDE 4.13 and 4.14, to cover us for a year or two until KF 5 apps become common.
Cheers, Ian W.
[1] https://projects.kde.org/projects/kde/kdegames/libkdegames/repository/revisions/master/entry/CMakeLists.txt#L105
https://projects.kde.org/projects/kde/kdegames/libkdegames/repository/revisions/master/entry/chooserastergraphicssystem.cpp
This code relies on some less well-known features of C++.
The comments explain what is going on.
_______________________________________________
kde-mac@kde.org
List Information: https://mail.kde.org/mailman/listinfo/kde-mac
KDE/Mac Information: http://community.kde.org/Mac
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic