1
/* transport-menu-item.c generated by valac 0.16.1, the Vala compiler
2
* generated from transport-menu-item.vala, do not modify */
5
Copyright 2010 Canonical Ltd.
8
Conor Curran <conor.curran@canonical.com>
10
This program is free software: you can redistribute it and/or modify it
11
under the terms of the GNU General Public License version 3, as published
12
by the Free Software Foundation.
14
This program is distributed in the hope that it will be useful, but
15
WITHOUT ANY WARRANTY; without even the implied warranties of
16
MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR
17
PURPOSE. See the GNU General Public License for more details.
19
You should have received a copy of the GNU General Public License along
20
with this program. If not, see <http://www.gnu.org/licenses/>.
24
#include <glib-object.h>
25
#include <libdbusmenu-glib/client.h>
26
#include <libdbusmenu-glib/dbusmenu-glib.h>
27
#include <libdbusmenu-glib/enum-types.h>
28
#include <libdbusmenu-glib/menuitem-proxy.h>
29
#include <libdbusmenu-glib/menuitem.h>
30
#include <libdbusmenu-glib/server.h>
31
#include <libdbusmenu-glib/types.h>
32
#include <common-defs.h>
39
#define TYPE_PLAYER_ITEM (player_item_get_type ())
40
#define PLAYER_ITEM(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_PLAYER_ITEM, PlayerItem))
41
#define PLAYER_ITEM_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_PLAYER_ITEM, PlayerItemClass))
42
#define IS_PLAYER_ITEM(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_PLAYER_ITEM))
43
#define IS_PLAYER_ITEM_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_PLAYER_ITEM))
44
#define PLAYER_ITEM_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_PLAYER_ITEM, PlayerItemClass))
46
typedef struct _PlayerItem PlayerItem;
47
typedef struct _PlayerItemClass PlayerItemClass;
48
typedef struct _PlayerItemPrivate PlayerItemPrivate;
50
#define TYPE_TRANSPORT_MENUITEM (transport_menuitem_get_type ())
51
#define TRANSPORT_MENUITEM(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_TRANSPORT_MENUITEM, TransportMenuitem))
52
#define TRANSPORT_MENUITEM_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_TRANSPORT_MENUITEM, TransportMenuitemClass))
53
#define IS_TRANSPORT_MENUITEM(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_TRANSPORT_MENUITEM))
54
#define IS_TRANSPORT_MENUITEM_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_TRANSPORT_MENUITEM))
55
#define TRANSPORT_MENUITEM_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_TRANSPORT_MENUITEM, TransportMenuitemClass))
57
typedef struct _TransportMenuitem TransportMenuitem;
58
typedef struct _TransportMenuitemClass TransportMenuitemClass;
59
typedef struct _TransportMenuitemPrivate TransportMenuitemPrivate;
61
#define TYPE_PLAYER_CONTROLLER (player_controller_get_type ())
62
#define PLAYER_CONTROLLER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_PLAYER_CONTROLLER, PlayerController))
63
#define PLAYER_CONTROLLER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_PLAYER_CONTROLLER, PlayerControllerClass))
64
#define IS_PLAYER_CONTROLLER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_PLAYER_CONTROLLER))
65
#define IS_PLAYER_CONTROLLER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_PLAYER_CONTROLLER))
66
#define PLAYER_CONTROLLER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_PLAYER_CONTROLLER, PlayerControllerClass))
68
typedef struct _PlayerController PlayerController;
69
typedef struct _PlayerControllerClass PlayerControllerClass;
70
typedef struct _PlayerControllerPrivate PlayerControllerPrivate;
72
#define TYPE_MPRIS2_CONTROLLER (mpris2_controller_get_type ())
73
#define MPRIS2_CONTROLLER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_MPRIS2_CONTROLLER, Mpris2Controller))
74
#define MPRIS2_CONTROLLER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_MPRIS2_CONTROLLER, Mpris2ControllerClass))
75
#define IS_MPRIS2_CONTROLLER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_MPRIS2_CONTROLLER))
76
#define IS_MPRIS2_CONTROLLER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_MPRIS2_CONTROLLER))
77
#define MPRIS2_CONTROLLER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_MPRIS2_CONTROLLER, Mpris2ControllerClass))
79
typedef struct _Mpris2Controller Mpris2Controller;
80
typedef struct _Mpris2ControllerClass Mpris2ControllerClass;
81
#define _g_variant_unref0(var) ((var == NULL) ? NULL : (var = (g_variant_unref (var), NULL)))
82
#define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
84
#define PLAYER_CONTROLLER_TYPE_STATE (player_controller_state_get_type ())
87
DbusmenuMenuitem parent_instance;
88
PlayerItemPrivate * priv;
91
struct _PlayerItemClass {
92
DbusmenuMenuitemClass parent_class;
95
struct _TransportMenuitem {
96
PlayerItem parent_instance;
97
TransportMenuitemPrivate * priv;
100
struct _TransportMenuitemClass {
101
PlayerItemClass parent_class;
104
struct _TransportMenuitemPrivate {
105
TransportAction cached_action;
108
struct _PlayerController {
109
GObject parent_instance;
110
PlayerControllerPrivate * priv;
112
DbusmenuMenuitem* root_menu;
113
GeeArrayList* custom_items;
114
Mpris2Controller* mpris_bridge;
115
gboolean* use_playlists;
118
struct _PlayerControllerClass {
119
GObjectClass parent_class;
123
PLAYER_CONTROLLER_STATE_OFFLINE,
124
PLAYER_CONTROLLER_STATE_INSTANTIATING,
125
PLAYER_CONTROLLER_STATE_READY,
126
PLAYER_CONTROLLER_STATE_CONNECTED,
127
PLAYER_CONTROLLER_STATE_DISCONNECTED
128
} PlayerControllerstate;
131
static gpointer transport_menuitem_parent_class = NULL;
133
GType player_item_get_type (void) G_GNUC_CONST;
134
GType transport_menuitem_get_type (void) G_GNUC_CONST;
135
#define TRANSPORT_MENUITEM_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), TYPE_TRANSPORT_MENUITEM, TransportMenuitemPrivate))
137
TRANSPORT_MENUITEM_DUMMY_PROPERTY
139
GType player_controller_get_type (void) G_GNUC_CONST;
140
TransportMenuitem* transport_menuitem_new (PlayerController* parent);
141
TransportMenuitem* transport_menuitem_construct (GType object_type, PlayerController* parent);
142
void transport_menuitem_handle_cached_action (TransportMenuitem* self);
143
static gboolean transport_menuitem_send_cached_action (TransportMenuitem* self);
144
static gboolean _transport_menuitem_send_cached_action_gsource_func (gpointer self);
145
PlayerController* player_item_get_owner (PlayerItem* self);
146
GType mpris2_controller_get_type (void) G_GNUC_CONST;
147
void mpris2_controller_transport_update (Mpris2Controller* self, TransportAction command);
148
void transport_menuitem_change_play_state (TransportMenuitem* self, TransportState update);
149
static void transport_menuitem_real_handle_event (DbusmenuMenuitem* base, const gchar* name, GVariant* input_value, guint timestamp);
150
static gboolean transport_menuitem_get_running (TransportMenuitem* self);
151
void player_controller_instantiate (PlayerController* self);
152
GeeHashSet* transport_menuitem_attributes_format (void);
153
GType player_controller_state_get_type (void) G_GNUC_CONST;
154
static GObject * transport_menuitem_constructor (GType type, guint n_construct_properties, GObjectConstructParam * construct_properties);
155
GAppInfo* player_controller_get_app_info (PlayerController* self);
156
static void transport_menuitem_finalize (GObject* obj);
157
static void _vala_transport_menuitem_get_property (GObject * object, guint property_id, GValue * value, GParamSpec * pspec);
160
TransportMenuitem* transport_menuitem_construct (GType object_type, PlayerController* parent) {
161
TransportMenuitem * self = NULL;
162
PlayerController* _tmp0_;
163
g_return_val_if_fail (parent != NULL, NULL);
165
self = (TransportMenuitem*) g_object_new (object_type, "item-type", DBUSMENU_TRANSPORT_MENUITEM_TYPE, "owner", _tmp0_, NULL);
170
TransportMenuitem* transport_menuitem_new (PlayerController* parent) {
171
return transport_menuitem_construct (TYPE_TRANSPORT_MENUITEM, parent);
176
Please remove this timeout when the default player can handle mpris commands
177
immediately once it raises its dbus interface
179
static gboolean _transport_menuitem_send_cached_action_gsource_func (gpointer self) {
181
result = transport_menuitem_send_cached_action (self);
186
void transport_menuitem_handle_cached_action (TransportMenuitem* self) {
187
TransportAction _tmp0_;
188
g_return_if_fail (self != NULL);
189
_tmp0_ = self->priv->cached_action;
190
if (_tmp0_ != TRANSPORT_ACTION_NO_ACTION) {
191
g_timeout_add_seconds_full (G_PRIORITY_DEFAULT, (guint) 1, _transport_menuitem_send_cached_action_gsource_func, g_object_ref (self), g_object_unref);
196
static gboolean transport_menuitem_send_cached_action (TransportMenuitem* self) {
197
gboolean result = FALSE;
198
PlayerController* _tmp0_;
199
PlayerController* _tmp1_;
200
Mpris2Controller* _tmp2_;
201
TransportAction _tmp3_;
202
g_return_val_if_fail (self != NULL, FALSE);
203
_tmp0_ = player_item_get_owner ((PlayerItem*) self);
205
_tmp2_ = _tmp1_->mpris_bridge;
206
_tmp3_ = self->priv->cached_action;
207
mpris2_controller_transport_update (_tmp2_, _tmp3_);
208
self->priv->cached_action = TRANSPORT_ACTION_NO_ACTION;
214
void transport_menuitem_change_play_state (TransportMenuitem* self, TransportState update) {
215
TransportState _tmp0_;
217
g_return_if_fail (self != NULL);
219
temp = (gint) _tmp0_;
220
dbusmenu_menuitem_property_set_int ((DbusmenuMenuitem*) self, DBUSMENU_TRANSPORT_MENUITEM_PLAY_STATE, temp);
224
static gpointer _g_variant_ref0 (gpointer self) {
225
return self ? g_variant_ref (self) : NULL;
229
static void transport_menuitem_real_handle_event (DbusmenuMenuitem* base, const gchar* name, GVariant* input_value, guint timestamp) {
230
TransportMenuitem * self;
235
const GVariantType* _tmp3_;
236
gboolean _tmp4_ = FALSE;
242
self = (TransportMenuitem*) base;
243
g_return_if_fail (name != NULL);
244
g_return_if_fail (input_value != NULL);
245
_tmp0_ = input_value;
246
_tmp1_ = _g_variant_ref0 (_tmp0_);
248
_tmp2_ = input_value;
249
_tmp3_ = G_VARIANT_TYPE_VARIANT;
250
_tmp4_ = g_variant_is_of_type (_tmp2_, _tmp3_);
253
GVariant* _tmp6_ = NULL;
254
_tmp5_ = input_value;
255
_tmp6_ = g_variant_get_variant (_tmp5_);
256
_g_variant_unref0 (v);
260
_tmp8_ = g_variant_get_int32 (_tmp7_);
262
_tmp9_ = transport_menuitem_get_running (self);
264
if (_tmp10_ == TRUE) {
265
PlayerController* _tmp11_;
266
PlayerController* _tmp12_;
267
Mpris2Controller* _tmp13_;
269
_tmp11_ = player_item_get_owner ((PlayerItem*) self);
271
_tmp13_ = _tmp12_->mpris_bridge;
273
mpris2_controller_transport_update (_tmp13_, (TransportAction) _tmp14_);
276
PlayerController* _tmp16_;
277
PlayerController* _tmp17_;
279
self->priv->cached_action = (TransportAction) _tmp15_;
280
_tmp16_ = player_item_get_owner ((PlayerItem*) self);
282
player_controller_instantiate (_tmp17_);
283
dbusmenu_menuitem_property_set_int ((DbusmenuMenuitem*) self, DBUSMENU_TRANSPORT_MENUITEM_PLAY_STATE, (gint) TRANSPORT_STATE_LAUNCHING);
285
_g_variant_unref0 (v);
289
GeeHashSet* transport_menuitem_attributes_format (void) {
290
GeeHashSet* result = NULL;
293
_tmp0_ = gee_hash_set_new (G_TYPE_STRING, (GBoxedCopyFunc) g_strdup, g_free, NULL, NULL);
295
gee_abstract_collection_add ((GeeAbstractCollection*) attrs, DBUSMENU_TRANSPORT_MENUITEM_PLAY_STATE);
301
static gboolean transport_menuitem_get_running (TransportMenuitem* self) {
303
PlayerController* _tmp0_;
304
PlayerController* _tmp1_;
306
g_return_val_if_fail (self != NULL, FALSE);
307
_tmp0_ = player_item_get_owner ((PlayerItem*) self);
309
_tmp2_ = _tmp1_->current_state;
310
result = _tmp2_ == ((gint) PLAYER_CONTROLLER_STATE_CONNECTED);
315
static GObject * transport_menuitem_constructor (GType type, guint n_construct_properties, GObjectConstructParam * construct_properties) {
317
GObjectClass * parent_class;
318
TransportMenuitem * self;
319
PlayerController* _tmp0_;
320
PlayerController* _tmp1_;
323
const gchar* _tmp4_ = NULL;
324
parent_class = G_OBJECT_CLASS (transport_menuitem_parent_class);
325
obj = parent_class->constructor (type, n_construct_properties, construct_properties);
326
self = TRANSPORT_MENUITEM (obj);
327
dbusmenu_menuitem_property_set_int ((DbusmenuMenuitem*) self, DBUSMENU_TRANSPORT_MENUITEM_PLAY_STATE, (gint) TRANSPORT_STATE_PAUSED);
328
_tmp0_ = player_item_get_owner ((PlayerItem*) self);
330
_tmp2_ = player_controller_get_app_info (_tmp1_);
332
_tmp4_ = g_app_info_get_name (_tmp3_);
333
dbusmenu_menuitem_property_set ((DbusmenuMenuitem*) self, DBUSMENU_MENUITEM_PROP_LABEL, _tmp4_);
334
self->priv->cached_action = TRANSPORT_ACTION_NO_ACTION;
339
static void transport_menuitem_class_init (TransportMenuitemClass * klass) {
340
transport_menuitem_parent_class = g_type_class_peek_parent (klass);
341
g_type_class_add_private (klass, sizeof (TransportMenuitemPrivate));
342
DBUSMENU_MENUITEM_CLASS (klass)->handle_event = transport_menuitem_real_handle_event;
343
G_OBJECT_CLASS (klass)->get_property = _vala_transport_menuitem_get_property;
344
G_OBJECT_CLASS (klass)->constructor = transport_menuitem_constructor;
345
G_OBJECT_CLASS (klass)->finalize = transport_menuitem_finalize;
349
static void transport_menuitem_instance_init (TransportMenuitem * self) {
350
self->priv = TRANSPORT_MENUITEM_GET_PRIVATE (self);
354
static void transport_menuitem_finalize (GObject* obj) {
355
TransportMenuitem * self;
356
self = TRANSPORT_MENUITEM (obj);
357
G_OBJECT_CLASS (transport_menuitem_parent_class)->finalize (obj);
361
GType transport_menuitem_get_type (void) {
362
static volatile gsize transport_menuitem_type_id__volatile = 0;
363
if (g_once_init_enter (&transport_menuitem_type_id__volatile)) {
364
static const GTypeInfo g_define_type_info = { sizeof (TransportMenuitemClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) transport_menuitem_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (TransportMenuitem), 0, (GInstanceInitFunc) transport_menuitem_instance_init, NULL };
365
GType transport_menuitem_type_id;
366
transport_menuitem_type_id = g_type_register_static (TYPE_PLAYER_ITEM, "TransportMenuitem", &g_define_type_info, 0);
367
g_once_init_leave (&transport_menuitem_type_id__volatile, transport_menuitem_type_id);
369
return transport_menuitem_type_id__volatile;
373
static void _vala_transport_menuitem_get_property (GObject * object, guint property_id, GValue * value, GParamSpec * pspec) {
374
TransportMenuitem * self;
375
self = TRANSPORT_MENUITEM (object);
376
switch (property_id) {
378
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);