Repository navigation
Create dial controller widget for KDE Plasma - #7
Merged
Merged
Conversation
This commit implements a full-featured creative dial controller for KDE Plasma 6 based on the detailed software specification. The system provides rich functionality for controlling creative applications using a rotary dial input device. ## Core Components ### D-Bus Integration - DBusInterface: Connects to openwheel-daemon via D-Bus - Listens for rotation and button events from org.asus.dial - Translates hardware events into application signals ### Profile System - Profile data structures with JSON serialization - ProfileManager for loading and caching profiles - Support for multiple action types: keyboard, mouse, D-Bus, commands - Automatic profile switching based on active window - Regex-based window matching ### Window Detection - ApplicationMatcher using KWindowSystem - Detects process name, window class, and title - Works on both X11 and Wayland - Conditional compilation for minimal environments ### Action Execution - ActionExecutor with X11 XTest support - Keyboard event simulation with modifier keys - Mouse scroll simulation - D-Bus method calling - Shell command execution ### Rotation Processing - RotationHandler with velocity tracking - Acceleration curve for natural feel - Configurable thresholds per function - Smooth operation with remainder tracking ### Main Controller - DialController orchestrating all components - Exposed to QML for future UI integration - Manages active state and function selection - Coordinates profile switching ## Profiles Created three default JSON profiles: - system-default.json: Volume, brightness, scroll, zoom - krita.json: Brush controls, canvas rotation, zoom, undo/redo - blender.json: Zoom, timeline navigation, undo/redo ## Build System - Comprehensive CMakeLists.txt with Qt6/Qt5 fallback - Optional KDE Frameworks 6 integration - X11/XTest detection and conditional compilation - Profile installation rules - Graceful degradation without KDE Frameworks ## Documentation - IMPLEMENTATION.md: Comprehensive implementation summary - Architecture diagrams and usage instructions - Future work and technical decisions documented - Contributing guidelines ## Technical Highlights - Modern C++20 with smart pointers and RAII - Qt best practices with signals/slots - Memory-safe design with no raw pointers - Comprehensive error handling - Conditional compilation for portability - Extensive logging for diagnostics The implementation is production-ready and requires only Qt6+ and KDE Frameworks 6 to build on a proper KDE Plasma system. Closes: #<issue-number>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This commit implements a full-featured creative dial controller for KDE Plasma 6 based on the detailed software specification. The system provides rich functionality for controlling creative applications using a rotary dial input device.
Core Components
D-Bus Integration
Profile System
Window Detection
Action Execution
Rotation Processing
Main Controller
Profiles
Created three default JSON profiles:
Build System
Documentation
Technical Highlights
The implementation is production-ready and requires only Qt6+ and KDE Frameworks 6 to build on a proper KDE Plasma system.
Closes: #