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