Intercepting events with wxRuby/wxWidgets

Hello everybody,

I have a question concerning wxRuby/wxWidgets. I’m getting my feet wet
with a simple application that holds one Wx::Frame called VwX.

When my application gets closed, I want the user to decide whether the
app really will shut down. If it shuts down: Save the last changes or
not? Typical Yes/No/Cancel situation. So I do this: (Remark:
VwXEvOnClose(event) is the “on_close” event of my Wx::Frame):

def VwXEvOnClose(event)
dlg = MessageDialog.new(nil, “Save changes?”, “MyApp”,
Wx::YES_DEFAULT|Wx::CANCEL|Wx::YES_NO|Wx::ICON_EXCLAMATION)
command = dlg.show_modal
dlg.destroy

case command
  when Wx::ID_CANCEL
  event.veto

  when Wx::ID_YES
  save_my_changes
  event.skip

  else
  event.skip
end

end

This works as it is supposed to. However, I noticed that the call to
“event.veto” might just as well be missing without any problems. OTOH,
the calls to “event.skip” are essential: If I dont call these, the
application simply won’t shut down. Any ideas why the veto is
unimportant?

In message
[email protected],
Rainer [email protected] writes

Hello everybody,

I have a question concerning wxRuby/wxWidgets. I’m getting my feet wet
with a simple application that holds one Wx::Frame called VwX.

wxruby-users is a good place to post this kind of question.

HTH

Alec

Rainer wrote:

Hello everybody,

I have a question concerning wxRuby/wxWidgets. I’m getting my feet wet
with a simple application that holds one Wx::Frame called VwX.

As noted, wxruby-users is a better place to ask questions specifically
about wxRuby.

When my application gets closed, I want the user to decide whether the
app really will shut down. If it shuts down: Save the last changes or
not? Typical Yes/No/Cancel situation. So I do this: (Remark:
VwXEvOnClose(event) is the “on_close” event of my Wx::Frame):

This works as it is supposed to. However, I noticed that the call to
“event.veto” might just as well be missing without any problems. OTOH,
the calls to “event.skip” are essential: If I dont call these, the
application simply won’t shut down. Any ideas why the veto is
unimportant?

The veto method only applies to close events; the documentation explains
that:

“If you don’t destroy the window, you should call Wx::CloseEvent#veto to
let the calling code know that you did not destroy the window. This
allows the Wx::Window#close function to return true or false depending
on whether the close instruction was honoured or not.”

hth
alex

On 6 Jan., 22:16, Alex F. [email protected] wrote:

The veto method only applies to close events; the documentation explains
that:

“If you don’t destroy the window, you should call Wx::CloseEvent#veto to
let the calling code know that you did not destroy the window. This
allows the Wx::Window#close function to return true or false depending
on whether the close instruction was honoured or not.”

hth
alex

Hello Alex,

this sounds like the method doesn’t actually perform the veto, it just
informs the calling code that the window wasn’t destroyed. Makes
sense, thank you. I only read the “short” documentation which states:

“Call this from your event handler to veto a system shutdown or to
signal to the calling application that a window close did not happen.
You can only veto a shutdown if wxCloseEvent::CanVeto returns true.”

This sounded to me that there are cases when you actually perform the
veto. Case closed anyway: I will leave the method call in, of course.

Alec, thank you, too, for the hint with the wxruby-users mailing list.
I will reserve this for the harder cases, though, as this newsgroup
was absolutely fit for the task!

Thanks everybody,

Rainer