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

Reply via email to