[Goodies-commits] r4638 - xfmpc/trunk/src
Mike Massonnet
mmassonnet at xfce.org
Sun Apr 20 21:39:57 CEST 2008
Author: mmassonnet
Date: 2008-04-20 19:39:57 +0000 (Sun, 20 Apr 2008)
New Revision: 4638
Modified:
xfmpc/trunk/src/extended-interface.c
xfmpc/trunk/src/extended-interface.h
xfmpc/trunk/src/mpdclient.c
xfmpc/trunk/src/mpdclient.h
Log:
Make Random and Repeat check menu items work
* src/mpdclient.c,
src/mpdclient.h:
- Add new signals "repeat" and "random" on changes
* src/extended-interface.c,
src/extended-interface.h:
- Add two callbacks on check menu items "activate"
Modified: xfmpc/trunk/src/extended-interface.c
===================================================================
--- xfmpc/trunk/src/extended-interface.c 2008-04-20 16:45:17 UTC (rev 4637)
+++ xfmpc/trunk/src/extended-interface.c 2008-04-20 19:39:57 UTC (rev 4638)
@@ -50,13 +50,17 @@
static void xfmpc_extended_interface_dispose (GObject *object);
static void xfmpc_extended_interface_finalize (GObject *object);
-static void cb_combobox_changed (GtkComboBox *widget,
+static void cb_interface_changed (GtkComboBox *widget,
XfmpcExtendedInterface *extended_interface);
+static void cb_repeat_switch (XfmpcExtendedInterface *extended_interface);
+static void cb_random_switch (XfmpcExtendedInterface *extended_interface);
static void cb_context_menu (GtkToggleButton *button,
XfmpcExtendedInterface *extended_interface);
static void cb_context_menu_detach (GtkWidget *button,
GtkMenu *menu);
-static void position_menu (GtkMenu *menu,
+static void cb_context_menu_deactivate (GtkMenuShell *menu,
+ GtkWidget *attach_widget);
+static void position_context_menu (GtkMenu *menu,
gint *x,
gint *y,
gboolean *push_in,
@@ -81,6 +85,10 @@
GtkListStore *list_store;
GtkWidget *combobox;
GtkWidget *notebook;
+ GtkWidget *repeat;
+ GtkWidget *random;
+ GtkWidget *context_button;
+ GtkWidget *context_menu;
};
@@ -163,14 +171,14 @@
gtk_button_set_image (GTK_BUTTON (widget), image);
/* Context menu */
- widget = gtk_toggle_button_new ();
- gtk_widget_set_tooltip_text (widget, _("Context Menu"));
- gtk_box_pack_start (GTK_BOX (hbox), widget, FALSE, FALSE, 0);
- g_signal_connect (widget, "toggled",
+ priv->context_button = gtk_toggle_button_new ();
+ gtk_widget_set_tooltip_text (priv->context_button, _("Context Menu"));
+ gtk_box_pack_start (GTK_BOX (hbox), priv->context_button, FALSE, FALSE, 0);
+ g_signal_connect (priv->context_button, "toggled",
G_CALLBACK (cb_context_menu), extended_interface);
image = gtk_image_new_from_stock (GTK_STOCK_PREFERENCES, GTK_ICON_SIZE_MENU);
- gtk_button_set_image (GTK_BUTTON (widget), image);
+ gtk_button_set_image (GTK_BUTTON (priv->context_button), image);
/* Combo box */
priv->list_store = gtk_list_store_new (N_COLUMNS,
@@ -180,7 +188,7 @@
priv->combobox = gtk_combo_box_new_with_model (GTK_TREE_MODEL (priv->list_store));
gtk_box_pack_start (GTK_BOX (hbox), priv->combobox, TRUE, TRUE, 0);
g_signal_connect (priv->combobox, "changed",
- G_CALLBACK (cb_combobox_changed), extended_interface);
+ G_CALLBACK (cb_interface_changed), extended_interface);
GtkCellRenderer *cell = gtk_cell_renderer_text_new ();
gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (priv->combobox), cell, TRUE);
@@ -205,6 +213,20 @@
static void
xfmpc_extended_interface_dispose (GObject *object)
{
+ XfmpcExtendedInterfacePrivate *priv = XFMPC_EXTENDED_INTERFACE_GET_PRIVATE (object);
+
+ if (GTK_IS_WIDGET (priv->repeat))
+ {
+ gtk_widget_destroy (priv->repeat);
+ priv->repeat = NULL;
+ }
+
+ if (GTK_IS_WIDGET (priv->random))
+ {
+ gtk_widget_destroy (priv->random);
+ priv->random = NULL;
+ }
+
(*G_OBJECT_CLASS (parent_class)->dispose) (object);
}
@@ -212,7 +234,9 @@
xfmpc_extended_interface_finalize (GObject *object)
{
XfmpcExtendedInterface *extended_interface = XFMPC_EXTENDED_INTERFACE (object);
+ XfmpcExtendedInterfacePrivate *priv = XFMPC_EXTENDED_INTERFACE_GET_PRIVATE (extended_interface);
g_object_unref (G_OBJECT (extended_interface->mpdclient));
+ gtk_widget_destroy (priv->context_menu);
(*G_OBJECT_CLASS (parent_class)->finalize) (object);
}
@@ -246,9 +270,40 @@
gtk_notebook_set_tab_label_packing (GTK_NOTEBOOK (priv->notebook), child, TRUE, TRUE, GTK_PACK_START);
}
+void
+xfmpc_extended_interface_context_menu_new (XfmpcExtendedInterface *extended_interface,
+ GtkWidget *attach_widget)
+{
+ XfmpcExtendedInterfacePrivate *priv = XFMPC_EXTENDED_INTERFACE_GET_PRIVATE (extended_interface);
+
+ GtkWidget *menu = priv->context_menu = gtk_menu_new ();
+ gtk_menu_set_screen (GTK_MENU (menu), gtk_widget_get_screen (GTK_WIDGET (attach_widget)));
+ gtk_menu_attach_to_widget (GTK_MENU (menu), GTK_WIDGET (attach_widget), NULL);
+ g_signal_connect (menu, "deactivate",
+ G_CALLBACK (cb_context_menu_deactivate), attach_widget);
+
+ priv->repeat = gtk_check_menu_item_new_with_label (_("Repeat"));
+ gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (priv->repeat),
+ xfmpc_mpdclient_get_repeat (extended_interface->mpdclient));
+ g_signal_connect_swapped (priv->repeat, "activate",
+ G_CALLBACK (cb_repeat_switch), extended_interface);
+ gtk_menu_shell_append (GTK_MENU_SHELL (menu), priv->repeat);
+
+ priv->random = gtk_check_menu_item_new_with_label (_("Random"));
+ gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (priv->random),
+ xfmpc_mpdclient_get_random (extended_interface->mpdclient));
+ g_signal_connect_swapped (priv->random, "activate",
+ G_CALLBACK (cb_random_switch), extended_interface);
+ gtk_menu_shell_append (GTK_MENU_SHELL (menu), priv->random);
+
+ gtk_widget_show_all (menu);
+}
+
+
+
static void
-cb_combobox_changed (GtkComboBox *widget,
- XfmpcExtendedInterface *extended_interface)
+cb_interface_changed (GtkComboBox *widget,
+ XfmpcExtendedInterface *extended_interface)
{
XfmpcExtendedInterfacePrivate *priv = XFMPC_EXTENDED_INTERFACE_GET_PRIVATE (extended_interface);
@@ -269,55 +324,54 @@
}
static void
+cb_repeat_switch (XfmpcExtendedInterface *extended_interface)
+{
+ xfmpc_mpdclient_set_repeat (extended_interface->mpdclient,
+ !xfmpc_mpdclient_get_repeat (extended_interface->mpdclient));
+}
+
+static void
+cb_random_switch (XfmpcExtendedInterface *extended_interface)
+{
+ xfmpc_mpdclient_set_random (extended_interface->mpdclient,
+ !xfmpc_mpdclient_get_random (extended_interface->mpdclient));
+}
+
+static void
cb_context_menu (GtkToggleButton *button,
XfmpcExtendedInterface *extended_interface)
{
+ XfmpcExtendedInterfacePrivate *priv = XFMPC_EXTENDED_INTERFACE_GET_PRIVATE (extended_interface);
+
if (!gtk_toggle_button_get_active (button))
return;
-#if 0
- GtkWidget *menu = xfmpc_extended_interface_menu_preferences_new (extended_interface);
-#else
- GtkWidget *menu = gtk_menu_new ();
- gtk_menu_set_screen (GTK_MENU (menu), gtk_widget_get_screen (GTK_WIDGET (button)));
- gtk_menu_attach_to_widget (GTK_MENU (menu), GTK_WIDGET (button),
- (GtkMenuDetachFunc) cb_context_menu_detach);
- g_signal_connect (menu, "deactivate",
- G_CALLBACK (gtk_menu_detach), NULL);
+ if (GTK_IS_MENU (priv->context_menu))
+ gtk_widget_destroy (priv->context_menu);
+ xfmpc_extended_interface_context_menu_new (extended_interface, priv->context_button);
-
- GtkWidget *item = gtk_check_menu_item_new_with_label (_("Repeat"));
- gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
-
- item = gtk_check_menu_item_new_with_label (_("Random"));
- gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
-
- gtk_widget_show_all (menu);
-#endif
-
- gtk_menu_popup (GTK_MENU (menu),
+ gtk_menu_popup (GTK_MENU (priv->context_menu),
NULL,
NULL,
- (GtkMenuPositionFunc) position_menu,
+ (GtkMenuPositionFunc) position_context_menu,
GTK_WIDGET (button),
0,
gtk_get_current_event_time ());
}
static void
-cb_context_menu_detach (GtkWidget *button,
- GtkMenu *menu)
+cb_context_menu_deactivate (GtkMenuShell *menu,
+ GtkWidget *attach_widget)
{
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), FALSE);
- gtk_widget_destroy (GTK_WIDGET (menu));
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (attach_widget), FALSE);
}
static void
-position_menu (GtkMenu *menu,
- gint *x,
- gint *y,
- gboolean *push_in,
- GtkWidget *widget)
+position_context_menu (GtkMenu *menu,
+ gint *x,
+ gint *y,
+ gboolean *push_in,
+ GtkWidget *widget)
{
GtkRequisition menu_req;
gint root_x;
Modified: xfmpc/trunk/src/extended-interface.h
===================================================================
--- xfmpc/trunk/src/extended-interface.h 2008-04-20 16:45:17 UTC (rev 4637)
+++ xfmpc/trunk/src/extended-interface.h 2008-04-20 19:39:57 UTC (rev 4638)
@@ -42,6 +42,9 @@
void xfmpc_extended_interface_append_child (XfmpcExtendedInterface *extended_interface,
GtkWidget *child,
const gchar *title);
+void xfmpc_extended_interface_context_menu_new
+ (XfmpcExtendedInterface *extended_interface,
+ GtkWidget *attach_widget);
G_END_DECLS
#endif
Modified: xfmpc/trunk/src/mpdclient.c
===================================================================
--- xfmpc/trunk/src/mpdclient.c 2008-04-20 16:45:17 UTC (rev 4637)
+++ xfmpc/trunk/src/mpdclient.c 2008-04-20 19:39:57 UTC (rev 4638)
@@ -42,6 +42,8 @@
SIG_VOLUME_CHANGED,
SIG_STOPPED,
SIG_PLAYLIST_CHANGED,
+ SIG_REPEAT,
+ SIG_RANDOM,
LAST_SIGNAL
};
@@ -72,6 +74,8 @@
void (*volume_changed) (XfmpcMpdclient *mpdclient, gint volume, gpointer user_data);
void (*stopped) (XfmpcMpdclient *mpdclient, gpointer user_data);
void (*playlist_changed) (XfmpcMpdclient *mpdclient, gpointer user_data);
+ void (*repeat) (XfmpcMpdclient *mpdclient, gboolean repeat, gpointer user_data);
+ void (*random) (XfmpcMpdclient *mpdclient, gboolean random, gpointer user_data);
};
struct _XfmpcMpdclient
@@ -193,6 +197,24 @@
NULL, NULL,
g_cclosure_marshal_VOID__VOID,
G_TYPE_NONE, 0);
+
+ xfmpc_mpdclient_signals[SIG_REPEAT] =
+ g_signal_new ("repeat", G_TYPE_FROM_CLASS (klass),
+ G_SIGNAL_RUN_FIRST|G_SIGNAL_ACTION,
+ G_STRUCT_OFFSET (XfmpcMpdclientClass, repeat),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__BOOLEAN,
+ G_TYPE_NONE, 1,
+ G_TYPE_BOOLEAN);
+
+ xfmpc_mpdclient_signals[SIG_RANDOM] =
+ g_signal_new ("random", G_TYPE_FROM_CLASS (klass),
+ G_SIGNAL_RUN_FIRST|G_SIGNAL_ACTION,
+ G_STRUCT_OFFSET (XfmpcMpdclientClass, random),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__BOOLEAN,
+ G_TYPE_NONE, 1,
+ G_TYPE_BOOLEAN);
}
static void
@@ -369,6 +391,18 @@
}
gboolean
+xfmpc_mpdclient_set_song_time (XfmpcMpdclient *mpdclient,
+ guint time)
+{
+ XfmpcMpdclientPrivate *priv = XFMPC_MPDCLIENT_GET_PRIVATE (mpdclient);
+
+ if (mpd_player_seek (priv->mi, time) != MPD_OK)
+ return FALSE;
+ else
+ return TRUE;
+}
+
+gboolean
xfmpc_mpdclient_set_volume (XfmpcMpdclient *mpdclient,
guint8 volume)
{
@@ -381,19 +415,31 @@
}
gboolean
-xfmpc_mpdclient_set_song_time (XfmpcMpdclient *mpdclient,
- guint time)
+xfmpc_mpdclient_set_repeat (XfmpcMpdclient *mpdclient,
+ gboolean repeat)
{
XfmpcMpdclientPrivate *priv = XFMPC_MPDCLIENT_GET_PRIVATE (mpdclient);
- if (mpd_player_seek (priv->mi, time) != MPD_OK)
+ if (MPD_OK != mpd_player_set_repeat (priv->mi, repeat))
return FALSE;
else
return TRUE;
}
+gboolean
+xfmpc_mpdclient_set_random (XfmpcMpdclient *mpdclient,
+ gboolean random)
+{
+ XfmpcMpdclientPrivate *priv = XFMPC_MPDCLIENT_GET_PRIVATE (mpdclient);
+ if (MPD_OK != mpd_player_set_random (priv->mi, random))
+ return FALSE;
+ else
+ return TRUE;
+}
+
+
gint
xfmpc_mpdclient_get_pos (XfmpcMpdclient *mpdclient)
{
@@ -500,6 +546,21 @@
}
gboolean
+xfmpc_mpdclient_get_repeat (XfmpcMpdclient *mpdclient)
+{
+ XfmpcMpdclientPrivate *priv = XFMPC_MPDCLIENT_GET_PRIVATE (mpdclient);
+
+ return mpd_player_get_repeat (priv->mi);
+}
+
+gboolean
+xfmpc_mpdclient_get_random (XfmpcMpdclient *mpdclient)
+{
+ XfmpcMpdclientPrivate *priv = XFMPC_MPDCLIENT_GET_PRIVATE (mpdclient);
+
+ return mpd_player_get_random (priv->mi);
+}
+gboolean
xfmpc_mpdclient_is_playing (XfmpcMpdclient *mpdclient)
{
XfmpcMpdclientPrivate *priv = XFMPC_MPDCLIENT_GET_PRIVATE (mpdclient);
@@ -557,6 +618,14 @@
g_signal_emit_by_name (mpdclient, "time-changed",
xfmpc_mpdclient_get_time (mpdclient),
xfmpc_mpdclient_get_total_time (mpdclient));
+
+ if (what & MPD_CST_REPEAT)
+ g_signal_emit_by_name (mpdclient, "repeat",
+ xfmpc_mpdclient_get_repeat (mpdclient));
+
+ if (what & MPD_CST_RANDOM)
+ g_signal_emit_by_name (mpdclient, "random",
+ xfmpc_mpdclient_get_random (mpdclient));
}
Modified: xfmpc/trunk/src/mpdclient.h
===================================================================
--- xfmpc/trunk/src/mpdclient.h 2008-04-20 16:45:17 UTC (rev 4637)
+++ xfmpc/trunk/src/mpdclient.h 2008-04-20 19:39:57 UTC (rev 4638)
@@ -59,10 +59,14 @@
gboolean xfmpc_mpdclient_set_id (XfmpcMpdclient *mpdclient,
gint id);
+gboolean xfmpc_mpdclient_set_song_time (XfmpcMpdclient *mpdclient,
+ guint time);
gboolean xfmpc_mpdclient_set_volume (XfmpcMpdclient *mpdclient,
guint8 volume);
-gboolean xfmpc_mpdclient_set_song_time (XfmpcMpdclient *mpdclient,
- guint time);
+gboolean xfmpc_mpdclient_set_repeat (XfmpcMpdclient *mpdclient,
+ gboolean repeat);
+gboolean xfmpc_mpdclient_set_random (XfmpcMpdclient *mpdclient,
+ gboolean random);
gint xfmpc_mpdclient_get_pos (XfmpcMpdclient *mpdclient);
gint xfmpc_mpdclient_get_id (XfmpcMpdclient *mpdclient);
@@ -81,6 +85,10 @@
guint8 xfmpc_mpdclient_get_volume (XfmpcMpdclient *mpdclient);
+gboolean xfmpc_mpdclient_get_repeat (XfmpcMpdclient *mpdclient);
+
+gboolean xfmpc_mpdclient_get_repeat (XfmpcMpdclient *mpdclient);
+
gboolean xfmpc_mpdclient_is_playing (XfmpcMpdclient *mpdclient);
gboolean xfmpc_mpdclient_is_stopped (XfmpcMpdclient *mpdclient);
More information about the Goodies-commits
mailing list