src/gui/widgets/qmenu_wince.cpp
changeset 19 fcece45ef507
parent 18 2f34d5167611
child 25 e24348a560a6
--- a/src/gui/widgets/qmenu_wince.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/widgets/qmenu_wince.cpp	Mon May 03 13:17:34 2010 +0300
@@ -101,7 +101,6 @@
     COLORREF  clrBk;
 };
 
-typedef int (WINAPI *superfunc)(int, int);
 typedef BOOL (WINAPI *AygCreateMenuBar)(qt_SHMENUBARINFO*);
 typedef HRESULT (WINAPI *AygEnableSoftKey)(HWND,UINT,BOOL,BOOL);
 
@@ -254,6 +253,12 @@
     }
 }
 
+// Removes all items from the menu without destroying the handles.
+static void qt_wce_clear_menu(HMENU hMenu)
+{
+    while (RemoveMenu(hMenu, 0, MF_BYPOSITION));
+}
+
 /*!
     \internal 
     
@@ -404,7 +409,8 @@
 
 QMenuPrivate::QWceMenuPrivate::~QWceMenuPrivate() {
     qt_wce_delete_action_list(&actionItems);
-    menuHandle = 0;
+    if (menuHandle)
+        DestroyMenu(menuHandle);
 }
 
 void QMenuPrivate::QWceMenuPrivate::addAction(QAction *a, QWceMenuAction *before) {
@@ -439,14 +445,17 @@
     if (!wce_menu)
         wce_menu = new QWceMenuPrivate;
     if (!wce_menu->menuHandle || create) 
-        wce_menu->rebuild(create);
+        wce_menu->rebuild();
     return wce_menu->menuHandle;
 }
 
-void QMenuPrivate::QWceMenuPrivate::rebuild(bool reCreate) {
-    if (menuHandle && !reCreate)
-      DestroyMenu(menuHandle);
-    menuHandle = CreatePopupMenu();
+void QMenuPrivate::QWceMenuPrivate::rebuild()
+{
+    if (!menuHandle)
+        menuHandle = CreatePopupMenu();
+    else
+        qt_wce_clear_menu(menuHandle);
+
     for (int i = 0; i < actionItems.size(); ++i) {
         QWceMenuAction *action = actionItems.at(i);
         action->menuHandle = menuHandle;
@@ -522,6 +531,7 @@
           resourceHandle = IDR_MAIN_MENU5;
         }
         Q_ASSERT_X(menubarHandle, "rebuild !created", "menubar already deleted");
+        qt_wce_clear_menu(menuHandle);
         DestroyWindow(menubarHandle);
         menubarHandle = qt_wce_create_menubar(parentWindowHandle, qt_wce_get_module_handle(), resourceHandle);
         Q_ASSERT_X(menubarHandle, "rebuild classic menu", "cannot create menubar from resource");
@@ -563,6 +573,7 @@
 
         leftButtonIsMenu = (leftButtonAction && leftButtonAction->menu());
         Q_ASSERT_X(menubarHandle, "rebuild !created", "menubar already deleted");
+        qt_wce_clear_menu(menuHandle);
         DestroyWindow(menubarHandle);
         if (leftButtonIsMenu) {
             menubarHandle = qt_wce_create_menubar(parentWindowHandle, qt_wce_get_module_handle(), IDR_MAIN_MENU2);