MessageRequester Bug (maybe another reason)

Just starting out? Need help? Post your questions and find answers here.
User_Russian
Addict
Addict
Posts: 1443
Joined: Wed Nov 12, 2008 5:01 pm
Location: Russia

MessageRequester Bug (maybe another reason)

Post 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.
User avatar
Demivec
Addict
Addict
Posts: 4089
Joined: Mon Jul 25, 2005 3:51 pm
Location: Utah, USA

Re: MessageRequester Bug (maybe another reason)

Post 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.
Last edited by Demivec on Tue Feb 11, 2020 9:27 am, edited 1 time in total.
BarryG
Addict
Addict
Posts: 3318
Joined: Thu Apr 18, 2019 8:17 am

Re: MessageRequester Bug (maybe another reason)

Post 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)
Fred
Administrator
Administrator
Posts: 16664
Joined: Fri May 17, 2002 4:39 pm
Location: France
Contact:

Re: MessageRequester Bug (maybe another reason)

Post 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.
Post Reply