/** * Initializes a new xmms_playlist_t. */ xmms_playlist_t * xmms_playlist_init (xmms_medialib_t *medialib, xmms_coll_dag_t *colldag) { xmms_playlist_t *ret; xmms_config_property_t *val; ret = xmms_object_new (xmms_playlist_t, xmms_playlist_destroy); ret->mutex = g_mutex_new (); xmms_playlist_register_ipc_commands (XMMS_OBJECT (ret)); val = xmms_config_property_register ("playlist.repeat_one", "0", on_playlist_r_one_changed, ret); ret->repeat_one = xmms_config_property_get_int (val); val = xmms_config_property_register ("playlist.repeat_all", "0", on_playlist_r_all_changed, ret); ret->repeat_all = xmms_config_property_get_int (val); xmms_object_ref (medialib); ret->medialib = medialib; xmms_object_ref (colldag); ret->colldag = colldag; xmms_object_connect (XMMS_OBJECT (ret->medialib), XMMS_IPC_SIGNAL_MEDIALIB_ENTRY_REMOVED, on_medialib_entry_removed, ret); xmms_object_connect (XMMS_OBJECT (ret->colldag), XMMS_IPC_SIGNAL_COLLECTION_CHANGED, on_collection_changed, ret); return ret; }
xmms_playlist_updater_t * xmms_playlist_updater_init (xmms_playlist_t *playlist) { xmms_playlist_updater_t *updater; updater = xmms_object_new (xmms_playlist_updater_t, xmms_playlist_updater_destroy); updater->cond = g_cond_new (); updater->mutex = g_mutex_new (); xmms_object_ref (playlist); updater->playlist = playlist; updater->updating = NULL; updater->stack = NULL; xmms_object_connect (XMMS_OBJECT (playlist), XMMS_IPC_SIGNAL_COLLECTION_CHANGED, xmms_playlist_updater_need_update, updater); xmms_object_connect (XMMS_OBJECT (playlist), XMMS_IPC_SIGNAL_PLAYLIST_CHANGED, xmms_playlist_updater_need_update, updater); xmms_object_connect (XMMS_OBJECT (playlist), XMMS_IPC_SIGNAL_PLAYLIST_CURRENT_POS, xmms_playlist_updater_need_update, updater); xmms_playlist_updater_start (updater); return updater; }
/** * Register a signal */ void xmms_ipc_signal_register (xmms_object_t *object, xmms_ipc_signals_t signalid) { g_return_if_fail (object); g_mutex_lock (ipc_object_pool_lock); ipc_object_pool->signals[signalid] = object; xmms_object_connect (object, signalid, xmms_ipc_signal_cb, GUINT_TO_POINTER (signalid)); g_mutex_unlock (ipc_object_pool_lock); }