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_
 |