Page 1 of 1

MessageRequester Bug (maybe another reason)

Posted: Mon Feb 10, 2020 11:09 pm
by User_Russian

Code: Select all

Procedure Ev2()
  Select Event()
    Case #PB_Event_Gadget
      Select EventGadget()
        Case 2
          PostEvent(#PB_Event_Gadget, 1, 1)
        Case 3
          PostEvent(#PB_Event_Gadget, 1, 1)
          PostEvent(#PB_Event_CloseWindow, 2, 0)
      EndSelect
    Case #PB_Event_CloseWindow
      UnbindEvent(#PB_Event_Gadget, @Ev2(), 2)
      UnbindEvent(#PB_Event_CloseWindow, @Ev2(), 2)
      CloseWindow(2)
  EndSelect
EndProcedure


Procedure Ev1()
  Select Event()
    Case #PB_Event_Gadget
      Select EventGadget()
        Case 0
          OpenWindow(2, 0, 0, 400, 400, "1234", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
          ButtonGadget(2, 10, 10, 200, 20, "No Bug")
          ButtonGadget(3, 10, 40, 200, 20, "Bug!!!!")
          BindEvent(#PB_Event_Gadget, @Ev2(), 2)
          BindEvent(#PB_Event_CloseWindow, @Ev2(), 2)
        Default
          MessageRequester("", Str(EventGadget()))
      EndSelect
    Case #PB_Event_CloseWindow
      UnbindEvent(#PB_Event_Gadget, @Ev1(), 1)
      UnbindEvent(#PB_Event_CloseWindow, @Ev1(), 1)
      End
  EndSelect
EndProcedure


If OpenWindow(1, 0, 0, 222, 200, "Main", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  ButtonGadget(0, 10, 10, 200, 20, "Open Window")
  ButtonGadget(1, 10, 40, 200, 20, "", #PB_Button_Left) : HideGadget(1, 1)
  
  BindEvent(#PB_Event_Gadget, @Ev1(), 1)
  BindEvent(#PB_Event_CloseWindow, @Ev1(), 1)
  
  Repeat :  WaitWindowEvent() : ForEver
EndIf
Run the program.
Click on the button "Open Window".
In another window, click on the button "Bug!!!!"

Why the main window is lost focus and not displayed MessageRequester?
When you click on the button "No Bug", no problem.

Re: MessageRequester Bug (maybe another reason)

Posted: Tue Feb 11, 2020 1:16 am
by Demivec
User_Russian wrote:Why the main window is lost focus and not displayed MessageRequester?

My observations:

When you click on the button "No Bug", no problem.
If you place a Debug statement before the MessageRequester it shows up in the Debug output.

Code: Select all

 Default
          Debug "MessageRequester"
          MessageRequester("", Str(EventGadget()))
So it is being executed. Perhaps the MessageRequester is associated with the window being closed and so it closes and prevents the MessageRequester from displaying.

Maybe the events are processed out of order. If you use

Code: Select all

Case 3
          PostEvent(#PB_Event_CloseWindow, 2, 0)
          PostEvent(#PB_Event_Gadget, 1, 1)
it shows the MessageRequester.

It seems counter-intuitive and it isn't clear to me what is happening either.

Re: MessageRequester Bug (maybe another reason)

Posted: Tue Feb 11, 2020 8:39 am
by BarryG
I think it's due to MessageRequester() requiring a valid parent window when being shown. Swapping the order works, or you can use MessageBox_() instead:

Code: Select all

;MessageRequester("", Str(EventGadget()))
MessageBox_(0,Str(EventGadget()),"",0)

Re: MessageRequester Bug (maybe another reason)

Posted: Sat Apr 08, 2023 12:03 pm
by Fred
It happens because the MessageRequester() is using the window which has the focus as parent. As you close this window, the requester is also closed which is why you don't see it.