Updating branch refs/heads/master
to 1b39937e01d1b978ee05a47f96f4af1a09c36ad4 (commit)
from c7c6783f05344cf875b3ebce0d488a407bf1b2e4 (commit)
commit 1b39937e01d1b978ee05a47f96f4af1a09c36ad4
Author: Landry Breuil <[email protected]>
Date: Sun May 16 12:10:50 2010 +0200
Fix case when connecting to another server and #output changed
add a ugly hack to be sure checkitems are always appended
to the menu at the same position,
panel-plugin/xfce4-mpc-plugin.c | 11 +++++++----
1 files changed, 7 insertions(+), 4 deletions(-)
diff --git a/panel-plugin/xfce4-mpc-plugin.c b/panel-plugin/xfce4-mpc-plugin.c
index 9a40a5b..2dff48a 100644
--- a/panel-plugin/xfce4-mpc-plugin.c
+++ b/panel-plugin/xfce4-mpc-plugin.c
@@ -364,7 +364,8 @@ static void
mpc_update_outputs(t_mpc* mpc)
{
DBG("!");
- int i,j=0;
+ GtkWidget* menu;
+ int i,j=0, old_nb_outputs = mpc->nb_outputs;
MpdData * data = mpd_server_get_output_devices(mpc->mo);
do {
DBG("got output %d with name %s,
enabled=%d",data->output_dev->id,data->output_dev->name,data->output_dev->enabled);
@@ -376,6 +377,9 @@ mpc_update_outputs(t_mpc* mpc)
GtkWidget* chkitem = gtk_check_menu_item_new_with_label
(data->output_dev->name);
g_signal_connect (G_OBJECT(chkitem), "toggled", G_CALLBACK
(mpc_output_toggled), mpc);
xfce_panel_plugin_menu_insert_item(mpc->plugin,GTK_MENU_ITEM(chkitem));
+ /* XXX HACK */
+ menu = g_object_get_data (G_OBJECT (mpc->plugin),
I_("xfce-panel-plugin-menu"));
+ gtk_menu_reorder_child(GTK_MENU(menu),chkitem, 12 + i); /* 12 is
after 'Outputs' menuitem */
gtk_widget_show (chkitem);
mpc->mpd_outputs[i] = g_new(t_mpd_output,1);
mpc->mpd_outputs[i]->id = data->output_dev->id;
@@ -387,9 +391,8 @@ mpc_update_outputs(t_mpc* mpc)
j++;
} while (NULL != (data = mpd_data_get_next (data)));
/* something changed, better prune the list and recreate it */
- /* TODO: test this codepath */
- if (j != mpc->nb_outputs) {
- DBG("didnt found same amount of outputs (was %d got %d), resetting
output list", mpc->nb_outputs, j);
+ if (j != mpc->nb_outputs || (old_nb_outputs && j != old_nb_outputs)) {
+ DBG("didnt found same amount of outputs (was %d got %d), resetting
output list", (old_nb_outputs ? old_nb_outputs : mpc->nb_outputs), j);
for (i = 0; i < mpc->nb_outputs ; i++) {
gtk_widget_destroy(mpc->mpd_outputs[i]->menuitem);
g_free(mpc->mpd_outputs[i]);
_______________________________________________
Xfce4-commits mailing list
[email protected]
http://foo-projects.org/mailman/listinfo/xfce4-commits