Author: dannym Date: 2009-01-11 22:24:56 +0000 (Sun, 11 Jan 2009) New Revision: 29183
Modified: xfce4-mixer/branches/xfce_4_4/panel-plugin/mixer-prefbox.gob xfce4-mixer/branches/xfce_4_4/panel-plugin/xfce-mixer-prefbox-private.h xfce4-mixer/branches/xfce_4_4/panel-plugin/xfce-mixer-prefbox.c Log: fix bug# 3600: Wannabe Master dosn't work properly for multiple instances, bug# 4541: 10 wakeups (speedstep) per seconds. Modified: xfce4-mixer/branches/xfce_4_4/panel-plugin/mixer-prefbox.gob =================================================================== --- xfce4-mixer/branches/xfce_4_4/panel-plugin/mixer-prefbox.gob 2009-01-11 21:44:30 UTC (rev 29182) +++ xfce4-mixer/branches/xfce_4_4/panel-plugin/mixer-prefbox.gob 2009-01-11 22:24:56 UTC (rev 29183) @@ -163,6 +163,18 @@ } + protected gboolean focus_out_event_cb(self, GdkEventFocus* event, GtkWidget* widget) + { + /* handle the device change immediately so the Wannabe Master option box will have the new device's entries for sure. */ + if (self->_priv->device_entry_delayer) { /* something was changed. */ + delayer_free(self->_priv->device_entry_delayer); + self->_priv->device_entry_delayer = 0; + emit self_device_changed (self); + } + + return FALSE; + } + init(self) { GtkWidget *dentry; @@ -170,9 +182,12 @@ gtk_box_set_spacing (GTK_BOX (self), 5); self->device_cb = GTK_COMBO (gtk_combo_new ()); + + g_signal_connect_data (G_OBJECT(GTK_COMBO(self->device_cb)->entry), "focus-out-event", G_CALLBACK(self_focus_out_event_cb), self, NULL, G_CONNECT_SWAPPED | G_CONNECT_AFTER); + /* = g_signal_connect_after_swapped (G_OBJECT(GTK_COMBO(self->device_cb)->entry), "focus-out-event", G_CALLBACK(self_focus_out_event_cb), self); */ + self->master_om = GTK_OPTION_MENU (gtk_option_menu_new ()); - gtk_container_set_border_width (GTK_CONTAINER (self), 5); gtk_box_pack_start (GTK_BOX (self), twocol_label (_("Device:"), GTK_WIDGET (self->device_cb)), FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX (self), twocol_label (_("Wannabe Master:"), GTK_WIDGET (self->master_om)), FALSE, FALSE, 0); @@ -214,8 +229,8 @@ protected gboolean device_changed_delayed_cb (self) { - /*printf ("delayed\n");*/ emit self_device_changed (self); + self->_priv->device_entry_delayer = 0; return FALSE; } @@ -273,15 +288,7 @@ gtk_entry_set_text (GTK_ENTRY (self->device_cb->entry), nvl (device, "")); - omi = self_find_master_by_name (self, master_control); - gtk_option_menu_set_history (self->master_om, omi); - - if (master_control) { - g_free (master_control); - master_control = NULL; - } - if (device) { g_free (device); device = NULL; @@ -293,6 +300,16 @@ } emit self_device_changed (self); + + omi = self_find_master_by_name (self, master_control); + + gtk_option_menu_set_history (self->master_om, omi); + + if (master_control) { + g_free (master_control); + master_control = NULL; + } + } public void save_preferences (self, XfceMixerPreferences *p) Modified: xfce4-mixer/branches/xfce_4_4/panel-plugin/xfce-mixer-prefbox-private.h =================================================================== --- xfce4-mixer/branches/xfce_4_4/panel-plugin/xfce-mixer-prefbox-private.h 2009-01-11 21:44:30 UTC (rev 29182) +++ xfce4-mixer/branches/xfce_4_4/panel-plugin/xfce-mixer-prefbox-private.h 2009-01-11 22:24:56 UTC (rev 29183) @@ -34,6 +34,7 @@ void xfce_mixer_prefbox_fill_master_list (XfceMixerPrefbox * self); gchar * xfce_mixer_prefbox_find_name_by_master_i (XfceMixerPrefbox * self, gint master_i); gint xfce_mixer_prefbox_find_master_by_name (XfceMixerPrefbox * self, gchar const * name); +gboolean xfce_mixer_prefbox_focus_out_event_cb (XfceMixerPrefbox * self, GdkEventFocus * event, GtkWidget * widget); void xfce_mixer_prefbox_add_command_box (XfceMixerPrefbox * self); gboolean xfce_mixer_prefbox_device_changed_delayed_cb (XfceMixerPrefbox * self); void xfce_mixer_prefbox_device_changed_cb (XfceMixerPrefbox * self, GtkEditable * e); Modified: xfce4-mixer/branches/xfce_4_4/panel-plugin/xfce-mixer-prefbox.c =================================================================== --- xfce4-mixer/branches/xfce_4_4/panel-plugin/xfce-mixer-prefbox.c 2009-01-11 21:44:30 UTC (rev 29182) +++ xfce4-mixer/branches/xfce_4_4/panel-plugin/xfce-mixer-prefbox.c 2009-01-11 22:24:56 UTC (rev 29183) @@ -102,6 +102,7 @@ #define self_find_name_by_master_i xfce_mixer_prefbox_find_name_by_master_i #define self_find_master_by_name xfce_mixer_prefbox_find_master_by_name #define self_device_changed xfce_mixer_prefbox_device_changed +#define self_focus_out_event_cb xfce_mixer_prefbox_focus_out_event_cb #define self_add_command_box xfce_mixer_prefbox_add_command_box #define self_device_changed_delayed_cb xfce_mixer_prefbox_device_changed_delayed_cb #define self_device_changed_cb xfce_mixer_prefbox_device_changed_cb @@ -167,7 +168,7 @@ stringlist_free(VAR); VAR = NULL; } -#line 171 "xfce-mixer-prefbox.c" +#line 172 "xfce-mixer-prefbox.c" memset(&master_lst, 0, sizeof(master_lst)); #undef VAR #undef master_lst @@ -176,7 +177,7 @@ { #line 47 "mixer-prefbox.gob" delayer_free (VAR); } -#line 180 "xfce-mixer-prefbox.c" +#line 181 "xfce-mixer-prefbox.c" memset(&device_entry_delayer, 0, sizeof(device_entry_delayer)); #undef VAR #undef device_entry_delayer @@ -204,40 +205,43 @@ #line 135 "mixer-prefbox.gob" c->device_changed = ___real_xfce_mixer_prefbox_device_changed; -#line 208 "xfce-mixer-prefbox.c" +#line 209 "xfce-mixer-prefbox.c" g_object_class->finalize = ___finalize; } #undef __GOB_FUNCTION__ -#line 166 "mixer-prefbox.gob" +#line 178 "mixer-prefbox.gob" static void xfce_mixer_prefbox_init (XfceMixerPrefbox * self G_GNUC_UNUSED) -#line 215 "xfce-mixer-prefbox.c" +#line 216 "xfce-mixer-prefbox.c" { #define __GOB_FUNCTION__ "Xfce:Mixer:Prefbox::init" self->_priv = G_TYPE_INSTANCE_GET_PRIVATE(self,XFCE_TYPE_MIXER_PREFBOX,XfceMixerPrefboxPrivate); #line 23 "mixer-prefbox.gob" self->master_lst = NULL; -#line 221 "xfce-mixer-prefbox.c" +#line 222 "xfce-mixer-prefbox.c" #line 37 "mixer-prefbox.gob" self->_priv->device_entry_delayer = 0; -#line 224 "xfce-mixer-prefbox.c" +#line 225 "xfce-mixer-prefbox.c" #line 47 "mixer-prefbox.gob" self->launcher_entry = NULL; -#line 227 "xfce-mixer-prefbox.c" +#line 228 "xfce-mixer-prefbox.c" #line 47 "mixer-prefbox.gob" self->click_b = NULL; -#line 230 "xfce-mixer-prefbox.c" +#line 231 "xfce-mixer-prefbox.c" { -#line 167 "mixer-prefbox.gob" +#line 179 "mixer-prefbox.gob" GtkWidget *dentry; GtkWidget *item; gtk_box_set_spacing (GTK_BOX (self), 5); self->device_cb = GTK_COMBO (gtk_combo_new ()); + + g_signal_connect_data (G_OBJECT(GTK_COMBO(self->device_cb)->entry), "focus-out-event", G_CALLBACK(self_focus_out_event_cb), self, NULL, G_CONNECT_SWAPPED | G_CONNECT_AFTER); + /* = g_signal_connect_after_swapped (G_OBJECT(GTK_COMBO(self->device_cb)->entry), "focus-out-event", G_CALLBACK(self_focus_out_event_cb), self); */ + self->master_om = GTK_OPTION_MENU (gtk_option_menu_new ()); - gtk_container_set_border_width (GTK_CONTAINER (self), 5); gtk_box_pack_start (GTK_BOX (self), twocol_label (_("Device:"), GTK_WIDGET (self->device_cb)), FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX (self), twocol_label (_("Wannabe Master:"), GTK_WIDGET (self->master_om)), FALSE, FALSE, 0); @@ -265,7 +269,7 @@ gtk_container_add (GTK_CONTAINER (GTK_COMBO (self->execu_cb)->list), item); } -#line 269 "xfce-mixer-prefbox.c" +#line 273 "xfce-mixer-prefbox.c" } } #undef __GOB_FUNCTION__ @@ -274,14 +278,14 @@ #line 51 "mixer-prefbox.gob" void xfce_mixer_prefbox_fill_defaults (XfceMixerPrefbox * self) -#line 278 "xfce-mixer-prefbox.c" +#line 282 "xfce-mixer-prefbox.c" { #define __GOB_FUNCTION__ "Xfce:Mixer:Prefbox::fill_defaults" #line 51 "mixer-prefbox.gob" g_return_if_fail (self != NULL); #line 51 "mixer-prefbox.gob" g_return_if_fail (XFCE_IS_MIXER_PREFBOX (self)); -#line 285 "xfce-mixer-prefbox.c" +#line 289 "xfce-mixer-prefbox.c" { #line 52 "mixer-prefbox.gob" @@ -289,20 +293,20 @@ gtk_entry_set_text (GTK_ENTRY (self->device_cb->entry), ""); emit self_device_changed (self); }} -#line 293 "xfce-mixer-prefbox.c" +#line 297 "xfce-mixer-prefbox.c" #undef __GOB_FUNCTION__ #line 58 "mixer-prefbox.gob" void xfce_mixer_prefbox_fill_device_list (XfceMixerPrefbox * self) -#line 299 "xfce-mixer-prefbox.c" +#line 303 "xfce-mixer-prefbox.c" { #define __GOB_FUNCTION__ "Xfce:Mixer:Prefbox::fill_device_list" #line 58 "mixer-prefbox.gob" g_return_if_fail (self != NULL); #line 58 "mixer-prefbox.gob" g_return_if_fail (XFCE_IS_MIXER_PREFBOX (self)); -#line 306 "xfce-mixer-prefbox.c" +#line 310 "xfce-mixer-prefbox.c" { #line 59 "mixer-prefbox.gob" @@ -317,20 +321,20 @@ /* gtk_combo_set_popdown_strings (, NUL); issues warning */ } }} -#line 321 "xfce-mixer-prefbox.c" +#line 325 "xfce-mixer-prefbox.c" #undef __GOB_FUNCTION__ #line 72 "mixer-prefbox.gob" void xfce_mixer_prefbox_fill_master_list (XfceMixerPrefbox * self) -#line 327 "xfce-mixer-prefbox.c" +#line 331 "xfce-mixer-prefbox.c" { #define __GOB_FUNCTION__ "Xfce:Mixer:Prefbox::fill_master_list" #line 72 "mixer-prefbox.gob" g_return_if_fail (self != NULL); #line 72 "mixer-prefbox.gob" g_return_if_fail (XFCE_IS_MIXER_PREFBOX (self)); -#line 334 "xfce-mixer-prefbox.c" +#line 338 "xfce-mixer-prefbox.c" { #line 73 "mixer-prefbox.gob" @@ -340,20 +344,20 @@ fill_string_option_menu (self->master_om, self->master_lst); }} -#line 344 "xfce-mixer-prefbox.c" +#line 348 "xfce-mixer-prefbox.c" #undef __GOB_FUNCTION__ #line 81 "mixer-prefbox.gob" gchar * xfce_mixer_prefbox_find_name_by_master_i (XfceMixerPrefbox * self, gint master_i) -#line 350 "xfce-mixer-prefbox.c" +#line 354 "xfce-mixer-prefbox.c" { #define __GOB_FUNCTION__ "Xfce:Mixer:Prefbox::find_name_by_master_i" #line 81 "mixer-prefbox.gob" g_return_val_if_fail (self != NULL, (gchar * )0); #line 81 "mixer-prefbox.gob" g_return_val_if_fail (XFCE_IS_MIXER_PREFBOX (self), (gchar * )0); -#line 357 "xfce-mixer-prefbox.c" +#line 361 "xfce-mixer-prefbox.c" { #line 82 "mixer-prefbox.gob" @@ -378,20 +382,20 @@ } return NULL; }} -#line 382 "xfce-mixer-prefbox.c" +#line 386 "xfce-mixer-prefbox.c" #undef __GOB_FUNCTION__ #line 105 "mixer-prefbox.gob" gint xfce_mixer_prefbox_find_master_by_name (XfceMixerPrefbox * self, gchar const * name) -#line 388 "xfce-mixer-prefbox.c" +#line 392 "xfce-mixer-prefbox.c" { #define __GOB_FUNCTION__ "Xfce:Mixer:Prefbox::find_master_by_name" #line 105 "mixer-prefbox.gob" g_return_val_if_fail (self != NULL, (gint )0); #line 105 "mixer-prefbox.gob" g_return_val_if_fail (XFCE_IS_MIXER_PREFBOX (self), (gint )0); -#line 395 "xfce-mixer-prefbox.c" +#line 399 "xfce-mixer-prefbox.c" { #line 106 "mixer-prefbox.gob" @@ -421,13 +425,13 @@ return master_i; }} -#line 425 "xfce-mixer-prefbox.c" +#line 429 "xfce-mixer-prefbox.c" #undef __GOB_FUNCTION__ #line 135 "mixer-prefbox.gob" void xfce_mixer_prefbox_device_changed (XfceMixerPrefbox * self) -#line 431 "xfce-mixer-prefbox.c" +#line 435 "xfce-mixer-prefbox.c" { GValue ___param_values[1]; GValue ___return_val; @@ -439,7 +443,7 @@ g_return_if_fail (self != NULL); #line 135 "mixer-prefbox.gob" g_return_if_fail (XFCE_IS_MIXER_PREFBOX (self)); -#line 443 "xfce-mixer-prefbox.c" +#line 447 "xfce-mixer-prefbox.c" ___param_values[0].g_type = 0; g_value_init (&___param_values[0], G_TYPE_FROM_INSTANCE (self)); @@ -455,7 +459,7 @@ #line 135 "mixer-prefbox.gob" static void ___real_xfce_mixer_prefbox_device_changed (XfceMixerPrefbox * self G_GNUC_UNUSED) -#line 459 "xfce-mixer-prefbox.c" +#line 463 "xfce-mixer-prefbox.c" { #define __GOB_FUNCTION__ "Xfce:Mixer:Prefbox::device_changed" { @@ -488,23 +492,49 @@ gtk_option_menu_set_history (self->master_om, omi); }} -#line 492 "xfce-mixer-prefbox.c" +#line 496 "xfce-mixer-prefbox.c" #undef __GOB_FUNCTION__ +#line 166 "mixer-prefbox.gob" +gboolean +xfce_mixer_prefbox_focus_out_event_cb (XfceMixerPrefbox * self, GdkEventFocus * event, GtkWidget * widget) +#line 502 "xfce-mixer-prefbox.c" +{ +#define __GOB_FUNCTION__ "Xfce:Mixer:Prefbox::focus_out_event_cb" +#line 166 "mixer-prefbox.gob" + g_return_val_if_fail (self != NULL, (gboolean )0); +#line 166 "mixer-prefbox.gob" + g_return_val_if_fail (XFCE_IS_MIXER_PREFBOX (self), (gboolean )0); +#line 509 "xfce-mixer-prefbox.c" +{ +#line 167 "mixer-prefbox.gob" + + /* handle the device change immediately so the Wannabe Master option box will have the new device's entries for sure. */ + if (self->_priv->device_entry_delayer) { /* something was changed. */ + delayer_free(self->_priv->device_entry_delayer); + self->_priv->device_entry_delayer = 0; + emit self_device_changed (self); + } -#line 204 "mixer-prefbox.gob" + return FALSE; + }} +#line 522 "xfce-mixer-prefbox.c" +#undef __GOB_FUNCTION__ + + +#line 219 "mixer-prefbox.gob" void xfce_mixer_prefbox_add_command_box (XfceMixerPrefbox * self) -#line 499 "xfce-mixer-prefbox.c" +#line 529 "xfce-mixer-prefbox.c" { #define __GOB_FUNCTION__ "Xfce:Mixer:Prefbox::add_command_box" -#line 204 "mixer-prefbox.gob" +#line 219 "mixer-prefbox.gob" g_return_if_fail (self != NULL); -#line 204 "mixer-prefbox.gob" +#line 219 "mixer-prefbox.gob" g_return_if_fail (XFCE_IS_MIXER_PREFBOX (self)); -#line 506 "xfce-mixer-prefbox.c" +#line 536 "xfce-mixer-prefbox.c" { -#line 205 "mixer-prefbox.gob" +#line 220 "mixer-prefbox.gob" self->launcher_entry = launcher_entry_new (); self->execu_cb = NULL; /*self->ic->combo;*/ @@ -514,43 +544,43 @@ gtk_widget_show (GTK_WIDGET (launcher_entry_get_widget (self->launcher_entry))); gtk_box_pack_start (GTK_BOX (self->click_b), GTK_WIDGET (launcher_entry_get_widget (self->launcher_entry)), FALSE, FALSE, 0); }} -#line 518 "xfce-mixer-prefbox.c" +#line 548 "xfce-mixer-prefbox.c" #undef __GOB_FUNCTION__ -#line 215 "mixer-prefbox.gob" +#line 230 "mixer-prefbox.gob" gboolean xfce_mixer_prefbox_device_changed_delayed_cb (XfceMixerPrefbox * self) -#line 524 "xfce-mixer-prefbox.c" +#line 554 "xfce-mixer-prefbox.c" { #define __GOB_FUNCTION__ "Xfce:Mixer:Prefbox::device_changed_delayed_cb" -#line 215 "mixer-prefbox.gob" +#line 230 "mixer-prefbox.gob" g_return_val_if_fail (self != NULL, (gboolean )0); -#line 215 "mixer-prefbox.gob" +#line 230 "mixer-prefbox.gob" g_return_val_if_fail (XFCE_IS_MIXER_PREFBOX (self), (gboolean )0); -#line 531 "xfce-mixer-prefbox.c" +#line 561 "xfce-mixer-prefbox.c" { -#line 216 "mixer-prefbox.gob" +#line 231 "mixer-prefbox.gob" - /*printf ("delayed\n");*/ emit self_device_changed (self); + self->_priv->device_entry_delayer = 0; return FALSE; }} -#line 539 "xfce-mixer-prefbox.c" +#line 569 "xfce-mixer-prefbox.c" #undef __GOB_FUNCTION__ -#line 222 "mixer-prefbox.gob" +#line 237 "mixer-prefbox.gob" void xfce_mixer_prefbox_device_changed_cb (XfceMixerPrefbox * self, GtkEditable * e) -#line 545 "xfce-mixer-prefbox.c" +#line 575 "xfce-mixer-prefbox.c" { #define __GOB_FUNCTION__ "Xfce:Mixer:Prefbox::device_changed_cb" -#line 222 "mixer-prefbox.gob" +#line 237 "mixer-prefbox.gob" g_return_if_fail (self != NULL); -#line 222 "mixer-prefbox.gob" +#line 237 "mixer-prefbox.gob" g_return_if_fail (XFCE_IS_MIXER_PREFBOX (self)); -#line 552 "xfce-mixer-prefbox.c" +#line 582 "xfce-mixer-prefbox.c" { -#line 223 "mixer-prefbox.gob" +#line 238 "mixer-prefbox.gob" delayer_restart ( &self->_priv->device_entry_delayer, @@ -558,39 +588,39 @@ self ); }} -#line 562 "xfce-mixer-prefbox.c" +#line 592 "xfce-mixer-prefbox.c" #undef __GOB_FUNCTION__ -#line 231 "mixer-prefbox.gob" +#line 246 "mixer-prefbox.gob" XfceMixerPrefbox * xfce_mixer_prefbox_new (void) -#line 568 "xfce-mixer-prefbox.c" +#line 598 "xfce-mixer-prefbox.c" { #define __GOB_FUNCTION__ "Xfce:Mixer:Prefbox::new" { -#line 232 "mixer-prefbox.gob" +#line 247 "mixer-prefbox.gob" XfceMixerPrefbox* w; w = (XfceMixerPrefbox*) (GET_NEW); xfce_mixer_prefbox_add_command_box (XFCE_MIXER_PREFBOX (w)); return w; }} -#line 579 "xfce-mixer-prefbox.c" +#line 609 "xfce-mixer-prefbox.c" #undef __GOB_FUNCTION__ -#line 239 "mixer-prefbox.gob" +#line 254 "mixer-prefbox.gob" void xfce_mixer_prefbox_fill_preferences (XfceMixerPrefbox * self, XfceMixerPreferences * p) -#line 585 "xfce-mixer-prefbox.c" +#line 615 "xfce-mixer-prefbox.c" { #define __GOB_FUNCTION__ "Xfce:Mixer:Prefbox::fill_preferences" -#line 239 "mixer-prefbox.gob" +#line 254 "mixer-prefbox.gob" g_return_if_fail (self != NULL); -#line 239 "mixer-prefbox.gob" +#line 254 "mixer-prefbox.gob" g_return_if_fail (XFCE_IS_MIXER_PREFBOX (self)); -#line 592 "xfce-mixer-prefbox.c" +#line 622 "xfce-mixer-prefbox.c" { -#line 240 "mixer-prefbox.gob" +#line 255 "mixer-prefbox.gob" gint omi; gchar* launcher_command; @@ -627,15 +657,7 @@ gtk_entry_set_text (GTK_ENTRY (self->device_cb->entry), nvl (device, "")); - omi = self_find_master_by_name (self, master_control); - gtk_option_menu_set_history (self->master_om, omi); - - if (master_control) { - g_free (master_control); - master_control = NULL; - } - if (device) { g_free (device); device = NULL; @@ -647,23 +669,33 @@ } emit self_device_changed (self); + + omi = self_find_master_by_name (self, master_control); + + gtk_option_menu_set_history (self->master_om, omi); + + if (master_control) { + g_free (master_control); + master_control = NULL; + } + }} -#line 652 "xfce-mixer-prefbox.c" +#line 684 "xfce-mixer-prefbox.c" #undef __GOB_FUNCTION__ -#line 298 "mixer-prefbox.gob" +#line 315 "mixer-prefbox.gob" void xfce_mixer_prefbox_save_preferences (XfceMixerPrefbox * self, XfceMixerPreferences * p) -#line 658 "xfce-mixer-prefbox.c" +#line 690 "xfce-mixer-prefbox.c" { #define __GOB_FUNCTION__ "Xfce:Mixer:Prefbox::save_preferences" -#line 298 "mixer-prefbox.gob" +#line 315 "mixer-prefbox.gob" g_return_if_fail (self != NULL); -#line 298 "mixer-prefbox.gob" +#line 315 "mixer-prefbox.gob" g_return_if_fail (XFCE_IS_MIXER_PREFBOX (self)); -#line 665 "xfce-mixer-prefbox.c" +#line 697 "xfce-mixer-prefbox.c" { -#line 299 "mixer-prefbox.gob" +#line 316 "mixer-prefbox.gob" gint omi; gchar *execu; @@ -698,5 +730,5 @@ if (master) g_free (master); }} -#line 702 "xfce-mixer-prefbox.c" +#line 734 "xfce-mixer-prefbox.c" #undef __GOB_FUNCTION__ _______________________________________________ Xfce4-commits mailing list Xfce4-commits@xfce.org http://foo-projects.org/mailman/listinfo/xfce4-commits