Answering to my self. For now I don't run gtk+ tests in a forked environment. There seems to be some curruption/problem with the gdk_thread handing in this case.
Stefan On 10:05:38 pm 03/08/2006 Stefan Kost <[EMAIL PROTECTED]> wrote: > hi, > > for unit-tests I open a second display on a Xvfb server which I start > before. This elaready works nicely. Now I also take screenshots from > the test-runs, for the manuals. This combined with altering the > envoronment (LC_ALL='en fr de ...') creates me localized screenshots. > So far so good. The issue is that gtk+ uses the default theme on the > new display. While the API docs are very sparse about how the theme > stuff works, even reading the sources did not really help. > > Below is the code I use so far. As soon as I call > gtk_settings_get_for_screen(default_screen); I get stuff like > > The program 'check_buzzard' received an X Window System error. > This probably reflects a bug in the program. > The error was 'BadRequest (invalid request code or no such > operation)'. (Details: serial 96 error_code 1 request_code 0 > minor_code 0) (Note to programmers: normally, X errors are reported > asynchronously; that is, you will receive the error a while after > causing it. To debug your program, run it with the --sync command > line option to change this behavior. You can then get a meaningful > backtrace from your debugger if you break on the gdk_x_error() > function.) > > Each test itself gets run in a fork(). If I add gdk_threads_leave(); > ... gdk_threads_enter(); around if(gtk_settings_get_for_screen()) ... > the application blocks :( Any idea? > > Stefan > > > if((display_manager = gdk_display_manager_get())) { > GdkScreen *default_screen; > GtkSettings *default_settings; > gchar *theme_name; > > default_display = > gdk_display_manager_get_default_display(display_manager); > if((default_screen = gdk_display_get_default_screen(default_display) > )) { > if((default_settings = gtk_settings_get_for_screen(default_screen) > )) { > g_object_get(default_settings,"gtk-theme-name",&theme_name,NULL) > ; > GST_INFO("current theme is \"%s\"",theme_name); > //g_object_unref(default_settings); > } > else GST_WARNING("can't get default_settings"); > //g_object_unref(default_screen); > } > else GST_WARNING("can't get default_screen"); > > if((test_display = gdk_display_open(display_name))) { > GdkScreen *test_screen; > GtkSettings *test_settings; > > if((test_screen = gdk_display_get_default_screen(test_display))) { > if((test_settings = gtk_settings_get_for_screen(test_screen))) { > g_object_set(test_settings,"gtk-theme-name",theme_name,NULL); > gtk_rc_reparse_all_for_settings(test_settings,TRUE); > GST_INFO("theme switched "); > //g_object_unref(test_settings); > } > else GST_WARNING("can't get test_settings on display: > \"%s\"",display_name); > //g_object_unref(test_screen); > } > else GST_WARNING("can't get test_screen on display: > \"%s\"",display_name); > > gdk_display_manager_set_default_display(display_manager,test_displ > ay); > GST_INFO("display %p,\"%s\" is > active",test_display,gdk_display_get_name(test_display)); > } > else { > GST_WARNING("failed to open display: \"%s\"",display_name); > } > g_free(theme_name); > } > else { > GST_WARNING("can't get display-manager"); > } > > _______________________________________________ > gtk-app-devel-list mailing list > gtk-app-devel-list@gnome.org > http://mail.gnome.org/mailman/listinfo/gtk-app-devel-list _______________________________________________ gtk-app-devel-list mailing list gtk-app-devel-list@gnome.org http://mail.gnome.org/mailman/listinfo/gtk-app-devel-list