// Name: src/gtk/app.cpp
// Purpose:
// Author: Robert Roebling
-// Id: $Id$
// Copyright: (c) 1998 Robert Roebling, Julian Smart
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
#include <gpe/init.h>
#endif
-#include "wx/gtk/private.h"
#include "wx/apptrait.h"
#include "wx/fontmap.h"
#include <hildon/hildon.h>
#endif // wxUSE_LIBHILDON2
-#include <gdk/gdkx.h>
+#include <gtk/gtk.h>
+#include "wx/gtk/private.h"
//-----------------------------------------------------------------------------
// link GnomeVFS
}
}
// "size_allocate" hook
- // Needed to match the behavior of the old idle system,
+ // Needed to match the behaviour of the old idle system,
// but probably not necessary.
{
static bool hook_installed;
#if wxDEBUG_LEVEL
// don't generate the idle events while the assert modal dialog is shown,
- // this matches the behavior of wxMSW
+ // this matches the behaviour of wxMSW
if (m_isInAssert)
return false;
#endif
#if wxUSE_THREADS
wxMutexLocker lock(m_idleMutex);
#endif
- // if a new idle source was added during ProcessIdle
- if (m_idleSourceId != 0)
- {
- // remove it
- g_source_remove(m_idleSourceId);
- m_idleSourceId = 0;
- }
- // Pending events can be added asynchronously,
- // need to keep idle source if any have appeared
- if (HasPendingEvents())
- needMore = true;
-
- // if more idle processing requested
- if (needMore)
+ bool keepSource = false;
+ // if a new idle source has not been added, either as a result of idle
+ // processing above or by another thread calling WakeUpIdle()
+ if (m_idleSourceId == 0)
{
- // keep this source installed
- m_idleSourceId = id_save;
- return true;
+ // if more idle processing was requested or pending events have appeared
+ if (needMore || HasPendingEvents())
+ {
+ // keep this source installed
+ m_idleSourceId = id_save;
+ keepSource = true;
+ }
+ else // add hooks and remove this source
+ wx_add_idle_hooks();
}
- // add hooks and remove this source
- wx_add_idle_hooks();
- return false;
+ // else remove this source, leave new one installed
+ // we must keep an idle source, otherwise a wakeup could be lost
+
+ return keepSource;
}
//-----------------------------------------------------------------------------
bool wxApp::SetNativeTheme(const wxString& theme)
{
+#ifdef __WXGTK3__
+ wxUnusedVar(theme);
+ return false;
+#else
wxString path;
path = gtk_rc_get_theme_dir();
path += "/";
gtk_rc_reparse_all_for_settings(gtk_settings_get_default(), TRUE);
return true;
+#endif
}
bool wxApp::OnInitGui()
if ( !wxAppBase::OnInitGui() )
return false;
+#ifndef __WXGTK3__
// if this is a wxGLApp (derived from wxApp), and we've already
// chosen a specific visual, then derive the GdkVisual from that
if ( GetXVisualInfo() )
}
}
}
+#endif
#if wxUSE_LIBHILDON || wxUSE_LIBHILDON2
if ( !GetHildonProgram() )
// gtk+ 2.0 supports Unicode through UTF-8 strings
wxConvCurrent = &wxConvUTF8;
+#ifdef __UNIX__
// decide which conversion to use for the file names
// (1) this variable exists for the sole purpose of specifying the encoding
if (encName.CmpNoCase(wxT("@locale")) == 0)
encName.clear();
encName.MakeUpper();
-#if wxUSE_INTL
if (encName.empty())
{
+#if wxUSE_INTL
// (2) if a non default locale is set, assume that the user wants his
// filenames in this locale too
encName = wxLocale::GetSystemEncodingName().Upper();
encName.clear();
}
}
+#endif // wxUSE_INTL
// (3) finally use UTF-8 by default
if ( encName.empty() )
encName = wxT("UTF-8");
wxSetEnv(wxT("G_FILENAME_ENCODING"), encName);
}
-#else
- if (encName.empty())
- encName = wxT("UTF-8");
-
- // if wxUSE_INTL==0 it probably indicates that only "C" locale is supported
- // by the program anyhow so prevent GTK+ from calling setlocale(LC_ALL, "")
- // from gtk_init_check() as it does by default
- gtk_disable_setlocale();
-#endif // wxUSE_INTL
static wxConvBrokenFileNames fileconv(encName);
wxConvFileName = &fileconv;
+#endif // __UNIX__
bool init_result;
int argcGTK = argc_;
+ // Prevent gtk_init_check() from changing the locale automatically for
+ // consistency with the other ports that don't do it. If necessary,
+ // wxApp::SetCLocale() may be explicitly called.
+ gtk_disable_setlocale();
+
#ifdef __WXGPE__
init_result = true; // is there a _check() version of this?
gpe_application_init( &argcGTK, &argvGTK );
#else
- init_result = gtk_init_check( &argcGTK, &argvGTK );
+ init_result = gtk_init_check( &argcGTK, &argvGTK ) != 0;
#endif
- wxUpdateLocaleIsUtf8();
if ( argcGTK != argc_ )
{
return false;
}
- // we can not enter threads before gtk_init is done
+ // we cannot enter threads before gtk_init is done
gdk_threads_enter();
#if wxUSE_INTL
}
#endif // wxUSE_THREADS
+/* static */
+bool wxApp::GTKIsUsingGlobalMenu()
+{
+ static int s_isUsingGlobalMenu = -1;
+ if ( s_isUsingGlobalMenu == -1 )
+ {
+ // Currently we just check for this environment variable because this
+ // is how support for the global menu is implemented under Ubuntu.
+ //
+ // If we ever get false positives, we could also check for
+ // XDG_CURRENT_DESKTOP env var being set to "Unity".
+ wxString proxy;
+ s_isUsingGlobalMenu = wxGetEnv("UBUNTU_MENUPROXY", &proxy) &&
+ !proxy.empty() && proxy != "0";
+ }
+
+ return s_isUsingGlobalMenu == 1;
+}
+
#if wxUSE_LIBHILDON || wxUSE_LIBHILDON2
// Maemo-specific method: get the main program object
HildonProgram *wxApp::GetHildonProgram()