[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