summaryrefslogtreecommitdiffstats
path: root/sys/ximage
diff options
context:
space:
mode:
authorZaheer Abbas Merali <zaheerabbas@merali.org>2006-07-08 19:03:54 +0000
committerZaheer Abbas Merali <zaheerabbas@merali.org>2006-07-08 19:03:54 +0000
commite6c882b7679394bdccca0e82582a64335e80a92a (patch)
tree84a91169e802f741a43f8c5042777eefa0d99db0 /sys/ximage
parentcac797c2eb278032b3f58c373a7b75ee9835c1c5 (diff)
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 <zaheerabbas at merali dot org> * 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.
Diffstat (limited to 'sys/ximage')
-rw-r--r--sys/ximage/gstximagesrc.c19
-rw-r--r--sys/ximage/gstximagesrc.h1
2 files changed, 18 insertions, 2 deletions
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;