static void
visual_bell_enable_toggled_cb (GtkWidget *w, GtkBuilder *dialog)
{
	gboolean active = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (w));

	if (notifications_dialog) {
		gtk_widget_set_sensitive (NWID ("visual_bell_titlebar"), active);
		gtk_widget_set_sensitive (NWID ("visual_bell_fullscreen"), active);
	}
}
static void
bell_flash_gsettings_changed (GSettings *settings, gchar *key, GtkBuilder *dialog)
{
	int bell_flash_type = g_settings_get_enum (settings, key);
	if (bell_flash_type == VISUAL_BELL_TYPE_FULLSCREEN)
	{
		gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (NWID ("visual_bell_fullscreen")), TRUE);
	}
	else if (bell_flash_type == VISUAL_BELL_TYPE_FRAME_FLASH)
	{
		gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (NWID ("visual_bell_titlebar")), TRUE);
	}
}
static void
notifications_button_clicked_cb (GtkWidget *button, GladeXML *dialog)
{
	GtkWidget *w;

	notifications_dialog = glade_xml_new (GNOMECC_GLADE_DIR
					      "/gnome-keyboard-properties.glade",
					      "a11y_notifications_dialog", NULL);

	stickykeys_enable_toggled_cb (WID ("stickykeys_enable"), dialog);
	slowkeys_enable_toggled_cb (WID ("slowkeys_enable"), dialog);
	bouncekeys_enable_toggled_cb (WID ("bouncekeys_enable"), dialog);

	w = NWID ("feature_state_change_beep");
	gconf_peditor_new_boolean (NULL,
	                          CONFIG_ROOT "/feature_state_change_beep",
	                          w, NULL);

	w = NWID ("togglekeys_enable");
	gconf_peditor_new_boolean (NULL,
	                          CONFIG_ROOT "/togglekeys_enable",
	                          w, NULL);

	w = NWID ("stickykeys_modifier_beep");
	gconf_peditor_new_boolean (NULL,
	                          CONFIG_ROOT "/stickykeys_modifier_beep",
	                          w, NULL);

	w = NWID ("slowkeys_beep_press");
	gconf_peditor_new_boolean (NULL,
	                          CONFIG_ROOT "/slowkeys_beep_press",
	                          w, NULL);

	w = NWID ("slowkeys_beep_accept");
	gconf_peditor_new_boolean (NULL,
	                          CONFIG_ROOT "/slowkeys_beep_accept",
	                          w, NULL);

	w = NWID ("slowkeys_beep_reject");
	gconf_peditor_new_boolean (NULL,
	                          CONFIG_ROOT "/slowkeys_beep_reject",
	                          w, NULL);

	w = NWID ("bouncekeys_beep_reject");
	gconf_peditor_new_boolean (NULL,
	                          CONFIG_ROOT "/bouncekeys_beep_reject",
	                          w, NULL);

	w = NWID ("a11y_notifications_dialog");
	gtk_window_set_transient_for (GTK_WINDOW (w),
	                              GTK_WINDOW (WID ("keyboard_dialog")));
	g_signal_connect (w, "response",
			  G_CALLBACK (a11y_notifications_dialog_response_cb), NULL);

	gtk_dialog_run (GTK_DIALOG (w));

	g_object_unref (notifications_dialog);
	notifications_dialog = NULL;
}
static void
bouncekeys_enable_toggled_cb (GtkWidget *w, GtkBuilder *dialog)
{
	gboolean active = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (w));

	gtk_widget_set_sensitive (WID ("bouncekeys_delay_box"), active);
	if (notifications_dialog)
		gtk_widget_set_sensitive (NWID ("bouncekeys_notifications_box"), active);
}
static void
bell_flash_radio_changed (GtkWidget *widget, GtkBuilder *builder)
{
	GSettings *marco_settings;
	marco_settings = g_settings_new (MARCO_SCHEMA);
	int old_bell_flash_type = g_settings_get_enum (marco_settings, "visual-bell-type");
	int new_bell_flash_type = VISUAL_BELL_TYPE_INVALID;

	if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (NWID ("visual_bell_fullscreen"))))
		new_bell_flash_type = VISUAL_BELL_TYPE_FULLSCREEN;
	else if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (NWID ("visual_bell_titlebar"))))
		new_bell_flash_type = VISUAL_BELL_TYPE_FRAME_FLASH;

	if (old_bell_flash_type != new_bell_flash_type)
		g_settings_set_enum (marco_settings, "visual-bell-type", new_bell_flash_type);

	g_object_unref (marco_settings);
}
static void
stickykeys_enable_toggled_cb (GtkWidget *w, GladeXML *dialog)
{
	gboolean active = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (w));

	gtk_widget_set_sensitive (WID ("stickykeys_two_key_off"), active);
	if (notifications_dialog)
		gtk_widget_set_sensitive (NWID ("stickykeys_notifications_box"), active);
}
static void
notifications_button_clicked_cb (GtkWidget *button, GtkBuilder *dialog)
{
	GtkWidget *w;

    notifications_dialog = gtk_builder_new ();
    gtk_builder_add_from_file (notifications_dialog, MATECC_UI_DIR
                               "/mate-keyboard-properties-a11y-notifications.ui",
                               NULL);

	stickykeys_enable_toggled_cb (WID ("stickykeys_enable"), dialog);
	slowkeys_enable_toggled_cb (WID ("slowkeys_enable"), dialog);
	bouncekeys_enable_toggled_cb (WID ("bouncekeys_enable"), dialog);

	w = NWID ("feature_state_change_beep");
	g_settings_bind (a11y_settings, "feature-state-change-beep", w, "active", G_SETTINGS_BIND_DEFAULT);

	w = NWID ("togglekeys_enable");
	g_settings_bind (a11y_settings, "togglekeys-enable", w, "active", G_SETTINGS_BIND_DEFAULT);

	w = NWID ("stickykeys_modifier_beep");
	g_settings_bind (a11y_settings, "stickykeys-modifier-beep", w, "active", G_SETTINGS_BIND_DEFAULT);

	w = NWID ("slowkeys_beep_press");
	g_settings_bind (a11y_settings, "slowkeys-beep-press", w, "active", G_SETTINGS_BIND_DEFAULT);

	w = NWID ("slowkeys_beep_accept");
	g_settings_bind (a11y_settings, "slowkeys-beep-accept", w, "active", G_SETTINGS_BIND_DEFAULT);

	w = NWID ("slowkeys_beep_reject");
	g_settings_bind (a11y_settings, "slowkeys-beep-reject", w, "active", G_SETTINGS_BIND_DEFAULT);

	w = NWID ("bouncekeys_beep_reject");
	g_settings_bind (a11y_settings, "bouncekeys-beep-reject", w, "active", G_SETTINGS_BIND_DEFAULT);

	GSettings *marco_settings = g_settings_new (MARCO_SCHEMA);
	w = NWID ("visual_bell_enable");
	g_settings_bind (marco_settings, "visual-bell", w, "active", G_SETTINGS_BIND_DEFAULT);
	g_signal_connect (w, "toggled",
			G_CALLBACK (visual_bell_enable_toggled_cb), dialog);
	visual_bell_enable_toggled_cb (w, dialog);

	bell_flash_gsettings_changed (marco_settings, "visual-bell-type", NULL);
	g_signal_connect (NWID ("visual_bell_titlebar"), "clicked",
					  G_CALLBACK(bell_flash_radio_changed),
					  notifications_dialog);
	g_signal_connect (NWID ("visual_bell_fullscreen"), "clicked",
					  G_CALLBACK(bell_flash_radio_changed),
					  notifications_dialog);
	g_signal_connect (marco_settings,
					  "changed::visual-bell-type",
					  G_CALLBACK (bell_flash_gsettings_changed),
					  notifications_dialog);

	w = NWID ("a11y_notifications_dialog");
	gtk_window_set_transient_for (GTK_WINDOW (w),
	                              GTK_WINDOW (WID ("keyboard_dialog")));
	g_signal_connect (w, "response",
			  G_CALLBACK (a11y_notifications_dialog_response_cb), NULL);

	gtk_dialog_run (GTK_DIALOG (w));

	g_object_unref (marco_settings);
	g_object_unref (notifications_dialog);
	notifications_dialog = NULL;
}