Index: src/extended-interface.c
===================================================================
--- src/extended-interface.c (revision 6585)
+++ src/extended-interface.c (working copy)
@@ -28,6 +28,7 @@
#include "playlist.h"
#include "dbbrowser.h"
#include "xfce-arrow-button.h"
+#include "preferences.h"
#define BORDER 4
@@ -66,8 +67,8 @@
gboolean *push_in,
GtkWidget *widget);
+static void xfmpc_window_preferences (XfmpcExtendedInterface *extended_interface);
-
struct _XfmpcExtendedInterfaceClass
{
GtkVBoxClass parent_class;
@@ -160,6 +161,16 @@
GtkWidget *image = gtk_image_new_from_stock (GTK_STOCK_NEW, GTK_ICON_SIZE_MENU);
gtk_button_set_image (GTK_BUTTON (widget), image);
+ /* Settings */
+ widget = gtk_button_new ();
+ gtk_widget_set_tooltip_text (widget, _("Settings"));
+ gtk_box_pack_start (GTK_BOX (hbox), widget, FALSE, FALSE, 0);
+ g_signal_connect_swapped (widget, "clicked",
+ G_CALLBACK (xfmpc_window_preferences), extended_interface);
+
+ image = gtk_image_new_from_stock (GTK_STOCK_PREFERENCES, GTK_ICON_SIZE_MENU);
+ gtk_button_set_image (GTK_BUTTON (widget), image);
+
/* Refresh database */
widget = gtk_button_new ();
gtk_widget_set_tooltip_text (widget, _("Refresh Database"));
@@ -398,3 +409,123 @@
*push_in = FALSE;
}
+static void
+xfmpc_window_preferences (XfmpcExtendedInterface *extended_interface)
+{
+ GtkWidget *dialog;
+ GtkWidget *main_vbox;
+ GtkWidget *mpd_label;
+
+ GtkWidget *host_box;
+ GtkWidget *host_label;
+ GtkWidget *host_entry;
+
+ GtkWidget *port_box;
+ GtkWidget *port_label;
+ GtkWidget *port_entry;
+
+ GtkWidget *passwd_box;
+ GtkWidget *passwd_label;
+ GtkWidget *passwd_entry;
+
+ const gchar *host_text;
+ const gchar *port_text;
+ const gchar *passwd_text;
+
+ dialog = xfce_titled_dialog_new_with_buttons (_("Xfmpc Preferences"),
+ GTK_WINDOW (gtk_widget_get_ancestor (GTK_WIDGET (extended_interface), GTK_TYPE_WINDOW)),
+ GTK_DIALOG_DESTROY_WITH_PARENT | GTK_DIALOG_NO_SEPARATOR,
+ GTK_STOCK_CANCEL,
+ GTK_RESPONSE_CANCEL,
+ GTK_STOCK_OK,
+ GTK_RESPONSE_OK,
+ NULL);
+
+ gtk_window_set_icon_name (GTK_WINDOW (dialog), "xfmpc");
+ gtk_window_set_icon_name (GTK_WINDOW (dialog), "stock_volume");
+ gtk_window_set_resizable (GTK_WINDOW (dialog), TRUE);
+
+ main_vbox = gtk_vbox_new (FALSE, 6);
+ gtk_container_set_border_width (GTK_CONTAINER (main_vbox), 12);
+ gtk_widget_show (main_vbox);
+ gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox), main_vbox, TRUE, TRUE, 0);
+
+ mpd_label = gtk_label_new ("");
+ gtk_label_set_markup (GTK_LABEL (mpd_label),
+ _(""
+ "MPD settings"));
+ gtk_misc_set_alignment (GTK_MISC (mpd_label), 0, 0);
+ gtk_widget_show (mpd_label);
+ gtk_container_add (GTK_CONTAINER (main_vbox), mpd_label);
+
+ XfmpcPreferences *preferences = xfmpc_preferences_get ();
+ g_object_get (G_OBJECT (preferences),
+ "host", &host_text,
+ "port", &port_text,
+ "passwd", &passwd_text,
+ NULL);
+
+ host_box = gtk_hbox_new (FALSE, 0);
+ gtk_widget_show (host_box);
+ gtk_box_pack_start (GTK_BOX (main_vbox), host_box, TRUE, TRUE, 0);
+
+ host_label = gtk_label_new (_("Host : "));
+ gtk_widget_show (host_label);
+ gtk_box_pack_start (GTK_BOX (host_box), host_label, TRUE, TRUE, 0);
+
+ host_entry = gtk_entry_new_with_max_length (50);
+ gtk_entry_set_text (GTK_ENTRY (host_entry), host_text);
+ gtk_widget_show (host_entry);
+ gtk_box_pack_start (GTK_BOX (host_box), host_entry, TRUE, TRUE, 0);
+
+ port_box = gtk_hbox_new (FALSE, 0);
+ gtk_widget_show (port_box);
+ gtk_box_pack_start (GTK_BOX (main_vbox), port_box, TRUE, TRUE, 0);
+
+ port_label = gtk_label_new (_("Port : "));
+ gtk_widget_show (port_label);
+ gtk_box_pack_start (GTK_BOX (port_box), port_label, TRUE, TRUE, 0);
+
+ port_entry = gtk_entry_new_with_max_length (50);
+ gtk_entry_set_text (GTK_ENTRY (port_entry), port_text);
+ gtk_widget_show (port_entry);
+ gtk_box_pack_start (GTK_BOX (port_box), port_entry, TRUE, TRUE, 0);
+
+ passwd_box = gtk_hbox_new (FALSE, 0);
+ gtk_widget_show (passwd_box);
+ gtk_box_pack_start (GTK_BOX (main_vbox), passwd_box, TRUE, TRUE, 0);
+
+ passwd_label = gtk_label_new (_("Password : "));
+ gtk_widget_show (passwd_label);
+ gtk_box_pack_start (GTK_BOX (passwd_box), passwd_label, TRUE, TRUE, 0);
+
+ passwd_entry = gtk_entry_new_with_max_length (50);
+ gtk_entry_set_text (GTK_ENTRY (passwd_entry), passwd_text);
+ gtk_entry_set_visibility (GTK_ENTRY (passwd_entry), FALSE);
+ gtk_widget_show (passwd_entry);
+ gtk_box_pack_start (GTK_BOX (passwd_box), passwd_entry, TRUE, TRUE, 0);
+
+ gint result = gtk_dialog_run (GTK_DIALOG(dialog));
+
+ switch (result)
+ {
+ case GTK_RESPONSE_OK:
+ host_text = gtk_entry_get_text (GTK_ENTRY (host_entry));
+ port_text = gtk_entry_get_text (GTK_ENTRY (port_entry));
+ passwd_text = gtk_entry_get_text (GTK_ENTRY (passwd_entry));
+
+ XfmpcPreferences *preferences = xfmpc_preferences_get ();
+ g_object_set (G_OBJECT (preferences),
+ "host", host_text,
+ "port", port_text,
+ "passwd", passwd_text,
+ NULL);
+ g_object_unref (preferences);
+
+ default:
+ break;
+ }
+
+
+ gtk_widget_destroy (dialog);
+}
Index: src/preferences.c
===================================================================
--- src/preferences.c (revision 6585)
+++ src/preferences.c (working copy)
@@ -38,6 +38,9 @@
PROP_LAST_WINDOW_STATE_STICKY,
PROP_PLAYLIST_AUTOCENTER,
PROP_DBBROWSER_LAST_PATH,
+ PROP_HOST,
+ PROP_PORT,
+ PROP_PASSWORD,
N_PROPERTIES,
};
@@ -174,6 +177,30 @@
"Restores the last path from the database browser",
"",
G_PARAM_READWRITE));
+
+ g_object_class_install_property (gobject_class,
+ PROP_HOST,
+ g_param_spec_string ("host",
+ "Host",
+ "Address of the host",
+ "localhost",
+ G_PARAM_READWRITE));
+
+ g_object_class_install_property (gobject_class,
+ PROP_PORT,
+ g_param_spec_string ("port",
+ "Port",
+ "Port of the host",
+ "6600",
+ G_PARAM_READWRITE));
+
+ g_object_class_install_property (gobject_class,
+ PROP_PASSWORD,
+ g_param_spec_string ("passwd",
+ "Password",
+ "Password",
+ "",
+ G_PARAM_READWRITE));
}
static void
@@ -357,3 +384,4 @@
return xfce_rc_config_open (XFCE_RESOURCE_CONFIG, "xfce4/xfmpcrc", FALSE);
}
+
Index: src/mpdclient.c
===================================================================
--- src/mpdclient.c (revision 6585)
+++ src/mpdclient.c (working copy)
@@ -24,6 +24,7 @@
#include
#include "mpdclient.h"
+#include "preferences.h"
#define MPD_HOST "localhost"
#define MPD_PORT 6600
@@ -270,26 +271,48 @@
{
XfmpcMpdclientPrivate *priv = XFMPC_MPDCLIENT_GET_PRIVATE (mpdclient);
- /* Hostname */
- priv->host = (g_getenv ("MPD_HOST") != NULL) ?
- g_strdup (g_getenv ("MPD_HOST")) :
- g_strdup (MPD_HOST);
+ /* Read connexion preferences */
+ gchar *port;
+ gchar *host;
+ gchar *passwd;
- /* Port */
- priv->port = (g_getenv ("MPD_PORT") != NULL) ?
- (gint) g_ascii_strtoll (g_getenv ("MPD_PORT"), NULL, 0) :
- MPD_PORT;
+ priv->passwd = NULL;
- /* Check for password */
- priv->passwd = NULL;
- gchar **split = g_strsplit (priv->host, "@", 2);
- if (g_strv_length (split) == 2)
+ XfmpcPreferences *preferences = xfmpc_preferences_get ();
+ g_object_get (G_OBJECT (preferences),
+ "host", &host,
+ "port", &port,
+ "passwd", &passwd,
+ NULL);
+
+ if (strcmp (host, "") != 0)
{
- g_free (priv->host);
- priv->host = g_strdup (split[0]);
- priv->passwd = g_strdup (split[1]);
+ priv->host = host;
+ priv->passwd = passwd;
}
- g_strfreev (split);
+ else if (g_getenv ("MPD_HOST") != NULL)
+ {
+ priv->host = g_strdup (g_getenv ("MPD_HOST"));
+ /* Check for password */
+ gchar **split = g_strsplit (priv->host, "@", 2);
+ if (g_strv_length (split) == 2)
+ {
+ g_free (priv->host);
+ priv->host = g_strdup (split[1]);
+ priv->passwd = g_strdup (split[0]);
+ }
+ g_strfreev (split);
+ }
+ else
+ priv->host = MPD_HOST;
+
+ if (strcmp (port, "") != 0)
+ priv->port = (gint) g_ascii_strtoll (port, NULL, 0);
+ else if (g_getenv ("MPD_PORT") != NULL)
+ priv->port = (gint) g_ascii_strtoll (g_getenv ("MPD_PORT"), NULL, 0);
+ else
+ priv->port = MPD_PORT;
+
}
gboolean