EnableWindowDrop() - Problem with Thread, ParentID, Flags

Just starting out? Need help? Post your questions and find answers here.
c4s
Addict
Addict
Posts: 1981
Joined: Thu Nov 01, 2007 5:37 pm
Location: Germany

EnableWindowDrop() - Problem with Thread, ParentID, Flags

Post by c4s »

Code: Select all

Enumeration
	#MainWindow = 10
	#MainFrame
	#MainImageGadget
	#SubWindow = 20
	#SubFrame
	#SubImageGadget
EndEnumeration

Procedure SubWindow(Void)
	;If OpenWindow(#SubWindow, #PB_Ignore, #PB_Ignore, 300, 300, "Sub Window", #PB_Window_WindowCentered, WindowID(#MainWindow))
	If OpenWindow(#SubWindow, #PB_Ignore, #PB_Ignore, 300, 300, "Sub Window (Borderless)", #PB_Window_BorderLess | #PB_Window_WindowCentered, WindowID(#MainWindow))
		SetWindowColor(#SubWindow, 123456)
		EnableWindowDrop(#SubWindow, #PB_Drop_Files, #PB_Drag_Copy)
	
		;Frame3DGadget(#SubFrame, 0, 0, 300, 300, "");, #PB_Frame3D_Flat)
		; DisableGadget(#SubFrame, #True)  ; Flat-Style error: Needs to be disabled for gadget drop BUT creates redrawing issues
		ImageGadget(#SubImageGadget, 80, 80, 140, 140, 0, #PB_Image_Border) 
		 EnableGadgetDrop(#SubImageGadget, #PB_Drop_Files, #PB_Drag_Link)


		Repeat
			Select WaitWindowEvent(40)
				Case #PB_Event_GadgetDrop
					Debug "Sub: Drop on gadget " + Str(EventGadget())
				Case #PB_Event_WindowDrop
					Debug "Sub: Drop on window " + Str(EventWindow())
				Case #PB_Event_CloseWindow
					Break
			EndSelect
		ForEver
	EndIf
EndProcedure


If OpenWindow(#MainWindow, #PB_Ignore, #PB_Ignore, 400, 400, "Main Window", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_ScreenCentered)
	SetWindowColor(#MainWindow, 654321)
	EnableWindowDrop(#MainWindow, #PB_Drop_Files, #PB_Drag_Copy)

	;Frame3DGadget(#MainFrame, 0, 0, 400, 400, "");, #PB_Frame3D_Flat)
	; DisableGadget(#MainFrame, #True)  ; Flat-Style error: Needs to be disabled for gadget drop BUT creates redrawing issues
	ImageGadget(#MainImageGadget, 130, 130, 140, 140, 0, #PB_Image_Border) 
	 EnableGadgetDrop(#MainImageGadget, #PB_Drop_Files, #PB_Drag_Link)

	CreateThread(@SubWindow(), 0)

	Repeat
		Select WaitWindowEvent(40)
			Case #PB_Event_GadgetDrop
				Debug "Main: Drop on gadget " + Str(EventGadget())
			Case #PB_Event_WindowDrop
				Debug "Main: Drop on window " + Str(EventWindow())
			Case #PB_Event_CloseWindow
				Break
		EndSelect
	ForEver
EndIf
If the sub window has the borderless flag, drop events will be passed to the main window and when it has normal borders, no drop will be noticed at all (neither on sub nor on the main window). In any way I'm not able to find out if files are dropped on the sub window...


By the way: There is also a bug with the Frame3DGadget(). The gadget won't receive the drop-event when flat style is enabled and the workaround (DisableGadget() for the frame) creates redrawing issues.
If any of you native English speakers have any suggestions for the above text, please let me know (via PM). Thanks!
Fred
Administrator
Administrator
Posts: 18350
Joined: Fri May 17, 2002 4:39 pm
Location: France
Contact:

Re: EnableWindowDrop() - Problem with Thread, ParentID, Flags

Post by Fred »

OpenWindow() can be only called from the main thread. FrameGadget() now has a container mode which properly support drag'n'drop.
Post Reply