[Frugalware-git] gservice: temporary disable toggled signal
emission in case of an error while editing runlevel info.
Priyank
priyank at frugalware.org
Tue Jan 20 07:18:01 CET 2009
Git-Url: http://git.frugalware.org/gitweb/gitweb.cgi?p=gservice.git;a=commitdiff;h=6ddcbd716bdf376efbaa57a39b0729c136c6544c
commit 6ddcbd716bdf376efbaa57a39b0729c136c6544c
Author: Priyank <priyank at frugalware.org>
Date: Tue Jan 20 11:47:48 2009 +0530
temporary disable toggled signal emission in case of an error while editing runlevel info.
diff --git a/src/gservice-interface.c b/src/gservice-interface.c
index bbe3675..194aa3c 100644
--- a/src/gservice-interface.c
+++ b/src/gservice-interface.c
@@ -71,6 +71,9 @@ static void cb_gsvc_button_deactivate_clicked (GtkButton *button, gpointer data)
static void cb_gsvc_button_edit_clicked (GtkButton *button, gpointer data);
static void cb_gsvc_service_selected (GtkTreeSelection *selection, gpointer data);
+/* handler ids that need to be blocked */
+guint handlers[7] = { 0, 0, 0, 0, 0, 0, 0 };
+
static GtkWidget *
gservice_get_widget (const char *wname)
{
@@ -685,6 +688,9 @@ cb_gsvc_r0_toggled (GtkToggleButton *toggle, gpointer data)
if (!gsvc_service_set_runlevel (((gservice_entry_t*)data)->name,0,val))
{
gsvc_error (_("Error"), _("There was an error while changing runlevel information."));
+ g_signal_handler_block ((gpointer)toggle, handlers[0]);
+ gtk_toggle_button_set_active (toggle, !val);
+ g_signal_handler_unblock ((gpointer)toggle, handlers[0]);
}
else
{
@@ -701,6 +707,9 @@ cb_gsvc_r1_toggled (GtkToggleButton *toggle, gpointer data)
if (!gsvc_service_set_runlevel (((gservice_entry_t*)data)->name,1,val))
{
gsvc_error (_("Error"), _("There was an error while changing runlevel information."));
+ g_signal_handler_block ((gpointer)toggle, handlers[1]);
+ gtk_toggle_button_set_active (toggle, !val);
+ g_signal_handler_unblock ((gpointer)toggle, handlers[1]);
}
else
{
@@ -716,6 +725,9 @@ cb_gsvc_r2_toggled (GtkToggleButton *toggle, gpointer data)
if (!gsvc_service_set_runlevel (((gservice_entry_t*)data)->name,2,val))
{
gsvc_error (_("Error"), _("There was an error while changing runlevel information."));
+ g_signal_handler_block ((gpointer)toggle, handlers[2]);
+ gtk_toggle_button_set_active (toggle, !val);
+ g_signal_handler_unblock ((gpointer)toggle, handlers[2]);
}
else
{
@@ -731,6 +743,9 @@ cb_gsvc_r3_toggled (GtkToggleButton *toggle, gpointer data)
if (!gsvc_service_set_runlevel (((gservice_entry_t*)data)->name,3,val))
{
gsvc_error (_("Error"), _("There was an error while changing runlevel information."));
+ g_signal_handler_block ((gpointer)toggle, handlers[3]);
+ gtk_toggle_button_set_active (toggle, !val);
+ g_signal_handler_unblock ((gpointer)toggle, handlers[3]);
}
else
{
@@ -746,6 +761,9 @@ cb_gsvc_r4_toggled (GtkToggleButton *toggle, gpointer data)
if (!gsvc_service_set_runlevel (((gservice_entry_t*)data)->name,4,val))
{
gsvc_error (_("Error"), _("There was an error while changing runlevel information."));
+ g_signal_handler_block ((gpointer)toggle, handlers[4]);
+ gtk_toggle_button_set_active (toggle, !val);
+ g_signal_handler_unblock ((gpointer)toggle, handlers[4]);
}
else
{
@@ -761,6 +779,9 @@ cb_gsvc_r5_toggled (GtkToggleButton *toggle, gpointer data)
if (!gsvc_service_set_runlevel (((gservice_entry_t*)data)->name,5,val))
{
gsvc_error (_("Error"), _("There was an error while changing runlevel information."));
+ g_signal_handler_block ((gpointer)toggle, handlers[5]);
+ gtk_toggle_button_set_active (toggle, !val);
+ g_signal_handler_unblock ((gpointer)toggle, handlers[5]);
}
else
{
@@ -776,6 +797,9 @@ cb_gsvc_r6_toggled (GtkToggleButton *toggle, gpointer data)
if (!gsvc_service_set_runlevel (((gservice_entry_t*)data)->name,6,val))
{
gsvc_error (_("Error"), _("There was an error while changing runlevel information."));
+ g_signal_handler_block ((gpointer)toggle, handlers[6]);
+ gtk_toggle_button_set_active (toggle, !val);
+ g_signal_handler_unblock ((gpointer)toggle, handlers[6]);
}
else
{
@@ -869,13 +893,13 @@ cb_gsvc_button_edit_clicked (GtkButton *button, gpointer data)
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(gsvc_service_edit_dlg_r5), entry->runlevel[5]);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(gsvc_service_edit_dlg_r6), entry->runlevel[6]);
/* connect signals so that the user will be able to edit the runlevels */
- g_signal_connect (G_OBJECT(gsvc_service_edit_dlg_r0), "toggled", G_CALLBACK(cb_gsvc_r0_toggled), (gpointer)entry);
- g_signal_connect (G_OBJECT(gsvc_service_edit_dlg_r1), "toggled", G_CALLBACK(cb_gsvc_r1_toggled), (gpointer)entry);
- g_signal_connect (G_OBJECT(gsvc_service_edit_dlg_r2), "toggled", G_CALLBACK(cb_gsvc_r2_toggled), (gpointer)entry);
- g_signal_connect (G_OBJECT(gsvc_service_edit_dlg_r3), "toggled", G_CALLBACK(cb_gsvc_r3_toggled), (gpointer)entry);
- g_signal_connect (G_OBJECT(gsvc_service_edit_dlg_r4), "toggled", G_CALLBACK(cb_gsvc_r4_toggled), (gpointer)entry);
- g_signal_connect (G_OBJECT(gsvc_service_edit_dlg_r5), "toggled", G_CALLBACK(cb_gsvc_r5_toggled), (gpointer)entry);
- g_signal_connect (G_OBJECT(gsvc_service_edit_dlg_r6), "toggled", G_CALLBACK(cb_gsvc_r6_toggled), (gpointer)entry);
+ handlers[0] = g_signal_connect (G_OBJECT(gsvc_service_edit_dlg_r0), "toggled", G_CALLBACK(cb_gsvc_r0_toggled), (gpointer)entry);
+ handlers[1] = g_signal_connect (G_OBJECT(gsvc_service_edit_dlg_r1), "toggled", G_CALLBACK(cb_gsvc_r1_toggled), (gpointer)entry);
+ handlers[2] = g_signal_connect (G_OBJECT(gsvc_service_edit_dlg_r2), "toggled", G_CALLBACK(cb_gsvc_r2_toggled), (gpointer)entry);
+ handlers[3] = g_signal_connect (G_OBJECT(gsvc_service_edit_dlg_r3), "toggled", G_CALLBACK(cb_gsvc_r3_toggled), (gpointer)entry);
+ handlers[4] = g_signal_connect (G_OBJECT(gsvc_service_edit_dlg_r4), "toggled", G_CALLBACK(cb_gsvc_r4_toggled), (gpointer)entry);
+ handlers[5] = g_signal_connect (G_OBJECT(gsvc_service_edit_dlg_r5), "toggled", G_CALLBACK(cb_gsvc_r5_toggled), (gpointer)entry);
+ handlers[6] = g_signal_connect (G_OBJECT(gsvc_service_edit_dlg_r6), "toggled", G_CALLBACK(cb_gsvc_r6_toggled), (gpointer)entry);
/* and the service icon */
GdkPixbuf *pixbuf = gsvc_icon_mapping_get_icon_for_service (entry->name, 48);
gtk_image_set_from_pixbuf (GTK_IMAGE(gsvc_service_edit_dlg_svcicon), pixbuf);
More information about the Frugalware-git
mailing list