2008-02-20 Tomas Frydrych <tf@openedhand.com>
* clutter/x11/clutter-x11.h: * clutter/x11/clutter-backend-x11.c: (clutter_x11_set_display): Function to set X display connection prior to calling clutter_init(); stripped loads of trailing space.
This commit is contained in:
parent
0864743fd1
commit
9aba9710c1
10
ChangeLog
10
ChangeLog
@ -1,4 +1,12 @@
|
|||||||
2008-02-20 Emmanuele Bassi <ebassi@openedhand.com>
|
2008-02-20 Tomas Frydrych <tf@openedhand.com>
|
||||||
|
|
||||||
|
* clutter/x11/clutter-x11.h:
|
||||||
|
* clutter/x11/clutter-backend-x11.c:
|
||||||
|
(clutter_x11_set_display):
|
||||||
|
Function to set X display connection prior to calling
|
||||||
|
clutter_init(); stripped loads of trailing space.
|
||||||
|
|
||||||
|
2008-02-20 Tomas Frydrych <tf@openedhand.com>
|
||||||
|
|
||||||
* clutter/clutter-marshal.list:
|
* clutter/clutter-marshal.list:
|
||||||
* clutter/glx/Makefile.am:
|
* clutter/glx/Makefile.am:
|
||||||
|
@ -115,9 +115,9 @@ clutter_redraw (void)
|
|||||||
{
|
{
|
||||||
ClutterMainContext *ctx;
|
ClutterMainContext *ctx;
|
||||||
ClutterActor *stage;
|
ClutterActor *stage;
|
||||||
static GTimer *timer = NULL;
|
static GTimer *timer = NULL;
|
||||||
static guint timer_n_frames = 0;
|
static guint timer_n_frames = 0;
|
||||||
|
|
||||||
ctx = clutter_context_get_default ();
|
ctx = clutter_context_get_default ();
|
||||||
|
|
||||||
stage = _clutter_backend_get_stage (ctx->backend);
|
stage = _clutter_backend_get_stage (ctx->backend);
|
||||||
@ -152,7 +152,7 @@ clutter_redraw (void)
|
|||||||
CLUTTER_UNSET_PRIVATE_FLAGS (stage, CLUTTER_ACTOR_SYNC_MATRICES);
|
CLUTTER_UNSET_PRIVATE_FLAGS (stage, CLUTTER_ACTOR_SYNC_MATRICES);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Call through to the actual backend to do the painting down from
|
/* Call through to the actual backend to do the painting down from
|
||||||
* the stage. It will likely need to swap buffers, vblank sync etc
|
* the stage. It will likely need to swap buffers, vblank sync etc
|
||||||
* which will be windowing system dependant.
|
* which will be windowing system dependant.
|
||||||
*/
|
*/
|
||||||
@ -239,7 +239,7 @@ _clutter_do_pick (ClutterStage *stage,
|
|||||||
/* Disable dithering (if any) when doing the painting in pick mode */
|
/* Disable dithering (if any) when doing the painting in pick mode */
|
||||||
glDisable (GL_DITHER);
|
glDisable (GL_DITHER);
|
||||||
|
|
||||||
/* Render the entire scence in pick mode - just single colored silhouette's
|
/* Render the entire scence in pick mode - just single colored silhouette's
|
||||||
* are drawn offscreen (as we never swap buffers)
|
* are drawn offscreen (as we never swap buffers)
|
||||||
*/
|
*/
|
||||||
context->pick_mode = mode;
|
context->pick_mode = mode;
|
||||||
@ -249,11 +249,11 @@ _clutter_do_pick (ClutterStage *stage,
|
|||||||
/* Calls should work under both GL and GLES, note GLES needs RGBA */
|
/* Calls should work under both GL and GLES, note GLES needs RGBA */
|
||||||
glGetIntegerv(GL_VIEWPORT, viewport);
|
glGetIntegerv(GL_VIEWPORT, viewport);
|
||||||
|
|
||||||
/* Below to be safe, particularly on GL ES. an EGL wait call or full
|
/* Below to be safe, particularly on GL ES. an EGL wait call or full
|
||||||
* could be nicer.
|
* could be nicer.
|
||||||
*/
|
*/
|
||||||
glFinish();
|
glFinish();
|
||||||
/* glEnable (GL_DITHER); we never enabled this originally, so its
|
/* glEnable (GL_DITHER); we never enabled this originally, so its
|
||||||
probably not safe to then enable it */
|
probably not safe to then enable it */
|
||||||
|
|
||||||
glReadPixels(x, viewport[3] - y, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, pixel);
|
glReadPixels(x, viewport[3] - y, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, pixel);
|
||||||
@ -480,7 +480,7 @@ clutter_threads_dispatch_free (gpointer data)
|
|||||||
* removed from the list of event sources and will not be called again.
|
* removed from the list of event sources and will not be called again.
|
||||||
*
|
*
|
||||||
* This variant of g_idle_add_full() calls @function with the Clutter lock
|
* This variant of g_idle_add_full() calls @function with the Clutter lock
|
||||||
* held. It can be thought of a MT-safe version for Clutter actors for the
|
* held. It can be thought of a MT-safe version for Clutter actors for the
|
||||||
* following use case, where you have to worry about idle_callback()
|
* following use case, where you have to worry about idle_callback()
|
||||||
* running in thread A and accessing @self after it has been finalized
|
* running in thread A and accessing @self after it has been finalized
|
||||||
* in thread B:
|
* in thread B:
|
||||||
@ -572,8 +572,8 @@ clutter_threads_add_idle (GSourceFunc func,
|
|||||||
* @notify: function to call when the timeout source is removed
|
* @notify: function to call when the timeout source is removed
|
||||||
*
|
*
|
||||||
* Sets a function to be called at regular intervals holding the Clutter lock,
|
* Sets a function to be called at regular intervals holding the Clutter lock,
|
||||||
* with the given priority. The function is called repeatedly until it
|
* with the given priority. The function is called repeatedly until it
|
||||||
* returns %FALSE, at which point the timeout is automatically destroyed
|
* returns %FALSE, at which point the timeout is automatically destroyed
|
||||||
* and the function will not be called again. The @notify function is
|
* and the function will not be called again. The @notify function is
|
||||||
* called when the timeout is destroyed. The first call to the
|
* called when the timeout is destroyed. The first call to the
|
||||||
* function will be at the end of the first @interval.
|
* function will be at the end of the first @interval.
|
||||||
@ -584,7 +584,7 @@ clutter_threads_add_idle (GSourceFunc func,
|
|||||||
* timeout is recalculated based on the current time and the given interval
|
* timeout is recalculated based on the current time and the given interval
|
||||||
* (it does not try to 'catch up' time lost in delays).
|
* (it does not try to 'catch up' time lost in delays).
|
||||||
*
|
*
|
||||||
* This variant of g_timeout_add_full() can be thought of a MT-safe version
|
* This variant of g_timeout_add_full() can be thought of a MT-safe version
|
||||||
* for Clutter actors. See also clutter_threads_add_idle_full().
|
* for Clutter actors. See also clutter_threads_add_idle_full().
|
||||||
*
|
*
|
||||||
* Return value: the ID (greater than 0) of the event source.
|
* Return value: the ID (greater than 0) of the event source.
|
||||||
@ -669,7 +669,7 @@ clutter_threads_leave (void)
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* clutter_get_debug_enabled:
|
* clutter_get_debug_enabled:
|
||||||
*
|
*
|
||||||
* Check if clutter has debugging turned on.
|
* Check if clutter has debugging turned on.
|
||||||
*
|
*
|
||||||
* Return value: TRUE if debugging is turned on, FALSE otherwise.
|
* Return value: TRUE if debugging is turned on, FALSE otherwise.
|
||||||
@ -872,7 +872,7 @@ post_parse_hook (GOptionContext *context,
|
|||||||
retval = TRUE;
|
retval = TRUE;
|
||||||
|
|
||||||
clutter_is_initialized = retval;
|
clutter_is_initialized = retval;
|
||||||
|
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -902,10 +902,10 @@ clutter_get_option_group (void)
|
|||||||
"Show Clutter Options",
|
"Show Clutter Options",
|
||||||
NULL,
|
NULL,
|
||||||
NULL);
|
NULL);
|
||||||
|
|
||||||
g_option_group_set_parse_hooks (group, pre_parse_hook, post_parse_hook);
|
g_option_group_set_parse_hooks (group, pre_parse_hook, post_parse_hook);
|
||||||
g_option_group_add_entries (group, clutter_args);
|
g_option_group_add_entries (group, clutter_args);
|
||||||
|
|
||||||
/* add backend-specific options */
|
/* add backend-specific options */
|
||||||
_clutter_backend_add_options (context->backend, group);
|
_clutter_backend_add_options (context->backend, group);
|
||||||
|
|
||||||
@ -964,7 +964,7 @@ clutter_init_with_args (int *argc,
|
|||||||
return CLUTTER_INIT_SUCCESS;
|
return CLUTTER_INIT_SUCCESS;
|
||||||
|
|
||||||
clutter_base_init ();
|
clutter_base_init ();
|
||||||
|
|
||||||
if (argc && *argc > 0 && *argv)
|
if (argc && *argc > 0 && *argv)
|
||||||
g_set_prgname ((*argv)[0]);
|
g_set_prgname ((*argv)[0]);
|
||||||
|
|
||||||
@ -1018,7 +1018,7 @@ clutter_parse_args (int *argc,
|
|||||||
|
|
||||||
option_context = g_option_context_new (NULL);
|
option_context = g_option_context_new (NULL);
|
||||||
g_option_context_set_ignore_unknown_options (option_context, TRUE);
|
g_option_context_set_ignore_unknown_options (option_context, TRUE);
|
||||||
g_option_context_set_help_enabled (option_context, FALSE);
|
g_option_context_set_help_enabled (option_context, FALSE);
|
||||||
|
|
||||||
/* Initiate any command line options from the backend */
|
/* Initiate any command line options from the backend */
|
||||||
|
|
||||||
@ -1060,7 +1060,7 @@ clutter_init (int *argc,
|
|||||||
return CLUTTER_INIT_SUCCESS;
|
return CLUTTER_INIT_SUCCESS;
|
||||||
|
|
||||||
clutter_base_init ();
|
clutter_base_init ();
|
||||||
|
|
||||||
if (argc && *argc > 0 && *argv)
|
if (argc && *argc > 0 && *argv)
|
||||||
g_set_prgname ((*argv)[0]);
|
g_set_prgname ((*argv)[0]);
|
||||||
|
|
||||||
@ -1075,7 +1075,7 @@ clutter_init (int *argc,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Note, creates backend if not already existing (though parse args will
|
/* Note, creates backend if not already existing (though parse args will
|
||||||
* have likely created it)
|
* have likely created it)
|
||||||
*/
|
*/
|
||||||
context = clutter_context_get_default ();
|
context = clutter_context_get_default ();
|
||||||
|
|
||||||
@ -1095,7 +1095,7 @@ clutter_init (int *argc,
|
|||||||
/* finally features - will call to backend and cogl */
|
/* finally features - will call to backend and cogl */
|
||||||
_clutter_feature_init ();
|
_clutter_feature_init ();
|
||||||
|
|
||||||
clutter_stage_set_title (CLUTTER_STAGE(clutter_stage_get_default()),
|
clutter_stage_set_title (CLUTTER_STAGE(clutter_stage_get_default()),
|
||||||
g_get_prgname());
|
g_get_prgname());
|
||||||
|
|
||||||
return CLUTTER_INIT_SUCCESS;
|
return CLUTTER_INIT_SUCCESS;
|
||||||
@ -1109,7 +1109,7 @@ _clutter_boolean_handled_accumulator (GSignalInvocationHint *ihint,
|
|||||||
{
|
{
|
||||||
gboolean continue_emission;
|
gboolean continue_emission;
|
||||||
gboolean signal_handled;
|
gboolean signal_handled;
|
||||||
|
|
||||||
signal_handled = g_value_get_boolean (handler_return);
|
signal_handled = g_value_get_boolean (handler_return);
|
||||||
g_value_set_boolean (return_accu, signal_handled);
|
g_value_set_boolean (return_accu, signal_handled);
|
||||||
continue_emission = !signal_handled;
|
continue_emission = !signal_handled;
|
||||||
@ -1143,7 +1143,7 @@ event_click_count_generate (ClutterEvent *event)
|
|||||||
* existing click count
|
* existing click count
|
||||||
*/
|
*/
|
||||||
if (event->button.time < previous_time + double_click_time &&
|
if (event->button.time < previous_time + double_click_time &&
|
||||||
(ABS (event->button.x - previous_x) <= double_click_distance) &&
|
(ABS (event->button.x - previous_x) <= double_click_distance) &&
|
||||||
(ABS (event->button.y - previous_y) <= double_click_distance)
|
(ABS (event->button.y - previous_y) <= double_click_distance)
|
||||||
&& event->button.button == previous_button_number)
|
&& event->button.button == previous_button_number)
|
||||||
{
|
{
|
||||||
@ -1154,7 +1154,7 @@ event_click_count_generate (ClutterEvent *event)
|
|||||||
click_count=1;
|
click_count=1;
|
||||||
previous_button_number = event->button.button;
|
previous_button_number = event->button.button;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* store time and position for this click for comparison with next event */
|
/* store time and position for this click for comparison with next event */
|
||||||
previous_time = event->button.time;
|
previous_time = event->button.time;
|
||||||
previous_x = event->button.x;
|
previous_x = event->button.x;
|
||||||
@ -1170,7 +1170,7 @@ event_click_count_generate (ClutterEvent *event)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static inline void
|
static inline void
|
||||||
emit_event (ClutterEvent *event,
|
emit_event (ClutterEvent *event,
|
||||||
gboolean is_key_event)
|
gboolean is_key_event)
|
||||||
{
|
{
|
||||||
@ -1197,7 +1197,7 @@ emit_event (ClutterEvent *event,
|
|||||||
while (actor && n_tree_events < MAX_EVENT_DEPTH)
|
while (actor && n_tree_events < MAX_EVENT_DEPTH)
|
||||||
{
|
{
|
||||||
ClutterActor *parent;
|
ClutterActor *parent;
|
||||||
|
|
||||||
parent = clutter_actor_get_parent (actor);
|
parent = clutter_actor_get_parent (actor);
|
||||||
|
|
||||||
if (clutter_actor_get_reactive (actor) ||
|
if (clutter_actor_get_reactive (actor) ||
|
||||||
@ -1230,7 +1230,7 @@ done:
|
|||||||
#undef MAX_EVENT_DEPTH
|
#undef MAX_EVENT_DEPTH
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void
|
static inline void
|
||||||
emit_pointer_event (ClutterEvent *event)
|
emit_pointer_event (ClutterEvent *event)
|
||||||
{
|
{
|
||||||
/* Using the global variable directly, since it has to be initialized
|
/* Using the global variable directly, since it has to be initialized
|
||||||
@ -1245,7 +1245,7 @@ emit_pointer_event (ClutterEvent *event)
|
|||||||
emit_event (event, FALSE);
|
emit_event (event, FALSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void
|
static inline void
|
||||||
emit_keyboard_event (ClutterEvent *event)
|
emit_keyboard_event (ClutterEvent *event)
|
||||||
{
|
{
|
||||||
ClutterMainContext *context = ClutterCntx;
|
ClutterMainContext *context = ClutterCntx;
|
||||||
@ -1280,20 +1280,20 @@ generate_enter_leave_events (ClutterEvent *event)
|
|||||||
{
|
{
|
||||||
cev.crossing.type = CLUTTER_LEAVE;
|
cev.crossing.type = CLUTTER_LEAVE;
|
||||||
cev.crossing.time = event->any.time;
|
cev.crossing.time = event->any.time;
|
||||||
cev.crossing.flags = 0;
|
cev.crossing.flags = 0;
|
||||||
cev.crossing.x = event->motion.x;
|
cev.crossing.x = event->motion.x;
|
||||||
cev.crossing.y = event->motion.y;
|
cev.crossing.y = event->motion.y;
|
||||||
cev.crossing.source = context->motion_last_actor;
|
cev.crossing.source = context->motion_last_actor;
|
||||||
/* unref in free */
|
/* unref in free */
|
||||||
cev.crossing.related = motion_current_actor;
|
cev.crossing.related = motion_current_actor;
|
||||||
|
|
||||||
g_queue_push_head (context->events_queue,
|
g_queue_push_head (context->events_queue,
|
||||||
clutter_event_copy (&cev));
|
clutter_event_copy (&cev));
|
||||||
}
|
}
|
||||||
|
|
||||||
cev.crossing.type = CLUTTER_ENTER;
|
cev.crossing.type = CLUTTER_ENTER;
|
||||||
cev.crossing.time = event->any.time;
|
cev.crossing.time = event->any.time;
|
||||||
cev.crossing.flags = 0;
|
cev.crossing.flags = 0;
|
||||||
cev.crossing.x = event->motion.x;
|
cev.crossing.x = event->motion.x;
|
||||||
cev.crossing.y = event->motion.y;
|
cev.crossing.y = event->motion.y;
|
||||||
cev.crossing.source = motion_current_actor;
|
cev.crossing.source = motion_current_actor;
|
||||||
@ -1308,7 +1308,7 @@ generate_enter_leave_events (ClutterEvent *event)
|
|||||||
cev.crossing.related = NULL;
|
cev.crossing.related = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
g_queue_push_head (context->events_queue,
|
g_queue_push_head (context->events_queue,
|
||||||
clutter_event_copy (&cev));
|
clutter_event_copy (&cev));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1332,7 +1332,7 @@ generate_enter_leave_events (ClutterEvent *event)
|
|||||||
context->motion_last_actor = motion_current_actor;
|
context->motion_last_actor = motion_current_actor;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* clutter_do_event
|
* clutter_do_event
|
||||||
* @event: a #ClutterEvent.
|
* @event: a #ClutterEvent.
|
||||||
*
|
*
|
||||||
@ -1343,9 +1343,9 @@ generate_enter_leave_events (ClutterEvent *event)
|
|||||||
void
|
void
|
||||||
clutter_do_event (ClutterEvent *event)
|
clutter_do_event (ClutterEvent *event)
|
||||||
{
|
{
|
||||||
/* FIXME: This should probably be clutter_cook_event() - it would
|
/* FIXME: This should probably be clutter_cook_event() - it would
|
||||||
* take a raw event from the backend and 'cook' it so its more tasty.
|
* take a raw event from the backend and 'cook' it so its more tasty.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
ClutterMainContext *context;
|
ClutterMainContext *context;
|
||||||
ClutterBackend *backend;
|
ClutterBackend *backend;
|
||||||
@ -1481,15 +1481,15 @@ clutter_do_event (ClutterEvent *event)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Map the event to a reactive actor */
|
/* Map the event to a reactive actor */
|
||||||
actor = _clutter_do_pick (CLUTTER_STAGE (stage),
|
actor = _clutter_do_pick (CLUTTER_STAGE (stage),
|
||||||
x, y,
|
x, y,
|
||||||
CLUTTER_PICK_REACTIVE);
|
CLUTTER_PICK_REACTIVE);
|
||||||
|
|
||||||
event->any.source = actor;
|
event->any.source = actor;
|
||||||
if (!actor)
|
if (!actor)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* use the source already set in the synthetic event */
|
/* use the source already set in the synthetic event */
|
||||||
actor = event->any.source;
|
actor = event->any.source;
|
||||||
@ -1501,7 +1501,7 @@ clutter_do_event (ClutterEvent *event)
|
|||||||
* (signalling just the stage). Should be big help for gles.
|
* (signalling just the stage). Should be big help for gles.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
CLUTTER_NOTE (EVENT, "Reactive event received at %i, %i - actor: %p",
|
CLUTTER_NOTE (EVENT, "Reactive event received at %i, %i - actor: %p",
|
||||||
x, y, actor);
|
x, y, actor);
|
||||||
|
|
||||||
if (event->type == CLUTTER_MOTION)
|
if (event->type == CLUTTER_MOTION)
|
||||||
@ -1529,7 +1529,7 @@ clutter_do_event (ClutterEvent *event)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* clutter_get_actor_by_gid
|
* clutter_get_actor_by_gid
|
||||||
* @id: a #ClutterActor ID.
|
* @id: a #ClutterActor ID.
|
||||||
*
|
*
|
||||||
@ -1591,7 +1591,7 @@ clutter_get_default_frame_rate (void)
|
|||||||
ClutterMainContext *context;
|
ClutterMainContext *context;
|
||||||
|
|
||||||
context = clutter_context_get_default ();
|
context = clutter_context_get_default ();
|
||||||
|
|
||||||
return context->frame_rate;
|
return context->frame_rate;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1645,7 +1645,7 @@ clutter_grab_pointer (ClutterActor *actor)
|
|||||||
ClutterMainContext *context;
|
ClutterMainContext *context;
|
||||||
|
|
||||||
g_return_if_fail (actor == NULL || CLUTTER_IS_ACTOR (actor));
|
g_return_if_fail (actor == NULL || CLUTTER_IS_ACTOR (actor));
|
||||||
|
|
||||||
context = clutter_context_get_default ();
|
context = clutter_context_get_default ();
|
||||||
|
|
||||||
if (context->pointer_grab_actor == actor)
|
if (context->pointer_grab_actor == actor)
|
||||||
@ -1730,7 +1730,7 @@ clutter_grab_keyboard (ClutterActor *actor)
|
|||||||
ClutterMainContext *context;
|
ClutterMainContext *context;
|
||||||
|
|
||||||
g_return_if_fail (actor == NULL || CLUTTER_IS_ACTOR (actor));
|
g_return_if_fail (actor == NULL || CLUTTER_IS_ACTOR (actor));
|
||||||
|
|
||||||
context = clutter_context_get_default ();
|
context = clutter_context_get_default ();
|
||||||
|
|
||||||
if (context->keyboard_grab_actor == actor)
|
if (context->keyboard_grab_actor == actor)
|
||||||
@ -1787,7 +1787,7 @@ clutter_get_keyboard_grab (void)
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* clutter_get_motion_events_frequency:
|
* clutter_get_motion_events_frequency:
|
||||||
*
|
*
|
||||||
* Retrieves the number of motion events per second that are delivered
|
* Retrieves the number of motion events per second that are delivered
|
||||||
* to the stage.
|
* to the stage.
|
||||||
*
|
*
|
||||||
@ -1805,7 +1805,7 @@ clutter_get_motion_events_frequency (void)
|
|||||||
if (G_LIKELY (context->motion_frequency == 0))
|
if (G_LIKELY (context->motion_frequency == 0))
|
||||||
{
|
{
|
||||||
guint frequency;
|
guint frequency;
|
||||||
|
|
||||||
frequency = clutter_default_fps / 4;
|
frequency = clutter_default_fps / 4;
|
||||||
frequency = CLAMP (frequency, 20, 45);
|
frequency = CLAMP (frequency, 20, 45);
|
||||||
|
|
||||||
|
@ -103,19 +103,27 @@ clutter_backend_x11_post_parse (ClutterBackend *backend,
|
|||||||
{
|
{
|
||||||
ClutterBackendX11 *backend_x11 = CLUTTER_BACKEND_X11 (backend);
|
ClutterBackendX11 *backend_x11 = CLUTTER_BACKEND_X11 (backend);
|
||||||
|
|
||||||
if (clutter_display_name)
|
/*
|
||||||
|
* Only open connection if not already set by prior call to
|
||||||
|
* clutter_x11_set_display()
|
||||||
|
*/
|
||||||
|
if (!backend_x11->xdpy)
|
||||||
{
|
{
|
||||||
CLUTTER_NOTE (BACKEND, "XOpenDisplay on `%s'", clutter_display_name);
|
if (clutter_display_name)
|
||||||
backend_x11->xdpy = XOpenDisplay (clutter_display_name);
|
{
|
||||||
}
|
CLUTTER_NOTE (BACKEND, "XOpenDisplay on `%s'",
|
||||||
else
|
clutter_display_name);
|
||||||
{
|
backend_x11->xdpy = XOpenDisplay (clutter_display_name);
|
||||||
g_set_error (error, CLUTTER_INIT_ERROR,
|
}
|
||||||
CLUTTER_INIT_ERROR_BACKEND,
|
else
|
||||||
"Unable to open display. You have to set the DISPLAY "
|
{
|
||||||
"environment variable, or use the --display command "
|
g_set_error (error, CLUTTER_INIT_ERROR,
|
||||||
"line argument");
|
CLUTTER_INIT_ERROR_BACKEND,
|
||||||
return FALSE;
|
"Unable to open display. You have to set the DISPLAY "
|
||||||
|
"environment variable, or use the --display command "
|
||||||
|
"line argument");
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (backend_x11->xdpy)
|
if (backend_x11->xdpy)
|
||||||
@ -130,12 +138,12 @@ clutter_backend_x11_post_parse (ClutterBackend *backend,
|
|||||||
else
|
else
|
||||||
backend_x11->xscreen = ScreenOfDisplay (backend_x11->xdpy,
|
backend_x11->xscreen = ScreenOfDisplay (backend_x11->xdpy,
|
||||||
clutter_screen);
|
clutter_screen);
|
||||||
|
|
||||||
backend_x11->xscreen_num = XScreenNumberOfScreen (backend_x11->xscreen);
|
backend_x11->xscreen_num = XScreenNumberOfScreen (backend_x11->xscreen);
|
||||||
|
|
||||||
backend_x11->xwin_root = RootWindow (backend_x11->xdpy,
|
backend_x11->xwin_root = RootWindow (backend_x11->xdpy,
|
||||||
backend_x11->xscreen_num);
|
backend_x11->xscreen_num);
|
||||||
|
|
||||||
backend_x11->display_name = g_strdup (clutter_display_name);
|
backend_x11->display_name = g_strdup (clutter_display_name);
|
||||||
|
|
||||||
dpi = (((double) DisplayHeight (backend_x11->xdpy, backend_x11->xscreen_num) * 25.4)
|
dpi = (((double) DisplayHeight (backend_x11->xdpy, backend_x11->xscreen_num) * 25.4)
|
||||||
@ -163,7 +171,7 @@ clutter_backend_x11_post_parse (ClutterBackend *backend,
|
|||||||
}
|
}
|
||||||
|
|
||||||
g_free (clutter_display_name);
|
g_free (clutter_display_name);
|
||||||
|
|
||||||
CLUTTER_NOTE (BACKEND,
|
CLUTTER_NOTE (BACKEND,
|
||||||
"X Display `%s'[%p] opened (screen:%d, root:%u, dpi:%f)",
|
"X Display `%s'[%p] opened (screen:%d, root:%u, dpi:%f)",
|
||||||
backend_x11->display_name,
|
backend_x11->display_name,
|
||||||
@ -244,7 +252,7 @@ clutter_backend_x11_dispose (GObject *gobject)
|
|||||||
if (backend_x11->stage)
|
if (backend_x11->stage)
|
||||||
{
|
{
|
||||||
CLUTTER_NOTE (BACKEND, "Disposing the main stage");
|
CLUTTER_NOTE (BACKEND, "Disposing the main stage");
|
||||||
|
|
||||||
/* we unset the private flag on the stage so we can safely
|
/* we unset the private flag on the stage so we can safely
|
||||||
* destroy it without a warning from clutter_actor_destroy()
|
* destroy it without a warning from clutter_actor_destroy()
|
||||||
*/
|
*/
|
||||||
@ -253,7 +261,7 @@ clutter_backend_x11_dispose (GObject *gobject)
|
|||||||
clutter_actor_destroy (backend_x11->stage);
|
clutter_actor_destroy (backend_x11->stage);
|
||||||
backend_x11->stage = NULL;
|
backend_x11->stage = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
CLUTTER_NOTE (BACKEND, "Removing the event source");
|
CLUTTER_NOTE (BACKEND, "Removing the event source");
|
||||||
_clutter_backend_x11_events_uninit (CLUTTER_BACKEND (backend_x11));
|
_clutter_backend_x11_events_uninit (CLUTTER_BACKEND (backend_x11));
|
||||||
|
|
||||||
@ -280,7 +288,7 @@ clutter_backend_x11_constructor (GType gtype,
|
|||||||
|
|
||||||
g_warning ("Attempting to create a new backend object. This should "
|
g_warning ("Attempting to create a new backend object. This should "
|
||||||
"never happen, so we return the singleton instance.");
|
"never happen, so we return the singleton instance.");
|
||||||
|
|
||||||
return g_object_ref (backend_singleton);
|
return g_object_ref (backend_singleton);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -366,7 +374,7 @@ clutter_x11_untrap_x_errors (void)
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* clutter_x11_get_default_display:
|
* clutter_x11_get_default_display:
|
||||||
*
|
*
|
||||||
* Retrieves the pointer to the default display.
|
* Retrieves the pointer to the default display.
|
||||||
*
|
*
|
||||||
* Return value: the default display
|
* Return value: the default display
|
||||||
@ -385,9 +393,47 @@ clutter_x11_get_default_display (void)
|
|||||||
return backend_singleton->xdpy;
|
return backend_singleton->xdpy;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* clutter_x11_set_display:
|
||||||
|
* @xdpy: pointer to a X display connection.
|
||||||
|
* Sets the display connection clutter should use; must be called
|
||||||
|
* before clutter_init().
|
||||||
|
*
|
||||||
|
* Since: 0.8
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
clutter_x11_set_display (Display *xdpy)
|
||||||
|
{
|
||||||
|
if (!xdpy)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (!backend_singleton)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* This creates the singleton objects
|
||||||
|
*/
|
||||||
|
clutter_context_get_default ();
|
||||||
|
|
||||||
|
if (!backend_singleton)
|
||||||
|
{
|
||||||
|
g_critical ("X11 backend could not be initialised.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (backend_singleton->xdpy)
|
||||||
|
{
|
||||||
|
g_critical ("Display connection already exists. You can only call "
|
||||||
|
"clutter_x11_set_display() once before clutter_init()\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
backend_singleton->xdpy = xdpy;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* clutter_x11_get_default_screen:
|
* clutter_x11_get_default_screen:
|
||||||
*
|
*
|
||||||
* Gets the number of the default X Screen object.
|
* Gets the number of the default X Screen object.
|
||||||
*
|
*
|
||||||
* Return value: the number of the default screen
|
* Return value: the number of the default screen
|
||||||
@ -408,7 +454,7 @@ clutter_x11_get_default_screen (void)
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* clutter_x11_get_root_window:
|
* clutter_x11_get_root_window:
|
||||||
*
|
*
|
||||||
* Retrieves the root window.
|
* Retrieves the root window.
|
||||||
*
|
*
|
||||||
* Return value: the id of the root window
|
* Return value: the id of the root window
|
||||||
|
@ -85,6 +85,7 @@ gint clutter_x11_untrap_x_errors (void);
|
|||||||
Display *clutter_x11_get_default_display (void);
|
Display *clutter_x11_get_default_display (void);
|
||||||
int clutter_x11_get_default_screen (void);
|
int clutter_x11_get_default_screen (void);
|
||||||
Window clutter_x11_get_root_window (void);
|
Window clutter_x11_get_root_window (void);
|
||||||
|
void clutter_x11_set_display (Display * xdpy);
|
||||||
|
|
||||||
Window clutter_x11_get_stage_window (ClutterStage *stage);
|
Window clutter_x11_get_stage_window (ClutterStage *stage);
|
||||||
XVisualInfo *clutter_x11_get_stage_visual (ClutterStage *stage);
|
XVisualInfo *clutter_x11_get_stage_visual (ClutterStage *stage);
|
||||||
|
Loading…
Reference in New Issue
Block a user