Bug 357286 - [OS X] KActionMenu items can only be added to 1 menu at a time (or else generate errors and can cause crashes)
Summary: [OS X] KActionMenu items can only be added to 1 menu at a time (or else gener...
Status: RESOLVED WORKSFORME
Alias: None
Product: konsole
Classification: Applications
Component: general (show other bugs)
Version: master
Platform: Compiled Sources macOS
: NOR crash
Target Milestone: ---
Assignee: Konsole Developer
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2015-12-28 22:16 UTC by RJVB
Modified: 2018-12-01 03:51 UTC (History)
0 users

See Also:
Latest Commit:
Version Fixed In:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description RJVB 2015-12-28 22:16:10 UTC
KF5's KActionMenu which is based on QWidgetAction can, to my understanding, only be added to a single menu at a time on OS X. Adding it to multiple menus leads to repeated errors being printed:

```
void QCocoaMenu::insertNative(QCocoaMenuItem *, QCocoaMenuItem *) Menu item "Set &Encoding" is already in menu "View" , remove it from the other menu first before inserting into "Untitled"
void QCocoaMenu::insertNative(QCocoaMenuItem *, QCocoaMenuItem *) Menu item "Switch Profile" is already in menu "Settings" , remove it from the other menu first before inserting into "Untitled"
void QCocoaMenu::insertNative(QCocoaMenuItem *, QCocoaMenuItem *) Menu item "Set &Encoding" is already in menu "View" after item "" , remove it from the other menu first before inserting into "View"
void QCocoaMenu::insertNative(QCocoaMenuItem *, QCocoaMenuItem *) Menu item "Switch Profile" is already in menu "Settings" after item "Manage Profiles..." , remove it from the other menu first before inserting into "Settings"
void QCocoaMenu::insertNative(QCocoaMenuItem *, QCocoaMenuItem *) Menu item "Set &Encoding" is already in menu "View" after item "" , remove it from the other menu first before inserting into "View"
void QCocoaMenu::insertNative(QCocoaMenuItem *, QCocoaMenuItem *) Menu item "Switch Profile" is already in menu "Settings" after item "Manage Profiles..." , remove it from the other menu first before inserting into "Settings"
```

(the errors are more informative thanks to a local patch)

and can apparently also lead to crashing (here on exit):

```
Exception Type:  EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_INVALID_ADDRESS at 0x000007fe6884d0ba

VM Regions Near 0x7fe6884d0ba:
    CG backing stores      00000001cba61000-00000001cba8b000 [  168K] rw-/rw- SM=SHM  
--> 
    MALLOC_TINY            00007fe688400000-00007fe688600000 [ 2048K] rw-/rwx SM=PRV  

Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
0   org.qt-project.QtCore         	0x000000010402a814 QObject::property(char const*) const + 36 (qobject.cpp:3876)
1   libqcocoa.dylib               	0x0000000108c9e31a QCocoaMenuItem::~QCocoaMenuItem() + 58 (qcocoamenuitem.mm:109)
2   libqcocoa.dylib               	0x0000000108c9e4ce QCocoaMenuItem::~QCocoaMenuItem() + 14 (qcocoamenuitem.mm:106)
3   org.qt-project.QtWidgets      	0x000000010309b9bd QMenu::actionEvent(QActionEvent*) + 749 (qmenu.cpp:3224)
4   org.qt-project.QtWidgets      	0x0000000102f673d0 QWidget::event(QEvent*) + 1232 (qwidget.cpp:9044)
5   org.qt-project.QtWidgets      	0x0000000103099bdc QMenu::event(QEvent*) + 1164 (qmenu.cpp:2678)
6   org.qt-project.QtWidgets      	0x0000000102f2953b QApplicationPrivate::notify_helper(QObject*, QEvent*) + 251 (qapplication.cpp:3716)
7   org.qt-project.QtWidgets      	0x0000000102f2c8f4 QApplication::notify(QObject*, QEvent*) + 8212 (qapplication.cpp:3681)
8   org.qt-project.QtCore         	0x0000000103ff9433 QCoreApplication::notifyInternal(QObject*, QEvent*) + 115 (qthread_p.h:291)
9   org.qt-project.QtWidgets      	0x0000000102f5b2ed QWidget::removeAction(QAction*) + 125 (qcoreapplication.h:224)
10  org.qt-project.QtWidgets      	0x0000000102f1f711 QAction::~QAction() + 97 (qaction.cpp:566)
11  org.qt-project.QtWidgets      	0x0000000102f7016c QWidgetAction::~QWidgetAction() + 444 (qwidgetaction.cpp:122)
12  libKF5WidgetsAddons.5.dylib   	0x0000000102cbf353 KActionMenu::~KActionMenu() + 67 (kactionmenu.cpp:77)
13  org.qt-project.QtCore         	0x0000000104021d75 QObjectPrivate::deleteChildren() + 245 (qobject.cpp:1943)
14  org.qt-project.QtCore         	0x0000000104021b40 QObject::~QObject() + 1792 (qobject.cpp:1027)
15  libkonsoleprivate.15.dylib    	0x00000001017d13c8 Konsole::ViewProperties::~ViewProperties() + 104 (ViewProperties.cpp:37)
16  libkonsoleprivate.15.dylib    	0x00000001017a1f16 Konsole::SessionController::~SessionController() + 614 (SessionController.cpp:218)
17  libkonsoleprivate.15.dylib    	0x00000001017a1f5e Konsole::SessionController::~SessionController() + 14 (SessionController.cpp:209)
18  org.qt-project.QtCore         	0x0000000104021d75 QObjectPrivate::deleteChildren() + 245 (qobject.cpp:1943)
19  org.qt-project.QtCore         	0x0000000104021b40 QObject::~QObject() + 1792 (qobject.cpp:1027)
20  libkonsoleprivate.15.dylib    	0x00000001017ca788 Konsole::ViewManager::~ViewManager() + 200 (ViewManager.cpp:103)
21  libkonsoleprivate.15.dylib    	0x00000001017ca7ae Konsole::ViewManager::~ViewManager() + 14 (ViewManager.cpp:102)
22  org.qt-project.QtCore         	0x0000000104021d75 QObjectPrivate::deleteChildren() + 245 (qobject.cpp:1943)
23  org.qt-project.QtWidgets      	0x0000000102f56ee1 QWidget::~QWidget() + 1441 (qwidget.cpp:1658)
24  libKF5XmlGui.5.dylib          	0x000000010200471a KMainWindow::~KMainWindow() + 218 (kmainwindow.cpp:362)
25  libkdeinit5_konsole.dylib     	0x00000001016fb41b Konsole::MainWindow::~MainWindow() + 107 (MainWindow.h:57)
26  org.qt-project.QtCore         	0x0000000104022748 QObject::event(QEvent*) + 776 (qobject.cpp:4455)
27  org.qt-project.QtWidgets      	0x0000000102f67d26 QWidget::event(QEvent*) + 3622 (qwidget.cpp:9105)
28  org.qt-project.QtWidgets      	0x000000010306f45f QMainWindow::event(QEvent*) + 911 (qmainwindow.cpp:1495)
29  libKF5XmlGui.5.dylib          	0x0000000102006810 KMainWindow::event(QEvent*) + 624 (kmainwindow.cpp:829)
30  libKF5XmlGui.5.dylib          	0x000000010203e398 KXmlGuiWindow::event(QEvent*) + 24 (kxmlguiwindow.cpp:118)
31  org.qt-project.QtWidgets      	0x0000000102f2953b QApplicationPrivate::notify_helper(QObject*, QEvent*) + 251 (qapplication.cpp:3716)
32  org.qt-project.QtWidgets      	0x0000000102f2c8f4 QApplication::notify(QObject*, QEvent*) + 8212 (qapplication.cpp:3681)
33  org.qt-project.QtCore         	0x0000000103ffa0db QCoreApplicationPrivate::sendPostedEvents(QObject*, int, QThreadData*) + 971 (qthread_p.h:291)
34  org.qt-project.QtCore         	0x0000000103ff9a2c QCoreApplication::exec() + 412 (qcoreapplication.cpp:1240)
35  libkdeinit5_konsole.dylib     	0x00000001016e893f kdemain + 4143 (main.cpp:125)
36  libdyld.dylib                 	0x00007fff8e8b05fd start + 1
```

Reproducible: Always

Steps to Reproduce:
1. start konsole5 from a terminal, e.g. `/path/to/konsole.app/Contents/MacOS/konsole` (kate5 is similarly affected)
2. observe the errors being printed
3. quit using the menu

Actual Results:  
An "in-window" menubar is shown IN ADDITION TO a Mac-style toplevel menubar.
Errors are printed each time an attempt is made to (re)generate the menu. The application crashes on exit most of the time but not always (notably not when typing `exit` in the last active shell).

Expected Results:  
No error messages and no crashing. And either a toplevel, Mac-style menubar or one in the window, not both.

I would love to know why a global menubar is shown too, and where the choice is made what items from the KActionCollection() are added to the context menu instead of only to the menubar.

I would propose to add both the "Switch Profile" and the "Set Encoding" actions to the context menu only.

NB: the "Edit Current Profile" action is not affected, which supports the notion that only objects derived from QWidgetAction are concerned by this issue.
Comment 1 Andrew Crouthamel 2018-11-01 13:54:55 UTC
Dear Bug Submitter,

This bug has been stagnant for a long time. Could you help us out and re-test if the bug is valid in the latest version? I am setting the status to NEEDSINFO pending your response, please change the Status back to REPORTED when you respond.

Thank you for helping us make KDE software even better for everyone!
Comment 2 Bug Janitor Service 2018-11-16 11:37:18 UTC
Dear Bug Submitter,

This bug has been in NEEDSINFO status with no change for at least
15 days. Please provide the requested information as soon as
possible and set the bug status as REPORTED. Due to regular bug
tracker maintenance, if the bug is still in NEEDSINFO status with
no change in 30 days the bug will be closed as RESOLVED > WORKSFORME
due to lack of needed information.

For more information about our bug triaging procedures please read the
wiki located here:
https://community.kde.org/Guidelines_and_HOWTOs/Bug_triaging

If you have already provided the requested information, please
mark the bug as REPORTED so that the KDE team knows that the bug is
ready to be confirmed.

Thank you for helping us make KDE software even better for everyone!
Comment 3 Bug Janitor Service 2018-12-01 03:51:16 UTC
This bug has been in NEEDSINFO status with no change for at least
30 days. The bug is now closed as RESOLVED > WORKSFORME
due to lack of needed information.

For more information about our bug triaging procedures please read the
wiki located here:
https://community.kde.org/Guidelines_and_HOWTOs/Bug_triaging

Thank you for helping us make KDE software even better for everyone!