]> git.saurik.com Git - wxWidgets.git/blobdiff - src/gtk/app.cpp
Set missing Language: headers in PO files.
[wxWidgets.git] / src / gtk / app.cpp
index f90decedb13fb5cbf897a22c0a6b8cc05322a180..2bd616a4ba5f4cf5783d18eccbda3aabd16f89ef 100644 (file)
@@ -2,7 +2,6 @@
 // Name:        src/gtk/app.cpp
 // Purpose:
 // Author:      Robert Roebling
 // Name:        src/gtk/app.cpp
 // Purpose:
 // Author:      Robert Roebling
-// Id:          $Id$
 // Copyright:   (c) 1998 Robert Roebling, Julian Smart
 // Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 // Copyright:   (c) 1998 Robert Roebling, Julian Smart
 // Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
@@ -26,7 +25,6 @@
     #include <gpe/init.h>
 #endif
 
     #include <gpe/init.h>
 #endif
 
-#include "wx/gtk/private.h"
 #include "wx/apptrait.h"
 #include "wx/fontmap.h"
 
 #include "wx/apptrait.h"
 #include "wx/fontmap.h"
 
@@ -38,7 +36,8 @@
     #include <hildon/hildon.h>
 #endif // wxUSE_LIBHILDON2
 
     #include <hildon/hildon.h>
 #endif // wxUSE_LIBHILDON2
 
-#include <gdk/gdkx.h>
+#include <gtk/gtk.h>
+#include "wx/gtk/private.h"
 
 //-----------------------------------------------------------------------------
 // link GnomeVFS
 
 //-----------------------------------------------------------------------------
 // link GnomeVFS
@@ -86,7 +85,7 @@ static void wx_add_idle_hooks()
         }
     }
     // "size_allocate" hook
         }
     }
     // "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;
     // but probably not necessary.
     {
         static bool hook_installed;
@@ -125,7 +124,7 @@ bool wxApp::DoIdle()
 
 #if wxDEBUG_LEVEL
         // don't generate the idle events while the assert modal dialog is shown,
 
 #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 (m_isInAssert)
             return false;
 #endif
@@ -143,29 +142,26 @@ bool wxApp::DoIdle()
 #if wxUSE_THREADS
     wxMutexLocker lock(m_idleMutex);
 #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;
 }
 
 //-----------------------------------------------------------------------------
 }
 
 //-----------------------------------------------------------------------------
@@ -202,6 +198,10 @@ wxApp::~wxApp()
 
 bool wxApp::SetNativeTheme(const wxString& theme)
 {
 
 bool wxApp::SetNativeTheme(const wxString& theme)
 {
+#ifdef __WXGTK3__
+    wxUnusedVar(theme);
+    return false;
+#else
     wxString path;
     path = gtk_rc_get_theme_dir();
     path += "/";
     wxString path;
     path = gtk_rc_get_theme_dir();
     path += "/";
@@ -222,6 +222,7 @@ bool wxApp::SetNativeTheme(const wxString& theme)
     gtk_rc_reparse_all_for_settings(gtk_settings_get_default(), TRUE);
 
     return true;
     gtk_rc_reparse_all_for_settings(gtk_settings_get_default(), TRUE);
 
     return true;
+#endif
 }
 
 bool wxApp::OnInitGui()
 }
 
 bool wxApp::OnInitGui()
@@ -229,6 +230,7 @@ bool wxApp::OnInitGui()
     if ( !wxAppBase::OnInitGui() )
         return false;
 
     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() )
     // if this is a wxGLApp (derived from wxApp), and we've already
     // chosen a specific visual, then derive the GdkVisual from that
     if ( GetXVisualInfo() )
@@ -266,6 +268,7 @@ bool wxApp::OnInitGui()
             }
         }
     }
             }
         }
     }
+#endif
 
 #if wxUSE_LIBHILDON || wxUSE_LIBHILDON2
     if ( !GetHildonProgram() )
 
 #if wxUSE_LIBHILDON || wxUSE_LIBHILDON2
     if ( !GetHildonProgram() )
@@ -295,6 +298,7 @@ bool wxApp::Initialize(int& argc_, wxChar **argv_)
     // gtk+ 2.0 supports Unicode through UTF-8 strings
     wxConvCurrent = &wxConvUTF8;
 
     // 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
     // decide which conversion to use for the file names
 
     // (1) this variable exists for the sole purpose of specifying the encoding
@@ -304,9 +308,9 @@ bool wxApp::Initialize(int& argc_, wxChar **argv_)
     if (encName.CmpNoCase(wxT("@locale")) == 0)
         encName.clear();
     encName.MakeUpper();
     if (encName.CmpNoCase(wxT("@locale")) == 0)
         encName.clear();
     encName.MakeUpper();
-#if wxUSE_INTL
     if (encName.empty())
     {
     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();
         // (2) if a non default locale is set, assume that the user wants his
         //     filenames in this locale too
         encName = wxLocale::GetSystemEncodingName().Upper();
@@ -325,24 +329,17 @@ bool wxApp::Initialize(int& argc_, wxChar **argv_)
                 encName.clear();
             }
         }
                 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);
     }
 
         // (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;
     static wxConvBrokenFileNames fileconv(encName);
     wxConvFileName = &fileconv;
+#endif // __UNIX__
 
 
     bool init_result;
 
 
     bool init_result;
@@ -360,13 +357,17 @@ bool wxApp::Initialize(int& argc_, wxChar **argv_)
 
     int argcGTK = argc_;
 
 
     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
 #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
 #endif
-    wxUpdateLocaleIsUtf8();
 
     if ( argcGTK != argc_ )
     {
 
     if ( argcGTK != argc_ )
     {
@@ -439,7 +440,7 @@ bool wxApp::Initialize(int& argc_, wxChar **argv_)
         return false;
     }
 
         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
     gdk_threads_enter();
 
 #if wxUSE_INTL
@@ -527,6 +528,25 @@ void wxGUIAppTraits::MutexGuiLeave()
 }
 #endif // wxUSE_THREADS
 
 }
 #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()
 #if wxUSE_LIBHILDON || wxUSE_LIBHILDON2
 // Maemo-specific method: get the main program object
 HildonProgram *wxApp::GetHildonProgram()