// Consume all events until no more left
WXDLLEXPORT void wxFlushEvents();
-// a class which disables all windows (except, may be, thegiven one) in its
+// a class which disables all windows (except, may be, the given one) in its
// ctor and enables them back in its dtor
class WXDLLEXPORT wxWindowDisabler
{
public:
- wxWindowDisabler(wxWindow *winToSkip = (wxWindow *)NULL);
+ // this ctor conditionally disables all windows: if the argument is false,
+ // it doesn't do anything
+ wxWindowDisabler(bool disable = true);
+
+ // ctor disables all windows except winToSkip
+ wxWindowDisabler(wxWindow *winToSkip);
+
+ // dtor enables back all windows disabled by the ctor
~wxWindowDisabler();
private:
+ // disable all windows except the given one (used by both ctors)
+ void DoDisable(wxWindow *winToSkip = NULL);
+
+
wxWindowList *m_winDisabled;
+ bool m_disabled;
DECLARE_NO_COPY_CLASS(wxWindowDisabler)
};
This class disables all windows of the application (may be with the exception
of one of them) in its constructor and enables them back in its destructor.
- This comes in handy when you want to indicate to the user that the application
+
+ This is useful when you want to indicate to the user that the application
is currently busy and cannot respond to user input.
@library{wxcore}
class wxWindowDisabler
{
public:
+ /**
+ Disables all top level windows of the applications.
+
+ If @a disable is @c false nothing is done. This can be convenient if
+ the windows should be disabled depending on some condition.
+
+ @since 2.9.0
+ */
+ wxWindowDisabler(bool disable = true);
+
/**
Disables all top level windows of the applications with the exception of
@a winToSkip if it is not @NULL.
*/
- wxWindowDisabler(wxWindow* winToSkip = NULL);
+ wxWindowDisabler(wxWindow* winToSkip);
/**
Reenables back the windows disabled by the constructor.
node->GetData()->Enable(enable);
}
+wxWindowDisabler::wxWindowDisabler(bool disable)
+{
+ m_disabled = disable;
+ if ( disable )
+ DoDisable();
+}
+
wxWindowDisabler::wxWindowDisabler(wxWindow *winToSkip)
+{
+ m_disabled = true;
+ DoDisable(winToSkip);
+}
+
+void wxWindowDisabler::DoDisable(wxWindow *winToSkip)
{
// remember the top level windows which were already disabled, so that we
// don't reenable them later
wxWindowDisabler::~wxWindowDisabler()
{
+ if ( !m_disabled )
+ return;
+
wxWindowList::compatibility_iterator node;
for ( node = wxTopLevelWindows.GetFirst(); node; node = node->GetNext() )
{
// prepare to wait for the child termination: show to the user that we're
// busy and refuse all input unless explicitly told otherwise
wxBusyCursor bc;
- wxWindowDisabler *wd = flags & wxEXEC_NODISABLE ? NULL
- : new wxWindowDisabler;
+ wxWindowDisabler wd(!(flags & wxEXEC_NODISABLE));
// endProcData.pid will be set to 0 from wxHandleProcessTermination() when
// the process terminates
wxYield();
}
- delete wd;
-
return endProcData.exitcode;
}