[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