2007-07-14 Wim Taymans <wim.taymans@gmail.com>
+ Patch by: Jorn Baayen <jorn at openedhand dot com>
+
+ * sys/ximage/ximagesink.c: (gst_ximagesink_handle_xevents),
+ (gst_ximagesink_set_property), (gst_ximagesink_get_property),
+ (gst_ximagesink_init), (gst_ximagesink_class_init):
+ * sys/ximage/ximagesink.h:
+ * sys/xvimage/xvimagesink.c: (gst_xvimagesink_handle_xevents),
+ (gst_xvimagesink_set_property), (gst_xvimagesink_get_property),
+ (gst_xvimagesink_init), (gst_xvimagesink_class_init):
+ * sys/xvimage/xvimagesink.h:
+ add 'handle-expose' property. Useful for video widgets which may want to
+ be in control of Expose behaviour. Fixes #380625
+
+2007-07-14 Wim Taymans <wim.taymans@gmail.com>
+
* gst-libs/gst/rtp/gstbasertppayload.c:
(gst_basertppayload_class_init), (gst_basertppayload_init),
(gst_basertppayload_event), (gst_basertppayload_push),
PROP_SYNCHRONOUS,
PROP_PIXEL_ASPECT_RATIO,
PROP_FORCE_ASPECT_RATIO,
- PROP_HANDLE_EVENTS
- /* FILL ME */
+ PROP_HANDLE_EVENTS,
+ PROP_HANDLE_EXPOSE
};
static GstVideoSinkClass *parent_class = NULL;
}
}
- if (exposed || configured) {
+ if (ximagesink->handle_expose && (exposed || configured)) {
g_mutex_unlock (ximagesink->x_lock);
g_mutex_unlock (ximagesink->flow_lock);
gst_ximagesink_set_event_handling (GST_X_OVERLAY (ximagesink),
g_value_get_boolean (value));
break;
+ case PROP_HANDLE_EXPOSE:
+ ximagesink->handle_expose = g_value_get_boolean (value);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
case PROP_HANDLE_EVENTS:
g_value_set_boolean (value, ximagesink->handle_events);
break;
+ case PROP_HANDLE_EXPOSE:
+ g_value_set_boolean (value, ximagesink->handle_expose);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
ximagesink->synchronous = FALSE;
ximagesink->keep_aspect = FALSE;
ximagesink->handle_events = TRUE;
+ ximagesink->handle_expose = TRUE;
}
static void
g_param_spec_boolean ("handle-events", "Handle XEvents",
"When enabled, XEvents will be selected and handled", TRUE,
G_PARAM_READWRITE));
+ g_object_class_install_property (gobject_class, PROP_HANDLE_EXPOSE,
+ g_param_spec_boolean ("handle-expose", "Handle expose", "When enabled, "
+ "the current frame will always be drawn in response to X Expose "
+ "events", TRUE, G_PARAM_READWRITE));
gstelement_class->change_state = gst_ximagesink_change_state;
gboolean synchronous;
gboolean keep_aspect;
gboolean handle_events;
+ gboolean handle_expose;
};
struct _GstXImageSinkClass {
ARG_FORCE_ASPECT_RATIO,
ARG_HANDLE_EVENTS,
ARG_DEVICE,
- ARG_DEVICE_NAME
- /* FILL ME */
+ ARG_DEVICE_NAME,
+ ARG_HANDLE_EXPOSE
};
static GstVideoSinkClass *parent_class = NULL;
}
}
- if (exposed || configured) {
+ if (xvimagesink->handle_expose && (exposed || configured)) {
g_mutex_unlock (xvimagesink->x_lock);
g_mutex_unlock (xvimagesink->flow_lock);
case ARG_DEVICE:
xvimagesink->adaptor_no = atoi (g_value_get_string (value));
break;
+ case ARG_HANDLE_EXPOSE:
+ xvimagesink->handle_expose = g_value_get_boolean (value);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
g_value_set_string (value, NULL);
}
break;
+ case ARG_HANDLE_EXPOSE:
+ g_value_set_boolean (value, xvimagesink->handle_expose);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
xvimagesink->keep_aspect = FALSE;
xvimagesink->handle_events = TRUE;
xvimagesink->par = NULL;
+ xvimagesink->handle_expose = TRUE;
}
static void
g_object_class_install_property (gobject_class, ARG_DEVICE_NAME,
g_param_spec_string ("device-name", "Adaptor name",
"The name of the video adaptor", NULL, G_PARAM_READABLE));
+ g_object_class_install_property (gobject_class, ARG_HANDLE_EXPOSE,
+ g_param_spec_boolean ("handle-expose", "Handle expose", "When enabled, "
+ "the current frame will always be drawn in response to X Expose "
+ "events", TRUE, G_PARAM_READWRITE));
gobject_class->finalize = gst_xvimagesink_finalize;
gboolean keep_aspect;
gboolean draw_border;
gboolean handle_events;
+ gboolean handle_expose;
gint brightness;
gint contrast;