[Goodies-commits] r3878 - xfmpc/trunk/src
Mike Massonnet
mmassonnet at xfce.org
Sun Jan 27 14:55:06 CET 2008
Author: mmassonnet
Date: 2008-01-27 13:55:06 +0000 (Sun, 27 Jan 2008)
New Revision: 3878
Modified:
xfmpc/trunk/src/interface.c
xfmpc/trunk/src/interface.h
xfmpc/trunk/src/mpdclient.c
xfmpc/trunk/src/mpdclient.h
Log:
* src/mpdclient.c, src/mpdclient.h, src/interface.c, src/interface.h:
- XfmpcMpdclient is GObjectified
- Each new instance increments the ref count
Modified: xfmpc/trunk/src/interface.c
===================================================================
--- xfmpc/trunk/src/interface.c 2008-01-27 13:54:59 UTC (rev 3877)
+++ xfmpc/trunk/src/interface.c 2008-01-27 13:55:06 UTC (rev 3878)
@@ -67,11 +67,11 @@
GtkWindow parent;
XfmpcInterfacePriv *priv;
XfmpcPreferences *preferences;
+ XfmpcMpdclient *mpdclient;
};
struct _XfmpcInterfacePriv
{
- XfmpcMpdclient *mpdclient;
GtkWidget *button_prev;
GtkWidget *button_pp; /* play/pause */
GtkWidget *button_next;
@@ -144,10 +144,8 @@
{
interface->priv = g_slice_new0 (XfmpcInterfacePriv);
interface->preferences = xfmpc_preferences_get ();
+ interface->mpdclient = xfmpc_mpdclient_new ();
- /* === Mpd client === */
- interface->priv->mpdclient = xfmpc_mpdclient_new ();
-
/* === Window === */
gtk_window_set_icon_name (GTK_WINDOW (interface), "stock_volume");
gtk_window_set_title (GTK_WINDOW (interface), _("Xfmpc"));
@@ -248,11 +246,11 @@
/* === Signals === */
g_signal_connect_swapped (interface->priv->button_prev, "clicked",
- G_CALLBACK (xfmpc_mpdclient_previous), interface->priv->mpdclient);
+ G_CALLBACK (xfmpc_mpdclient_previous), interface->mpdclient);
g_signal_connect_swapped (interface->priv->button_pp, "clicked",
G_CALLBACK (xfmpc_interface_pp_clicked), interface);
g_signal_connect_swapped (interface->priv->button_next, "clicked",
- G_CALLBACK (xfmpc_mpdclient_next), interface->priv->mpdclient);
+ G_CALLBACK (xfmpc_mpdclient_next), interface->mpdclient);
g_signal_connect_swapped (interface->priv->button_volume, "value-changed",
G_CALLBACK (xfmpc_interface_volume_changed), interface);
g_signal_connect_swapped (progress_box, "button-press-event",
@@ -273,7 +271,7 @@
{
XfmpcInterface *interface = XFMPC_INTERFACE (object);
g_object_unref (G_OBJECT (interface->preferences));
- xfmpc_mpdclient_free (interface->priv->mpdclient);
+ g_object_unref (G_OBJECT (interface->mpdclient));
(*G_OBJECT_CLASS (parent_class)->finalize) (object);
}
@@ -302,7 +300,7 @@
void
xfmpc_interface_pp_clicked (XfmpcInterface *interface)
{
- XfmpcMpdclient *mpdclient = interface->priv->mpdclient;
+ XfmpcMpdclient *mpdclient = interface->mpdclient;
if (G_UNLIKELY (!xfmpc_mpdclient_pp (mpdclient)))
return;
xfmpc_interface_set_pp (interface, xfmpc_mpdclient_is_playing (mpdclient));
@@ -327,7 +325,7 @@
if (G_UNLIKELY (event->type != GDK_BUTTON_PRESS || event->button != 1))
return FALSE;
- XfmpcMpdclient *mpdclient = interface->priv->mpdclient;
+ XfmpcMpdclient *mpdclient = interface->mpdclient;
gint time_total = xfmpc_mpdclient_get_total_time (mpdclient);
if (G_UNLIKELY (time_total < 0))
return FALSE;
@@ -345,7 +343,7 @@
gdouble value)
{
guint8 volume = value * 100;
- xfmpc_mpdclient_set_volume (interface->priv->mpdclient, volume);
+ xfmpc_mpdclient_set_volume (interface->mpdclient, volume);
}
void
@@ -382,12 +380,12 @@
static gboolean
xfmpc_interface_refresh (XfmpcInterface *interface)
{
- XfmpcMpdclient *mpdclient = interface->priv->mpdclient;
+ XfmpcMpdclient *mpdclient = interface->mpdclient;
gchar *text = NULL;
if (G_UNLIKELY (xfmpc_mpdclient_connect (mpdclient) == FALSE))
{
- g_warning ("Failed to connect to MPD (host %s port %d)", mpdclient->host, mpdclient->port);
+ g_warning ("Failed to connect to MPD");
xfmpc_mpdclient_disconnect (mpdclient);
xfmpc_interface_set_pp (interface, FALSE);
xfmpc_interface_set_time (interface, 0, 0);
@@ -457,7 +455,7 @@
static gboolean
xfmpc_interface_reconnect (XfmpcInterface *interface)
{
- if (G_UNLIKELY (xfmpc_mpdclient_connect (interface->priv->mpdclient) == FALSE))
+ if (G_UNLIKELY (xfmpc_mpdclient_connect (interface->mpdclient) == FALSE))
return TRUE;
/* Return FALSE to kill the reconnection timeout and start a refresh timeout */
@@ -487,7 +485,7 @@
xfmpc_interface_action_previous (GtkAction *action,
XfmpcInterface *interface)
{
- xfmpc_mpdclient_previous (interface->priv->mpdclient);
+ xfmpc_mpdclient_previous (interface->mpdclient);
}
static void
@@ -501,14 +499,14 @@
xfmpc_interface_action_stop (GtkAction *action,
XfmpcInterface *interface)
{
- xfmpc_mpdclient_stop (interface->priv->mpdclient);
+ xfmpc_mpdclient_stop (interface->mpdclient);
}
static void
xfmpc_interface_action_next (GtkAction *action,
XfmpcInterface *interface)
{
- xfmpc_mpdclient_next (interface->priv->mpdclient);
+ xfmpc_mpdclient_next (interface->mpdclient);
}
static void
Modified: xfmpc/trunk/src/interface.h
===================================================================
--- xfmpc/trunk/src/interface.h 2008-01-27 13:54:59 UTC (rev 3877)
+++ xfmpc/trunk/src/interface.h 2008-01-27 13:55:06 UTC (rev 3878)
@@ -37,8 +37,6 @@
GType xfmpc_interface_get_type () G_GNUC_CONST;
-
-
GtkWidget * xfmpc_interface_new ();
void xfmpc_interface_set_title (XfmpcInterface *interface,
Modified: xfmpc/trunk/src/mpdclient.c
===================================================================
--- xfmpc/trunk/src/mpdclient.c 2008-01-27 13:54:59 UTC (rev 3877)
+++ xfmpc/trunk/src/mpdclient.c 2008-01-27 13:55:06 UTC (rev 3878)
@@ -30,49 +30,140 @@
+static void xfmpc_mpdclient_class_init (XfmpcMpdclientClass *klass);
+static void xfmpc_mpdclient_init (XfmpcMpdclient *mpdclient);
+static void xfmpc_mpdclient_finalize (GObject *object);
+
+static void xfmpc_mpdclient_initenv (XfmpcMpdclient *mpdclient);
+
static void cb_xfmpc_mpdclient_status_changed (MpdObj *mi,
ChangedStatusType what,
gpointer user_data);
-XfmpcMpdclient *
-xfmpc_mpdclient_new ()
+struct _XfmpcMpdclientClass
{
- XfmpcMpdclient *mpdclient = g_slice_new0 (XfmpcMpdclient);
+ GObjectClass parent_class;
+};
+
+struct _XfmpcMpdclient
+{
+ GObject parent;
+ XfmpcMpdclientPriv *priv;
+};
+
+struct _XfmpcMpdclientPriv
+{
+ MpdObj *mi;
+ gchar *host;
+ guint port;
+ gchar *passwd;
+
+ StatusField status;
+};
+
+
+
+static GObjectClass *parent_class = NULL;
+
+
+
+GType
+xfmpc_mpdclient_get_type ()
+{
+ static GType xfmpc_mpdclient_type = G_TYPE_INVALID;
+
+ if (G_UNLIKELY (xfmpc_mpdclient_type == G_TYPE_INVALID))
+ {
+ static const GTypeInfo xfmpc_mpdclient_info =
+ {
+ sizeof (XfmpcMpdclientClass),
+ (GBaseInitFunc) NULL,
+ (GBaseFinalizeFunc) NULL,
+ (GClassInitFunc) xfmpc_mpdclient_class_init,
+ (GClassFinalizeFunc) NULL,
+ NULL,
+ sizeof (XfmpcMpdclient),
+ 0,
+ (GInstanceInitFunc) xfmpc_mpdclient_init,
+ NULL
+ };
+ xfmpc_mpdclient_type = g_type_register_static (G_TYPE_OBJECT, "XfmpcMpdclient", &xfmpc_mpdclient_info, 0);
+ }
+
+ return xfmpc_mpdclient_type;
+}
+
+
+
+static void
+xfmpc_mpdclient_class_init (XfmpcMpdclientClass *klass)
+{
+ GObjectClass *gobject_class;
+
+ parent_class = g_type_class_peek_parent (klass);
+
+ gobject_class = G_OBJECT_CLASS (klass);
+ gobject_class->finalize = xfmpc_mpdclient_finalize;
+}
+
+static void
+xfmpc_mpdclient_init (XfmpcMpdclient *mpdclient)
+{
+ mpdclient->priv = g_slice_new0 (XfmpcMpdclientPriv);
xfmpc_mpdclient_initenv (mpdclient);
- mpdclient->mi = mpd_new (mpdclient->host, mpdclient->port, mpdclient->passwd);
- mpd_signal_connect_status_changed (mpdclient->mi, (StatusChangedCallback)cb_xfmpc_mpdclient_status_changed, mpdclient);
- return mpdclient;
+ mpdclient->priv->mi = mpd_new (mpdclient->priv->host, mpdclient->priv->port, mpdclient->priv->passwd);
+ mpd_signal_connect_status_changed (mpdclient->priv->mi, (StatusChangedCallback)cb_xfmpc_mpdclient_status_changed, mpdclient);
}
-void
-xfmpc_mpdclient_free (XfmpcMpdclient *mpdclient)
+static void
+xfmpc_mpdclient_finalize (GObject *object)
{
- mpd_free (mpdclient->mi);
+ XfmpcMpdclient *mpdclient = XFMPC_MPDCLIENT (object);
+ mpd_free (mpdclient->priv->mi);
+ (*G_OBJECT_CLASS (parent_class)->finalize) (object);
}
-void
+
+
+XfmpcMpdclient *
+xfmpc_mpdclient_new ()
+{
+ static XfmpcMpdclient *mpdclient = NULL;
+
+ if (G_UNLIKELY (NULL == mpdclient))
+ {
+ mpdclient = g_object_new (XFMPC_TYPE_MPDCLIENT, NULL);
+ g_object_add_weak_pointer (G_OBJECT (mpdclient), (gpointer)&mpdclient);
+ }
+ else
+ g_object_ref (G_OBJECT (mpdclient));
+
+ return mpdclient;
+}
+
+static void
xfmpc_mpdclient_initenv (XfmpcMpdclient *mpdclient)
{
/* Hostname */
- mpdclient->host = (g_getenv ("MPD_HOST") != NULL) ?
+ mpdclient->priv->host = (g_getenv ("MPD_HOST") != NULL) ?
g_strdup (g_getenv ("MPD_HOST")) :
g_strdup (MPD_HOST);
/* Port */
- mpdclient->port = (g_getenv ("MPD_PORT") != NULL) ?
+ mpdclient->priv->port = (g_getenv ("MPD_PORT") != NULL) ?
(gint) g_ascii_strtoll (g_getenv ("MPD_PORT"), NULL, 0) :
MPD_PORT;
/* Check for password */
- mpdclient->passwd = NULL;
- gchar **split = g_strsplit (mpdclient->host, "@", 2);
+ mpdclient->priv->passwd = NULL;
+ gchar **split = g_strsplit (mpdclient->priv->host, "@", 2);
if (g_strv_length (split) == 2)
{
- g_free (mpdclient->host);
- mpdclient->host = g_strdup (split[0]);
- mpdclient->passwd = g_strdup (split[1]);
+ g_free (mpdclient->priv->host);
+ mpdclient->priv->host = g_strdup (split[0]);
+ mpdclient->priv->passwd = g_strdup (split[1]);
}
g_strfreev (split);
}
@@ -83,10 +174,10 @@
if (xfmpc_mpdclient_is_connected (mpdclient))
return TRUE;
- if (mpd_connect (mpdclient->mi) != MPD_OK)
+ if (mpd_connect (mpdclient->priv->mi) != MPD_OK)
return FALSE;
- mpd_send_password (mpdclient->mi);
+ mpd_send_password (mpdclient->priv->mi);
return TRUE;
}
@@ -95,19 +186,19 @@
xfmpc_mpdclient_disconnect (XfmpcMpdclient *mpdclient)
{
if (xfmpc_mpdclient_is_connected (mpdclient))
- mpd_disconnect (mpdclient->mi);
+ mpd_disconnect (mpdclient->priv->mi);
}
gboolean
xfmpc_mpdclient_is_connected (XfmpcMpdclient *mpdclient)
{
- return mpd_check_connected (mpdclient->mi);
+ return mpd_check_connected (mpdclient->priv->mi);
}
gboolean
xfmpc_mpdclient_previous (XfmpcMpdclient *mpdclient)
{
- if (mpd_player_prev (mpdclient->mi) != MPD_OK)
+ if (mpd_player_prev (mpdclient->priv->mi) != MPD_OK)
return FALSE;
else
return TRUE;
@@ -125,7 +216,7 @@
gboolean
xfmpc_mpdclient_play (XfmpcMpdclient *mpdclient)
{
- if (mpd_player_play (mpdclient->mi) != MPD_OK)
+ if (mpd_player_play (mpdclient->priv->mi) != MPD_OK)
return FALSE;
else
return TRUE;
@@ -134,7 +225,7 @@
gboolean
xfmpc_mpdclient_pause (XfmpcMpdclient *mpdclient)
{
- if (mpd_player_pause (mpdclient->mi) != MPD_OK)
+ if (mpd_player_pause (mpdclient->priv->mi) != MPD_OK)
return FALSE;
else
return TRUE;
@@ -143,7 +234,7 @@
gboolean
xfmpc_mpdclient_stop (XfmpcMpdclient *mpdclient)
{
- if (mpd_player_stop (mpdclient->mi) != MPD_OK)
+ if (mpd_player_stop (mpdclient->priv->mi) != MPD_OK)
return FALSE;
else
return TRUE;
@@ -152,7 +243,7 @@
gboolean
xfmpc_mpdclient_next (XfmpcMpdclient *mpdclient)
{
- if (mpd_player_next (mpdclient->mi) != MPD_OK)
+ if (mpd_player_next (mpdclient->priv->mi) != MPD_OK)
return FALSE;
else
return TRUE;
@@ -162,7 +253,7 @@
xfmpc_mpdclient_set_volume (XfmpcMpdclient *mpdclient,
guint8 volume)
{
- if (mpd_status_set_volume (mpdclient->mi, volume) < 0)
+ if (mpd_status_set_volume (mpdclient->priv->mi, volume) < 0)
return FALSE;
else
return TRUE;
@@ -172,7 +263,7 @@
xfmpc_mpdclient_set_song_time (XfmpcMpdclient *mpdclient,
guint time)
{
- if (mpd_player_seek (mpdclient->mi, time) != MPD_OK)
+ if (mpd_player_seek (mpdclient->priv->mi, time) != MPD_OK)
return FALSE;
else
return TRUE;
@@ -181,7 +272,7 @@
const gchar *
xfmpc_mpdclient_get_artist (XfmpcMpdclient *mpdclient)
{
- mpd_Song *song = mpd_playlist_get_current_song (mpdclient->mi);
+ mpd_Song *song = mpd_playlist_get_current_song (mpdclient->priv->mi);
if (G_UNLIKELY (NULL == song))
return NULL;
@@ -194,7 +285,7 @@
const gchar *
xfmpc_mpdclient_get_title (XfmpcMpdclient *mpdclient)
{
- mpd_Song *song = mpd_playlist_get_current_song (mpdclient->mi);
+ mpd_Song *song = mpd_playlist_get_current_song (mpdclient->priv->mi);
if (G_UNLIKELY (NULL == song))
return NULL;
@@ -207,7 +298,7 @@
const gchar *
xfmpc_mpdclient_get_album (XfmpcMpdclient *mpdclient)
{
- mpd_Song *song = mpd_playlist_get_current_song (mpdclient->mi);
+ mpd_Song *song = mpd_playlist_get_current_song (mpdclient->priv->mi);
if (G_UNLIKELY (NULL == song))
return NULL;
@@ -220,7 +311,7 @@
const gchar *
xfmpc_mpdclient_get_date (XfmpcMpdclient *mpdclient)
{
- mpd_Song *song = mpd_playlist_get_current_song (mpdclient->mi);
+ mpd_Song *song = mpd_playlist_get_current_song (mpdclient->priv->mi);
if (G_UNLIKELY (NULL == song))
return NULL;
@@ -233,47 +324,47 @@
gint
xfmpc_mpdclient_get_time (XfmpcMpdclient *mpdclient)
{
- return mpd_status_get_elapsed_song_time (mpdclient->mi);
+ return mpd_status_get_elapsed_song_time (mpdclient->priv->mi);
}
gint
xfmpc_mpdclient_get_total_time (XfmpcMpdclient *mpdclient)
{
- return mpd_status_get_total_song_time (mpdclient->mi);
+ return mpd_status_get_total_song_time (mpdclient->priv->mi);
}
guint8
xfmpc_mpdclient_get_volume (XfmpcMpdclient *mpdclient)
{
- gint volume = mpd_status_get_volume (mpdclient->mi);
+ gint volume = mpd_status_get_volume (mpdclient->priv->mi);
return (volume < 0) ? 100 : volume;
}
gboolean
xfmpc_mpdclient_is_playing (XfmpcMpdclient *mpdclient)
{
- return mpd_player_get_state (mpdclient->mi) == MPD_PLAYER_PLAY;
+ return mpd_player_get_state (mpdclient->priv->mi) == MPD_PLAYER_PLAY;
}
gboolean
xfmpc_mpdclient_is_stopped (XfmpcMpdclient *mpdclient)
{
- return mpd_player_get_state (mpdclient->mi) == MPD_PLAYER_STOP;
+ return mpd_player_get_state (mpdclient->priv->mi) == MPD_PLAYER_STOP;
}
void
xfmpc_mpdclient_update_status (XfmpcMpdclient *mpdclient)
{
- mpd_status_update (mpdclient->mi);
+ mpd_status_update (mpdclient->priv->mi);
}
gboolean
xfmpc_mpdclient_status (XfmpcMpdclient *mpdclient,
gint bits)
{
- if (mpdclient->status & bits)
+ if (mpdclient->priv->status & bits)
{
- mpdclient->status &= ~bits;
+ mpdclient->priv->status &= ~bits;
return TRUE;
}
@@ -293,16 +384,16 @@
switch (mpd_player_get_state (mi))
{
case MPD_PLAYER_STOP:
- mpdclient->status |= STOP_CHANGED;
- mpdclient->status |= SONG_CHANGED; /* as to say that the next time
- the song plays again, it needs
- to update its title in the
- interface */
+ mpdclient->priv->status |= STOP_CHANGED;
+ mpdclient->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:
- mpdclient->status |= PP_CHANGED;
+ mpdclient->priv->status |= PP_CHANGED;
break;
default:
@@ -311,12 +402,12 @@
}
if (what & MPD_CST_SONGID)
- mpdclient->status |= SONG_CHANGED;
+ mpdclient->priv->status |= SONG_CHANGED;
if (what & MPD_CST_VOLUME)
- mpdclient->status |= VOLUME_CHANGED;
+ mpdclient->priv->status |= VOLUME_CHANGED;
if (what & (MPD_CST_ELAPSED_TIME|MPD_CST_TOTAL_TIME))
- mpdclient->status |= TIME_CHANGED;
+ mpdclient->priv->status |= TIME_CHANGED;
}
Modified: xfmpc/trunk/src/mpdclient.h
===================================================================
--- xfmpc/trunk/src/mpdclient.h 2008-01-27 13:54:59 UTC (rev 3877)
+++ xfmpc/trunk/src/mpdclient.h 2008-01-27 13:55:06 UTC (rev 3878)
@@ -19,11 +19,18 @@
#ifndef __XFMPC_MPDCLIENT_H__
#define __XFMPC_MPDCLIENT_H__
-#include <glib.h>
-#include <libmpd/libmpd.h>
-
G_BEGIN_DECLS
+#define XFMPC_TYPE_MPDCLIENT (xfmpc_mpdclient_get_type())
+
+#define XFMPC_MPDCLIENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), XFMPC_TYPE_MPDCLIENT, XfmpcMpdclient))
+#define XFMPC_MPDCLIENT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), XFMPC_TYPE_MPDCLIENT, XfmpcMpdclientClass))
+
+#define XFMPC_IS_MPDCLIENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), XFMPC_TYPE_MPDCLIENT))
+#define XFMPC_IS_MPDCLIENT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), XFMPC_TYPE_MPDCLIENT))
+
+#define XFMPC_MPDCLIENT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), XFMPC_TYPE_MPDCLIENT, XfmpcMpdclientClass))
+
typedef enum
{
STOP_CHANGED = 1 << 0,
@@ -33,30 +40,20 @@
TIME_CHANGED = 1 << 4,
} StatusField;
-typedef struct _XfmpcMpdclient XfmpcMpdclient;
+typedef struct _XfmpcMpdclientClass XfmpcMpdclientClass;
+typedef struct _XfmpcMpdclient XfmpcMpdclient;
+typedef struct _XfmpcMpdclientPriv XfmpcMpdclientPriv;
-struct _XfmpcMpdclient
-{
- MpdObj *mi;
- gchar *host;
- guint port;
- gchar *passwd;
+GType xfmpc_mpdclient_get_type () G_GNUC_CONST;
- StatusField status;
-};
-
XfmpcMpdclient * xfmpc_mpdclient_new ();
-void xfmpc_mpdclient_initenv (XfmpcMpdclient *mpdclient);
-
gboolean xfmpc_mpdclient_connect (XfmpcMpdclient *mpdclient);
void xfmpc_mpdclient_disconnect (XfmpcMpdclient *mpdclient);
gboolean xfmpc_mpdclient_is_connected (XfmpcMpdclient *mpdclient);
-void xfmpc_mpdclient_free (XfmpcMpdclient *mpdclient);
-
gboolean xfmpc_mpdclient_previous (XfmpcMpdclient *mpdclient);
gboolean xfmpc_mpdclient_pp (XfmpcMpdclient *mpdclient);
More information about the Goodies-commits
mailing list