43
43
#include "brasero-player-bacon.h"
44
44
#include "brasero-setting.h"
46
static void brasero_player_bacon_class_init(BraseroPlayerBaconClass *klass);
47
static void brasero_player_bacon_init(BraseroPlayerBacon *sp);
48
static void brasero_player_bacon_finalize(GObject *object);
49
static void brasero_player_bacon_destroy (GtkObject *object);
51
static void brasero_player_bacon_set_property (GObject *obj,
55
static void brasero_player_bacon_get_property (GObject *obj,
60
static void brasero_player_bacon_realize (GtkWidget *widget);
61
static void brasero_player_bacon_unrealize (GtkWidget *widget);
62
static void brasero_player_bacon_map (GtkWidget *widget);
63
static void brasero_player_bacon_unmap (GtkWidget *widget);
65
static gboolean brasero_player_bacon_expose (GtkWidget *widget,
66
GdkEventExpose *event);
67
static void brasero_player_bacon_size_request (GtkWidget *widget,
68
GtkRequisition *requisition);
69
static void brasero_player_bacon_size_allocate (GtkWidget *widget,
70
GtkAllocation *allocation);
72
static gboolean brasero_player_bacon_bus_messages (GstBus *bus,
74
BraseroPlayerBacon *bacon);
76
47
struct BraseroPlayerBaconPrivate {
80
51
GstXOverlay *xoverlay;
95
67
} BraseroPlayerBaconSignalType;
96
69
static guint brasero_player_bacon_signals [LAST_SIGNAL] = { 0 };
98
#define GCONF_PLAYER_VOLUME "/apps/brasero/display/volume"
100
static GObjectClass *parent_class = NULL;
103
brasero_player_bacon_get_type (void)
105
static GType type = 0;
108
static const GTypeInfo our_info = {
109
sizeof (BraseroPlayerBaconClass),
112
(GClassInitFunc)brasero_player_bacon_class_init,
115
sizeof (BraseroPlayerBacon),
117
(GInstanceInitFunc)brasero_player_bacon_init,
120
type = g_type_register_static (GTK_TYPE_WIDGET,
121
"BraseroPlayerBacon",
130
brasero_player_bacon_class_init (BraseroPlayerBaconClass *klass)
132
GObjectClass *object_class = G_OBJECT_CLASS(klass);
133
GtkObjectClass *gtk_object_class = GTK_OBJECT_CLASS (klass);
134
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
136
parent_class = g_type_class_peek_parent(klass);
138
object_class->finalize = brasero_player_bacon_finalize;
139
object_class->set_property = brasero_player_bacon_set_property;
140
object_class->get_property = brasero_player_bacon_get_property;
141
gtk_object_class->destroy = brasero_player_bacon_destroy;
143
widget_class->expose_event = brasero_player_bacon_expose;
144
widget_class->map = brasero_player_bacon_map;
145
widget_class->unmap = brasero_player_bacon_unmap;
146
widget_class->realize = brasero_player_bacon_realize;
147
widget_class->unrealize = brasero_player_bacon_unrealize;
148
widget_class->size_request = brasero_player_bacon_size_request;
149
widget_class->size_allocate = brasero_player_bacon_size_allocate;
151
brasero_player_bacon_signals [STATE_CHANGED_SIGNAL] =
152
g_signal_new ("state-change",
153
G_TYPE_FROM_CLASS (klass),
155
G_STRUCT_OFFSET (BraseroPlayerBaconClass, state_changed),
157
g_cclosure_marshal_VOID__INT,
158
G_TYPE_NONE, 1, G_TYPE_INT);
160
brasero_player_bacon_signals [EOF_SIGNAL] =
162
G_TYPE_FROM_CLASS (klass),
164
G_STRUCT_OFFSET (BraseroPlayerBaconClass, eof),
166
g_cclosure_marshal_VOID__VOID,
169
g_object_class_install_property (object_class,
171
g_param_spec_string ("uri",
172
"The uri of the media",
173
"The uri of the media",
71
G_DEFINE_TYPE (BraseroPlayerBacon, brasero_player_bacon, GTK_TYPE_WIDGET)
179
74
brasero_player_bacon_set_property (GObject *obj,
220
115
brasero_player_bacon_realize (GtkWidget *widget)
118
gint attributes_mask;
222
119
GtkAllocation allocation;
224
120
GdkWindowAttr attributes;
225
121
BraseroPlayerBacon *bacon;
226
gint attributes_mask;
228
123
bacon = BRASERO_PLAYER_BACON (widget);
230
125
attributes.window_type = GDK_WINDOW_CHILD;
231
127
gtk_widget_get_allocation (widget, &allocation);
232
attributes.x = allocation.x;
233
attributes.y = allocation.y;
234
130
attributes.width = allocation.width;
235
131
attributes.height = allocation.height;
236
132
attributes.wclass = GDK_INPUT_OUTPUT;
237
133
attributes.visual = gtk_widget_get_visual (widget);
238
134
attributes.colormap = gtk_widget_get_colormap (widget);
239
135
attributes.event_mask = gtk_widget_get_events (widget);
240
attributes.event_mask |= GDK_EXPOSURE_MASK;
136
attributes.event_mask |= GDK_EXPOSURE_MASK|GDK_BUTTON_PRESS_MASK;
241
137
attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_COLORMAP;
243
139
gtk_widget_set_window (widget, gdk_window_new (gtk_widget_get_parent_window (widget),
245
141
attributes_mask));
246
142
window = gtk_widget_get_window (widget);
247
143
gdk_window_set_user_data (window, widget);
144
gdk_window_show (gtk_widget_get_window (widget));
249
145
gtk_widget_set_style (widget, gtk_style_attach (gtk_widget_get_style (widget), window));
250
146
//gtk_style_set_background (widget->style, widget->window, GTK_STATE_NORMAL);
252
148
GTK_WIDGET_SET_FLAGS (widget, GTK_REALIZED);
256
brasero_player_bacon_unrealize (GtkWidget *widget)
258
BraseroPlayerBacon *bacon;
260
bacon = BRASERO_PLAYER_BACON (widget);
262
if (GTK_WIDGET_CLASS (parent_class)->unrealize)
263
GTK_WIDGET_CLASS (parent_class)->unrealize (widget);
267
brasero_player_bacon_map (GtkWidget *widget)
269
g_return_if_fail (widget != NULL);
270
gdk_window_show (gtk_widget_get_window (widget));
272
GTK_WIDGET_SET_FLAGS (widget, GTK_MAPPED);
276
brasero_player_bacon_unmap (GtkWidget *widget)
278
g_return_if_fail (widget != NULL);
279
gdk_window_hide (gtk_widget_get_window (widget));
281
GTK_WIDGET_UNSET_FLAGS (widget, GTK_MAPPED);
285
152
brasero_player_bacon_expose (GtkWidget *widget, GdkEventExpose *event)
287
154
BraseroPlayerBacon *bacon;
290
157
if (event && event->count > 0)
293
160
g_return_val_if_fail (widget != NULL, FALSE);
294
161
bacon = BRASERO_PLAYER_BACON (widget);
163
window = gtk_widget_get_window (widget);
165
bacon->priv->xid = gdk_x11_drawable_get_xid (GDK_DRAWABLE (window));
296
167
if (bacon->priv->xoverlay
297
168
&& GST_IS_X_OVERLAY (bacon->priv->xoverlay)
298
169
&& bacon->priv->state >= GST_STATE_PAUSED) {
299
170
gst_x_overlay_expose (bacon->priv->xoverlay);
301
else if ((window = gtk_widget_get_window (widget)))
302
173
gdk_window_clear (window);
356
227
(gint) screen_height);
357
228
gtk_widget_set_allocation (widget, allocation);
359
else if (GTK_WIDGET_CLASS (parent_class)->size_allocate)
360
GTK_WIDGET_CLASS (parent_class)->size_allocate (widget, allocation);
364
brasero_player_bacon_destroy (GtkObject *obj)
366
BraseroPlayerBacon *cobj;
368
cobj = BRASERO_PLAYER_BACON (obj);
371
if (cobj->priv->pipe) {
374
g_object_get (cobj->priv->pipe,
377
brasero_setting_set_value (brasero_setting_get_default (),
378
BRASERO_SETTING_PLAYER_VOLUME,
379
GINT_TO_POINTER ((gint)(volume * 100)));
382
if (cobj->priv->xoverlay
383
&& GST_IS_X_OVERLAY (cobj->priv->xoverlay)) {
384
cobj->priv->xoverlay = NULL;
387
if (cobj->priv->pipe) {
388
gst_element_set_state (cobj->priv->pipe, GST_STATE_NULL);
389
gst_object_unref (GST_OBJECT (cobj->priv->pipe));
390
cobj->priv->pipe = NULL;
393
if (cobj->priv->uri) {
394
g_free (cobj->priv->uri);
395
cobj->priv->uri = NULL;
398
if (GTK_OBJECT_CLASS (parent_class)->destroy)
399
GTK_OBJECT_CLASS (parent_class)->destroy (obj);
403
brasero_player_bacon_finalize (GObject *object)
405
BraseroPlayerBacon *cobj;
407
cobj = BRASERO_PLAYER_BACON (object);
410
G_OBJECT_CLASS (parent_class)->finalize (object);
414
brasero_player_bacon_new (void)
416
BraseroPlayerBacon *obj;
418
obj = BRASERO_PLAYER_BACON (g_object_new (BRASERO_TYPE_PLAYER_BACON, NULL));
420
return GTK_WIDGET (obj);
230
else if (GTK_WIDGET_CLASS (brasero_player_bacon_parent_class)->size_allocate)
231
GTK_WIDGET_CLASS (brasero_player_bacon_parent_class)->size_allocate (widget, allocation);
423
234
static GstBusSyncReply
745
557
obj->priv = g_new0 (BraseroPlayerBaconPrivate, 1);
746
558
brasero_player_bacon_setup_pipe (obj);
562
brasero_player_bacon_destroy (GtkObject *obj)
564
BraseroPlayerBacon *cobj;
566
cobj = BRASERO_PLAYER_BACON (obj);
569
if (cobj->priv->pipe) {
572
g_object_get (cobj->priv->pipe,
575
brasero_setting_set_value (brasero_setting_get_default (),
576
BRASERO_SETTING_PLAYER_VOLUME,
577
GINT_TO_POINTER ((gint)(volume * 100)));
580
if (cobj->priv->xoverlay
581
&& GST_IS_X_OVERLAY (cobj->priv->xoverlay))
582
cobj->priv->xoverlay = NULL;
584
if (cobj->priv->pipe) {
585
gst_element_set_state (cobj->priv->pipe, GST_STATE_NULL);
586
gst_object_unref (GST_OBJECT (cobj->priv->pipe));
587
cobj->priv->pipe = NULL;
590
if (cobj->priv->uri) {
591
g_free (cobj->priv->uri);
592
cobj->priv->uri = NULL;
595
if (GTK_OBJECT_CLASS (brasero_player_bacon_parent_class)->destroy)
596
GTK_OBJECT_CLASS (brasero_player_bacon_parent_class)->destroy (obj);
600
brasero_player_bacon_finalize (GObject *object)
602
BraseroPlayerBacon *cobj;
604
cobj = BRASERO_PLAYER_BACON (object);
607
G_OBJECT_CLASS (brasero_player_bacon_parent_class)->finalize (object);
611
brasero_player_bacon_class_init (BraseroPlayerBaconClass *klass)
613
GObjectClass *object_class = G_OBJECT_CLASS(klass);
614
GtkObjectClass *gtk_object_class = GTK_OBJECT_CLASS (klass);
615
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
617
object_class->finalize = brasero_player_bacon_finalize;
618
object_class->set_property = brasero_player_bacon_set_property;
619
object_class->get_property = brasero_player_bacon_get_property;
620
gtk_object_class->destroy = brasero_player_bacon_destroy;
622
widget_class->expose_event = brasero_player_bacon_expose;
623
widget_class->realize = brasero_player_bacon_realize;
624
widget_class->size_request = brasero_player_bacon_size_request;
625
widget_class->size_allocate = brasero_player_bacon_size_allocate;
627
brasero_player_bacon_signals [STATE_CHANGED_SIGNAL] =
628
g_signal_new ("state-change",
629
G_TYPE_FROM_CLASS (klass),
631
G_STRUCT_OFFSET (BraseroPlayerBaconClass, state_changed),
633
g_cclosure_marshal_VOID__INT,
634
G_TYPE_NONE, 1, G_TYPE_INT);
636
brasero_player_bacon_signals [EOF_SIGNAL] =
638
G_TYPE_FROM_CLASS (klass),
640
G_STRUCT_OFFSET (BraseroPlayerBaconClass, eof),
642
g_cclosure_marshal_VOID__VOID,
645
g_object_class_install_property (object_class,
647
g_param_spec_string ("uri",
648
"The uri of the media",
649
"The uri of the media",
655
brasero_player_bacon_new (void)
657
BraseroPlayerBacon *obj;
659
obj = BRASERO_PLAYER_BACON (g_object_new (BRASERO_TYPE_PLAYER_BACON, NULL));
661
return GTK_WIDGET (obj);