[Xfce4-commits] r23081 - xfce-mcs-plugins/trunk/plugins/mouse_plugin

Olivier Fourdan olivier at xfce.org
Mon Sep 4 19:22:15 UTC 2006


Author: olivier
Date: 2006-09-04 19:22:14 +0000 (Mon, 04 Sep 2006)
New Revision: 23081

Modified:
   xfce-mcs-plugins/trunk/plugins/mouse_plugin/mouse_plugin.c
Log:
Apply Stephan Arts <psybsd at gmail.com> patch to enable mouse emulation (bug #1901)

Modified: xfce-mcs-plugins/trunk/plugins/mouse_plugin/mouse_plugin.c
===================================================================
--- xfce-mcs-plugins/trunk/plugins/mouse_plugin/mouse_plugin.c	2006-09-04 19:19:40 UTC (rev 23080)
+++ xfce-mcs-plugins/trunk/plugins/mouse_plugin/mouse_plugin.c	2006-09-04 19:22:14 UTC (rev 23081)
@@ -37,6 +37,7 @@
 #include <libxfce4util/libxfce4util.h>
 #include <xfce-mcs-manager/manager-plugin.h>
 #include <libxfcegui4/libxfcegui4.h>
+#include <libxfcegui4/netk-trayicon.h>
 
 #include "mouse-plugin-internal.h"
 
@@ -57,6 +58,28 @@
 #define DEFAULT_ICON_SIZE 48
 #define DEFAULT_PTR_MAP_SIZE 128
 
+static const char * mouse_tray_image_xpm[] = {
+"16 16 3 1",
+" 	c None",
+".	c #000000",
+"+	c #FFFFFF",
+"                ",
+"     ......     ",
+"    .+.++.+.    ",
+"    .+.++.+.    ",
+"   .++.++.++.   ",
+"   .++.++.++.   ",
+"   ..........   ",
+"   .++++++++.   ",
+"   .++++++++.   ",
+"   .++++++++.   ",
+"   .++++++++.   ",
+"   .++++++++.   ",
+"   .++++++++.   ",
+"    .++++++.    ",
+"     ......     ",
+"                "};
+
 static void create_channel(McsPlugin * mcs_plugin);
 static void run_dialog(McsPlugin * mcs_plugin);
 
@@ -75,6 +98,8 @@
 static int mouse_keys_ttm = 200;
 static int mouse_keys_max_speed = 200;
 static gboolean xkbpresent = FALSE;
+GtkWidget *mouse_tray_icon = NULL;
+GtkWidget *mouse_tray_image = NULL;
 #endif
 
 static void get_mouse_values(int *accel_return, int *denom_return, int *thresh_return)
@@ -221,7 +246,6 @@
 void
 create_accessx_page(Itf *dialog)
 {
-    GtkWidget *frame;
     GtkWidget *label;
     GtkWidget *vbox;
     GtkWidget *hbox;
@@ -231,7 +255,7 @@
     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"));
+    dialog->checkbutton_mouse = gtk_check_button_new_with_mnemonic(_("Enable mouse emulation"));
     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);
@@ -530,6 +554,28 @@
 
 #ifdef USE_XKB
 static void
+cb_mouse_tray_icon_embedded(GtkWidget *tray_icon, gpointer user_data)
+{
+    gtk_container_add(GTK_CONTAINER(tray_icon), mouse_tray_image);
+    gtk_widget_show_all(tray_icon);
+}
+
+static void
+mouse_tray_icon_reconnect()
+{
+    mouse_tray_icon = netk_tray_icon_new(DefaultScreenOfDisplay(GDK_DISPLAY()));
+    g_signal_connect(G_OBJECT(mouse_tray_icon), "embedded", G_CALLBACK(cb_mouse_tray_icon_embedded), NULL);
+}
+
+static void
+cb_mouse_tray_icon_destroy(GtkWidget *tray_icon, GtkWidget *image)
+{
+    gtk_widget_ref(image);
+    gtk_container_remove(GTK_CONTAINER(tray_icon), image);
+    mouse_tray_icon_reconnect();
+}
+
+static void
 toggle_accessx()
 {
     if (xkbpresent)
@@ -547,9 +593,24 @@
                 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;
+
+								if(!mouse_tray_icon)
+								{
+								    GdkPixbuf *pixbuf = gdk_pixbuf_new_from_xpm_data(mouse_tray_image_xpm);
+								    mouse_tray_image = gtk_image_new_from_pixbuf(pixbuf);
+                    mouse_tray_icon = netk_tray_icon_new(DefaultScreenOfDisplay(GDK_DISPLAY()));
+                    gtk_container_add(GTK_CONTAINER(mouse_tray_icon), mouse_tray_image);
+                    g_signal_connect(G_OBJECT(mouse_tray_icon), "destroy", G_CALLBACK(cb_mouse_tray_icon_destroy), mouse_tray_image);
+								}
+								if(mouse_tray_icon)
+                    gtk_widget_show_all(mouse_tray_icon);
             }
             else
+						{
                 xkb->ctrls->enabled_ctrls &= ~XkbMouseKeysMask;
+								if(mouse_tray_icon)
+								    gtk_widget_hide(mouse_tray_icon);
+            }
 
             XkbSetControls (GDK_DISPLAY (), XkbControlsEnabledMask | XkbMouseKeysMask | XkbMouseKeysAccelMask, xkb);
             XFree (xkb);
@@ -579,6 +640,8 @@
     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);
+    mcs_manager_notify(mcs_plugin->manager, CHANNEL2);
+    mouse_plugin_write_options (mcs_plugin);
 }
 
 static void
@@ -594,8 +657,8 @@
     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);
+    mcs_manager_notify(mcs_plugin->manager, CHANNEL2);
     mouse_plugin_write_options (mcs_plugin);
 }
 #endif
@@ -784,10 +847,6 @@
 #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)
     {
@@ -842,7 +901,8 @@
         mouse_keys_ttm = 200;
         mcs_manager_set_int (mcs_plugin->manager, "Mouse/MouseKeysTimeToMax", CHANNEL2, mouse_keys_ttm);
     }
-		toggle_accessx;
+
+		toggle_accessx();
 #endif
 		
     set_mouse_values(right_handed, acceleration, threshold);



More information about the Xfce4-commits mailing list