changeset 156:3948d75b8370

Own XError handler that does a segfault for backtrace
author Frank Benoit <benoit@tionex.de>
date Sat, 09 Feb 2008 21:22:22 +0100
parents e4c3c05ade69
children 00cab3126f7f
files dwt/widgets/Display.d
diffstat 1 files changed, 14 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/dwt/widgets/Display.d	Sat Feb 09 18:49:26 2008 +0100
+++ b/dwt/widgets/Display.d	Sat Feb 09 21:22:22 2008 +0100
@@ -887,17 +887,29 @@
     if (Default is null) Default = this;
 }
 
+private static extern(C) int XErrorHandler( void*, XErrorEvent* ){
+    Stdout.formatln ("*** XError" );
+    byte* p;
+    *p = 3;
+    return 0;
+}
+
 synchronized void createDisplay (DeviceData data) {
     /* Required for g_main_context_wakeup */
     if (!OS.g_thread_supported ()) {
         OS.g_thread_init (null);
     }
     OS.gtk_set_locale();
-    int cnt = 0;
-    if (!OS.gtk_init_check (&cnt, null)) {
+    int cnt = 2;
+    char*[] args = [ "name".ptr, "--sync".ptr, null ];
+    char** a = args.ptr;
+    if (!OS.gtk_init_check (&cnt, &a )) {
         DWT.error (DWT.ERROR_NO_HANDLES, null, " [gtk_init_check() failed]");
     }
+    assert( cnt is 1 );
     if (OS.GDK_WINDOWING_X11 ()) xDisplay = cast(void*) OS.GDK_DISPLAY ();
+
+    OS.XSetErrorHandler( &Display.XErrorHandler );
     char* ptr = OS.gtk_check_version (MAJOR, MINOR, MICRO);
     if (ptr !is null) {
         char [] buffer = fromUtf8z(ptr);