7a8684a8bd
Ensure GTKEnableEvents() is called automatically on scope exit whenever GTKDisableEvents() is called. This fixes a couple of potential bugs where GTKEnableEvents() could be not called if wxCHECK() condition failed and makes the code shorter and safer.
42 lines
1.3 KiB
C++
42 lines
1.3 KiB
C++
///////////////////////////////////////////////////////////////////////////////
|
|
// Name: wx/gtk/private/eventsdisabler.h
|
|
// Purpose: Helper for temporarily disabling events.
|
|
// Author: Vadim Zeitlin
|
|
// Created: 2016-02-06
|
|
// Copyright: (c) 2016 Vadim Zeitlin <vadim@wxwidgets.org>
|
|
// Licence: wxWindows licence
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
#ifndef _GTK_PRIVATE_EVENTSDISABLER_H_
|
|
#define _GTK_PRIVATE_EVENTSDISABLER_H_
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// wxGtkEventsDisabler: calls GTKDisableEvents() and GTKEnableEvents() in dtor.
|
|
// ----------------------------------------------------------------------------
|
|
|
|
// Template parameter T must be a wxGTK class providing the required methods,
|
|
// e.g. wxCheckBox, wxChoice, ...
|
|
template <typename T>
|
|
class wxGtkEventsDisabler
|
|
{
|
|
public:
|
|
// Disable the events for the specified (non-NULL, having lifetime greater
|
|
// than ours) window for the lifetime of this object.
|
|
explicit wxGtkEventsDisabler(T* win) : m_win(win)
|
|
{
|
|
m_win->GTKDisableEvents();
|
|
}
|
|
|
|
~wxGtkEventsDisabler()
|
|
{
|
|
m_win->GTKEnableEvents();
|
|
}
|
|
|
|
private:
|
|
T* const m_win;
|
|
|
|
wxDECLARE_NO_COPY_TEMPLATE_CLASS(wxGtkEventsDisabler, T);
|
|
};
|
|
|
|
#endif // _GTK_PRIVATE_EVENTSDISABLER_H_
|