]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/utilscmn.cpp
Corrected mime types docs
[wxWidgets.git] / src / common / utilscmn.cpp
index c3b7898538ff7c11a7f5685f1c1787e4d1932e14..fad395b80079a8df48bd3eb997964541ec88b14b 100644 (file)
 #endif // ! __WXPALMOS5__
 
 #ifdef __WXMAC__
 #endif // ! __WXPALMOS5__
 
 #ifdef __WXMAC__
-#include "wx/mac/private.h"
-#ifndef __DARWIN__
-#include "InternetConfig.h"
-#endif
+#include "wx/osx/private.h"
 #endif
 
 #ifndef __WXPALMOS5__
 #endif
 
 #ifndef __WXPALMOS5__
@@ -936,6 +933,32 @@ void wxQsort(void *const pbase, size_t total_elems,
 
 #if wxUSE_GUI
 
 
 #if wxUSE_GUI
 
+// ----------------------------------------------------------------------------
+// Launch document with default app
+// ----------------------------------------------------------------------------
+
+bool wxLaunchDefaultApplication(const wxString &document, int flags)
+{
+    wxUnusedVar(flags);
+    
+#ifdef __UNIX__
+    // Our best best is to use xdg-open from freedesktop.org cross-desktop
+    // compatibility suite xdg-utils
+    // (see http://portland.freedesktop.org/wiki/) -- this is installed on
+    // most modern distributions and may be tweaked by them to handle
+    // distribution specifics.
+    wxString path, xdg_open;
+    if ( wxGetEnv("PATH", &path) &&
+         wxFindFileInPath(&xdg_open, path, "xdg-open") )
+    {
+        if ( wxExecute(xdg_open + " " + document) )
+            return true;
+    }
+#endif
+
+   return false;
+}
+
 // ----------------------------------------------------------------------------
 // Launch default browser
 // ----------------------------------------------------------------------------
 // ----------------------------------------------------------------------------
 // Launch default browser
 // ----------------------------------------------------------------------------
@@ -1054,30 +1077,18 @@ bool wxLaunchDefaultBrowser(const wxString& urlOrig, int flags)
     // NOTE: We need to call the real implementation from src/cocoa/utils.mm
     // because the code must use Objective-C features.
     return wxCocoaLaunchDefaultBrowser(url, flags);
     // NOTE: We need to call the real implementation from src/cocoa/utils.mm
     // because the code must use Objective-C features.
     return wxCocoaLaunchDefaultBrowser(url, flags);
-#elif defined(__WXMAC__)
-    OSStatus err;
-    ICInstance inst;
-    long int startSel;
-    long int endSel;
+#elif defined(__WXMAC__) && !defined(__WXOSX_IPHONE__)
+    wxCFRef< CFURLRef > curl( CFURLCreateWithString( kCFAllocatorDefault,
+            wxCFStringRef( url ), NULL ) );
+    OSStatus err = LSOpenCFURLRef( curl , NULL );
 
 
-    err = ICStart(&inst, 'STKA'); // put your app creator code here
     if (err == noErr)
     {
     if (err == noErr)
     {
-        if (err == noErr)
-        {
-            ConstStr255Param hint = 0;
-            startSel = 0;
-            endSel = url.length();
-            err = ICLaunchURL(inst, hint, url.fn_str(), endSel, &startSel, &endSel);
-            if (err != noErr)
-                wxLogDebug(wxT("ICLaunchURL error %d"), (int) err);
-        }
-        ICStop(inst);
         return true;
     }
     else
     {
         return true;
     }
     else
     {
-        wxLogDebug(wxT("ICStart error %d"), (int) err);
+        wxLogDebug(wxT("Browser Launch error %d"), (int) err);
         return false;
     }
 #else
         return false;
     }
 #else
@@ -1573,7 +1584,20 @@ void wxEnableTopLevelWindows(bool enable)
         node->GetData()->Enable(enable);
 }
 
         node->GetData()->Enable(enable);
 }
 
+wxWindowDisabler::wxWindowDisabler(bool disable)
+{
+    m_disabled = disable;
+    if ( disable )
+        DoDisable();
+}
+
 wxWindowDisabler::wxWindowDisabler(wxWindow *winToSkip)
 wxWindowDisabler::wxWindowDisabler(wxWindow *winToSkip)
+{
+    m_disabled = true;
+    DoDisable(winToSkip);
+}
+
+void wxWindowDisabler::DoDisable(wxWindow *winToSkip)
 {
     // remember the top level windows which were already disabled, so that we
     // don't reenable them later
 {
     // remember the top level windows which were already disabled, so that we
     // don't reenable them later
@@ -1605,6 +1629,9 @@ wxWindowDisabler::wxWindowDisabler(wxWindow *winToSkip)
 
 wxWindowDisabler::~wxWindowDisabler()
 {
 
 wxWindowDisabler::~wxWindowDisabler()
 {
+    if ( !m_disabled )
+        return;
+
     wxWindowList::compatibility_iterator node;
     for ( node = wxTopLevelWindows.GetFirst(); node; node = node->GetNext() )
     {
     wxWindowList::compatibility_iterator node;
     for ( node = wxTopLevelWindows.GetFirst(); node; node = node->GetNext() )
     {