[Goodies-commits] r3933 - xfmpc/trunk/src
Mike Massonnet
mmassonnet at xfce.org
Fri Feb 8 12:35:15 CET 2008
Author: mmassonnet
Date: 2008-02-08 11:35:15 +0000 (Fri, 08 Feb 2008)
New Revision: 3933
Modified:
xfmpc/trunk/src/interface.c
xfmpc/trunk/src/mpdclient.c
xfmpc/trunk/src/mpdclient.h
Log:
* src/mpdclient.c,
src/mpdclient.h:
- Replace code with StatusField against signals
* src/interface.c:
- Connect to XfmpcClient signals
Modified: xfmpc/trunk/src/interface.c
===================================================================
--- xfmpc/trunk/src/interface.c 2008-02-08 11:35:09 UTC (rev 3932)
+++ xfmpc/trunk/src/interface.c 2008-02-08 11:35:15 UTC (rev 3933)
@@ -60,9 +60,20 @@
XfmpcInterface *interface);
static void xfmpc_interface_action_volume (GtkAction *action,
XfmpcInterface *interface);
+static void cb_song_changed (XfmpcInterface *interface);
+static void cb_pp_changed (XfmpcInterface *interface,
+ gboolean is_playing);
+static void cb_time_changed (XfmpcInterface *interface,
+ gint time,
+ gint total_time);
+static void cb_volume_changed (XfmpcInterface *interface,
+ gint volume);
+static void cb_stopped (XfmpcInterface *interface);
+
+
struct _XfmpcInterfaceClass
{
GtkWindowClass parent_class;
@@ -86,6 +97,7 @@
GtkWidget *progress_bar; /* position in song */
GtkWidget *title;
GtkWidget *subtitle;
+ gboolean refresh_title;
};
@@ -275,6 +287,17 @@
g_signal_connect_swapped (progress_box, "button-press-event",
G_CALLBACK (xfmpc_interface_progress_box_press_event), interface);
+ g_signal_connect_swapped (interface->mpdclient, "song-changed",
+ G_CALLBACK (cb_song_changed), interface);
+ g_signal_connect_swapped (interface->mpdclient, "pp-changed",
+ G_CALLBACK (cb_pp_changed), interface);
+ g_signal_connect_swapped (interface->mpdclient, "time-changed",
+ G_CALLBACK (cb_time_changed), interface);
+ g_signal_connect_swapped (interface->mpdclient, "volume-changed",
+ G_CALLBACK (cb_volume_changed), interface);
+ g_signal_connect_swapped (interface->mpdclient, "stopped",
+ G_CALLBACK (cb_stopped), interface);
+
/* === Timeout === */
g_timeout_add (1000, (GSourceFunc)xfmpc_interface_refresh, interface);
}
@@ -408,8 +431,6 @@
static gboolean
xfmpc_interface_refresh (XfmpcInterface *interface)
{
- gchar *text = NULL;
-
if (G_UNLIKELY (xfmpc_mpdclient_connect (interface->mpdclient) == FALSE))
{
g_warning ("Failed to connect to MPD");
@@ -427,55 +448,6 @@
xfmpc_mpdclient_update_status (interface->mpdclient);
- if (G_UNLIKELY (xfmpc_mpdclient_status (interface->mpdclient, VOLUME_CHANGED)))
- {
- /* volume */
- xfmpc_interface_set_volume (interface, xfmpc_mpdclient_get_volume (interface->mpdclient));
- }
-
- if (G_UNLIKELY (xfmpc_mpdclient_is_stopped (interface->mpdclient)))
- {
- /* stopped */
- if (xfmpc_mpdclient_status (interface->mpdclient, STOP_CHANGED))
- {
- xfmpc_interface_set_pp (interface, FALSE);
- xfmpc_interface_set_time (interface, 0, 0);
- xfmpc_interface_set_title (interface, _("Stopped"));
- xfmpc_interface_set_subtitle (interface, PACKAGE_STRING);
- }
-
- return TRUE;
- }
-
- if (G_LIKELY (xfmpc_mpdclient_status (interface->mpdclient, TIME_CHANGED)))
- {
- /* song time */
- xfmpc_interface_set_time (interface,
- xfmpc_mpdclient_get_time (interface->mpdclient),
- xfmpc_mpdclient_get_total_time (interface->mpdclient));
- }
-
- if (G_UNLIKELY (xfmpc_mpdclient_status (interface->mpdclient, PP_CHANGED)))
- {
- /* play/pause */
- xfmpc_interface_set_pp (interface, xfmpc_mpdclient_is_playing (interface->mpdclient));
- }
-
- if (G_UNLIKELY (xfmpc_mpdclient_status (interface->mpdclient, SONG_CHANGED)))
- {
- /* title */
- xfmpc_interface_set_title (interface, xfmpc_mpdclient_get_title (interface->mpdclient));
-
- /* subtitle "by \"artist\" from \"album\" (year)" */
- text = g_strdup_printf (_("by \"%s\" from \"%s\" (%s)"),
- xfmpc_mpdclient_get_artist (interface->mpdclient),
- xfmpc_mpdclient_get_album (interface->mpdclient),
- xfmpc_mpdclient_get_date (interface->mpdclient));
- /* text = xfmpc_interface_get_subtitle (interface); to avoid "n/a" values */
- xfmpc_interface_set_subtitle (interface, text);
- g_free (text);
- }
-
return TRUE;
}
@@ -529,9 +501,68 @@
return FALSE;
}
+static void
+cb_song_changed (XfmpcInterface *interface)
+{
+ /* title */
+ xfmpc_interface_set_title (interface, xfmpc_mpdclient_get_title (interface->mpdclient));
+ /* subtitle "by \"artist\" from \"album\" (year)" */
+ gchar *text = g_strdup_printf (_("by \"%s\" from \"%s\" (%s)"),
+ xfmpc_mpdclient_get_artist (interface->mpdclient),
+ xfmpc_mpdclient_get_album (interface->mpdclient),
+ xfmpc_mpdclient_get_date (interface->mpdclient));
+ /* text = xfmpc_interface_get_subtitle (interface); to avoid "n/a" values, so far I don't care */
+ xfmpc_interface_set_subtitle (interface, text);
+ g_free (text);
+}
static void
+cb_pp_changed (XfmpcInterface *interface,
+ gboolean is_playing)
+{
+ XfmpcInterfacePrivate *priv = XFMPC_INTERFACE_GET_PRIVATE (interface);
+
+ xfmpc_interface_set_pp (interface, is_playing);
+
+ if (priv->refresh_title)
+ {
+ cb_song_changed (interface);
+ priv->refresh_title = FALSE;
+ }
+}
+
+static void
+cb_time_changed (XfmpcInterface *interface,
+ gint time,
+ gint total_time)
+{
+ xfmpc_interface_set_time (interface, time, total_time);
+}
+
+static void
+cb_volume_changed (XfmpcInterface *interface,
+ gint volume)
+{
+ xfmpc_interface_set_volume (interface, volume);
+}
+
+static void
+cb_stopped (XfmpcInterface *interface)
+{
+ XfmpcInterfacePrivate *priv = XFMPC_INTERFACE_GET_PRIVATE (interface);
+
+ xfmpc_interface_set_pp (interface, FALSE);
+ xfmpc_interface_set_time (interface, 0, 0);
+ xfmpc_interface_set_title (interface, _("Stopped"));
+ xfmpc_interface_set_subtitle (interface, PACKAGE_STRING);
+
+ priv->refresh_title = TRUE;
+}
+
+
+
+static void
xfmpc_interface_action_previous (GtkAction *action,
XfmpcInterface *interface)
{
Modified: xfmpc/trunk/src/mpdclient.c
===================================================================
--- xfmpc/trunk/src/mpdclient.c 2008-02-08 11:35:09 UTC (rev 3932)
+++ xfmpc/trunk/src/mpdclient.c 2008-02-08 11:35:15 UTC (rev 3933)
@@ -33,6 +33,20 @@
+enum
+{
+ SIG_SONG_CHANGED,
+ SIG_PP_CHANGED,
+ SIG_TIME_CHANGED,
+ SIG_VOLUME_CHANGED,
+ SIG_STOPPED,
+ LAST_SIGNAL
+};
+
+static guint xfmpc_mpdclient_signals[LAST_SIGNAL] = { 0 };
+
+
+
static void xfmpc_mpdclient_class_init (XfmpcMpdclientClass *klass);
static void xfmpc_mpdclient_init (XfmpcMpdclient *mpdclient);
static void xfmpc_mpdclient_finalize (GObject *object);
@@ -48,6 +62,12 @@
struct _XfmpcMpdclientClass
{
GObjectClass parent_class;
+
+ void (*song_changed) (XfmpcMpdclient *mpdclient, gpointer user_data);
+ void (*pp_changed) (XfmpcMpdclient *mpdclient, gboolean is_playing, gpointer user_data);
+ void (*time_changed) (XfmpcMpdclient *mpdclient, gint time, gint total_time, gpointer user_data);
+ void (*volume_changed) (XfmpcMpdclient *mpdclient, gint volume, gpointer user_data);
+ void (*stopped) (XfmpcMpdclient *mpdclient, gpointer user_data);
};
struct _XfmpcMpdclient
@@ -62,8 +82,6 @@
gchar *host;
guint port;
gchar *passwd;
-
- StatusField status;
};
@@ -111,6 +129,50 @@
gobject_class = G_OBJECT_CLASS (klass);
gobject_class->finalize = xfmpc_mpdclient_finalize;
+
+ xfmpc_mpdclient_signals[SIG_SONG_CHANGED] =
+ g_signal_new ("song-changed", G_TYPE_FROM_CLASS (klass),
+ G_SIGNAL_RUN_FIRST|G_SIGNAL_ACTION,
+ G_STRUCT_OFFSET (XfmpcMpdclientClass, song_changed),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
+
+ xfmpc_mpdclient_signals[SIG_PP_CHANGED] =
+ g_signal_new ("pp-changed", G_TYPE_FROM_CLASS (klass),
+ G_SIGNAL_RUN_FIRST|G_SIGNAL_ACTION,
+ G_STRUCT_OFFSET (XfmpcMpdclientClass, pp_changed),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__BOOLEAN,
+ G_TYPE_NONE, 1,
+ G_TYPE_BOOLEAN);
+
+ xfmpc_mpdclient_signals[SIG_TIME_CHANGED] =
+ g_signal_new ("time-changed", G_TYPE_FROM_CLASS (klass),
+ G_SIGNAL_RUN_FIRST|G_SIGNAL_ACTION,
+ G_STRUCT_OFFSET (XfmpcMpdclientClass, pp_changed),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__UINT_POINTER,
+ G_TYPE_NONE, 2,
+ G_TYPE_INT,
+ G_TYPE_INT);
+
+ xfmpc_mpdclient_signals[SIG_VOLUME_CHANGED] =
+ g_signal_new ("volume-changed", G_TYPE_FROM_CLASS (klass),
+ G_SIGNAL_RUN_FIRST|G_SIGNAL_ACTION,
+ G_STRUCT_OFFSET (XfmpcMpdclientClass, pp_changed),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__INT,
+ G_TYPE_NONE, 1,
+ G_TYPE_INT);
+
+ xfmpc_mpdclient_signals[SIG_STOPPED] =
+ g_signal_new ("stopped", G_TYPE_FROM_CLASS (klass),
+ G_SIGNAL_RUN_FIRST|G_SIGNAL_ACTION,
+ G_STRUCT_OFFSET (XfmpcMpdclientClass, pp_changed),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
}
static void
@@ -408,58 +470,34 @@
mpd_status_update (priv->mi);
}
-gboolean
-xfmpc_mpdclient_status (XfmpcMpdclient *mpdclient,
- gint bits)
-{
- XfmpcMpdclientPrivate *priv = XFMPC_MPDCLIENT_GET_PRIVATE (mpdclient);
-
- if (priv->status & bits)
- {
- priv->status &= ~bits;
- return TRUE;
- }
-
- return FALSE;
-}
-
static void
cb_xfmpc_mpdclient_status_changed (MpdObj *mi,
ChangedStatusType what,
gpointer user_data)
{
- XfmpcMpdclient *mpdclient = user_data;
+ XfmpcMpdclient *mpdclient = XFMPC_MPDCLIENT (user_data);
g_return_if_fail (G_LIKELY (NULL != user_data));
- XfmpcMpdclientPrivate *priv = XFMPC_MPDCLIENT_GET_PRIVATE (mpdclient);
if (what & MPD_CST_STATE)
{
- switch (mpd_player_get_state (mi))
- {
- case MPD_PLAYER_STOP:
- priv->status |= STOP_CHANGED;
- priv->status |= SONG_CHANGED; /* as to say that the next time the
- song plays again, it needs to update
- its title in the interface */
- break;
-
- case MPD_PLAYER_PLAY:
- case MPD_PLAYER_PAUSE:
- priv->status |= PP_CHANGED;
- break;
-
- default:
- break;
- }
+ gint state = mpd_player_get_state (mi);
+ if (state == MPD_PLAYER_STOP)
+ g_signal_emit_by_name (mpdclient, "stopped");
+ else if (state == MPD_PLAYER_PLAY || state == MPD_PLAYER_PAUSE)
+ g_signal_emit_by_name (mpdclient, "pp-changed",
+ state == MPD_PLAYER_PLAY);
}
if (what & MPD_CST_SONGID)
- priv->status |= SONG_CHANGED;
+ g_signal_emit_by_name (mpdclient, "song-changed");
if (what & MPD_CST_VOLUME)
- priv->status |= VOLUME_CHANGED;
+ g_signal_emit_by_name (mpdclient, "volume-changed",
+ xfmpc_mpdclient_get_volume (mpdclient));
if (what & (MPD_CST_ELAPSED_TIME|MPD_CST_TOTAL_TIME))
- priv->status |= TIME_CHANGED;
+ g_signal_emit_by_name (mpdclient, "time-changed",
+ xfmpc_mpdclient_get_time (mpdclient),
+ xfmpc_mpdclient_get_total_time (mpdclient));
}
Modified: xfmpc/trunk/src/mpdclient.h
===================================================================
--- xfmpc/trunk/src/mpdclient.h 2008-02-08 11:35:09 UTC (rev 3932)
+++ xfmpc/trunk/src/mpdclient.h 2008-02-08 11:35:15 UTC (rev 3933)
@@ -31,15 +31,6 @@
#define XFMPC_MPDCLIENT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), XFMPC_TYPE_MPDCLIENT, XfmpcMpdclientClass))
-typedef enum
-{
- STOP_CHANGED = 1 << 0,
- PP_CHANGED = 1 << 1,
- SONG_CHANGED = 1 << 2,
- VOLUME_CHANGED = 1 << 3,
- TIME_CHANGED = 1 << 4,
-} StatusField;
-
typedef struct _XfmpcMpdclientClass XfmpcMpdclientClass;
typedef struct _XfmpcMpdclient XfmpcMpdclient;
typedef struct _XfmpcMpdclientPrivate XfmpcMpdclientPrivate;
@@ -90,9 +81,6 @@
void xfmpc_mpdclient_update_status (XfmpcMpdclient *mpdclient);
-gboolean xfmpc_mpdclient_status (XfmpcMpdclient *mpdclient,
- gint bits);
-
G_END_DECLS
#endif
More information about the Goodies-commits
mailing list