changeset 2911:f27fe14eef82

C++: MenuItem constructors need to call Setup() and Clickable::ClickedConnected may not have been initialized, both could cause problems particularly on Windows.
author bsmith@81767d24-ef19-dc11-ae90-00e081727c95
date Tue, 27 Dec 2022 09:00:02 +0000
parents 927fcf85b132
children 08fcbd5fa069
files dw.hpp
diffstat 1 files changed, 7 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/dw.hpp	Tue Dec 27 01:23:09 2022 +0000
+++ b/dw.hpp	Tue Dec 27 09:00:02 2022 +0000
@@ -131,7 +131,7 @@
 #else
     int (*_ConnectClicked)();
 #endif
-    static int _OnClicked(HWND window, void *data) { 
+    static int _OnClicked(HWND window, void *data) {
         if(reinterpret_cast<Clickable *>(data)->_ConnectClicked) 
             return reinterpret_cast<Clickable *>(data)->_ConnectClicked();
         return reinterpret_cast<Clickable *>(data)->OnClicked(); }
@@ -142,6 +142,9 @@
             dw_signal_connect(hwnd, DW_SIGNAL_CLICKED, DW_SIGNAL_FUNC(_OnClicked), this);
             ClickedConnected = true;
         }
+        else {
+            ClickedConnected = false;
+        }
     }
     // Our signal handler functions to be overriden...
     // If they are not overridden and an event is generated, remove the unused handler
@@ -205,13 +208,13 @@
 public:
     // Constructors
     MenuItem(Menus *menu, const char *title, unsigned long id, unsigned long flags, int end, int check, Menus *submenu) { 
-        SetHWND(dw_menu_append_item(menu->GetHMENUI(), title, id, flags, end, check, submenu ? submenu->GetHMENUI() : DW_NOMENU)); 
+        SetHWND(dw_menu_append_item(menu->GetHMENUI(), title, id, flags, end, check, submenu ? submenu->GetHMENUI() : DW_NOMENU)); Setup();
     }
     MenuItem(Menus *menu, const char *title, Menus *submenu) {
-        SetHWND(dw_menu_append_item(menu->GetHMENUI(), title, DW_MENU_AUTO, 0, TRUE, FALSE, submenu ? submenu->GetHMENUI() : DW_NOMENU));
+        SetHWND(dw_menu_append_item(menu->GetHMENUI(), title, DW_MENU_AUTO, 0, TRUE, FALSE, submenu ? submenu->GetHMENUI() : DW_NOMENU)); Setup();
     }
     MenuItem(Menus *menu, const char *title) {
-        SetHWND(dw_menu_append_item(menu->GetHMENUI(), title, DW_MENU_AUTO, 0, TRUE, FALSE, DW_NOMENU));
+        SetHWND(dw_menu_append_item(menu->GetHMENUI(), title, DW_MENU_AUTO, 0, TRUE, FALSE, DW_NOMENU)); Setup();
     }
 
     // User functions