Index: keyboard_plugin.c =================================================================== --- keyboard_plugin.c (revision 22108) +++ keyboard_plugin.c (working copy) @@ -82,8 +82,19 @@ static gboolean sticky_key = FALSE; static gboolean sticky_key_ltl = FALSE; static gboolean sticky_key_tk = FALSE; + static gboolean bounce_key = FALSE; +static int debounce_delay = 200; + static gboolean slow_key = FALSE; +static int slow_keys_delay = 200; + +static gboolean mouse_key = FALSE; +static int mouse_keys_delay = 200; +static int mouse_keys_interval = 200; +static int mouse_keys_ttm = 200; +static int mouse_keys_max_speed = 200; + static int repeat_delay = 500; static int repeat_rate = 30; @@ -177,13 +188,19 @@ /* Slow keys */ if(slow_key) + { xkb->ctrls->enabled_ctrls |= XkbSlowKeysMask; + xkb->ctrls->slow_keys_delay = slow_keys_delay; + } else xkb->ctrls->enabled_ctrls &= ~XkbSlowKeysMask; /* Bounce keys */ if(bounce_key) + { xkb->ctrls->enabled_ctrls |= XkbBounceKeysMask; + xkb->ctrls->debounce_delay = debounce_delay; + } else xkb->ctrls->enabled_ctrls &= ~XkbBounceKeysMask; @@ -203,13 +220,24 @@ else xkb->ctrls->ax_options &= ~XkbAX_TwoKeysMask; + if(mouse_key) + { + xkb->ctrls->enabled_ctrls |= XkbMouseKeysMask; + xkb->ctrls->mk_delay = mouse_keys_delay; + xkb->ctrls->mk_interval = 1000 / mouse_keys_interval; + xkb->ctrls->mk_time_to_max = mouse_keys_ttm; + xkb->ctrls->mk_max_speed = mouse_keys_max_speed; + } + else + xkb->ctrls->enabled_ctrls &= ~XkbMouseKeysMask; + /* If any option is set, enable AccessXKeys, otherwise: don't */ if(sticky_key || bounce_key || slow_key) xkb->ctrls->enabled_ctrls |= XkbAccessXKeysMask; else xkb->ctrls->enabled_ctrls &= ~XkbAccessXKeysMask; - XkbSetControls (GDK_DISPLAY (), XkbControlsEnabledMask | XkbStickyKeysMask | XkbBounceKeysMask | XkbSlowKeysMask, xkb); + XkbSetControls (GDK_DISPLAY (), XkbControlsEnabledMask | XkbStickyKeysMask | XkbBounceKeysMask | XkbSlowKeysMask | XkbMouseKeysMask | XkbMouseKeysAccelMask, xkb); XFree (xkb); gdk_flush (); gdk_error_trap_pop (); @@ -390,33 +418,70 @@ McsPlugin *mcs_plugin = dialog->mcs_plugin; bounce_key = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (dialog->checkbutton_bounce)); + gtk_widget_set_sensitive(dialog->scale_debounce_delay, bounce_key); + slow_key = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (dialog->checkbutton_slow)); + gtk_widget_set_sensitive(dialog->scale_slow_keys_delay, slow_key); + sticky_key = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (dialog->checkbutton_sticky)); - if(sticky_key) + + gtk_widget_set_sensitive(dialog->checkbutton_sticky_ltl, sticky_key); + gtk_widget_set_sensitive(dialog->checkbutton_sticky_tk, sticky_key); + if(!sticky_key) { - gtk_widget_set_sensitive(dialog->checkbutton_sticky_ltl, TRUE); - gtk_widget_set_sensitive(dialog->checkbutton_sticky_tk, TRUE); - } - else - { gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(dialog->checkbutton_sticky_ltl), FALSE); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(dialog->checkbutton_sticky_tk), FALSE); - gtk_widget_set_sensitive(dialog->checkbutton_sticky_ltl, FALSE); - gtk_widget_set_sensitive(dialog->checkbutton_sticky_tk, FALSE); } + + mouse_key = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (dialog->checkbutton_mouse)); + gtk_widget_set_sensitive(dialog->scale_mouse_keys_delay, mouse_key); + gtk_widget_set_sensitive(dialog->scale_mouse_keys_interval, mouse_key); + gtk_widget_set_sensitive(dialog->scale_mouse_keys_ttm, mouse_key); + gtk_widget_set_sensitive(dialog->scale_mouse_keys_max_speed, mouse_key); + sticky_key_ltl = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (dialog->checkbutton_sticky_ltl)); sticky_key_tk = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (dialog->checkbutton_sticky_tk)); + debounce_delay = (int) gtk_range_get_value (GTK_RANGE (dialog->scale_debounce_delay)); + slow_keys_delay = (int) gtk_range_get_value (GTK_RANGE (dialog->scale_slow_keys_delay)); + toggle_accessx(); mcs_manager_set_int (mcs_plugin->manager, "Key/StickyKeys", CHANNEL2, sticky_key ? 1 : 0); mcs_manager_set_int (mcs_plugin->manager, "Key/StickyLatchToLock", CHANNEL2, sticky_key_ltl ? 1 : 0); mcs_manager_set_int (mcs_plugin->manager, "Key/StickyTwoKeysDisable", CHANNEL2, sticky_key_tk ? 1 : 0); mcs_manager_set_int (mcs_plugin->manager, "Key/BounceKeys", CHANNEL2, bounce_key ? 1 : 0); mcs_manager_set_int (mcs_plugin->manager, "Key/SlowKeys", CHANNEL2, slow_key ? 1 : 0); + mcs_manager_set_int (mcs_plugin->manager, "Key/MouseKeys", CHANNEL2, mouse_key ? 1 : 0); + mcs_manager_set_int (mcs_plugin->manager, "Key/DeBounceDelay", CHANNEL2, debounce_delay); + mcs_manager_set_int (mcs_plugin->manager, "Key/SlowKeysDelay", CHANNEL2, slow_keys_delay); mcs_manager_notify (mcs_plugin->manager, CHANNEL2); write_options (mcs_plugin); } static void +cb_scale_accessx_changed (GtkWidget * widget, gpointer user_data) +{ + KeyboardMcsDialog *dialog = (KeyboardMcsDialog *) user_data; + McsPlugin *mcs_plugin = dialog->mcs_plugin; + + debounce_delay = (int) gtk_range_get_value (GTK_RANGE (dialog->scale_debounce_delay)); + slow_keys_delay = (int) gtk_range_get_value (GTK_RANGE (dialog->scale_slow_keys_delay)); + + mouse_keys_delay = (int) gtk_range_get_value (GTK_RANGE (dialog->scale_mouse_keys_delay)); + mouse_keys_interval = (int) gtk_range_get_value (GTK_RANGE (dialog->scale_mouse_keys_interval)); + mouse_keys_ttm= (int) gtk_range_get_value (GTK_RANGE (dialog->scale_mouse_keys_ttm)); + mouse_keys_max_speed= (int) gtk_range_get_value (GTK_RANGE (dialog->scale_mouse_keys_max_speed)); + + toggle_accessx(); + mcs_manager_set_int (mcs_plugin->manager, "Key/DeBounceDelay", CHANNEL2, debounce_delay); + mcs_manager_set_int (mcs_plugin->manager, "Key/SlowKeysDelay", CHANNEL2, slow_keys_delay); + + mcs_manager_set_int (mcs_plugin->manager, "Key/MouseKeysDelay", CHANNEL2, mouse_keys_delay); + mcs_manager_set_int (mcs_plugin->manager, "Key/MouseKeysInterval", CHANNEL2, mouse_keys_interval); + mcs_manager_set_int (mcs_plugin->manager, "Key/MouseKeysTimeToMax", CHANNEL2, mouse_keys_ttm); + mcs_manager_set_int (mcs_plugin->manager, "Key/MouseKeysMaxSpeed", CHANNEL2, mouse_keys_max_speed); +} + +static void cb_checkbutton_repeat_changed (GtkWidget * widget, gpointer user_data) { KeyboardMcsDialog *dialog = (KeyboardMcsDialog *) user_data; @@ -476,14 +541,184 @@ write_options (mcs_plugin); } +GtkWidget * +accessx_plugin_create(KeyboardMcsDialog *dialog) +{ + GtkWidget *frame; + GtkWidget *label; + GtkWidget *vbox; + GtkWidget *hbox; + GtkWidget *main_vbox = gtk_vbox_new(FALSE, 5); + GtkWidget *top_hbox = gtk_hbox_new(TRUE, 5); + gtk_box_pack_start(GTK_BOX(main_vbox), top_hbox, FALSE, TRUE, 0); + gtk_widget_show(main_vbox); + gtk_widget_show(top_hbox); + + frame = xfce_framebox_new (_("Sticky keys"), FALSE); + gtk_widget_show (frame); + gtk_box_pack_start(GTK_BOX(top_hbox), frame, TRUE, TRUE, 0); + + vbox = gtk_vbox_new (FALSE, 5); + gtk_widget_show (vbox); + xfce_framebox_add (XFCE_FRAMEBOX (frame), vbox); + + dialog->checkbutton_sticky = gtk_check_button_new_with_mnemonic(_("Enable Sticky keys")); + gtk_widget_show(dialog->checkbutton_sticky); + gtk_box_pack_start(GTK_BOX(vbox), dialog->checkbutton_sticky, FALSE, FALSE, 0); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dialog->checkbutton_sticky), sticky_key); + + dialog->checkbutton_sticky_ltl = gtk_check_button_new_with_mnemonic(_("Latch To Lock")); + gtk_widget_show(dialog->checkbutton_sticky_ltl); + gtk_box_pack_start(GTK_BOX(vbox), dialog->checkbutton_sticky_ltl, FALSE, FALSE, 0); + gtk_widget_set_sensitive(dialog->checkbutton_sticky_ltl, sticky_key); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dialog->checkbutton_sticky_ltl), sticky_key_ltl); + + dialog->checkbutton_sticky_tk = gtk_check_button_new_with_mnemonic(_("Two Keys Disable")); + gtk_widget_show(dialog->checkbutton_sticky_tk); + gtk_box_pack_start(GTK_BOX(vbox), dialog->checkbutton_sticky_tk, FALSE, FALSE, 0); + gtk_widget_set_sensitive(dialog->checkbutton_sticky_tk, sticky_key); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dialog->checkbutton_sticky_tk), sticky_key_tk); + + frame = xfce_framebox_new (_("Slow keys"), FALSE); + gtk_widget_show (frame); + gtk_box_pack_start(GTK_BOX(top_hbox), frame, TRUE, TRUE, 0); + + vbox = gtk_vbox_new (FALSE, 5); + gtk_widget_show (vbox); + xfce_framebox_add (XFCE_FRAMEBOX (frame), vbox); + + dialog->checkbutton_slow = gtk_check_button_new_with_mnemonic(_("Enable Slow keys")); + gtk_widget_show(dialog->checkbutton_slow); + gtk_box_pack_start(GTK_BOX(vbox), dialog->checkbutton_slow, FALSE, FALSE, 0); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dialog->checkbutton_slow), slow_key); + + label = gtk_label_new (_("Slow keys delay :")); + gtk_widget_show (label); + gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT); + gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, TRUE, 0); + gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5); + + dialog->scale_slow_keys_delay = gtk_hscale_new (GTK_ADJUSTMENT (gtk_adjustment_new (slow_keys_delay, 10, 500, 10, 10, 0))); + gtk_widget_show(dialog->scale_slow_keys_delay); + gtk_scale_set_draw_value (GTK_SCALE (dialog->scale_slow_keys_delay), FALSE); + gtk_range_set_update_policy (GTK_RANGE (dialog->scale_slow_keys_delay), GTK_UPDATE_DISCONTINUOUS); + gtk_box_pack_start(GTK_BOX(vbox), dialog->scale_slow_keys_delay, FALSE, FALSE, 0); + gtk_widget_set_sensitive(dialog->scale_slow_keys_delay, slow_key); + + frame = xfce_framebox_new (_("Bounce keys"), FALSE); + gtk_widget_show (frame); + gtk_box_pack_start(GTK_BOX(top_hbox), frame, TRUE, TRUE, 0); + + vbox = gtk_vbox_new (FALSE, 5); + gtk_widget_show (vbox); + xfce_framebox_add (XFCE_FRAMEBOX (frame), vbox); + + dialog->checkbutton_bounce = gtk_check_button_new_with_mnemonic(_("Enable Bounce keys")); + gtk_widget_show(dialog->checkbutton_bounce); + gtk_box_pack_start(GTK_BOX(vbox), dialog->checkbutton_bounce, FALSE, FALSE, 0); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dialog->checkbutton_bounce), bounce_key); + + label = gtk_label_new (_("DeBounce delay :")); + gtk_widget_show (label); + gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0); + gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT); + gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5); + + dialog->scale_debounce_delay = gtk_hscale_new (GTK_ADJUSTMENT (gtk_adjustment_new (debounce_delay, 10, 500, 10, 10, 0))); + gtk_widget_show(dialog->scale_debounce_delay); + gtk_scale_set_draw_value (GTK_SCALE (dialog->scale_debounce_delay), FALSE); + gtk_range_set_update_policy (GTK_RANGE (dialog->scale_debounce_delay), GTK_UPDATE_DISCONTINUOUS); + gtk_box_pack_start(GTK_BOX(vbox), dialog->scale_debounce_delay, FALSE, FALSE, 0); + gtk_widget_set_sensitive(dialog->scale_debounce_delay, bounce_key); + + frame = xfce_framebox_new (_("Mouse keys"), FALSE); + gtk_widget_show (frame); + gtk_box_pack_start(GTK_BOX(main_vbox), frame, FALSE, TRUE, 0); + + vbox = gtk_vbox_new (FALSE, 5); + gtk_widget_show (vbox); + xfce_framebox_add (XFCE_FRAMEBOX (frame), vbox); + + dialog->checkbutton_mouse = gtk_check_button_new_with_mnemonic(_("Enable Mouse keys")); + gtk_widget_show(dialog->checkbutton_mouse); + gtk_box_pack_start(GTK_BOX(vbox), dialog->checkbutton_mouse, FALSE, FALSE, 0); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dialog->checkbutton_mouse), mouse_key); + + hbox = gtk_hbox_new(TRUE, 5); + gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); + gtk_widget_show(hbox); + + vbox = gtk_vbox_new(FALSE, 5); + gtk_box_pack_start(GTK_BOX(hbox), vbox, TRUE, TRUE, 0); + gtk_widget_show(vbox); + + label = gtk_label_new (_("Delay :")); + gtk_widget_show (label); + gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0); + gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT); + gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5); + + dialog->scale_mouse_keys_delay = gtk_hscale_new (GTK_ADJUSTMENT (gtk_adjustment_new (mouse_keys_delay, 10, 500, 10, 10, 0))); + gtk_widget_show(dialog->scale_mouse_keys_delay); + gtk_scale_set_draw_value (GTK_SCALE (dialog->scale_mouse_keys_delay), FALSE); + gtk_range_set_update_policy (GTK_RANGE (dialog->scale_mouse_keys_delay), GTK_UPDATE_DISCONTINUOUS); + gtk_box_pack_start(GTK_BOX(vbox), dialog->scale_mouse_keys_delay, FALSE, TRUE, 0); + gtk_widget_set_sensitive(dialog->scale_mouse_keys_delay, mouse_key); + + label = gtk_label_new (_("Interval :")); + gtk_widget_show (label); + gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0); + gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT); + gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5); + + dialog->scale_mouse_keys_interval = gtk_hscale_new (GTK_ADJUSTMENT (gtk_adjustment_new (mouse_keys_interval, 10, 500, 10, 10, 0))); + gtk_widget_show(dialog->scale_mouse_keys_interval); + gtk_scale_set_draw_value (GTK_SCALE (dialog->scale_mouse_keys_interval), FALSE); + gtk_range_set_update_policy (GTK_RANGE (dialog->scale_mouse_keys_interval), GTK_UPDATE_DISCONTINUOUS); + gtk_box_pack_start(GTK_BOX(vbox), dialog->scale_mouse_keys_interval, FALSE, TRUE, 0); + gtk_widget_set_sensitive(dialog->scale_mouse_keys_interval, mouse_key); + + vbox = gtk_vbox_new(FALSE, 5); + gtk_box_pack_start(GTK_BOX(hbox), vbox, TRUE, TRUE, 0); + gtk_widget_show(vbox); + + label = gtk_label_new (_("Time to max :")); + gtk_widget_show (label); + gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0); + gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT); + gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5); + + dialog->scale_mouse_keys_ttm= gtk_hscale_new (GTK_ADJUSTMENT (gtk_adjustment_new (mouse_keys_ttm, 10, 500, 10, 10, 0))); + gtk_widget_show(dialog->scale_mouse_keys_ttm); + gtk_scale_set_draw_value (GTK_SCALE (dialog->scale_mouse_keys_ttm), FALSE); + gtk_range_set_update_policy (GTK_RANGE (dialog->scale_mouse_keys_ttm), GTK_UPDATE_DISCONTINUOUS); + gtk_box_pack_start(GTK_BOX(vbox), dialog->scale_mouse_keys_ttm, FALSE, TRUE, 0); + gtk_widget_set_sensitive(dialog->scale_mouse_keys_ttm, mouse_key); + + label = gtk_label_new (_("Max speed:")); + gtk_widget_show (label); + gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0); + gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT); + gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5); + + dialog->scale_mouse_keys_max_speed = gtk_hscale_new (GTK_ADJUSTMENT (gtk_adjustment_new (mouse_keys_max_speed, 10, 500, 10, 10, 0))); + gtk_widget_show(dialog->scale_mouse_keys_max_speed); + gtk_scale_set_draw_value (GTK_SCALE (dialog->scale_mouse_keys_max_speed), FALSE); + gtk_range_set_update_policy (GTK_RANGE (dialog->scale_mouse_keys_max_speed), GTK_UPDATE_DISCONTINUOUS); + gtk_box_pack_start(GTK_BOX(vbox), dialog->scale_mouse_keys_max_speed, FALSE, TRUE, 0); + gtk_widget_set_sensitive(dialog->scale_mouse_keys_max_speed, mouse_key); + + return main_vbox; +} + KeyboardMcsDialog * keyboard_plugin_create_dialog (McsPlugin * mcs_plugin) { KeyboardMcsDialog *dialog; GtkWidget *notebook; + GtkWidget *frame; GtkWidget *button; - GtkWidget *frame; GtkWidget *main_hbox; GtkWidget *hbox; GtkWidget *label; @@ -492,6 +727,7 @@ GtkWidget *vbox; GtkWidget *entry; GtkWidget *shortcuts_widget; + GtkWidget *accessx_widget; guint nth = 0; dialog = g_new (KeyboardMcsDialog, 1); @@ -692,62 +928,11 @@ gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook), nth++), label); gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT); - main_hbox = gtk_hbox_new(TRUE, 5); - gtk_widget_show(main_hbox); - gtk_container_add(GTK_CONTAINER(notebook), main_hbox); - gtk_container_set_border_width (GTK_CONTAINER (main_hbox), 5); + accessx_widget = accessx_plugin_create(dialog); + gtk_widget_show(accessx_widget); + gtk_container_add(GTK_CONTAINER(notebook), accessx_widget); + gtk_container_set_border_width (GTK_CONTAINER (accessx_widget), 5); - frame = xfce_framebox_new (_("Sticky keys"), FALSE); - gtk_widget_show (frame); - gtk_box_pack_start (GTK_BOX (main_hbox), frame, FALSE, TRUE, 0); - - vbox = gtk_vbox_new (FALSE, 5); - gtk_widget_show (vbox); - xfce_framebox_add (XFCE_FRAMEBOX (frame), vbox); - - dialog->checkbutton_sticky = gtk_check_button_new_with_mnemonic(_("Enable Sticky keys")); - gtk_widget_show(dialog->checkbutton_sticky); - gtk_box_pack_start(GTK_BOX(vbox), dialog->checkbutton_sticky, FALSE, FALSE, 0); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dialog->checkbutton_sticky), sticky_key); - - dialog->checkbutton_sticky_ltl = gtk_check_button_new_with_mnemonic(_("Latch To Lock")); - gtk_widget_show(dialog->checkbutton_sticky_ltl); - gtk_box_pack_start(GTK_BOX(vbox), dialog->checkbutton_sticky_ltl, FALSE, FALSE, 0); - gtk_widget_set_sensitive(dialog->checkbutton_sticky_ltl, sticky_key); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dialog->checkbutton_sticky_ltl), sticky_key_ltl); - - dialog->checkbutton_sticky_tk = gtk_check_button_new_with_mnemonic(_("Two Keys Disable")); - gtk_widget_show(dialog->checkbutton_sticky_tk); - gtk_box_pack_start(GTK_BOX(vbox), dialog->checkbutton_sticky_tk, FALSE, FALSE, 0); - gtk_widget_set_sensitive(dialog->checkbutton_sticky_tk, sticky_key); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dialog->checkbutton_sticky_tk), sticky_key_tk); - - frame = xfce_framebox_new (_("Slow keys"), FALSE); - gtk_widget_show (frame); - gtk_box_pack_start (GTK_BOX (main_hbox), frame, FALSE, TRUE, 0); - - vbox = gtk_vbox_new (FALSE, 5); - gtk_widget_show (vbox); - xfce_framebox_add (XFCE_FRAMEBOX (frame), vbox); - - dialog->checkbutton_slow = gtk_check_button_new_with_mnemonic(_("Enable Slow keys")); - gtk_widget_show(dialog->checkbutton_slow); - gtk_box_pack_start(GTK_BOX(vbox), dialog->checkbutton_slow, FALSE, FALSE, 0); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dialog->checkbutton_slow), slow_key); - - frame = xfce_framebox_new (_("Bounce keys"), FALSE); - gtk_widget_show (frame); - gtk_box_pack_start (GTK_BOX (main_hbox), frame, FALSE, TRUE, 0); - - vbox = gtk_vbox_new (FALSE, 5); - gtk_widget_show (vbox); - xfce_framebox_add (XFCE_FRAMEBOX (frame), vbox); - - dialog->checkbutton_bounce = gtk_check_button_new_with_mnemonic(_("Enable Bounce keys")); - gtk_widget_show(dialog->checkbutton_bounce); - gtk_box_pack_start(GTK_BOX(vbox), dialog->checkbutton_bounce, FALSE, FALSE, 0); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dialog->checkbutton_bounce), bounce_key); - label = gtk_label_new (_("Accessibility")); gtk_widget_show (label); gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook), @@ -805,6 +990,14 @@ g_signal_connect (G_OBJECT (dialog->checkbutton_sticky_tk), "toggled", G_CALLBACK (cb_checkbutton_accessx_changed), dialog); g_signal_connect (G_OBJECT (dialog->checkbutton_bounce), "toggled", G_CALLBACK (cb_checkbutton_accessx_changed), dialog); g_signal_connect (G_OBJECT (dialog->checkbutton_slow), "toggled", G_CALLBACK (cb_checkbutton_accessx_changed), dialog); + g_signal_connect (G_OBJECT (dialog->scale_slow_keys_delay), "value_changed", (GCallback) cb_scale_accessx_changed, dialog); + g_signal_connect (G_OBJECT (dialog->scale_debounce_delay), "value_changed", (GCallback) cb_scale_accessx_changed, dialog); + g_signal_connect (G_OBJECT (dialog->checkbutton_mouse), "toggled", G_CALLBACK (cb_checkbutton_accessx_changed), dialog); + + g_signal_connect (G_OBJECT (dialog->scale_mouse_keys_delay), "value_changed", (GCallback) cb_scale_accessx_changed, dialog); + g_signal_connect (G_OBJECT (dialog->scale_mouse_keys_interval), "value_changed", (GCallback) cb_scale_accessx_changed, dialog); + g_signal_connect (G_OBJECT (dialog->scale_mouse_keys_ttm), "value_changed", (GCallback) cb_scale_accessx_changed, dialog); + g_signal_connect (G_OBJECT (dialog->scale_mouse_keys_max_speed), "value_changed", (GCallback) cb_scale_accessx_changed, dialog); } static void @@ -1014,6 +1207,17 @@ mcs_manager_set_int (mcs_plugin->manager, "Key/BounceKeys", CHANNEL2, bounce_key ? 1 : 0); } + setting = mcs_manager_setting_lookup (mcs_plugin->manager, "Key/DeBounceDelay", CHANNEL2); + if (setting) + { + debounce_delay = setting->data.v_int; + } + else + { + debounce_delay = 200; + mcs_manager_set_int (mcs_plugin->manager, "Key/DeBounceDelay", CHANNEL2, debounce_delay); + } + setting = mcs_manager_setting_lookup (mcs_plugin->manager, "Key/SlowKeys", CHANNEL2); if(setting) { @@ -1025,6 +1229,72 @@ mcs_manager_set_int (mcs_plugin->manager, "Key/SlowKeys", CHANNEL2, slow_key ? 1 : 0); } + setting = mcs_manager_setting_lookup (mcs_plugin->manager, "Key/SlowKeysDelay", CHANNEL2); + if (setting) + { + slow_keys_delay = setting->data.v_int; + } + else + { + slow_keys_delay = 200; + mcs_manager_set_int (mcs_plugin->manager, "Key/SlowKeysDelay", CHANNEL2, slow_keys_delay); + } + + setting = mcs_manager_setting_lookup (mcs_plugin->manager, "Key/MouseKeys", CHANNEL2); + if(setting) + { + mouse_key = (setting->data.v_int ? TRUE : FALSE); + } + else + { + mouse_key = FALSE; + mcs_manager_set_int (mcs_plugin->manager, "Key/MouseKeys", CHANNEL2, mouse_key ? 1 : 0); + } + + setting = mcs_manager_setting_lookup (mcs_plugin->manager, "Key/MouseKeysDelay", CHANNEL2); + if(setting) + { + mouse_keys_delay = setting->data.v_int; + } + else + { + mouse_keys_delay = 200; + mcs_manager_set_int (mcs_plugin->manager, "Key/MouseKeysDelay", CHANNEL2, mouse_keys_delay); + } + + setting = mcs_manager_setting_lookup (mcs_plugin->manager, "Key/MouseKeysInterval", CHANNEL2); + if(setting) + { + mouse_keys_interval = setting->data.v_int; + } + else + { + mouse_keys_interval = 200; + mcs_manager_set_int (mcs_plugin->manager, "Key/MouseKeysInterval", CHANNEL2, mouse_keys_interval); + } + + setting = mcs_manager_setting_lookup (mcs_plugin->manager, "Key/MouseKeysMaxSpeed", CHANNEL2); + if(setting) + { + mouse_keys_max_speed = setting->data.v_int; + } + else + { + mouse_keys_max_speed = 200; + mcs_manager_set_int (mcs_plugin->manager, "Key/MouseKeysMaxSpeed", CHANNEL2, mouse_keys_max_speed); + } + + setting = mcs_manager_setting_lookup (mcs_plugin->manager, "Key/MouseKeysTimeToMax", CHANNEL2); + if(setting) + { + mouse_keys_ttm = setting->data.v_int; + } + else + { + mouse_keys_ttm = 200; + mcs_manager_set_int (mcs_plugin->manager, "Key/MouseKeysTimeToMax", CHANNEL2, mouse_keys_ttm); + } + #ifdef USE_XF86MISC #ifdef DEBUG g_message ("Querying XF86Misc extension"); Index: shortcuts_plugin.h =================================================================== --- shortcuts_plugin.h (revision 22108) +++ shortcuts_plugin.h (working copy) @@ -33,7 +33,15 @@ GtkWidget *checkbutton_sticky_ltl; GtkWidget *checkbutton_sticky_tk; GtkWidget *checkbutton_bounce; + GtkWidget *scale_debounce_delay; GtkWidget *checkbutton_slow; + GtkWidget *scale_slow_keys_delay; + GtkWidget *checkbutton_mouse; + GtkWidget *scale_mouse_keys_delay; + GtkWidget *scale_mouse_keys_interval; + GtkWidget *scale_mouse_keys_ttm; + GtkWidget *scale_mouse_keys_max_speed; + GtkWidget *scale_repeat_rate; GtkWidget *scale_repeat_delay; GtkWidget *scale_blink_time;