Index: xserver-xorg-input-synaptics-1.3.99+git20110116.0e27ce3a/src/properties.c =================================================================== --- xserver-xorg-input-synaptics-1.3.99+git20110116.0e27ce3a.orig/src/properties.c 2011-06-05 17:39:35.804429263 +0200 +++ xserver-xorg-input-synaptics-1.3.99+git20110116.0e27ce3a/src/properties.c 2011-06-05 16:49:12.296817914 +0200 @@ -520,12 +520,6 @@ SetProperty(DeviceIntPtr dev, Atom prope return BadValue; para->touchpad_off = off; - if (!checkonly && para->has_led && - para->led_status != para->touchpad_off) { - para->led_status = para->touchpad_off; - if (priv->proto_ops && priv->proto_ops->UpdateLED) - priv->proto_ops->UpdateLED(pInfo); - } } else if (property == prop_led_double_tap) { if (prop->size != 1 || prop->format != 8 || prop->type != XA_INTEGER) @@ -721,5 +715,7 @@ void SynapticsToggleOffProperty(DeviceIn val = off; XIChangeDeviceProperty(dev, prop_off, XA_INTEGER, 8, PropModeReplace, 1, &val, FALSE); + XIChangeDeviceProperty(dev, prop_led_status, XA_INTEGER, 8, + PropModeReplace, 1, &val, FALSE); } Index: xserver-xorg-input-synaptics-1.3.99+git20110116.0e27ce3a/src/synaptics.c =================================================================== --- xserver-xorg-input-synaptics-1.3.99+git20110116.0e27ce3a.orig/src/synaptics.c 2011-06-05 17:39:35.800429239 +0200 +++ xserver-xorg-input-synaptics-1.3.99+git20110116.0e27ce3a/src/synaptics.c 2011-06-05 17:20:29.262743867 +0200 @@ -590,6 +590,7 @@ static void set_default_parameters(Input pars->resolution_vert = xf86SetIntOption(opts, "VertResolution", vertResolution); pars->touch_button_area = xf86SetIntOption(opts, "TouchButtonArea", 20); pars->touch_button_sticky = xf86SetIntOption(opts, "TouchButtonSticky", 64); + pars->led_status = xf86SetBoolOption(opts, "LEDStatus", FALSE); pars->led_double_tap = xf86SetBoolOption(opts, "LEDDoubleTap", TRUE); pars->jumpycursor_threshold = xf86SetIntOption(opts, "JumpyCursorThreshold", 0); @@ -1162,13 +1163,14 @@ handle_toggle_led(InputInfoPtr pInfo, st } if (priv->led_tapped) { /* double-tapped? */ - diff = TIME_DIFF(priv->led_tap_millis + para->tap_time_2, hw->millis); + diff = TIME_DIFF(priv->led_tap_millis + 400, hw->millis); if (diff >= 0) { para->touchpad_off = !para->touchpad_off; para->led_status = para->touchpad_off; if (priv->proto_ops && priv->proto_ops->UpdateLED) priv->proto_ops->UpdateLED(pInfo); - priv->prop_change_pending = 1; + priv->prop_change_pending = 1; + SynapticsToggleOffProperty(pInfo->dev, para->touchpad_off); priv->led_tapped = FALSE; } } else Index: xserver-xorg-input-synaptics-1.3.99+git20110116.0e27ce3a/tools/syndaemon.c =================================================================== --- xserver-xorg-input-synaptics-1.3.99+git20110116.0e27ce3a.orig/tools/syndaemon.c 2011-05-28 10:16:45.538004805 +0200 +++ xserver-xorg-input-synaptics-1.3.99+git20110116.0e27ce3a/tools/syndaemon.c 2011-05-28 10:26:37.172971456 +0200 @@ -110,17 +110,17 @@ static void toggle_touchpad(Bool enable) { unsigned char data; + store_current_touchpad_state(); if (pad_disabled && enable) { - data = previous_state; + data = 0; pad_disabled = False; if (verbose) printf("Enable\n"); } else if (!pad_disabled && !enable && previous_state != disable_state && previous_state != TouchpadOff) { - store_current_touchpad_state(); pad_disabled = True; - data = disable_state; + data = 1; if (verbose) printf("Disable\n"); } else