Skip to content

Latest commit

 

History

History
196 lines (152 loc) · 9.13 KB

File metadata and controls

196 lines (152 loc) · 9.13 KB

Quick Drag - Ubuntu Accessibility Integration Plan

Executive Summary

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.

Problem Statement

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.

Existing Ubuntu Accessibility Stack

Current Mouse Accessibility Features (Mousetweaks)

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

Missing Feature (Quick Drag Fills This)

Feature Description Windows Equivalent
Click Lock Hold button for X ms to lock, click to release ClickLock in Mouse Properties → Buttons

Integration Options

Option 1: Standalone GNOME Extension (Recommended First Step)

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

Option 2: Mousetweaks Integration

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)

Option 3: Standalone System Service

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

Recommended Integration Path

Phase 1 (Now)           Phase 2 (Q2 2026)        Phase 3 (Q3 2026)
┌─────────────────┐     ┌─────────────────┐      ┌─────────────────┐
│ Standalone App  │────▶│ GNOME Extension │─────▶│ Mousetweaks     │
│ (Current)       │     │ + PPA/Universe  │      │ Integration     │
└─────────────────┘     └─────────────────┘      └─────────────────┘

Technical Requirements for Integration

For GNOME Extension

  • Port core logic to JavaScript (GJS)
  • Use Clutter for input event handling
  • Use GSettings for configuration
  • Follow GNOME HIG for preferences UI

For Mousetweaks Integration

  • 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

For Wayland Compatibility (Required for Modern Ubuntu)

  • Implement libinput-based backend
  • Use uinput for synthetic event injection
  • May require compositor cooperation for security
  • Consider Pipewire/Portal approach for sandboxed access

GNOME Settings Panel Mockup

┌─────────────────────────────────────────────────────────────────┐
│ 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            │ │
│ └─────────────────────────────────────────────────────────────┘ │
│                                                                  │
└─────────────────────────────────────────────────────────────────┘

Accessibility Standards Compliance

WCAG 2.1 Relevance

  • 2.1.1 Keyboard: Click Lock provides alternative to mouse-hold
  • 2.5.1 Pointer Gestures: Reduces reliance on complex gestures

AT-SPI2 Integration

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

Testing Plan

Accessibility Testing

  • Test with users who have motor impairments
  • Test with Orca screen reader
  • Test with various mouse/trackpad devices
  • Test with drawing tablets

Technical Testing

  • X11 session testing (complete)
  • Wayland session testing (pending)
  • Multi-monitor testing
  • Performance profiling (CPU/memory)

Contact Points

Canonical Accessibility Team

GNOME Accessibility

Next Steps

  1. Immediate: Test current prototype with target users
  2. Week 1-2: Package as .deb with PPA
  3. Week 3-4: Create GNOME Extension prototype
  4. Month 2: Submit to GNOME accessibility team for feedback
  5. Month 3+: Propose Mousetweaks integration if reception is positive

Appendix: Comparison with Windows ClickLock

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)

Document History

Date Version Changes
2026-01-24 0.1 Initial draft