Issue #5049 has been updated by Jon Forums.


Adding email thread as it's missing from Redmine's issue.  Comments below.

> > When running the following simple test on 1.8.7-p352 built with TDM-1 GCC 4.5.2 and the RubyInstaller recipes, I get two MessageBox's. One empty, one with the message.
> > 
> >   ruby -rtk -e "Tk.messageBox :message => 'Hello Ruby Tk'"
>
> It is not a bug. The empty window is a root window of Tk.
> If you want to show a message box only, please call "Tk.root.withdraw"
> at first. Then, a root window will be hidden.
>
> $ ruby -rtk -e "Tk.root.withdraw; Tk.messageBox :message => 'Hello Ruby Tk'"

Your answer makes technical sense, but from a user perspective requiring this extra code to display a message box seems both (arguably) unintuitive and an unnecessary implementation detail. 

Are you also saying the root Tk window shouldn't appear in 1.8.7 if the message box is part of a more real-world script? For example, this works as expected:

    require 'tk'
    require 'tkextlib/tile'

    root = TkRoot.new
    button = Tk::Tile::TButton.new(root) { text 'Hello Ruby Tk!' }.grid

    Tk.messageBox :message => 'preliminary'

    Tk.mainloop

If this 1.8.7 behavior is a corner case that will *never* happen in real-world Ruby Tk apps but only in simple example code, then I agree with you that this isn't a bug and the issue can be closed.


> > This does not occur when using MinGW versions of ruby 1.9.2p290 (2011-07-09 revision 32478) [i386-mingw32] or ruby 1.9.4dev (2011-07-18 trunk 32578) [i386-mingw32].
>
> It depends on the difference between ruby-1.8 and 1.9.
> Although I omit the detail of the reason, Ruby/Tk on recent ruby-1.9
> hides a root widget before calling Tk.mainloop.
> Usually, it has no problem. Because, Tk requires an eventloop to treat
> widnow events. But Dialog methods (e.g. Tk.messageBox) makes its own
> eventloop. So, ruby-1.8 shows a root widget too, but ruby-1.9 doesn't.

Are there any technical limitations in 1.8 that prevent Tk from behaving consistently with 1.9 with respect to Dialog methods and event loops?

Why should 1.8 and 1.9 Dialog methods behave differently from a Ruby code perspective?

Jon
----------------------------------------
Bug #5049: [ext/tk] Tk creating double MessageBox's 
http://redmine.ruby-lang.org/issues/5049

Author: Jon Forums
Status: Open
Priority: Normal
Assignee: 
Category: ext
Target version: Ruby 1.8.7
ruby -v: ruby 1.8.7 (2011-06-30 patchlevel 352) [i386-mingw32]


When running the following simple test on 1.8.7-p352 built with TDM-1 GCC 4.5.2 and the RubyInstaller recipes, I get two MessageBox's. One empty, one with the message.

  ruby -rtk -e "Tk.messageBox :message => 'Hello Ruby Tk'"

Additional working and non-working samples => http://pastie.org/2233258

This does not occur when using MinGW versions of ruby 1.9.2p290 (2011-07-09 revision 32478) [i386-mingw32] or ruby 1.9.4dev (2011-07-18 trunk 32578) [i386-mingw32].

Jon


-- 
http://redmine.ruby-lang.org