From 778b24c6edb5bdc0f35fa4fed113e28a7b0cb016 Mon Sep 17 00:00:00 2001 From: Marco Biasini <marco.biasini@unibas.ch> Date: Wed, 8 May 2013 09:38:36 +0200 Subject: [PATCH] fix context menu/main menu for newer Qt versions the ownership semantics of sip/PyQt changed between versions. Object which were previously staying in memory are now garbage collected. Event handlers associated with these objects were then removed. The fix presented in this patch is rather ugly. We store references to the objects inside the _Init* functions. Ideally, these types of hacks would not be required, but I could not find another way to approach the problem. --- modules/gui/pymod/dng/menu.py | 19 +++++++++---------- modules/gui/pymod/init_context_menu.py | 10 +++++----- 2 files changed, 14 insertions(+), 15 deletions(-) diff --git a/modules/gui/pymod/dng/menu.py b/modules/gui/pymod/dng/menu.py index 800c3f805..59e3e15f1 100644 --- a/modules/gui/pymod/dng/menu.py +++ b/modules/gui/pymod/dng/menu.py @@ -274,14 +274,13 @@ class HelpMenu(QMenu): def _ShowAboutDialog(self): _InitSplash() - def _InitMenu(): - mbar=gui.GostyApp.Instance().perspective.GetMenuBar() - file_menu=FileMenu(mbar) - scene_menu=SceneMenu(mbar) - win_menu=WindowMenu(mbar) - help_menu=HelpMenu(mbar) - mbar.addMenu(file_menu) - mbar.addMenu(scene_menu) - mbar.addMenu(win_menu) - mbar.addMenu(help_menu) + _InitMenu.mbar=gui.GostyApp.Instance().perspective.GetMenuBar() + file_menu=FileMenu(_InitMenu.mbar) + scene_menu=SceneMenu(_InitMenu.mbar) + win_menu=WindowMenu(_InitMenu.mbar) + help_menu=HelpMenu(_InitMenu.mbar) + _InitMenu.mbar.addMenu(file_menu) + _InitMenu.mbar.addMenu(scene_menu) + _InitMenu.mbar.addMenu(win_menu) + _InitMenu.mbar.addMenu(help_menu) diff --git a/modules/gui/pymod/init_context_menu.py b/modules/gui/pymod/init_context_menu.py index 750c123bc..e911645c0 100644 --- a/modules/gui/pymod/init_context_menu.py +++ b/modules/gui/pymod/init_context_menu.py @@ -373,9 +373,9 @@ class SelectMenuPoints(QtCore.QObject): gfx.Scene().Add(gfx_ent) else: ost.LogError("invalid query: %s" % q.error) - + def _InitContextMenu(app): - cm=app.scene_win.GetContextMenu() - AlignmentContextMenu(cm) - SurfaceContextMenu(cm) - SelectMenuPoints(cm) + _InitContextMenu.cm=app.scene_win.GetContextMenu() + _InitContextMenu.am=AlignmentContextMenu(_InitContextMenu.cm) + _InitContextMenu.sc=SurfaceContextMenu(_InitContextMenu.cm) + _InitContextMenu.sm=SelectMenuPoints(_InitContextMenu.cm) -- GitLab