[Goodies-commits] r6634 - in xfmpc/trunk: . src
Mike Massonnet
mmassonnet at xfce.org
Tue Feb 3 18:17:05 CET 2009
Author: mmassonnet
Date: 2009-02-03 17:17:05 +0000 (Tue, 03 Feb 2009)
New Revision: 6634
Modified:
xfmpc/trunk/autogen.sh
xfmpc/trunk/src/extended-interface.c
xfmpc/trunk/src/interface.c
xfmpc/trunk/src/main.c
xfmpc/trunk/src/mpdclient.c
xfmpc/trunk/src/preferences.c
Log:
Add a graphical settings dialog for the MPD host
* src/preferences.c(xfmpc_preferences_class_init):
- Install new class properties for the MPD host
* src/mpdclient.c:
- Use the XfmpcPreferences interface to fetch the host or the environment
variables when mpd-use-defaults is true
- Use the environment variables when
- Check the host before connecting for real
* src/extended-interface.c:
- Implement a dialog to set the MPD host
* src/interface.c(xfmpc_interface_init):
- Connect to "connected" signal to refresh the interface when connecting
manually to a new MPD host.
* src/main.c:
- Set a default window size to 330x330.
* autogen.sh:
- Fix the revision number from svn, enable debug, and delete configure.in
Modified: xfmpc/trunk/autogen.sh
===================================================================
--- xfmpc/trunk/autogen.sh 2009-02-03 15:06:59 UTC (rev 6633)
+++ xfmpc/trunk/autogen.sh 2009-02-03 17:17:05 UTC (rev 6634)
@@ -31,14 +31,16 @@
linguas=`sed -e '/^#/d' po/LINGUAS`
if test -d .git/svn; then
revision=`LC_ALL=C git-svn find-rev git-svn`
-elif test -f .svn; then
- revision=`LC_ALL=C svn info $0 | awk '/^Revision: / {printf "%05d\n", $2}'`
+elif test -d .svn; then
+ revision=`LC_ALL=C svn info | awk '/^Revision: / {printf "%05d\n", $2}'`
else
revision=""
fi
+
sed -e "s/@LINGUAS@/${linguas}/g" \
-e "s/@REVISION@/${revision}/g" \
< "configure.in.in" > "configure.in"
-exec xdt-autogen $@
+exec xdt-autogen --enable-debug $@
+rm "configure.in"
Modified: xfmpc/trunk/src/extended-interface.c
===================================================================
--- xfmpc/trunk/src/extended-interface.c 2009-02-03 15:06:59 UTC (rev 6633)
+++ xfmpc/trunk/src/extended-interface.c 2009-02-03 17:17:05 UTC (rev 6634)
@@ -21,6 +21,7 @@
#endif
#include <gtk/gtk.h>
+#include <libxfcegui4/libxfcegui4.h>
#include <libxfce4util/libxfce4util.h>
#include "extended-interface.h"
@@ -28,6 +29,7 @@
#include "playlist.h"
#include "dbbrowser.h"
#include "xfce-arrow-button.h"
+#include "preferences.h"
#define BORDER 4
@@ -51,6 +53,10 @@
static void xfmpc_extended_interface_dispose (GObject *object);
static void xfmpc_extended_interface_finalize (GObject *object);
+static void xfmpc_server_dialog_show (XfmpcExtendedInterface *extended_interface);
+static void cb_use_defaults_toggled (GtkToggleButton *button,
+ GtkWidget *widget);
+
static void cb_interface_changed (GtkComboBox *widget,
XfmpcExtendedInterface *extended_interface);
static void cb_repeat_switch (XfmpcExtendedInterface *extended_interface);
@@ -296,11 +302,125 @@
G_CALLBACK (cb_random_switch), extended_interface);
gtk_menu_shell_append (GTK_MENU_SHELL (menu), priv->random);
+ GtkWidget *mi = gtk_separator_menu_item_new ();
+ gtk_menu_shell_append (GTK_MENU_SHELL (menu), mi);
+
+ GtkWidget *image = gtk_image_new_from_stock (GTK_STOCK_PREFERENCES, GTK_ICON_SIZE_MENU);
+ mi = gtk_image_menu_item_new_with_label (_("Server Settings"));
+ gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (mi), image);
+ g_signal_connect_swapped (mi, "activate",
+ G_CALLBACK (xfmpc_server_dialog_show), extended_interface);
+ gtk_menu_shell_append (GTK_MENU_SHELL (menu), mi);
+
gtk_widget_show_all (menu);
}
+static void
+xfmpc_server_dialog_show (XfmpcExtendedInterface *extended_interface)
+{
+ XfmpcPreferences *preferences;
+ GtkWidget *dialog;
+ GtkWidget *frame;
+ GtkWidget *alignment;
+ GtkWidget *vbox, *vbox2;
+ GtkWidget *hbox;
+ GtkWidget *label;
+ GtkWidget *entry_use_defaults;
+ GtkWidget *entry_host;
+ GtkWidget *entry_port;
+ GtkWidget *entry_passwd;
+ gchar *host, *passwd;
+ guint port;
+ gboolean use_defaults;
+ gint res;
+ preferences = xfmpc_preferences_get ();
+ g_object_get (preferences,
+ "mpd-hostname", &host,
+ "mpd-port", &port,
+ "mpd-password", &passwd,
+ "mpd-use-defaults", &use_defaults,
+ NULL);
+ dialog = gtk_dialog_new_with_buttons (_("Server Settings"),
+ GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (extended_interface))),
+ 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), "stock_volume");
+ gtk_window_set_resizable (GTK_WINDOW (dialog), FALSE);
+
+ frame = xfce_create_framebox (_("Server Settings"), &alignment);
+ gtk_container_add (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox), frame);
+
+ vbox = gtk_vbox_new (FALSE, 6);
+ gtk_container_add (GTK_CONTAINER (alignment), vbox);
+
+ vbox2 = gtk_vbox_new (FALSE, 6);
+
+ hbox = gtk_hbox_new (FALSE, 2);
+ gtk_container_add (GTK_CONTAINER (vbox), hbox);
+ entry_use_defaults = gtk_check_button_new_with_label (_("Use default system settings"));
+ gtk_widget_set_tooltip_text (entry_use_defaults,
+ _("If checked, Xfmpc will try to read the environment "
+ "variables MPD_HOST and MPD_PORT otherwise it will "
+ "use localhost"));
+ g_signal_connect (entry_use_defaults, "toggled",
+ G_CALLBACK (cb_use_defaults_toggled), vbox2);
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (entry_use_defaults), use_defaults);
+ gtk_box_pack_start (GTK_BOX (hbox), entry_use_defaults, TRUE, TRUE, 0);
+
+ gtk_container_add (GTK_CONTAINER (vbox), vbox2);
+
+ hbox = gtk_hbox_new (FALSE, 2);
+ gtk_container_add (GTK_CONTAINER (vbox2), hbox);
+ label = gtk_label_new (_("Hostname:"));
+ gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
+ entry_host = gtk_entry_new ();
+ gtk_entry_set_width_chars (GTK_ENTRY (entry_host), 15);
+ gtk_entry_set_text (GTK_ENTRY (entry_host), host);
+ gtk_box_pack_start (GTK_BOX (hbox), entry_host, TRUE, TRUE, 0);
+
+ label = gtk_label_new (_("Port:"));
+ gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
+ entry_port = gtk_spin_button_new_with_range (0, 65536, 1);
+ gtk_spin_button_set_digits (GTK_SPIN_BUTTON (entry_port), 0);
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON (entry_port), port);
+ gtk_box_pack_start (GTK_BOX (hbox), entry_port, FALSE, FALSE, 0);
+
+ hbox = gtk_hbox_new (FALSE, 2);
+ gtk_container_add (GTK_CONTAINER (vbox2), hbox);
+ label = gtk_label_new (_("Password:"));
+ gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
+ entry_passwd = gtk_entry_new ();
+ gtk_entry_set_visibility (GTK_ENTRY (entry_passwd), FALSE);
+ if (passwd != NULL)
+ gtk_entry_set_text (GTK_ENTRY (entry_passwd), passwd);
+ gtk_box_pack_start (GTK_BOX (hbox), entry_passwd, TRUE, TRUE, 0);
+
+ gtk_widget_show_all (GTK_DIALOG (dialog)->vbox);
+ res = gtk_dialog_run (GTK_DIALOG (dialog));
+
+ if (res == GTK_RESPONSE_OK)
+ {
+ g_object_set (G_OBJECT (preferences),
+ "mpd-hostname", gtk_entry_get_text (GTK_ENTRY (entry_host)),
+ "mpd-port", gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (entry_port)),
+ "mpd-password", gtk_entry_get_text (GTK_ENTRY (entry_passwd)),
+ "mpd-use-defaults", gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (entry_use_defaults)),
+ NULL);
+
+ xfmpc_mpdclient_disconnect (extended_interface->mpdclient);
+ xfmpc_mpdclient_connect (extended_interface->mpdclient);
+ }
+
+ gtk_widget_destroy (dialog);
+ g_object_unref (preferences);
+}
+
+
+
static void
cb_interface_changed (GtkComboBox *widget,
XfmpcExtendedInterface *extended_interface)
@@ -398,3 +518,10 @@
*push_in = FALSE;
}
+static void
+cb_use_defaults_toggled (GtkToggleButton *button,
+ GtkWidget *widget)
+{
+ gtk_widget_set_sensitive (widget, !gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (button)));
+}
+
Modified: xfmpc/trunk/src/interface.c
===================================================================
--- xfmpc/trunk/src/interface.c 2009-02-03 15:06:59 UTC (rev 6633)
+++ xfmpc/trunk/src/interface.c 2009-02-03 17:17:05 UTC (rev 6634)
@@ -211,6 +211,8 @@
g_signal_connect_swapped (progress_box, "button-press-event",
G_CALLBACK (xfmpc_interface_progress_box_press_event), interface);
+ g_signal_connect_swapped (interface->mpdclient, "connected",
+ G_CALLBACK (xfmpc_interface_reconnect), interface);
g_signal_connect_swapped (interface->mpdclient, "song-changed",
G_CALLBACK (cb_song_changed), interface);
g_signal_connect_swapped (interface->mpdclient, "pp-changed",
Modified: xfmpc/trunk/src/main.c
===================================================================
--- xfmpc/trunk/src/main.c 2009-02-03 15:06:59 UTC (rev 6633)
+++ xfmpc/trunk/src/main.c 2009-02-03 17:17:05 UTC (rev 6634)
@@ -110,6 +110,7 @@
GtkWidget *window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_icon_name (GTK_WINDOW (window), "stock_volume");
gtk_window_set_title (GTK_WINDOW (window), _("Xfmpc"));
+ gtk_window_set_default_size (GTK_WINDOW (window), 330, 330);
g_signal_connect (G_OBJECT (window), "delete-event", G_CALLBACK (cb_window_closed), NULL);
g_signal_connect (G_OBJECT (window), "window-state-event", G_CALLBACK (cb_window_state_event), NULL);
Modified: xfmpc/trunk/src/mpdclient.c
===================================================================
--- xfmpc/trunk/src/mpdclient.c 2009-02-03 15:06:59 UTC (rev 6633)
+++ xfmpc/trunk/src/mpdclient.c 2009-02-03 17:17:05 UTC (rev 6634)
@@ -24,10 +24,8 @@
#include <libmpd/libmpd.h>
#include "mpdclient.h"
+#include "preferences.h"
-#define MPD_HOST "localhost"
-#define MPD_PORT 6600
-
#define XFMPC_MPDCLIENT_GET_PRIVATE(o) \
(G_TYPE_INSTANCE_GET_PRIVATE ((o), XFMPC_TYPE_MPDCLIENT, XfmpcMpdclientPrivate))
@@ -92,6 +90,7 @@
gchar *host;
guint port;
gchar *passwd;
+ gboolean env_cached;
};
@@ -232,8 +231,7 @@
{
XfmpcMpdclientPrivate *priv = XFMPC_MPDCLIENT_GET_PRIVATE (mpdclient);
- xfmpc_mpdclient_initenv (mpdclient);
- priv->mi = mpd_new (priv->host, priv->port, priv->passwd);
+ priv->mi = mpd_new_default ();
mpd_signal_connect_status_changed (priv->mi, (StatusChangedCallback)cb_xfmpc_mpdclient_status_changed, mpdclient);
}
@@ -269,27 +267,52 @@
xfmpc_mpdclient_initenv (XfmpcMpdclient *mpdclient)
{
XfmpcMpdclientPrivate *priv = XFMPC_MPDCLIENT_GET_PRIVATE (mpdclient);
+ XfmpcPreferences *preferences = xfmpc_preferences_get ();
+ gchar *host, *password;
+ guint port;
+ gboolean use_defaults;
- /* Hostname */
- priv->host = (g_getenv ("MPD_HOST") != NULL) ?
- g_strdup (g_getenv ("MPD_HOST")) :
- g_strdup (MPD_HOST);
+ g_object_get (preferences, "mpd-use-defaults", &use_defaults, NULL);
- /* Port */
- priv->port = (g_getenv ("MPD_PORT") != NULL) ?
- (gint) g_ascii_strtoll (g_getenv ("MPD_PORT"), NULL, 0) :
- MPD_PORT;
+ if (use_defaults)
+ {
+ if (!priv->env_cached)
+ {
+ g_free (priv->host);
+ g_free (priv->passwd);
+ priv->env_cached = TRUE;
- /* Check for password */
- priv->passwd = NULL;
- gchar **split = g_strsplit (priv->host, "@", 2);
- if (g_strv_length (split) == 2)
+ priv->host = (g_getenv ("MPD_HOST") != NULL) ?
+ g_strdup (g_getenv ("MPD_HOST")) :
+ g_strdup ("127.0.0.1");
+
+ priv->port = (g_getenv ("MPD_PORT") != NULL) ?
+ (gint) g_ascii_strtoll (g_getenv ("MPD_PORT"), NULL, 0) :
+ 6600;
+
+ priv->passwd = NULL;
+ 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
{
g_free (priv->host);
- priv->host = g_strdup (split[0]);
- priv->passwd = g_strdup (split[1]);
+ g_free (priv->passwd);
+ priv->env_cached = FALSE;
+
+ g_object_get (preferences,
+ "mpd-hostname", &priv->host,
+ "mpd-port", &priv->port,
+ "mpd-password", &priv->passwd,
+ NULL);
}
- g_strfreev (split);
}
gboolean
@@ -300,6 +323,11 @@
if (xfmpc_mpdclient_is_connected (mpdclient))
return TRUE;
+ xfmpc_mpdclient_initenv (mpdclient);
+ mpd_set_hostname (priv->mi, priv->host);
+ mpd_set_port (priv->mi, priv->port);
+ mpd_set_password (priv->mi, (priv->passwd != NULL) ? priv->passwd : "");
+
if (mpd_connect (priv->mi) != MPD_OK)
return FALSE;
Modified: xfmpc/trunk/src/preferences.c
===================================================================
--- xfmpc/trunk/src/preferences.c 2009-02-03 15:06:59 UTC (rev 6633)
+++ xfmpc/trunk/src/preferences.c 2009-02-03 17:17:05 UTC (rev 6634)
@@ -38,6 +38,10 @@
PROP_LAST_WINDOW_STATE_STICKY,
PROP_PLAYLIST_AUTOCENTER,
PROP_DBBROWSER_LAST_PATH,
+ PROP_MPD_HOST,
+ PROP_MPD_PORT,
+ PROP_MPD_PASSWORD,
+ PROP_MPD_USE_DEFAULTS,
N_PROPERTIES,
};
@@ -172,7 +176,39 @@
g_param_spec_string ("dbbrowser-last-path",
"DbbrowserLastPath",
"Restores the last path from the database browser",
- "",
+ "",
+ G_PARAM_READWRITE));
+
+ g_object_class_install_property (gobject_class,
+ PROP_MPD_HOST,
+ g_param_spec_string ("mpd-hostname",
+ "MpdHostname",
+ "Hostname of the MPD server",
+ "localhost",
+ G_PARAM_READWRITE));
+
+ g_object_class_install_property (gobject_class,
+ PROP_MPD_PORT,
+ g_param_spec_int ("mpd-port",
+ "MpdPort",
+ "Port of the MPD server",
+ 0, 65536, 6600,
+ G_PARAM_READWRITE));
+
+ g_object_class_install_property (gobject_class,
+ PROP_MPD_PASSWORD,
+ g_param_spec_string ("mpd-password",
+ "MpdPassword",
+ "Password of the MPD server",
+ NULL,
+ G_PARAM_READWRITE));
+
+ g_object_class_install_property (gobject_class,
+ PROP_MPD_USE_DEFAULTS,
+ g_param_spec_boolean ("mpd-use-defaults",
+ "MpdUseDefaults",
+ "Use default system settings for the MPD server (MPD_HOST/PORT environment variables)",
+ TRUE,
G_PARAM_READWRITE));
}
More information about the Goodies-commits
mailing list