why would a gouped window close the app
BlitzMax Forums/MaxGUI Module/why would a gouped window close the app| 
 | ||
| i want to create sub windows for things like item propertes. Weird thing is even though the new window is grouped to the main window: 1) execution still continues in the main window (i dont want this) 2) clicking X on the sub-window closes the main window as well. Any ideas? | 
| 
 | ||
| 1) Disable the main menu and all active gadgets. 2) You need to check if the subwindow is existant or not: Case EVENT_WINDOWCLOSE If Mysubwindow:TGadget <> Null then hidegadget( Mysubwindow ) else end endif P.S.: A bit sourcecode is mostly helpful when asking questions. | 
| 
 | ||
| Check EVENT_WINDOWCLOSE against EventSource() - which will tell you *which* window raised the close event. Then you can act on it. Tricky with 1) ... On Mac I was able to move the "current" loop to the child-window by making the child-window modal, but on Windows/Linux opening the child-window didn't seem to have this effect... But I think if you use event hooks to handle your UI you might be able to get around this issue... | 
| 
 | ||
| @D-Grafix Here's some simple code that might help: 
SuperStrict
Local window:TGadget = CreateWindow("Main Window",50, 50, 240, 240)
Local button:TGadget = CreateButton("Click Me", 5, 5, 100, 50, window)
Local modal:TGadget = CreateWindow("Modal Window",50, 50, 200, 200, window, WINDOW_TITLEBAR | WINDOW_HIDDEN)
While WaitEvent()
	Select EventID()
		Case EVENT_WINDOWCLOSE
			If EventSource() = window Then End
			If EventSource() = modal
				EnableGadget button
				EnableGadget window
				HideGadget modal
			EndIf	
		Case EVENT_GADGETACTION
			DisableGadget button
			DisableGadget window
			ShowGadget modal
	End Select
Wend
EDIT: If you want the main window's gadgets to have a 'greyed-out' appearance when the subwindow is displayed you will need to disable each one accordingly. Updated the code sample to reflect this. | 
| 
 | ||
| And if you want to actually suspend main window-related execution you'll need to structure your primary loop appropriately. Example: 
SuperStrict
Local window:TGadget = CreateWindow("Main Window",50, 50, 240, 240)
Local button:TGadget = CreateButton("Click Me", 5, 5, 100, 50, window)
Local label:TGadget = CreateLabel("0", 5, 60, 100, 50, window)
Local modal:TGadget = CreateWindow("Modal Window",50, 50, 200, 200, window, WINDOW_TITLEBAR | WINDOW_HIDDEN)
Local timer:TTimer = CreateTimer(1)
Local oldtime:Int = 0
Local value:Int = 0
Local DoMainWindowStuff:Int = True
Repeat
	PollEvent	
	Select EventID()
		Case EVENT_WINDOWCLOSE
			If EventSource() = window Then End
			If EventSource() = modal
				EnableGadget button
				EnableGadget window
				DoMainWindowStuff = True
				HideGadget modal
			EndIf	
		Case EVENT_GADGETACTION
			DoMainWindowStuff = False
			DisableGadget button
			DisableGadget window
			ShowGadget modal
	End Select
	If DoMainWindowStuff
		Local t:Int = TimerTicks(timer)
		If t > oldtime
			oldtime = t
			value :+ 1
			If value > 1000 Then value = 0
			SetGadgetText(label, value)
		EndIf
	EndIf
	
Forever
 | 
| 
 | ||
| great, thanks guys! |