+void cb_cfw_mode_act_toggled(GtkWidget *widget, gpointer uudata)
+{
+ gtk_widget_set_sensitive(GTK_WIDGET(cfw_natbox), gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)));
+}
+
+void cb_cfw_orport_toggled(GtkWidget *widget, gpointer uudata)
+{
+ gtk_widget_set_sensitive(GTK_WIDGET(cfw_portbox), gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)));
+}
+
+void cb_cfw_oraddr_toggled(GtkWidget *widget, gpointer uudata)
+{
+ gtk_widget_set_sensitive(GTK_WIDGET(cfw_addrbox), gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)));
+}
+
+void cb_cfw_uinet_toggled(GtkWidget *widget, gpointer uudata)
+{
+ gtk_widget_set_sensitive(GTK_WIDGET(cfw_uibox), gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)));
+}
+
+void cb_cfw_hup_activate(GtkWidget *widget, gpointer uudata)
+{
+ int tag;
+ struct dc_response *resp;
+
+ if(dc_connectsync2(dc_srv_local, DC_LATEST) < 0) {
+ msgbox(GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, _("Could not connect to server"));
+ return;
+ }
+ if(dc_login(NULL, 1, dc_convnone, NULL) != DC_LOGIN_ERR_SUCCESS) {
+ dc_disconnect();
+ msgbox(GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, _("Could not connect to server"));
+ return;
+ }
+ tag = dc_queuecmd(NULL, NULL, L"hup", NULL);
+ if((resp = dc_gettaggedrespsync(tag)) != NULL) {
+ if(resp->code != 200)
+ msgbox(GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, _("Could not connect to server"));
+ dc_freeresp(resp);
+ }
+ dc_disconnect();
+}
+
+void cb_cfw_save_activate(GtkWidget *widget, gpointer uudata)
+{
+ struct cfvar *cv;
+
+ if((cv = cfwvalid()) != NULL) {
+ msgbox(GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, cv->vld->invmsg, cv->rname);
+ return;
+ }
+ cfw2conf();
+ writeconfig();
+}
+
+void cb_cfw_quit_activate(GtkWidget *widget, gpointer uudata)
+{
+ cfw2conf();
+ if(dirty) {
+ if(msgbox(GTK_MESSAGE_QUESTION, GTK_BUTTONS_YES_NO, _("There are unsaved changes. Do you wish to discard the changes and exit anyway?")) == GTK_RESPONSE_NO)
+ return;
+ }
+ gtk_main_quit();
+ state = -1;
+}
+