]> git.saurik.com Git - wxWidgets.git/blobdiff - src/gtk/utilsgtk.cpp
VC6 compilation fix for native wxProgressDialog implementation.
[wxWidgets.git] / src / gtk / utilsgtk.cpp
index bfcbbc8ab20497ec8a771cf321381e7600418f1f..e337be979235751aa3babba287ad8da657318ec6 100644 (file)
@@ -354,55 +354,55 @@ extern "C"
 bool wxGUIAppTraits::ShowAssertDialog(const wxString& msg)
 {
 #if wxDEBUG_LEVEL
 bool wxGUIAppTraits::ShowAssertDialog(const wxString& msg)
 {
 #if wxDEBUG_LEVEL
-    // under GTK2 we prefer to use a dialog widget written using directly in
-    // GTK+ as use a dialog written using wxWidgets would need the wxWidgets
-    // idle processing to work correctly which might not be the case when
-    // assert happens
-    GtkWidget *dialog = gtk_assert_dialog_new();
-    gtk_assert_dialog_set_message(GTK_ASSERT_DIALOG(dialog), msg.mb_str());
+    // we can't show the dialog from another thread
+    if ( wxIsMainThread() )
+    {
+        // under GTK2 we prefer to use a dialog widget written using directly
+        // in GTK+ as use a dialog written using wxWidgets would need the
+        // wxWidgets idle processing to work correctly which might not be the
+        // case when assert happens
+        GtkWidget *dialog = gtk_assert_dialog_new();
+        gtk_assert_dialog_set_message(GTK_ASSERT_DIALOG(dialog), msg.mb_str());
 
 #if wxUSE_STACKWALKER
 
 #if wxUSE_STACKWALKER
-    // don't show more than maxLines or we could get a dialog too tall to be
-    // shown on screen: 20 should be ok everywhere as even with 15 pixel high
-    // characters it is still only 300 pixels...
-    static const int maxLines = 20;
-
-    // save current stack frame...
-    StackDump dump(GTK_ASSERT_DIALOG(dialog));
-    dump.SaveStack(maxLines);
-
-    // ...but process it only if the user needs it
-    gtk_assert_dialog_set_backtrace_callback(GTK_ASSERT_DIALOG(dialog),
-                                             (GtkAssertDialogStackFrameCallback)get_stackframe_callback,
-                                             &dump);
-#endif      // wxUSE_STACKWALKER
-
-    gint result = gtk_dialog_run(GTK_DIALOG (dialog));
-    bool returnCode = false;
-    switch (result)
-    {
-    case GTK_ASSERT_DIALOG_STOP:
-        wxTrap();
-        break;
-    case GTK_ASSERT_DIALOG_CONTINUE:
-        // nothing to do
-        break;
-    case GTK_ASSERT_DIALOG_CONTINUE_SUPPRESSING:
-        // no more asserts
-        returnCode = true;
-        break;
-
-    default:
-        wxFAIL_MSG( wxT("unexpected return code from GtkAssertDialog") );
+        // save the current stack ow...
+        StackDump dump(GTK_ASSERT_DIALOG(dialog));
+        dump.SaveStack(100); // showing more than 100 frames is not very useful
+
+        // ...but process it only if the user needs it
+        gtk_assert_dialog_set_backtrace_callback
+        (
+            GTK_ASSERT_DIALOG(dialog),
+            (GtkAssertDialogStackFrameCallback)get_stackframe_callback,
+            &dump
+        );
+#endif // wxUSE_STACKWALKER
+
+        gint result = gtk_dialog_run(GTK_DIALOG (dialog));
+        bool returnCode = false;
+        switch (result)
+        {
+            case GTK_ASSERT_DIALOG_STOP:
+                wxTrap();
+                break;
+            case GTK_ASSERT_DIALOG_CONTINUE:
+                // nothing to do
+                break;
+            case GTK_ASSERT_DIALOG_CONTINUE_SUPPRESSING:
+                // no more asserts
+                returnCode = true;
+                break;
+
+            default:
+                wxFAIL_MSG( wxT("unexpected return code from GtkAssertDialog") );
+        }
+
+        gtk_widget_destroy(dialog);
+        return returnCode;
     }
     }
+#endif // wxDEBUG_LEVEL
 
 
-    gtk_widget_destroy(dialog);
-    return returnCode;
-#else // !wxDEBUG_LEVEL
-    // this function is never called in this case
-    wxUnusedVar(msg);
-    return false;
-#endif // wxDEBUG_LEVEL/!wxDEBUG_LEVEL
+    return wxAppTraitsBase::ShowAssertDialog(msg);
 }
 
 wxString wxGUIAppTraits::GetDesktopEnvironment() const
 }
 
 wxString wxGUIAppTraits::GetDesktopEnvironment() const