]> git.saurik.com Git - wxWidgets.git/blobdiff - src/gtk/utilsgtk.cpp
Preserve original menu label for later retrieval
[wxWidgets.git] / src / gtk / utilsgtk.cpp
index c0d0309f9532ad008870bb0e8b970137c1ba3f7b..1f9ea333a74c9427a23cc32259467eb1d19d5c8e 100644 (file)
 #include "wx/apptrait.h"
 
 #include "wx/process.h"
 #include "wx/apptrait.h"
 
 #include "wx/process.h"
+#include "wx/sysopt.h"
 
 #include "wx/unix/execute.h"
 
 #include "wx/gtk/private/timer.h"
 
 #include "wx/unix/execute.h"
 
 #include "wx/gtk/private/timer.h"
+#include "wx/evtloop.h"
 
 #ifdef __WXDEBUG__
     #include "wx/gtk/assertdlg_gtk.h"
 
 #ifdef __WXDEBUG__
     #include "wx/gtk/assertdlg_gtk.h"
@@ -185,16 +187,17 @@ wxWindow* wxFindWindowAtPoint(const wxPoint& pt)
 
 #if !wxUSE_UNICODE
 
 
 #if !wxUSE_UNICODE
 
-wxCharBuffer wxConvertToGTK(const wxString& s, wxFontEncoding enc)
+WXDLLIMPEXP_CORE wxCharBuffer
+wxConvertToGTK(const wxString& s, wxFontEncoding enc)
 {
     wxWCharBuffer wbuf;
     if ( enc == wxFONTENCODING_SYSTEM || enc == wxFONTENCODING_DEFAULT )
     {
 {
     wxWCharBuffer wbuf;
     if ( enc == wxFONTENCODING_SYSTEM || enc == wxFONTENCODING_DEFAULT )
     {
-        wbuf = wxConvUI->cMB2WC(s);
+        wbuf = wxConvUI->cMB2WC(s.c_str());
     }
     else // another encoding, use generic conversion class
     {
     }
     else // another encoding, use generic conversion class
     {
-        wbuf = wxCSConv(enc).cMB2WC(s);
+        wbuf = wxCSConv(enc).cMB2WC(s.c_str());
     }
 
     if ( !wbuf && !s.empty() )
     }
 
     if ( !wbuf && !s.empty() )
@@ -205,17 +208,18 @@ wxCharBuffer wxConvertToGTK(const wxString& s, wxFontEncoding enc)
         // we choose ISO8859-1 here arbitrarily, it's just the most common
         // encoding probably and, also importantly here, conversion from it
         // never fails as it's done internally by wxCSConv
         // we choose ISO8859-1 here arbitrarily, it's just the most common
         // encoding probably and, also importantly here, conversion from it
         // never fails as it's done internally by wxCSConv
-        wbuf = wxCSConv(wxFONTENCODING_ISO8859_1).cMB2WC(s);
+        wbuf = wxCSConv(wxFONTENCODING_ISO8859_1).cMB2WC(s.c_str());
     }
 
     return wxConvUTF8.cWC2MB(wbuf);
 }
 
     }
 
     return wxConvUTF8.cWC2MB(wbuf);
 }
 
-wxCharBuffer wxConvertFromGTK(const wxString& s, wxFontEncoding enc)
+WXDLLIMPEXP_CORE wxCharBuffer
+wxConvertFromGTK(const wxString& s, wxFontEncoding enc)
 {
     // this conversion should never fail as GTK+ always uses UTF-8 internally
     // so there are no complications here
 {
     // this conversion should never fail as GTK+ always uses UTF-8 internally
     // so there are no complications here
-    const wxWCharBuffer wbuf(wxConvUTF8.cMB2WC(s));
+    const wxWCharBuffer wbuf(wxConvUTF8.cMB2WC(s.c_str()));
     if ( enc == wxFONTENCODING_SYSTEM )
         return wxConvUI->cWC2MB(wbuf);
 
     if ( enc == wxFONTENCODING_SYSTEM )
         return wxConvUI->cWC2MB(wbuf);
 
@@ -310,11 +314,15 @@ wxPortId wxGUIAppTraits::GetToolkitVersion(int *verMaj, int *verMin) const
     return wxPORT_GTK;
 }
 
     return wxPORT_GTK;
 }
 
+#if wxUSE_TIMER
+
 wxTimerImpl *wxGUIAppTraits::CreateTimerImpl(wxTimer *timer)
 {
     return new wxGTKTimerImpl(timer);
 }
 
 wxTimerImpl *wxGUIAppTraits::CreateTimerImpl(wxTimer *timer)
 {
     return new wxGTKTimerImpl(timer);
 }
 
+#endif // wxUSE_TIMER
+
 #if wxUSE_DETECT_SM
 static wxString GetSM()
 {
 #if wxUSE_DETECT_SM
 static wxString GetSM()
 {
@@ -332,15 +340,19 @@ static wxString GetSM()
     if ( !dpy )
         return wxEmptyString;
 
     if ( !dpy )
         return wxEmptyString;
 
+    char smerr[256];
     char *client_id;
     SmcConn smc_conn = SmcOpenConnection(NULL, NULL,
                                          999, 999,
                                          0 /* mask */, NULL /* callbacks */,
                                          NULL, &client_id,
     char *client_id;
     SmcConn smc_conn = SmcOpenConnection(NULL, NULL,
                                          999, 999,
                                          0 /* mask */, NULL /* callbacks */,
                                          NULL, &client_id,
-                                         0, NULL);
+                                         WXSIZEOF(smerr), smerr);
 
     if ( !smc_conn )
 
     if ( !smc_conn )
+    {
+        wxLogWarning(_("Failed to connect to session manager: %s"), smerr);
         return wxEmptyString;
         return wxEmptyString;
+    }
 
     char *vendor = SmcVendor(smc_conn);
     wxString ret = wxString::FromAscii( vendor );
 
     char *vendor = SmcVendor(smc_conn);
     wxString ret = wxString::FromAscii( vendor );
@@ -358,10 +370,17 @@ static wxString GetSM()
 // wxGUIAppTraits
 //-----------------------------------------------------------------------------
 
 // wxGUIAppTraits
 //-----------------------------------------------------------------------------
 
+wxEventLoopBase *wxGUIAppTraits::CreateEventLoop()
+{
+    return new wxEventLoop();
+}
+
+
 #if wxUSE_INTL
 void wxGUIAppTraits::SetLocale()
 {
     gtk_set_locale();
 #if wxUSE_INTL
 void wxGUIAppTraits::SetLocale()
 {
     gtk_set_locale();
+    wxUpdateLocaleIsUtf8();
 }
 #endif
 
 }
 #endif
 
@@ -469,17 +488,20 @@ bool wxGUIAppTraits::ShowAssertDialog(const wxString& msg)
 
 wxString wxGUIAppTraits::GetDesktopEnvironment() const
 {
 
 wxString wxGUIAppTraits::GetDesktopEnvironment() const
 {
+    wxString de = wxSystemOptions::GetOption(_T("gtk.desktop"));
 #if wxUSE_DETECT_SM
 #if wxUSE_DETECT_SM
-    const wxString SM = GetSM();
-
-    if (SM == wxT("GnomeSM"))
-        return wxT("GNOME");
+    if ( de.empty() )
+    {
+        static const wxString s_SM = GetSM();
 
 
-    if (SM == wxT("KDE"))
-        return wxT("KDE");
+        if (s_SM == wxT("GnomeSM"))
+            de = wxT("GNOME");
+        else if (s_SM == wxT("KDE"))
+            de = wxT("KDE");
+    }
 #endif // wxUSE_DETECT_SM
 
 #endif // wxUSE_DETECT_SM
 
-    return wxEmptyString;
+    return de;
 }
 
 #ifdef __WXGTK26__
 }
 
 #ifdef __WXGTK26__