From 7b04ea304be07f1b68c26c90c4fa9ab98adc2962 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