I'm trying to use g_signal_stop_emission but I can't get it to work right. This simple program is just a spinbutton. If clicked
once up, the value jumps from 1 to 10, which is the max. It
should only go up to 3 if the g_signal_stop_emission was done
right, or is working ok. Any ideas on this??
Thanks,
Walt
#include <gtk/gtk.h>
void set_val(GtkWidget *spin,gpointer data)
{
gint a,k;
k =(int)data;
a=gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(spin));
g_print("a before %d \n",a);
g_signal_stop_emission_by_name(GTK_SPIN_BUTTON(spin),"value_changed");
gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin),(gdouble)(a+1));
a=gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(spin));
g_print("a after %d \n",a);
}
int main( int argc,
char *argv[] )
{
GtkWidget *window;
GtkWidget *spin;
GtkWidget *main_vbox;
GtkWidget *vbox1;
GtkWidget *button;
GtkAdjustment *adj;
/* Initialise GTK */
gtk_init (&argc, &argv);
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
g_signal_connect (G_OBJECT (window), "destroy",
G_CALLBACK (gtk_main_quit),
NULL);
gtk_window_set_title (GTK_WINDOW (window), "Spin Button");
main_vbox = gtk_vbox_new (FALSE, 5);
gtk_container_set_border_width (GTK_CONTAINER (main_vbox), 10);
gtk_container_add (GTK_CONTAINER (window), main_vbox);
vbox1 = gtk_vbox_new (TRUE, 0);
gtk_box_pack_start (GTK_BOX (main_vbox), vbox1, FALSE, FALSE, 5);
adj = (GtkAdjustment *) gtk_adjustment_new (1,
1, 10.0, 1.0, 5.0, 0.0);
spin = gtk_spin_button_new(adj,0,0);
g_signal_connect(G_OBJECT(spin),"value_changed",
G_CALLBACK(set_val),(gpointer) 1);
gtk_spin_button_set_numeric(GTK_SPIN_BUTTON(spin),TRUE);
gtk_box_pack_start (GTK_BOX (vbox1), spin, TRUE, FALSE, 0);
button = gtk_button_new_with_label ("Close");
g_signal_connect_swapped (G_OBJECT (button), "clicked",
G_CALLBACK (gtk_widget_destroy),
window);
gtk_box_pack_start (GTK_BOX (main_vbox), button, TRUE, TRUE, 5);
gtk_widget_show_all (window);
/* Enter the event loop */
gtk_main ();
return 0;
}