From bb6193c553fca0532f78af80a8f745c305144b87 Mon Sep 17 00:00:00 2001
From: Jack Jansen <jack.jansen@cwi.nl>
Date: Wed, 6 May 1998 15:33:09 +0000
Subject: Added a PopupMenu class.

---
 Mac/Lib/FrameWork.py | 30 ++++++++++++++++++++++++++----
 1 file changed, 26 insertions(+), 4 deletions(-)

diff --git a/Mac/Lib/FrameWork.py b/Mac/Lib/FrameWork.py
index c002b1f..69378b5 100644
--- a/Mac/Lib/FrameWork.py
+++ b/Mac/Lib/FrameWork.py
@@ -453,10 +453,11 @@ class MenuBar:
 		if DEBUG: print 'Newmenu', title, id # XXXX
 		m = NewMenu(id, title)
 		m.InsertMenu(after)
-		if self.parent:
-			self.parent.needmenubarredraw = 1
-		else:
-			DrawMenuBar()
+		if after >= 0:
+			if self.parent:
+				self.parent.needmenubarredraw = 1
+			else:
+				DrawMenuBar()
 		return id, m
 		
 	def delmenu(self, id):
@@ -582,6 +583,27 @@ class Menu:
 			self.menu.EnableItem(0)
 		else:
 			self.menu.DisableItem(0)
+			
+class PopupMenu(Menu):
+	def __init__(self, bar):
+		Menu.__init__(self, bar, '(popup)', -1)
+		
+	def popup(self, x, y, event, default=1, window=None):
+		# NOTE that x and y are global coordinates, and they should probably
+		# be topleft of the button the user clicked (not mouse-coordinates),
+		# so the popup nicely overlaps.
+		reply = self.menu.PopUpMenuSelect(x, y, default)
+		if not reply:
+			return
+		id = (reply & 0xffff0000) >> 16
+		item = reply & 0xffff
+		if not window:
+			wid = Win.FrontWindow()
+			try:
+				window = self.bar.parent._windows[wid]
+			except:
+				pass # If we can't find the window we pass None
+		self.dispatch(id, item, window, event)
 
 class MenuItem:
 	def __init__(self, menu, title, shortcut=None, callback=None, kind=None):
-- 
cgit v0.12

