mousetweaks r158 - in trunk: . data src
- From: gerdk svn gnome org
- To: svn-commits-list gnome org
- Subject: mousetweaks r158 - in trunk: . data src
- Date: Sat, 17 May 2008 16:01:41 +0100 (BST)
Author: gerdk
Date: Sat May 17 15:01:40 2008
New Revision: 158
URL: http://svn.gnome.org/viewvc/mousetweaks?rev=158&view=rev
Log:
2008-05-17 Gerd Kohlberger <gerdk svn gnome org>
* src/dwell-click-applet.c:
Fix ref counting bug.
Add on/off button to activate dwelling.
Modified:
trunk/ChangeLog
trunk/data/dwell-click-applet.glade
trunk/src/dwell-click-applet.c
Modified: trunk/data/dwell-click-applet.glade
==============================================================================
--- trunk/data/dwell-click-applet.glade (original)
+++ trunk/data/dwell-click-applet.glade Sat May 17 15:01:40 2008
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE glade-interface SYSTEM "glade-2.0.dtd">
-<!--Generated with glade3 3.4.2 on Thu Mar 27 13:11:06 2008 -->
+<!--Generated with glade3 3.4.5 on Sat May 17 14:59:29 2008 -->
<glade-interface>
<widget class="GtkWindow" id="horizontal">
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
@@ -8,95 +8,133 @@
<child>
<widget class="GtkHBox" id="box_hori">
<property name="visible">True</property>
- <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
- <property name="homogeneous">True</property>
+ <property name="spacing">4</property>
<child>
- <widget class="GtkRadioButton" id="single_click">
+ <widget class="GtkToggleButton" id="enable">
<property name="visible">True</property>
- <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
- <property name="tooltip" translatable="yes">Single Click</property>
- <property name="relief">GTK_RELIEF_NONE</property>
- <property name="focus_on_click">False</property>
- <property name="image_position">GTK_POS_TOP</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="tooltip_text">Enable Dwell Click</property>
<property name="response_id">0</property>
- <property name="active">True</property>
<child>
- <widget class="GtkImage" id="single_click_img">
+ <widget class="GtkImage" id="image1">
<property name="visible">True</property>
- <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
- <property name="stock">gtk-missing-image</property>
- <property name="icon_size">5</property>
+ <property name="stock">gtk-ok</property>
</widget>
</child>
</widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
</child>
<child>
- <widget class="GtkRadioButton" id="double_click">
+ <widget class="GtkVSeparator" id="vseparator1">
<property name="visible">True</property>
- <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
- <property name="tooltip" translatable="yes">Double Click</property>
- <property name="relief">GTK_RELIEF_NONE</property>
- <property name="focus_on_click">False</property>
- <property name="image_position">GTK_POS_TOP</property>
- <property name="response_id">0</property>
- <property name="group">single_click</property>
- <child>
- <widget class="GtkImage" id="double_click_img">
- <property name="visible">True</property>
- <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
- <property name="stock">gtk-missing-image</property>
- <property name="icon_size">5</property>
- </widget>
- </child>
</widget>
<packing>
+ <property name="expand">False</property>
<property name="position">1</property>
</packing>
</child>
<child>
- <widget class="GtkRadioButton" id="drag_click">
+ <widget class="GtkHBox" id="ct_box">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
- <property name="tooltip" translatable="yes">Drag Click</property>
- <property name="relief">GTK_RELIEF_NONE</property>
- <property name="focus_on_click">False</property>
- <property name="image_position">GTK_POS_TOP</property>
- <property name="response_id">0</property>
- <property name="group">single_click</property>
+ <property name="homogeneous">True</property>
<child>
- <widget class="GtkImage" id="drag_click_img">
+ <widget class="GtkRadioButton" id="single_click">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
- <property name="stock">gtk-missing-image</property>
- <property name="icon_size">5</property>
+ <property name="tooltip" translatable="yes">Single Click</property>
+ <property name="relief">GTK_RELIEF_NONE</property>
+ <property name="focus_on_click">False</property>
+ <property name="image_position">GTK_POS_TOP</property>
+ <property name="response_id">0</property>
+ <property name="active">True</property>
+ <child>
+ <widget class="GtkImage" id="single_click_img">
+ <property name="visible">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="stock">gtk-missing-image</property>
+ <property name="icon_size">5</property>
+ </widget>
+ </child>
</widget>
</child>
- </widget>
- <packing>
- <property name="position">2</property>
- </packing>
- </child>
- <child>
- <widget class="GtkRadioButton" id="right_click">
- <property name="visible">True</property>
- <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
- <property name="tooltip" translatable="yes">Right Click</property>
- <property name="relief">GTK_RELIEF_NONE</property>
- <property name="focus_on_click">False</property>
- <property name="image_position">GTK_POS_TOP</property>
- <property name="response_id">0</property>
- <property name="group">single_click</property>
<child>
- <widget class="GtkImage" id="right_click_img">
+ <widget class="GtkRadioButton" id="double_click">
+ <property name="visible">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="tooltip" translatable="yes">Double Click</property>
+ <property name="relief">GTK_RELIEF_NONE</property>
+ <property name="focus_on_click">False</property>
+ <property name="image_position">GTK_POS_TOP</property>
+ <property name="response_id">0</property>
+ <property name="group">single_click</property>
+ <child>
+ <widget class="GtkImage" id="double_click_img">
+ <property name="visible">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="stock">gtk-missing-image</property>
+ <property name="icon_size">5</property>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkRadioButton" id="drag_click">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
- <property name="stock">gtk-missing-image</property>
- <property name="icon_size">5</property>
+ <property name="tooltip" translatable="yes">Drag Click</property>
+ <property name="relief">GTK_RELIEF_NONE</property>
+ <property name="focus_on_click">False</property>
+ <property name="image_position">GTK_POS_TOP</property>
+ <property name="response_id">0</property>
+ <property name="group">single_click</property>
+ <child>
+ <widget class="GtkImage" id="drag_click_img">
+ <property name="visible">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="stock">gtk-missing-image</property>
+ <property name="icon_size">5</property>
+ </widget>
+ </child>
</widget>
+ <packing>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkRadioButton" id="right_click">
+ <property name="visible">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="tooltip" translatable="yes">Right Click</property>
+ <property name="relief">GTK_RELIEF_NONE</property>
+ <property name="focus_on_click">False</property>
+ <property name="image_position">GTK_POS_TOP</property>
+ <property name="response_id">0</property>
+ <property name="group">single_click</property>
+ <child>
+ <widget class="GtkImage" id="right_click_img">
+ <property name="visible">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="stock">gtk-missing-image</property>
+ <property name="icon_size">5</property>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="position">3</property>
+ </packing>
</child>
</widget>
<packing>
- <property name="position">3</property>
+ <property name="expand">False</property>
+ <property name="position">2</property>
</packing>
</child>
</widget>
@@ -107,94 +145,132 @@
<child>
<widget class="GtkVBox" id="box_vert">
<property name="visible">True</property>
- <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="spacing">4</property>
<child>
- <widget class="GtkRadioButton" id="single_click_v">
+ <widget class="GtkToggleButton" id="enable_v">
<property name="visible">True</property>
- <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
- <property name="tooltip" translatable="yes">Single Click</property>
- <property name="relief">GTK_RELIEF_NONE</property>
- <property name="focus_on_click">False</property>
- <property name="image_position">GTK_POS_TOP</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="tooltip_text">Enable Dwell Click</property>
<property name="response_id">0</property>
- <property name="active">True</property>
<child>
- <widget class="GtkImage" id="single_click_img_v">
+ <widget class="GtkImage" id="image2">
<property name="visible">True</property>
- <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
- <property name="stock">gtk-missing-image</property>
- <property name="icon_size">5</property>
+ <property name="stock">gtk-ok</property>
</widget>
</child>
</widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
</child>
<child>
- <widget class="GtkRadioButton" id="double_click_v">
+ <widget class="GtkHSeparator" id="hseparator1">
<property name="visible">True</property>
- <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
- <property name="tooltip" translatable="yes">Double Click</property>
- <property name="relief">GTK_RELIEF_NONE</property>
- <property name="focus_on_click">False</property>
- <property name="image_position">GTK_POS_TOP</property>
- <property name="response_id">0</property>
- <property name="group">single_click_v</property>
- <child>
- <widget class="GtkImage" id="double_click_img_v">
- <property name="visible">True</property>
- <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
- <property name="stock">gtk-missing-image</property>
- <property name="icon_size">5</property>
- </widget>
- </child>
</widget>
<packing>
+ <property name="expand">False</property>
<property name="position">1</property>
</packing>
</child>
<child>
- <widget class="GtkRadioButton" id="drag_click_v">
+ <widget class="GtkVBox" id="ct_box_v">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
- <property name="tooltip" translatable="yes">Drag Click</property>
- <property name="relief">GTK_RELIEF_NONE</property>
- <property name="focus_on_click">False</property>
- <property name="image_position">GTK_POS_TOP</property>
- <property name="response_id">0</property>
- <property name="group">single_click_v</property>
<child>
- <widget class="GtkImage" id="drag_click_img_v">
+ <widget class="GtkRadioButton" id="single_click_v">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
- <property name="stock">gtk-missing-image</property>
- <property name="icon_size">5</property>
+ <property name="tooltip" translatable="yes">Single Click</property>
+ <property name="relief">GTK_RELIEF_NONE</property>
+ <property name="focus_on_click">False</property>
+ <property name="image_position">GTK_POS_TOP</property>
+ <property name="response_id">0</property>
+ <property name="active">True</property>
+ <child>
+ <widget class="GtkImage" id="single_click_img_v">
+ <property name="visible">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="stock">gtk-missing-image</property>
+ <property name="icon_size">5</property>
+ </widget>
+ </child>
</widget>
</child>
- </widget>
- <packing>
- <property name="position">2</property>
- </packing>
- </child>
- <child>
- <widget class="GtkRadioButton" id="right_click_v">
- <property name="visible">True</property>
- <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
- <property name="tooltip" translatable="yes">Right Click</property>
- <property name="relief">GTK_RELIEF_NONE</property>
- <property name="focus_on_click">False</property>
- <property name="image_position">GTK_POS_TOP</property>
- <property name="response_id">0</property>
- <property name="group">single_click_v</property>
<child>
- <widget class="GtkImage" id="right_click_img_v">
+ <widget class="GtkRadioButton" id="double_click_v">
+ <property name="visible">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="tooltip" translatable="yes">Double Click</property>
+ <property name="relief">GTK_RELIEF_NONE</property>
+ <property name="focus_on_click">False</property>
+ <property name="image_position">GTK_POS_TOP</property>
+ <property name="response_id">0</property>
+ <property name="group">single_click_v</property>
+ <child>
+ <widget class="GtkImage" id="double_click_img_v">
+ <property name="visible">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="stock">gtk-missing-image</property>
+ <property name="icon_size">5</property>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkRadioButton" id="drag_click_v">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
- <property name="stock">gtk-missing-image</property>
- <property name="icon_size">5</property>
+ <property name="tooltip" translatable="yes">Drag Click</property>
+ <property name="relief">GTK_RELIEF_NONE</property>
+ <property name="focus_on_click">False</property>
+ <property name="image_position">GTK_POS_TOP</property>
+ <property name="response_id">0</property>
+ <property name="group">single_click_v</property>
+ <child>
+ <widget class="GtkImage" id="drag_click_img_v">
+ <property name="visible">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="stock">gtk-missing-image</property>
+ <property name="icon_size">5</property>
+ </widget>
+ </child>
</widget>
+ <packing>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkRadioButton" id="right_click_v">
+ <property name="visible">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="tooltip" translatable="yes">Right Click</property>
+ <property name="relief">GTK_RELIEF_NONE</property>
+ <property name="focus_on_click">False</property>
+ <property name="image_position">GTK_POS_TOP</property>
+ <property name="response_id">0</property>
+ <property name="group">single_click_v</property>
+ <child>
+ <widget class="GtkImage" id="right_click_img_v">
+ <property name="visible">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="stock">gtk-missing-image</property>
+ <property name="icon_size">5</property>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="position">3</property>
+ </packing>
</child>
</widget>
<packing>
- <property name="position">3</property>
+ <property name="expand">False</property>
+ <property name="position">2</property>
</packing>
</child>
</widget>
Modified: trunk/src/dwell-click-applet.c
==============================================================================
--- trunk/src/dwell-click-applet.c (original)
+++ trunk/src/dwell-click-applet.c Sat May 17 15:01:40 2008
@@ -32,12 +32,15 @@
DBusGProxy *proxy;
GladeXML *xml;
GtkWidget *box;
+ GtkWidget *ct_box;
+ GtkWidget *enable;
GtkWidget *button;
GdkPixbuf *click[4];
gint button_width;
gint button_height;
gint cct;
gboolean active;
+ guint tid;
};
static const gchar *img_widgets[] = {
@@ -54,7 +57,6 @@
"single_click_img_v"
};
-static void update_sensitivity (DwellData *dd);
static void preferences_dialog (BonoboUIComponent *component,
gpointer data,
const char *cname);
@@ -72,6 +74,18 @@
BONOBO_UI_VERB_END
};
+static void
+update_sensitivity (DwellData *dd)
+{
+ gboolean dwell, sensitive;
+ gint mode;
+
+ dwell = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (dd->enable));
+ mode = gconf_client_get_int (dd->client, OPT_MODE, NULL);
+ sensitive = dd->active && dwell && mode == DWELL_MODE_CTW;
+ gtk_widget_set_sensitive (dd->ct_box, sensitive);
+}
+
static gboolean
do_not_eat (GtkWidget *widget, GdkEventButton *bev, gpointer user)
{
@@ -82,6 +96,56 @@
}
static void
+enable_dwell_changed (GtkToggleButton *button, gpointer data)
+{
+ DwellData *dd = data;
+ gboolean dwell, ctw;
+
+ ctw = gconf_client_get_bool (dd->client, OPT_CTW, NULL);
+ if (ctw)
+ gconf_client_set_bool (dd->client, OPT_CTW, FALSE, NULL);
+
+ dwell = gtk_toggle_button_get_active (button);
+ gconf_client_set_bool (dd->client, OPT_DWELL, dwell, NULL);
+}
+
+static gboolean
+activation_timeout (gpointer data)
+{
+ DwellData *dd = data;
+
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dd->enable), TRUE);
+ dd->tid = 0;
+
+ return FALSE;
+}
+
+static gboolean
+enable_dwell_crossing (GtkWidget *widget,
+ GdkEventCrossing *event,
+ gpointer data)
+{
+ DwellData *dd = data;
+
+ if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (dd->enable)))
+ return FALSE;
+
+ if (event->type == GDK_ENTER_NOTIFY) {
+ gdouble delay;
+
+ delay = gconf_client_get_float (dd->client, OPT_DWELL_T, NULL);
+ dd->tid = g_timeout_add (delay * 1000, activation_timeout, dd);
+ }
+ else {
+ if (dd->tid != 0) {
+ g_source_remove (dd->tid);
+ dd->tid = 0;
+ }
+ }
+ return FALSE;
+}
+
+static void
button_cb (GtkToggleButton *button, gpointer data)
{
DwellData *dd = data;
@@ -158,18 +222,23 @@
applet_orient_changed (PanelApplet *applet, guint orient, gpointer data)
{
DwellData *dd = data;
+ gboolean dwell;
- gtk_container_remove (GTK_CONTAINER (applet), dd->box);
+ gtk_container_remove (GTK_CONTAINER (applet), g_object_ref (dd->box));
switch (orient) {
case PANEL_APPLET_ORIENT_UP:
case PANEL_APPLET_ORIENT_DOWN:
dd->box = WID ("box_hori");
+ dd->ct_box = WID ("ct_box");
+ dd->enable = WID ("enable");
dd->button = WID ("single_click");
break;
case PANEL_APPLET_ORIENT_LEFT:
case PANEL_APPLET_ORIENT_RIGHT:
dd->box = WID ("box_vert");
+ dd->ct_box = WID ("ct_box_v");
+ dd->enable = WID ("enable_v");
dd->button = WID ("single_click_v");
default:
break;
@@ -177,8 +246,14 @@
if (dd->box->parent)
gtk_widget_reparent (dd->box, GTK_WIDGET (applet));
- else
+ else {
gtk_container_add (GTK_CONTAINER (applet), dd->box);
+ g_object_unref (dd->box);
+ }
+
+ dwell = gconf_client_get_bool (dd->client, OPT_DWELL, NULL);
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dd->enable), dwell);
+ update_sensitivity (dd);
}
static void
@@ -191,12 +266,9 @@
if (dd->click[i])
g_object_unref (dd->click[i]);
- g_object_unref (WID ("box_vert"));
- g_object_unref (WID ("box_hori"));
g_object_unref (dd->client);
g_object_unref (dd->proxy);
g_object_unref (dd->xml);
-
g_slice_free (DwellData, dd);
}
@@ -266,47 +338,53 @@
static void
setup_box (DwellData *dd)
{
+ GtkWidget *widget;
gint i;
/* horizontal */
- init_button (dd, WID ("single_click"));
+ widget = WID ("single_click");
+ init_button (dd, widget);
+ g_signal_connect (widget, "size-allocate",
+ G_CALLBACK (button_size_allocate), dd);
init_button (dd, WID ("double_click"));
init_button (dd, WID ("drag_click"));
init_button (dd, WID ("right_click"));
+ widget = WID ("enable");
+ g_signal_connect (widget, "button-press-event",
+ G_CALLBACK (do_not_eat), NULL);
+ g_signal_connect (widget, "toggled",
+ G_CALLBACK (enable_dwell_changed), dd);
+ g_signal_connect (widget, "enter-notify-event",
+ G_CALLBACK (enable_dwell_crossing), dd);
+ g_signal_connect (widget, "leave-notify-event",
+ G_CALLBACK (enable_dwell_crossing), dd);
+
/* vertical */
- init_button (dd, WID ("single_click_v"));
+ widget = WID ("single_click_v");
+ init_button (dd, widget);
+ g_signal_connect (WID ("single_click_v"), "size-allocate",
+ G_CALLBACK (button_size_allocate), dd);
init_button (dd, WID ("double_click_v"));
init_button (dd, WID ("drag_click_v"));
init_button (dd, WID ("right_click_v"));
+ widget = WID ("enable_v");
+ g_signal_connect (widget, "button-press-event",
+ G_CALLBACK (do_not_eat), NULL);
+ g_signal_connect (widget, "toggled",
+ G_CALLBACK (enable_dwell_changed), dd);
+ g_signal_connect (widget, "enter-notify-event",
+ G_CALLBACK (enable_dwell_crossing), dd);
+ g_signal_connect (widget, "leave-notify-event",
+ G_CALLBACK (enable_dwell_crossing), dd);
+
for (i = 0; i < N_CLICK_TYPES; i++) {
gtk_image_set_from_pixbuf (GTK_IMAGE (WID (img_widgets[i])),
dd->click[i]);
gtk_image_set_from_pixbuf (GTK_IMAGE (WID (img_widgets_v[i])),
dd->click[i]);
}
- /* make sure widgets don't get destroyed (reparenting) */
- g_object_ref (WID ("box_hori"));
- g_object_ref (WID ("box_vert"));
-
- g_signal_connect (WID ("single_click"), "size-allocate",
- G_CALLBACK (button_size_allocate), dd);
- g_signal_connect (WID ("single_click_v"), "size-allocate",
- G_CALLBACK (button_size_allocate), dd);
-}
-
-static void
-update_sensitivity (DwellData *dd)
-{
- gint mode;
- gboolean enabled, sensitive;
-
- enabled = gconf_client_get_bool (dd->client, OPT_DWELL, NULL);
- mode = gconf_client_get_int (dd->client, OPT_MODE, NULL);
-
- sensitive = dd->active && enabled && mode == DWELL_MODE_CTW;
- gtk_widget_set_sensitive (dd->box, sensitive);
}
static void
@@ -314,7 +392,7 @@
guint clicktype,
gpointer data)
{
- DwellData *dd = (DwellData *) data;
+ DwellData *dd = data;
GtkToggleButton *button;
GSList *group;
@@ -398,11 +476,19 @@
static void
gconf_value_changed (GConfClient *client,
const gchar *key,
- GConfValue *value,
- gpointer data)
+ GConfValue *value,
+ gpointer data)
{
- if (g_str_equal (key, OPT_MODE) || g_str_equal (key, OPT_DWELL))
- update_sensitivity (data);
+ DwellData *dd = data;
+
+ if (g_str_equal (key, OPT_MODE)) {
+ update_sensitivity (dd);
+ } else if (g_str_equal (key, OPT_DWELL) &&
+ value->type == GCONF_VALUE_BOOL) {
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dd->enable),
+ gconf_value_get_bool (value));
+ update_sensitivity (dd);
+ }
}
static gboolean
@@ -411,6 +497,7 @@
DwellData *dd;
GtkWidget *about;
PanelAppletOrient orient;
+ gboolean dwell;
dd = g_slice_new0 (DwellData);
if (!dd)
@@ -483,13 +570,20 @@
if (orient == PANEL_APPLET_ORIENT_UP ||
orient == PANEL_APPLET_ORIENT_DOWN) {
dd->box = WID ("box_hori");
+ dd->ct_box = WID ("ct_box");
+ dd->enable = WID ("enable");
dd->button = WID ("single_click");
}
else {
dd->box = WID ("box_vert");
+ dd->ct_box = WID ("ct_box_v");
+ dd->enable = WID ("enable_v");
dd->button = WID ("single_click_v");
}
+ dwell = gconf_client_get_bool (dd->client, OPT_DWELL, NULL);
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dd->enable), dwell);
+
setup_box (dd);
gtk_widget_reparent (dd->box, GTK_WIDGET (applet));
gtk_widget_show (GTK_WIDGET (applet));
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]