]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/gtk/private/dialogcount.h
Create a small helper class for Unity global menu bug workaround.
[wxWidgets.git] / include / wx / gtk / private / dialogcount.h
diff --git a/include/wx/gtk/private/dialogcount.h b/include/wx/gtk/private/dialogcount.h
new file mode 100644 (file)
index 0000000..45b43e4
--- /dev/null
@@ -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_