From e6c882b7679394bdccca0e82582a64335e80a92a Mon Sep 17 00:00:00 2001 From: Zaheer Abbas Merali Date: Sat, 8 Jul 2006 19:03:54 +0000 Subject: sys/ximage/gstximagesrc.*: Add use_damage property to offer ability to choose whether to use Original commit message from CVS: 2006-07-08 Zaheer Abbas Merali * sys/ximage/gstximagesrc.c: (gst_ximage_src_ximage_get), (gst_ximage_src_set_property), (gst_ximage_src_get_property), (gst_ximage_src_class_init), (gst_ximage_src_init): * sys/ximage/gstximagesrc.h: Add use_damage property to offer ability to choose whether to use XDamage or not. --- sys/ximage/gstximagesrc.c | 19 +++++++++++++++++-- sys/ximage/gstximagesrc.h | 1 + 2 files changed, 18 insertions(+), 2 deletions(-) (limited to 'sys/ximage') diff --git a/sys/ximage/gstximagesrc.c b/sys/ximage/gstximagesrc.c index e8ac7293..f0376d5f 100644 --- a/sys/ximage/gstximagesrc.c +++ b/sys/ximage/gstximagesrc.c @@ -78,7 +78,8 @@ enum PROP_0, PROP_DISPLAY_NAME, PROP_SCREEN_NUM, - PROP_SHOW_POINTER + PROP_SHOW_POINTER, + PROP_USE_DAMAGE }; GST_BOILERPLATE (GstXImageSrc, gst_ximage_src, GstPushSrc, GST_TYPE_PUSH_SRC); @@ -383,7 +384,7 @@ gst_ximage_src_ximage_get (GstXImageSrc * ximagesrc) g_return_val_if_fail (GST_IS_XIMAGE_SRC (ximagesrc), NULL); #ifdef HAVE_XDAMAGE - if (ximagesrc->have_xdamage) { + if (ximagesrc->have_xdamage && ximagesrc->use_damage) { XEvent ev; GST_DEBUG_OBJECT (ximagesrc, "Retrieving screen using XDamage"); @@ -449,6 +450,10 @@ gst_ximage_src_ximage_get (GstXImageSrc * ximagesrc) #endif + } else if (ximagesrc->have_xdamage && ximagesrc->damage) { + /* Free up XDamage we allocated earlier when we did not know whether + * we wanted to use damage or not */ + XDamageDestroy (ximagesrc->xcontext->disp, ximagesrc->damage); } else { #endif @@ -622,6 +627,9 @@ gst_ximage_src_set_property (GObject * object, guint prop_id, case PROP_SHOW_POINTER: src->show_pointer = g_value_get_boolean (value); break; + case PROP_USE_DAMAGE: + src->use_damage = g_value_get_boolean (value); + break; default: break; } @@ -647,6 +655,8 @@ gst_ximage_src_get_property (GObject * object, guint prop_id, GValue * value, case PROP_SHOW_POINTER: g_value_set_boolean (value, src->show_pointer); break; + case PROP_USE_DAMAGE: + g_value_set_boolean (value, src->use_damage); default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -789,6 +799,10 @@ gst_ximage_src_class_init (GstXImageSrcClass * klass) g_param_spec_boolean ("show_pointer", "Show Mouse Pointer", "Show mouse pointer (if XFixes extension enabled)", TRUE, G_PARAM_READWRITE)); + g_object_class_install_property (gc, PROP_SHOW_POINTER, + g_param_spec_boolean ("use_damage", "Use XDamage", + "Use XDamage (if XDamage extension enabled)", TRUE, + G_PARAM_READWRITE)); parent_class = g_type_class_peek_parent (klass); @@ -810,6 +824,7 @@ gst_ximage_src_init (GstXImageSrc * ximagesrc, GstXImageSrcClass * klass) ximagesrc->pool_lock = g_mutex_new (); ximagesrc->x_lock = g_mutex_new (); ximagesrc->show_pointer = TRUE; + ximagesrc->use_damage = TRUE; } static gboolean diff --git a/sys/ximage/gstximagesrc.h b/sys/ximage/gstximagesrc.h index 94b44066..dead37d2 100644 --- a/sys/ximage/gstximagesrc.h +++ b/sys/ximage/gstximagesrc.h @@ -75,6 +75,7 @@ struct _GstXImageSrc gboolean have_xfixes; gboolean have_xdamage; gboolean show_pointer; + gboolean use_damage; #ifdef HAVE_XFIXES int fixes_event_base; XFixesCursorImage *cursor_image; -- cgit