changeset 238:13d3de3f1e83

Rewrote the menu code to not return structs.
author bsmith@81767d24-ef19-dc11-ae90-00e081727c95
date Tue, 18 Feb 2003 19:34:21 +0000
parents efa724294b5f
children 403b07f873e1
files dw.h win/dw.c
diffstat 2 files changed, 40 insertions(+), 23 deletions(-) [+]
line wrap: on
line diff
--- a/dw.h	Fri Feb 14 16:25:03 2003 +0000
+++ b/dw.h	Tue Feb 18 19:34:21 2003 +0000
@@ -308,12 +308,9 @@
 	void *bits;
 } *HPIXMAP;
 
-typedef struct _hmenui {
-	HMENU menu;
-	HWND hwnd;
-} HMENUI;
+typedef HWND HMENUI;
 
-static HMENUI DW_NOMENU = { 0, 0 };
+#define DW_NOMENU NULL
 #endif
 
 typedef struct _item {
--- a/win/dw.c	Fri Feb 14 16:25:03 2003 +0000
+++ b/win/dw.c	Tue Feb 18 19:34:21 2003 +0000
@@ -3688,11 +3688,7 @@
  */
 HMENUI API dw_menu_new(ULONG id)
 {
-	HMENUI tmp;
-
-	tmp.menu = CreatePopupMenu();
-	tmp.hwnd = NULL;
-	return tmp;
+	return (HMENUI)CreatePopupMenu();
 }
 
 /*
@@ -3704,11 +3700,12 @@
 {
 	HMENUI tmp;
 
-	tmp.menu = CreateMenu();
-	tmp.hwnd = location;
-
-	SetMenu(location, tmp.menu);
-	return tmp;
+	tmp = (HMENUI)CreateMenu();
+
+	dw_window_set_data(location, "_dw_menu", (void *)tmp);
+
+	SetMenu(location, (HMENU)tmp);
+	return location;
 }
 
 /*
@@ -3719,7 +3716,14 @@
 void API dw_menu_destroy(HMENUI *menu)
 {
 	if(menu)
-		DestroyMenu(menu->menu);
+	{
+		HMENU mymenu = (HMENU)*menu;
+
+		if(IsWindow((HWND)mymenu) && !IsMenu(mymenu))
+			mymenu = (HMENU)dw_window_get_data((HWND)mymenu, "_dw_menu");
+        if(IsMenu(mymenu))
+			DestroyMenu(mymenu);
+	}
 }
 
 /*
@@ -3736,6 +3740,10 @@
 HWND API dw_menu_append_item(HMENUI menux, char *title, ULONG id, ULONG flags, int end, int check, HMENUI submenu)
 {
 	MENUITEMINFO mii;
+	HMENU mymenu = (HMENU)menux;
+
+	if(IsWindow(menux) && !IsMenu(mymenu))
+		mymenu = (HMENU)dw_window_get_data(menux, "_dw_menu");
 
 	mii.cbSize = sizeof(MENUITEMINFO);
 	mii.fMask = MIIM_ID | MIIM_SUBMENU | MIIM_TYPE;
@@ -3759,13 +3767,16 @@
 		mii.fType = MFT_SEPARATOR;
 
 	mii.wID = id;
-	mii.hSubMenu = submenu.menu;
+    if(IsMenu((HMENU)submenu))
+		mii.hSubMenu = (HMENU)submenu;
+	else
+		mii.hSubMenu = 0;
 	mii.dwTypeData = title;
 	mii.cch = strlen(title);
 
-	InsertMenuItem(menux.menu, 65535, TRUE, &mii);
-	if(menux.hwnd)
-		DrawMenuBar(menux.hwnd);
+	InsertMenuItem(mymenu, 65535, TRUE, &mii);
+	if(IsWindow(menux) && !IsMenu((HMENU)menux))
+		DrawMenuBar(menux);
 	return (HWND)id;
 }
 
@@ -3779,6 +3790,10 @@
 void API dw_menu_item_set_check(HMENUI menux, unsigned long id, int check)
 {
 	MENUITEMINFO mii;
+	HMENU mymenu = (HMENU)menux;
+
+	if(IsWindow(menux) && !IsMenu(mymenu))
+		mymenu = (HMENU)dw_window_get_data(menux, "_dw_menu");
 
 	mii.cbSize = sizeof(MENUITEMINFO);
 	mii.fMask = MIIM_STATE;
@@ -3786,7 +3801,7 @@
 		mii.fState = MFS_CHECKED;
 	else
 		mii.fState = MFS_UNCHECKED;
-	SetMenuItemInfo(menux.menu, id, FALSE, &mii);
+	SetMenuItemInfo(mymenu, id, FALSE, &mii);
 }
 
 /*
@@ -3801,9 +3816,14 @@
 {
 	if(menu)
 	{
+		HMENU mymenu = (HMENU)*menu;
+
+		if(IsWindow(*menu) && !IsMenu(mymenu))
+			mymenu = (HMENU)dw_window_get_data(*menu, "_dw_menu");
+
 		popup = parent;
-		TrackPopupMenu(menu->menu, 0, x, y, 0, parent, NULL);
-		DestroyMenu(menu->menu);
+		TrackPopupMenu(mymenu, 0, x, y, 0, parent, NULL);
+		DestroyMenu(mymenu);
 	}
 }