Quick Drag provides click-lock functionality for Ubuntu, enabling users with motor disabilities to perform drag operations without holding the mouse button. This document outlines the plan to integrate Quick Drag with Ubuntu's accessibility ecosystem for potential inclusion in the standard distribution.
Current Gap: Ubuntu/GNOME provides extensive mouse accessibility features through Mousetweaks (dwell-click, secondary click simulation), but lacks Windows-style ClickLock functionality.
User Need: Users with conditions affecting sustained grip (arthritis, RSI, muscular dystrophy, etc.) cannot easily perform drag operations that require holding a button while moving the mouse.
Solution: Quick Drag fills this gap by providing hold-to-lock functionality that complements existing Mousetweaks features.
| Feature | Description | Location |
|---|---|---|
| Dwell Click | Click by hovering over target | Settings → Accessibility → Pointing & Clicking |
| Simulated Secondary Click | Right-click by holding primary | Settings → Accessibility → Pointing & Clicking |
| Click Assist | Delay before click is recognized | Settings → Accessibility → Pointing & Clicking |
| Feature | Description | Windows Equivalent |
|---|---|---|
| Click Lock | Hold button for X ms to lock, click to release | ClickLock in Mouse Properties → Buttons |
Effort: Medium | Timeline: 2-4 weeks
- Package Quick Drag as a GNOME Shell extension
- Add toggle in GNOME Extensions app
- Maintains independence while providing easy installation
- Good for community testing and feedback
User Flow:
1. Install from extensions.gnome.org
2. Enable via Extensions app or Settings → Extensions
3. Configure threshold via extension preferences
Effort: High | Timeline: 2-3 months
- Contribute click-lock feature to Mousetweaks project
- C implementation using existing Mousetweaks architecture
- Adds toggle in Settings → Accessibility → Pointing & Clicking
- Requires upstream approval and coordination
User Flow:
1. Settings → Accessibility → Pointing & Clicking
2. Enable "Click Lock"
3. Adjust "Lock Delay" slider (100-2000ms)
Effort: Low | Timeline: 1-2 weeks
- Package as .deb with systemd user service
- Add to Ubuntu universe repository
- Provides PPA for early adopters
- Lower barrier to entry for testing
User Flow:
1. sudo apt install quickdrag
2. Enable via system tray or command line
3. Configure via ~/.config/quickdrag/config.json
Phase 1 (Now) Phase 2 (Q2 2026) Phase 3 (Q3 2026)
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ Standalone App │────▶│ GNOME Extension │─────▶│ Mousetweaks │
│ (Current) │ │ + PPA/Universe │ │ Integration │
└─────────────────┘ └─────────────────┘ └─────────────────┘
- Port core logic to JavaScript (GJS)
- Use Clutter for input event handling
- Use GSettings for configuration
- Follow GNOME HIG for preferences UI
- Port to C using existing Mousetweaks patterns
- Use XInput2 for event handling (already used by Mousetweaks)
- Add GSettings schema for configuration
- Add UI to gnome-control-center accessibility panel
- Implement libinput-based backend
- Use uinput for synthetic event injection
- May require compositor cooperation for security
- Consider Pipewire/Portal approach for sandboxed access
┌─────────────────────────────────────────────────────────────────┐
│ Pointing & Clicking │
├─────────────────────────────────────────────────────────────────┤
│ │
│ Click Assist │
│ ┌─────────────────────────────────────────────────────────────┐ │
│ │ Simulated Secondary Click [ON] │ │
│ │ Trigger a secondary click by holding down... │ │
│ └─────────────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────────────┐ │
│ │ Hover Click [ON] │ │
│ │ Trigger a click when the pointer hovers... │ │
│ └─────────────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────────────┐ │
│ │ Click Lock (NEW) [ON] │ │
│ │ Lock mouse button by holding, click again to release │ │
│ │ │ │
│ │ Lock Delay [====●=============] 500 ms │ │
│ └─────────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘
- 2.1.1 Keyboard: Click Lock provides alternative to mouse-hold
- 2.5.1 Pointer Gestures: Reduces reliance on complex gestures
Quick Drag should emit AT-SPI2 events for screen readers:
- Announce "Click locked" when lock engages
- Announce "Click released" when lock releases
- Expose lock state via accessible properties
- Test with users who have motor impairments
- Test with Orca screen reader
- Test with various mouse/trackpad devices
- Test with drawing tablets
- X11 session testing (complete)
- Wayland session testing (pending)
- Multi-monitor testing
- Performance profiling (CPU/memory)
- Ubuntu Accessibility: https://wiki.ubuntu.com/Accessibility
- Launchpad: https://launchpad.net/ubuntu-accessibility
- Mousetweaks: https://gitlab.gnome.org/GNOME/mousetweaks
- GNOME Accessibility: https://wiki.gnome.org/Accessibility
- a11y mailing list: https://mail.gnome.org/mailman/listinfo/gnome-accessibility-list
- Immediate: Test current prototype with target users
- Week 1-2: Package as .deb with PPA
- Week 3-4: Create GNOME Extension prototype
- Month 2: Submit to GNOME accessibility team for feedback
- Month 3+: Propose Mousetweaks integration if reception is positive
| Aspect | Windows ClickLock | Quick Drag |
|---|---|---|
| Activation | Hold for configurable time | Hold for configurable time |
| Release | Click again | Click again |
| Configuration | Control Panel → Mouse | Settings GUI or config file |
| Threshold | Slider (short to long) | 100-2000ms numeric |
| Buttons | Primary only | Primary only (expandable) |
| Visual feedback | Cursor change | Status in GUI (expanding) |
| Date | Version | Changes |
|---|---|---|
| 2026-01-24 | 0.1 | Initial draft |