Am 19.08.2014 um 22:41 schrieb Patrick De Visschere <pdvissch...@edpnet.be>:

> 
> On 19 Aug, 2014, at 14:12 , Stephan Witt <st.w...@gmx.net> wrote:
> 
>> Am 17.08.2014 um 20:13 schrieb Patrick De Visschere <pdvissch...@edpnet.be>:
>> 
>>> On 15 Aug, 2014, at 13:57 , Stephan Witt <st.w...@gmx.net> wrote:
>>> 
>>>> Am 12.08.2014 um 22:07 schrieb pdv <pdvissch...@edpnet.be>:
>>>> 
>>>>> As a follow-up on reports in the thread "LyX on OS X 10.9" from some 
>>>>> months ago, I build LyX(master) + Qt5(stable) (CMake + XCode).
>>>>> 
>>>>> I replaced the Q_WS_MACX macro by Q_OS_MACX and QMaxStyle by QProxyStyle 
>>>>> and observed then (at least) 2 issues:
>>>>> 
>>>>> 1) When starting up the menu bar is not visible; One must switch to 
>>>>> another app and then bring lyx to the foreground to make the menu bar 
>>>>> appear.
>>>>> 2) When closing the (last) window the menu bar disappears mostly, except 
>>>>> for the LyX menu. This was also reported by Stephan Witt, but I did 
>>>>> observe no crash.
>>>>> 
>>>>> When closing the last window Qt5 should switch to the "default menu bar" 
>>>>> but apparently it doesn't find one and creates it's own minimal default 
>>>>> menu bar.
>>>>> The default menu bar is created by GlobalMenuBar() (in 
>>>>> GuiApplication.cpp) which has a constructor GlobalMenuBar() : new 
>>>>> QMenuBar(0); according to the Qt docs the first parent-less QMenuBar 
>>>>> created will be used as the default menu bar. Apparently Qt5 does not 
>>>>> detect the QMenuBar(0) created via a subclass;
>>>>> 
>>>>> When replacing the GlobalMenuBar() by a base QMenuBar(0) problem 2) is 
>>>>> solved.
>>>>> 
>>>>> GlobalMenuBar() was introduced to override the event() function to handle 
>>>>> QEvent::ShortcutOverride events but shortcuts seem to work without using 
>>>>> the GlobalMenuBar (Cmd-Q and Cmd-, work as expected; Cmd-N and Cmd-O only 
>>>>> work after first activating one of them via the menu, but the latter also 
>>>>> happens in LyX211 and may not be related to Qt5). Building LyX + Qt4.8.6 
>>>>> confirms that GlobalMenuBar's event() is not called when issuing a 
>>>>> shortcut with no window present. I assume that these standard 
>>>>> mac-shortcuts are handled automatically by Qt.
>>>>> 
>>>>> If someone wants to check this, see the attached patch, which includes 
>>>>> all changes (but does not solve issue 1)).
>>>>> 
>>>>> Patrick De Visschere
>>>>> <Qt5-fix-Q_WS_MACX+GlobalMenuBar.diff>
>>>> 
>>>> Hi Patrick,
>>>> 
>>>> the GlobalMenuBar() thing is a wonderful idea! I'm struggling since a 
>>>> while with the Qt5 build and failed to solve this issue 2. This I did 
>>>> while being on vacation, so I couldn't answer earlier.
>>>> 
>>>> The issue 1 was solved by Benjamin Piwowar already, IMHO. It's caused by 
>>>> Qt5 not showing a menu top item without any action attached. The latest 
>>>> change is the dummy action has to be attached to the sub menu after the 
>>>> addMenu(subMenu) method call.
>>> 
>>> I’ve used commit 453ce611919ff66d8b00bda9a9dcc32f4d38a843, which does 
>>> include this dummy action, if I’m not mistaken.
>> 
>> Yes, me too. But this dummy action is added before the addMenu(menu) method 
>> call. I've had to move it the addAction call after the addMenu call.
>> 
>>>> Both issues are regressions of Qt5, IMO.
>>>> 
>>>> The QMacStyle doesn't need to be replaced if LyX is linked with the 
>>>> QMacExtras framework.
>>>> 
>>>> Regarding the Q_WS_MACX macro replacement I'm not sure what should be 
>>>> done. 
>>>> 
>>>> 1. I'd prefer to simply replace Q_WS_MACX with Q_OS_MAC which is available 
>>>> since 4.6.x at least.
>>>> 2. I'd prefer to replace Q_WS_X11 and Q_WS_WIN with Q_OS_X11 and Q_OS_WIN 
>>>> at the same time but cannot test all platforms.
>>>> 
>>>> This results in the attached patch. It contains some additional changes in 
>>>> Menu.cpp I introduced while attacking the issue 2. Furthermore I changed 
>>>> CMakeLists.txt because of some warnings from newer cmake.
>>>> 
>>>> This patch should not be commit as is but in some separate steps. Please, 
>>>> if someone can try it or comment on it, I'd like to hear other opinions.
>>>> 
>>> 
>>> With this patch I get basically the same behaviour as I described in my 
>>> initial message. Without a window being present, Cmd-O and Cmd-N don’t work 
>>> right away. And the application still starts without the menubar being 
>>> visible (issue 1), but the shortcuts do work.
>> 
>> Ok, that's not good. 
>> 
>> But on my system the menu bar is visible on startup.
>> 
>> So, I'll give more details regarding my build environment:
>> * Mac OS X 10.8.5
>> * Darwin Kernel Version 12.5.0
>> * Qt 5.3.1 Cocoa built with:
>> $ configure -debug-and-release -opensource -silent -shared -confirm-license 
>> -no-strip -no-kms -no-pkg-config -nomake examples -nomake tools -skip 
>> qtquick1 -skip qtwebkit -skip qtconnectivity -skip qtquickcontrols -skip 
>> qtdeclarative -skip qtscript -arch x86_64 -prefix 
>> /Users/Shared/LyX/qt-5.3.1-frameworks-cocoa-x86_64
>> 
>> With autotools I build with
>> * gcc version 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.11.00)
>> 
>> With cmake I build with 
>> * AppleClang 5.1.0.5030040 (Apple LLVM 5.1)
>> 
>> The LyX package I made on a Mac 10.6.8 works like the package build on 
>> 10.8.5.
> 
> My environment
> 
> * Mac OS X 10.9.4
> * Darwin Kernel Version 13.3.0
> * Qt 5.3.1 (stable branch) (default Cocoa)
> ./configure -opensource -silent -shared -release -no-dbus -nomake examples 
> -nomake tools -no-framework
> 
> * I used cmake 3.0.0 and Xcode 5.1.1, compiler is the same as yours:
> Apple LLVM version 5.1 (clang-503.0.40) (based on LLVM 3.4svn)
> Target: x86_64-apple-darwin13.3.0
> Thread model: posix
> 
> I’ve build for 10.8 with "compiler default” C++ settings, or for
> 10.9 with c++11 and libc++ settings,
> with the same result;
> 
> Although I haven’t a clue where to start debugging issue 1, I think I'll 
> start by building the -debug version of qt5.
> Or could it be a 10.9 issue?

Building the debug version is an option to attack the issue. On a Mac this 
results in two separate shared libraries in the Qt frameworks. E.g. QtCore and 
QtCore_debug inside the QtCore.framework - at runtime one may activate the 
debug version via environment DYLD_IMAGE_SUFFIX=_debug. AFAIK, the additional 
debug version for Qt is build by an separate make call - so I would be 
surprised if it improves the situation at runtime. But of course, you have the 
option to step into Qt calls after building the debug libraries.

I think it's more likely an issue with 10.9 - perhaps a compile time or an 
runtime issue or both.

You said you had tried it with 10.8 deployment target - do you have similar 
library dependencies for your resulting LyX?

Here are mine:
lyx-build/cmake/2.2.0dev/bin/Debug/LyX:
 /usr/lib/libiconv.2.dylib (compatibility version 7.0.0, current version 7.0.0)
 
/Users/Share/LyX/qt-5.3.1-frameworks-cocoa-x86_64/lib/QtCore.framework/Versions/5/QtCore
 (compatibility version 5.3.0, current version 5.3.1)
 
/Users/Share/LyX/qt-5.3.1-frameworks-cocoa-x86_64/lib/QtGui.framework/Versions/5/QtGui
 (compatibility version 5.3.0, current version 5.3.1)
 /Users/Share/LyX/utilities/lib/libhunspell-1.3.0.dylib (compatibility version 
1.0.0, current version 1.0.0)
 /Users/Share/LyX/utilities/lib/libaspell.15.dylib (compatibility version 
17.0.0, current version 17.5.0)
 /System/Library/Frameworks/AppKit.framework/Versions/C/AppKit (compatibility 
version 45.0.0, current version 1187.39.0)
 
/Users/Share/LyX/qt-5.3.1-frameworks-cocoa-x86_64/lib/QtWidgets.framework/Versions/5/QtWidgets
 (compatibility version 5.3.0, current version 5.3.1)
 
/Users/Share/LyX/qt-5.3.1-frameworks-cocoa-x86_64/lib/QtConcurrent.framework/Versions/5/QtConcurrent
 (compatibility version 5.3.0, current version 5.3.1)
 
/Users/Share/LyX/qt-5.3.1-frameworks-cocoa-x86_64/lib/QtMacExtras.framework/Versions/5/QtMacExtras
 (compatibility version 5.3.0, current version 5.3.1)
 /usr/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.5)
 /usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 228.0.0)
 /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation 
(compatibility version 150.0.0, current version 744.19.0)
 /usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 
56.0.0)
 /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 
169.3.0)
 /System/Library/Frameworks/Foundation.framework/Versions/C/Foundation 
(compatibility version 300.0.0, current version 945.18.0)
 /System/Library/Frameworks/CoreServices.framework/Versions/A/CoreServices 
(compatibility version 1.0.0, current version 57.0.0)

Stephan

Reply via email to