2006-12-04 Emmanuele Bassi <ebassi@openedhand.com>
Avoid clutter segfaulting when used without invoking clutter_init(). This is needed when using api documentation tools and every other tool relying on the GObject introspection API (esp. on a headless box). see the note in clutter/clutter-feature.c:clutter_feature_init for a full explanation. * clutter/clutter-feature.c: Call clutter_feature_init() when needed by one of the accessors of the features structure. * clutter/clutter-main.c: * clutter/clutter-private.h: Remove clutter_feature_init() public declaration: the features support check is done the first time a feature is needed. * clutter/clutter-main.c: Do not ever access the clutter main context pointer directly; instead, obtain a pointer to it via clutter_context_get_default(), which will always return something valid.
This commit is contained in:
@@ -235,16 +235,18 @@ clutter_dispatch_x_event (XEvent *xevent,
|
||||
static void
|
||||
events_init()
|
||||
{
|
||||
ClutterMainContext *clutter_context;
|
||||
GMainContext *gmain_context;
|
||||
int connection_number;
|
||||
GSource *source;
|
||||
ClutterXEventSource *display_source;
|
||||
|
||||
clutter_context = clutter_context_get_default ();
|
||||
gmain_context = g_main_context_default ();
|
||||
|
||||
g_main_context_ref (gmain_context);
|
||||
|
||||
connection_number = ConnectionNumber (ClutterCntx->xdpy);
|
||||
connection_number = ConnectionNumber (clutter_context->xdpy);
|
||||
|
||||
source = g_source_new ((GSourceFuncs *)&x_event_funcs,
|
||||
sizeof (ClutterXEventSource));
|
||||
@@ -253,7 +255,7 @@ events_init()
|
||||
|
||||
display_source->event_poll_fd.fd = connection_number;
|
||||
display_source->event_poll_fd.events = G_IO_IN;
|
||||
display_source->display = ClutterCntx->xdpy;
|
||||
display_source->display = clutter_context->xdpy;
|
||||
|
||||
g_source_add_poll (source, &display_source->event_poll_fd);
|
||||
g_source_set_can_recurse (source, TRUE);
|
||||
@@ -444,7 +446,9 @@ clutter_threads_leave (void)
|
||||
Display*
|
||||
clutter_xdisplay (void)
|
||||
{
|
||||
return ClutterCntx->xdpy;
|
||||
ClutterMainContext *context = CLUTTER_CONTEXT ();
|
||||
|
||||
return context->xdpy;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -457,7 +461,9 @@ clutter_xdisplay (void)
|
||||
int
|
||||
clutter_xscreen (void)
|
||||
{
|
||||
return ClutterCntx->xscreen;
|
||||
ClutterMainContext *context = CLUTTER_CONTEXT ();
|
||||
|
||||
return context->xscreen;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -470,7 +476,9 @@ clutter_xscreen (void)
|
||||
Window
|
||||
clutter_root_xwindow (void)
|
||||
{
|
||||
return ClutterCntx->xwin_root;
|
||||
ClutterMainContext *context = CLUTTER_CONTEXT ();
|
||||
|
||||
return context->xwin_root;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -867,9 +875,6 @@ clutter_init_with_args (int *argc,
|
||||
return CLUTTER_INIT_ERROR_OPENGL;
|
||||
}
|
||||
|
||||
/* Check available features */
|
||||
clutter_feature_init ();
|
||||
|
||||
events_init ();
|
||||
|
||||
return CLUTTER_INIT_SUCCESS;
|
||||
@@ -927,9 +932,6 @@ clutter_init (int *argc,
|
||||
return CLUTTER_INIT_ERROR_OPENGL;
|
||||
}
|
||||
|
||||
/* Check available features */
|
||||
clutter_feature_init ();
|
||||
|
||||
events_init ();
|
||||
|
||||
return 1;
|
||||
|
Reference in New Issue
Block a user