[Xfce4-commits] r23059 - in xfce-mcs-plugins/trunk/plugins: keyboard_plugin mouse_plugin

Olivier Fourdan olivier at xfce.org
Sat Sep 2 21:58:33 UTC 2006


Author: olivier
Date: 2006-09-02 21:58:29 +0000 (Sat, 02 Sep 2006)
New Revision: 23059

Modified:
   xfce-mcs-plugins/trunk/plugins/keyboard_plugin/keyboard_plugin.c
   xfce-mcs-plugins/trunk/plugins/keyboard_plugin/shortcuts_plugin.h
   xfce-mcs-plugins/trunk/plugins/mouse_plugin/Makefile.am
   xfce-mcs-plugins/trunk/plugins/mouse_plugin/mouse-cursor-settings.c
   xfce-mcs-plugins/trunk/plugins/mouse_plugin/mouse-plugin-internal.h
   xfce-mcs-plugins/trunk/plugins/mouse_plugin/mouse_plugin.c
Log:
Move mouse keys to the mouse plugin (Stephan Arts, bug #1901), remove some useless labels (me)

Modified: xfce-mcs-plugins/trunk/plugins/keyboard_plugin/keyboard_plugin.c
===================================================================
--- xfce-mcs-plugins/trunk/plugins/keyboard_plugin/keyboard_plugin.c	2006-09-02 17:27:44 UTC (rev 23058)
+++ xfce-mcs-plugins/trunk/plugins/keyboard_plugin/keyboard_plugin.c	2006-09-02 21:58:29 UTC (rev 23059)
@@ -89,12 +89,6 @@
 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;
 
@@ -220,24 +214,13 @@
             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 | XkbMouseKeysMask | XkbMouseKeysAccelMask, xkb);
+            XkbSetControls (GDK_DISPLAY (), XkbControlsEnabledMask | XkbStickyKeysMask | XkbBounceKeysMask | XkbSlowKeysMask, xkb);
             XFree (xkb);
             gdk_flush ();
             gdk_error_trap_pop ();
@@ -433,12 +416,6 @@
         gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(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));
@@ -450,7 +427,6 @@
     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);
@@ -466,19 +442,9 @@
     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
@@ -547,16 +513,12 @@
     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);
+    gtk_box_pack_start(GTK_BOX(main_vbox), frame, TRUE, TRUE, 0);
 
     vbox = gtk_vbox_new (FALSE, 5);
     gtk_widget_show (vbox);
@@ -581,7 +543,7 @@
 
     frame = xfce_framebox_new (_("Slow keys"), FALSE);
     gtk_widget_show (frame);
-    gtk_box_pack_start(GTK_BOX(top_hbox), frame, TRUE, TRUE, 0);
+    gtk_box_pack_start(GTK_BOX(main_vbox), frame, TRUE, TRUE, 0);
 
     vbox = gtk_vbox_new (FALSE, 5);
     gtk_widget_show (vbox);
@@ -607,7 +569,7 @@
 
     frame = xfce_framebox_new (_("Bounce keys"), FALSE);
     gtk_widget_show (frame);
-    gtk_box_pack_start(GTK_BOX(top_hbox), frame, TRUE, TRUE, 0);
+    gtk_box_pack_start(GTK_BOX(main_vbox), frame, TRUE, TRUE, 0);
 
     vbox = gtk_vbox_new (FALSE, 5);
     gtk_widget_show (vbox);
@@ -631,83 +593,6 @@
     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;
 }
 
@@ -992,12 +877,6 @@
     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
@@ -1240,61 +1119,6 @@
         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");

Modified: xfce-mcs-plugins/trunk/plugins/keyboard_plugin/shortcuts_plugin.h
===================================================================
--- xfce-mcs-plugins/trunk/plugins/keyboard_plugin/shortcuts_plugin.h	2006-09-02 17:27:44 UTC (rev 23058)
+++ xfce-mcs-plugins/trunk/plugins/keyboard_plugin/shortcuts_plugin.h	2006-09-02 21:58:29 UTC (rev 23059)
@@ -36,11 +36,6 @@
     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;

Modified: xfce-mcs-plugins/trunk/plugins/mouse_plugin/Makefile.am
===================================================================
--- xfce-mcs-plugins/trunk/plugins/mouse_plugin/Makefile.am	2006-09-02 17:27:44 UTC (rev 23058)
+++ xfce-mcs-plugins/trunk/plugins/mouse_plugin/Makefile.am	2006-09-02 21:58:29 UTC (rev 23059)
@@ -20,6 +20,7 @@
 	$(LIBX11_CFLAGS)						\
 	$(LIBXFCEGUI4_CFLAGS)						\
 	$(XFCE_MCS_MANAGER_CFLAGS)					\
+	$(XKB_CFLAGS)							\
 	$(PLATFORM_CFLAGS)
 
 mouse_plugin_la_LDFLAGS =						\
@@ -31,7 +32,8 @@
 
 mouse_plugin_la_LIBADD =						\
 	$(LIBX11_LIBS)							\
-	$(XCURSOR_LIBS)
+	$(XCURSOR_LIBS)                                                 \
+	$(XKB_LIBS)
 
 if HAVE_CYGWIN
 mouse_plugin_la_LDFLAGS +=						\

Modified: xfce-mcs-plugins/trunk/plugins/mouse_plugin/mouse-cursor-settings.c
===================================================================
--- xfce-mcs-plugins/trunk/plugins/mouse_plugin/mouse-cursor-settings.c	2006-09-02 17:27:44 UTC (rev 23058)
+++ xfce-mcs-plugins/trunk/plugins/mouse_plugin/mouse-cursor-settings.c	2006-09-02 21:58:29 UTC (rev 23059)
@@ -539,13 +539,9 @@
     gtk_container_set_border_width(GTK_CONTAINER(dialog->cursor_page), BORDER);
     gtk_widget_show( dialog->cursor_page );
 
-    fbox = xfce_create_framebox( _( "Theme Name" ), &frame_bin );
-    gtk_widget_show( fbox );
-    gtk_box_pack_start( GTK_BOX( dialog->cursor_page ), fbox, TRUE, TRUE, 0 );
-
     scrolledwindow = gtk_scrolled_window_new( NULL, NULL );
     gtk_widget_show( scrolledwindow );
-    gtk_container_add( GTK_CONTAINER( frame_bin ), scrolledwindow );
+    gtk_box_pack_start( GTK_BOX( dialog->cursor_page ), scrolledwindow, TRUE, TRUE, 0 );
     gtk_scrolled_window_set_policy( GTK_SCROLLED_WINDOW( scrolledwindow ),
                                     GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC );
     gtk_scrolled_window_set_shadow_type( GTK_SCROLLED_WINDOW( scrolledwindow ), GTK_SHADOW_IN );

Modified: xfce-mcs-plugins/trunk/plugins/mouse_plugin/mouse-plugin-internal.h
===================================================================
--- xfce-mcs-plugins/trunk/plugins/mouse_plugin/mouse-plugin-internal.h	2006-09-02 17:27:44 UTC (rev 23058)
+++ xfce-mcs-plugins/trunk/plugins/mouse_plugin/mouse-plugin-internal.h	2006-09-02 21:58:29 UTC (rev 23059)
@@ -84,6 +84,16 @@
     GtkWidget *cursor_theme_list;
     GtkWidget *cursor_preview_list;
     GtkWidget *cursor_size_spinbtn;
+
+#ifdef USE_XKB
+		/* accessibility tab */
+		GtkWidget *accessx_page;
+    GtkWidget *checkbutton_mouse;
+    GtkWidget *scale_mouse_keys_delay;
+    GtkWidget *scale_mouse_keys_interval;
+    GtkWidget *scale_mouse_keys_ttm;
+    GtkWidget *scale_mouse_keys_max_speed;
+#endif
 } Itf;
 
 void mouse_plugin_set_initial_cursor_values(McsPlugin *mcs_plugin);

Modified: xfce-mcs-plugins/trunk/plugins/mouse_plugin/mouse_plugin.c
===================================================================
--- xfce-mcs-plugins/trunk/plugins/mouse_plugin/mouse_plugin.c	2006-09-02 17:27:44 UTC (rev 23058)
+++ xfce-mcs-plugins/trunk/plugins/mouse_plugin/mouse_plugin.c	2006-09-02 21:58:29 UTC (rev 23059)
@@ -24,6 +24,10 @@
 
 #include <X11/Xlib.h>
 
+#ifdef USE_XKB
+#include <X11/XKBlib.h>
+#endif
+
 #include <gtk/gtk.h>
 #include <gdk/gdk.h>
 #include <gdk/gdkx.h>
@@ -64,6 +68,14 @@
 static int threshold = DEFAULT_THRESHOLD;
 static int denominator = DEFAULT_DENOMINATOR;
 
+#ifdef USE_XKB
+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 gboolean xkbpresent = FALSE;
+#endif
 
 static void get_mouse_values(int *accel_return, int *denom_return, int *thresh_return)
 {
@@ -206,6 +218,91 @@
     mouse_plugin_write_options(mcs_plugin);
 }
 
+void
+create_accessx_page(Itf *dialog)
+{
+    GtkWidget *frame;
+    GtkWidget *label;
+    GtkWidget *vbox;
+    GtkWidget *hbox;
+    GtkWidget *main_vbox = gtk_vbox_new(FALSE, 5);
+
+    vbox = gtk_vbox_new (FALSE, 5);
+    gtk_widget_show (vbox);
+    gtk_box_pack_start (GTK_BOX (main_vbox), vbox, FALSE, FALSE, 0);
+
+    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);
+    
+    dialog->accessx_page = main_vbox;
+}
+
 Itf *create_mouse_dialog(McsPlugin * mcs_plugin)
 {
     Itf *dialog;
@@ -235,7 +332,6 @@
     gtk_widget_show(dialog->notebook_vbox);
     gtk_box_pack_start(GTK_BOX(dialog->dialog_vbox1), dialog->notebook_vbox, TRUE, TRUE, 0);
 
-#ifdef HAVE_XCURSOR_EXTENSION
     dialog->notebook = gtk_notebook_new();
     gtk_widget_show(dialog->notebook);
     gtk_box_pack_start(GTK_BOX(dialog->notebook_vbox), dialog->notebook, TRUE, TRUE, 0);
@@ -246,9 +342,6 @@
     gtk_container_set_border_width(GTK_CONTAINER(dialog->vbox1), 6);
     gtk_widget_show(dialog->vbox1);
     gtk_notebook_append_page(GTK_NOTEBOOK(dialog->notebook), dialog->vbox1, lbl);
-#else
-    dialog->vbox1 = dialog->notebook_vbox;
-#endif
 
     sg = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
     
@@ -423,10 +516,90 @@
     mouse_plugin_create_cursor_page(dialog);
     gtk_notebook_append_page(GTK_NOTEBOOK(dialog->notebook), dialog->cursor_page, lbl);
 #endif
+
+#ifdef USE_XKB
+    lbl = gtk_label_new(_("Accessibility"));
+    gtk_widget_show(lbl);
+    create_accessx_page(dialog);
+		gtk_widget_show_all(dialog->accessx_page);
+    gtk_notebook_append_page(GTK_NOTEBOOK(dialog->notebook), dialog->accessx_page, lbl);
+#endif
     
     return dialog;
 }
 
+#ifdef USE_XKB
+static void
+toggle_accessx()
+{
+    if (xkbpresent)
+    {
+        XkbDescPtr xkb = XkbAllocKeyboard ();
+        if (xkb)
+        {
+            gdk_error_trap_push ();
+            XkbGetControls (GDK_DISPLAY (), XkbAllControlsMask, xkb);
+
+            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;
+
+            XkbSetControls (GDK_DISPLAY (), XkbControlsEnabledMask | XkbMouseKeysMask | XkbMouseKeysAccelMask, xkb);
+            XFree (xkb);
+            gdk_flush ();
+            gdk_error_trap_pop ();
+        }
+        else
+        {
+            g_warning ("XkbAllocKeyboard() returned null pointer");
+        }
+    }
+}
+
+static void
+cb_scale_accessx_changed (GtkWidget * widget, gpointer user_data)
+{
+    Itf *itf = (Itf *)user_data;
+		McsPlugin *mcs_plugin = itf->mcs_plugin;
+
+    mouse_keys_delay = (int) gtk_range_get_value (GTK_RANGE (itf->scale_mouse_keys_delay));
+    mouse_keys_interval = (int) gtk_range_get_value (GTK_RANGE (itf->scale_mouse_keys_interval));
+    mouse_keys_ttm= (int) gtk_range_get_value (GTK_RANGE (itf->scale_mouse_keys_ttm));
+    mouse_keys_max_speed= (int) gtk_range_get_value (GTK_RANGE (itf->scale_mouse_keys_max_speed));
+
+		toggle_accessx();
+    mcs_manager_set_int (mcs_plugin->manager, "Mouse/MouseKeysDelay", CHANNEL2, mouse_keys_delay);
+    mcs_manager_set_int (mcs_plugin->manager, "Mouse/MouseKeysInterval", CHANNEL2, mouse_keys_interval);
+    mcs_manager_set_int (mcs_plugin->manager, "Mouse/MouseKeysTimeToMax", CHANNEL2, mouse_keys_ttm);
+    mcs_manager_set_int (mcs_plugin->manager, "Mouse/MouseKeysMaxSpeed", CHANNEL2, mouse_keys_max_speed);
+}
+
+static void
+cb_checkbutton_accessx_changed (GtkWidget * widget, gpointer user_data)
+{
+    Itf *itf = (Itf *)user_data;
+		McsPlugin *mcs_plugin = itf->mcs_plugin;
+
+    mouse_key = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (itf->checkbutton_mouse));
+    gtk_widget_set_sensitive(itf->scale_mouse_keys_delay, mouse_key);
+    gtk_widget_set_sensitive(itf->scale_mouse_keys_interval, mouse_key);
+    gtk_widget_set_sensitive(itf->scale_mouse_keys_ttm, mouse_key);
+    gtk_widget_set_sensitive(itf->scale_mouse_keys_max_speed, mouse_key);
+
+		toggle_accessx();
+
+    mcs_manager_set_int (mcs_plugin->manager, "Mouse/MouseKeys", CHANNEL2, mouse_key ? 1 : 0);
+    mouse_plugin_write_options (mcs_plugin);
+}
+#endif
+
 static void setup_dialog(Itf * itf)
 {
     g_signal_connect(G_OBJECT(itf->mouse_dialog), "response", G_CALLBACK(cb_dialog_response), itf->mcs_plugin);
@@ -438,6 +611,15 @@
     g_signal_connect(G_OBJECT(itf->hscale3), "value_changed", (GCallback) cb_dnd_threshold_changed, itf);
     g_signal_connect(G_OBJECT(itf->hscale4), "value_changed", (GCallback) cb_dbl_clicktime_changed, itf);
 
+#ifdef USE_XKB
+    g_signal_connect(G_OBJECT(itf->checkbutton_mouse), "toggled", (GCallback) cb_checkbutton_accessx_changed , itf);
+    g_signal_connect(G_OBJECT(itf->scale_mouse_keys_delay), "value_changed", (GCallback) cb_scale_accessx_changed , itf);
+    g_signal_connect(G_OBJECT(itf->scale_mouse_keys_interval), "value_changed", (GCallback) cb_scale_accessx_changed, itf);
+    g_signal_connect(G_OBJECT(itf->scale_mouse_keys_ttm), "value_changed", (GCallback) cb_scale_accessx_changed, itf);
+    g_signal_connect(G_OBJECT(itf->scale_mouse_keys_max_speed), "value_changed", (GCallback) cb_scale_accessx_changed , itf);
+#endif
+    
+
     xfce_gtk_window_center_on_monitor_with_pointer (GTK_WINDOW (itf->mouse_dialog));
     gdk_x11_window_set_user_time(GTK_WIDGET (itf->mouse_dialog)->window, 
             gdk_x11_get_server_time (GTK_WIDGET (itf->mouse_dialog)->window));
@@ -468,6 +650,12 @@
 {
     McsSetting *setting;
     gchar *rcfile, *path;
+#ifdef USE_XKB
+    int xkbmajor = XkbMajorVersion, xkbminor = XkbMinorVersion;
+    int xkbopcode, xkbevent, xkberror;
+#endif
+
+
     
     path = g_build_filename ("xfce4", RCDIR, RCFILE1, NULL);
     rcfile = xfce_resource_lookup (XFCE_RESOURCE_CONFIG, path);
@@ -578,6 +766,85 @@
         mcs_manager_set_int(mcs_plugin->manager, "Mouse/Threshold", CHANNEL2, threshold);
     }
 
+#ifdef USE_XKB
+#ifdef DEBUG
+    g_message ("Querying Xkb extension");
+#endif
+    if (XkbQueryExtension (GDK_DISPLAY (), &xkbopcode, &xkbevent, &xkberror, &xkbmajor, &xkbminor))
+    {
+#ifdef DEBUG
+        g_message ("Xkb extension found");
+#endif
+        xkbpresent = TRUE;
+    }
+    else
+    {
+#ifdef DEBUG
+        g_message ("Your X server does not support Xkb extension");
+#endif
+        xkbpresent = FALSE;
+    }
+#else
+#ifdef DEBUG
+    g_warning ("This build doesn't include support for Xkb extension");
+#endif
+    setting = mcs_manager_setting_lookup (mcs_plugin->manager, "Mouse/MouseKeys", CHANNEL2);
+    if(setting)
+    {
+        mouse_key = (setting->data.v_int ? TRUE : FALSE);
+    }
+    else
+    {
+        mouse_key = FALSE;
+        mcs_manager_set_int (mcs_plugin->manager, "Mouse/MouseKeys", CHANNEL2, mouse_key ? 1 : 0);
+    }
+
+    setting = mcs_manager_setting_lookup (mcs_plugin->manager, "Mouse/MouseKeysDelay", CHANNEL2);
+    if(setting)
+    {
+        mouse_keys_delay = setting->data.v_int;
+    }
+    else
+    {
+        mouse_keys_delay = 200;
+        mcs_manager_set_int (mcs_plugin->manager, "Mouse/MouseKeysDelay", CHANNEL2, mouse_keys_delay);
+    }
+
+    setting = mcs_manager_setting_lookup (mcs_plugin->manager, "Mouse/MouseKeysInterval", CHANNEL2);
+    if(setting)
+    {
+        mouse_keys_interval = setting->data.v_int;
+    }
+    else
+    {
+        mouse_keys_interval = 200;
+        mcs_manager_set_int (mcs_plugin->manager, "Mouse/MouseKeysInterval", CHANNEL2, mouse_keys_interval);
+    }
+
+    setting = mcs_manager_setting_lookup (mcs_plugin->manager, "Mouse/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, "Mouse/MouseKeysMaxSpeed", CHANNEL2, mouse_keys_max_speed);
+    }
+
+    setting = mcs_manager_setting_lookup (mcs_plugin->manager, "Mouse/MouseKeysTimeToMax", CHANNEL2);
+    if(setting)
+    {
+        mouse_keys_ttm = setting->data.v_int;
+    }
+    else
+    {
+        mouse_keys_ttm = 200;
+        mcs_manager_set_int (mcs_plugin->manager, "Mouse/MouseKeysTimeToMax", CHANNEL2, mouse_keys_ttm);
+    }
+		toggle_accessx;
+#endif
+		
     set_mouse_values(right_handed, acceleration, threshold);
     
 #ifdef HAVE_XCURSOR_EXTENSION



More information about the Xfce4-commits mailing list