Create a small helper class for Unity global menu bug workaround.
Encapsulate the code temporarily incrementing wxOpenModalDialogsCount in a small helper class to make it easier to reuse it elsewhere. See #14823. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@73689 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
parent
49b18c6cd9
commit
d3bd8b1a48
49
include/wx/gtk/private/dialogcount.h
Normal file
49
include/wx/gtk/private/dialogcount.h
Normal file
@ -0,0 +1,49 @@
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// Name: wx/gtk/private/dialogcount.h
|
||||
// Purpose: Helper for temporarily changing wxOpenModalDialogsCount global.
|
||||
// Author: Vadim Zeitlin
|
||||
// Created: 2013-03-21
|
||||
// RCS-ID: $Id$
|
||||
// Copyright: (c) 2013 Vadim Zeitlin <vadim@wxwidgets.org>
|
||||
// Licence: wxWindows licence
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef _WX_GTK_PRIVATE_DIALOGCOUNT_H_
|
||||
#define _WX_GTK_PRIVATE_DIALOGCOUNT_H_
|
||||
|
||||
#include "wx/defs.h"
|
||||
|
||||
// This global variable contains the number of currently opened modal dialogs.
|
||||
// When it is non null, the global menu used in Ubuntu Unity needs to be
|
||||
// explicitly disabled as this doesn't currently happen on its own due to a bug
|
||||
// in Unity, see https://bugs.launchpad.net/indicator-appmenu/+bug/674605
|
||||
//
|
||||
// For this to work, all modal dialogs must use wxOpenModalDialogLocker class
|
||||
// below to increment this variable while they are indeed being modally shown.
|
||||
//
|
||||
// This variable is defined in src/gtk/toplevel.cpp
|
||||
extern int wxOpenModalDialogsCount;
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// wxOpenModalDialogLocker: Create an object of this class to increment
|
||||
// wxOpenModalDialogsCount during its lifetime.
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
class wxOpenModalDialogLocker
|
||||
{
|
||||
public:
|
||||
wxOpenModalDialogLocker()
|
||||
{
|
||||
wxOpenModalDialogsCount++;
|
||||
}
|
||||
|
||||
~wxOpenModalDialogLocker()
|
||||
{
|
||||
wxOpenModalDialogsCount--;
|
||||
}
|
||||
|
||||
private:
|
||||
wxDECLARE_NO_COPY_CLASS(wxOpenModalDialogLocker);
|
||||
};
|
||||
|
||||
#endif // _WX_GTK_PRIVATE_DIALOGCOUNT_H_
|
@ -23,9 +23,7 @@
|
||||
|
||||
#include <gtk/gtk.h>
|
||||
#include "wx/gtk/private/gtk2-compat.h"
|
||||
|
||||
// this is defined in src/gtk/toplevel.cpp
|
||||
extern int wxOpenModalDialogsCount;
|
||||
#include "wx/gtk/private/dialogcount.h"
|
||||
|
||||
wxDEFINE_TIED_SCOPED_PTR_TYPE(wxGUIEventLoop)
|
||||
|
||||
@ -172,7 +170,7 @@ int wxDialog::ShowModal()
|
||||
|
||||
m_modalShowing = true;
|
||||
|
||||
wxOpenModalDialogsCount++;
|
||||
wxOpenModalDialogLocker modalLock;
|
||||
|
||||
// NOTE: gtk_window_set_modal internally calls gtk_grab_add() !
|
||||
gtk_window_set_modal(GTK_WINDOW(m_widget), TRUE);
|
||||
@ -190,8 +188,6 @@ int wxDialog::ShowModal()
|
||||
|
||||
gtk_window_set_modal(GTK_WINDOW(m_widget), FALSE);
|
||||
|
||||
wxOpenModalDialogsCount--;
|
||||
|
||||
return GetReturnCode();
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user