-
Notifications
You must be signed in to change notification settings - Fork 3
v0.7.7 with working X11 implementation on Ubuntu #66
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
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
Update Version in Directory.Build.props from 0.6.3 to 0.7.0 to reflect the new release.
Add a set of audit reports and analysis tools for detecting unused C# properties. Files added include a complete audit (UNREFERENCED_PROPERTIES_COMPLETE_AUDIT.md), a quick reference (UNREFERENCED_PROPERTIES_QUICK_REF.md), a full properties inventory CSV, an analysis report, a sampled unused properties CSV, and two PowerShell scripts (scripts/analyze_unused_properties.ps1 and scripts/find_unused_properties.ps1) to extract properties and search for usages. The reports document methodology, verification commands, false-positive notes, and recommendations for removal/deprecation (report dated 2026-01-31) to help maintainers review and clean up unused members.
Add support for .sxcu custom uploaders as first-class providers: - CustomUploaderRepository: Discovers, loads, validates .sxcu files - CustomUploaderProvider: IUploaderProvider adapter for CustomUploaderItem - CustomUploaderExecutor: Unified execution engine for all upload modes - ProviderCatalog: Extended to load custom uploaders from Plugins directory Custom uploaders now appear alongside compiled plugins (Imgur, Amazon S3) with full support for all body types and ShareX syntax functions. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Create Avalonia UI dialog for creating and editing custom uploaders: - CustomUploaderEditorDialog.axaml: Form-based editor with sections for Basic Info, HTTP Request, Body Configuration, Response Parsing - CustomUploaderEditorViewModel.cs: Full validation, Import/Export commands, Test functionality, and data binding to CustomUploaderItem - Grid-based layout following UI design guidelines with consistent spacing - Accessible with AutomationProperties on all interactive controls Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add unit tests verifying ShareX .sxcu format compatibility: - Sample uploaders: Imgur-Anonymous, Pastebin, TinyURL - Tests parsing of MultipartFormData, FormURLEncoded, JSON body types - Tests destination type mapping (Image, Text, File, URLShortener) - Tests CustomUploaderProvider creation and validation - All 9 tests pass XIP0024 Custom Uploader Integration is now complete. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Adds user-facing entry point for creating custom uploaders: - Add AddCustomUploaderCommand to DestinationSettingsViewModel - Add "Add Custom Uploader" button next to "Add from Catalog" - Saves .sxcu file to Plugins folder with safe filename - Reloads custom uploaders after creation Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Use named element reference (#ControlName) instead of type-cast binding syntax for Remove buttons in DataTemplates. The previous approach using $parent[ItemsControl].((Type)DataContext) failed at runtime. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Update documentation links to point to the correct development guide locations. README.md now references docs/development/DEVELOPER_README.md, and docs/development/DEVELOPER_README.md updates the plugin guide reference to a relative Plugin Development Guide link (plugin_development_guide.md). This standardizes and fixes navigation to developer resources.
- Add IImageEncoder and IImageEncoderService abstractions - Implement SkiaImageEncoder for PNG, JPEG, BMP, GIF, WEBP, TIFF - Implement FFmpegImageEncoder for AVIF encoding via libaom-av1 - Move EImageFormat to Services.Abstractions to avoid circular deps - Register ImageEncoderService at application startup - AV1 video codec already supported via VideoConverterOptions Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Remove duplicate EImageFormat from TaskSettingsEnums.cs - Add using XerahS.Services.Abstractions to files using EImageFormat - Add WebP and AVIF cases to SaveImageAsStream switch statement - WebP/AVIF formats now appear in Task Settings image format dropdown Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
…XIP0026) - Add TaskImageSettingsPanel with image format and thumbnail settings - Add TaskVideoSettingsPanel with video codec and screen recording settings - Add IsScreenCaptureJob/IsScreenRecordJob properties to conditionally show tabs - Rename Settings tab to Other Settings in WorkflowEditorView - Remove duplicated Image tab and Screen Recorder section from TaskSettingsPanel Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add XIP0026 TaskSettings_UX_Redesign.md describing a redesign of the WorkflowEditor task settings (split Image/Video tabs, move Destinations into Upload sub-tab, new TaskImage/TaskVideo panels, updated TaskSettingsPanel tab structure and verification plan). Update .claude/settings.local.json to add two helper Bash commands (Select-String and Select-Object) for quick error/warning filtering. Also move task files to reflect status changes: XIP0024_CustomUploader_Integration.md and XIP0025_AV1_AVIF_WebP_Integration.md → tasks/2-pending, and XIP0023_Annotation_Toolbar_Refactor.md → tasks/3-complete.
Rework TaskSettings UI: reorganized TaskSettingsPanel into multiple focused tabs (Notifications, Capture, File, Upload, Advanced), added Index Folder and File tabs and moved/renamed sections for clarity. Enhanced TaskImageSettingsPanel with a Settings/Effects tabbed layout, effects list/property grid/preview and import/export controls. Improved TaskVideoSettingsPanel: added screen-record codec selector and expanded FFmpeg tools (download, progress, configure, expected URL). Integrated destination selection into Upload UI by binding to WorkflowEditorView's available destinations and reordered tabs in WorkflowEditorView. Renamed ViewModel property VideoCodec -> ScreenRecordVideoCodec and updated XAML bindings accordingly.
Replace the generic Website constant with ShareXWebsite and introduce a new XerahSWebsite constant in Links.cs. Update IndexerHtml and IndexerText to use Links.XerahSWebsite for the generated-by/download URL in footers. Update AboutView to point the Website entry to Links.XerahSWebsite and add an 'Issues' link item to the Links expander.
… Portal API (fixes #55) - Add XDG Portal Screenshot API as primary capture method for Wayland sessions - Update outdated namespaces in Linux Capture module (ShareX.Avalonia.* -> XerahS.*) - Portal capture runs before CLI tool fallbacks on Wayland Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- CaptureRegionAsync now uses interactive region selection (gnome-screenshot -a, spectacle -r, scrot -s) - Extended timeout to 60 seconds for interactive region capture - Fixed duplicate Key.Return/Key.Enter entry in LinuxHotkeyService dictionary Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add HideMainWindowAsync/RestoreMainWindowAsync to IUIService Implement window state tracking in AvaloniaUIService Add hideMainWindow parameter to ExecuteJob/ExecuteWorkflow (default false) Only hide window for UI-triggered captures, not hotkeys Allows users to capture XerahS itself via hotkeys Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
… Linux hotkey error handling
Plugins are libraries and should not be published as single-file executables. Add src/Plugins/Directory.Build.props to import the parent props and set PublishSingleFile=false to avoid NETSDK1099 when the main app publishes with PublishSingleFile=true. Also update the plugin publish invocation in src/XerahS.App/XerahS.App.csproj to pass PublishSingleFile=false when bundling default plugins.
Previously, XGetWindowAttributes returned window coordinates relative to the parent window, causing active window captures to use incorrect bounds and capture the wrong screen area. Changes: - Added XTranslateCoordinates P/Invoke to NativeMethods.cs - Modified GetWindowBounds to translate relative coordinates to absolute screen coordinates using XTranslateCoordinates - Added comprehensive debug logging to track capture flow and diagnose window bounds issues This fix ensures active window captures now correctly identify and crop to the actual window position on screen. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Bump project version to 0.7.4 and ignore ISCC log files. Update packaging to generate a wrapper script and install a .desktop file and pixmap icon for application menu integration; add FindIconFile helper to locate Logo.png in common repo/publish locations. Also update Debian control maintainer email and minor whitespace/formatting fixes.
Previously, XGetInputFocus could return invisible child windows (like input fields) instead of the top-level window, resulting in blank or 1x1 pixel captures. Changes: - Added GetTopLevelWindow method to traverse up the window hierarchy using XQueryTree until reaching a window whose parent is the root window - Modified GetForegroundWindow to call GetTopLevelWindow instead of directly returning the focused window - Added comprehensive debug logging for window details (title, class, visibility, map state) to help diagnose capture issues - Added pixel sampling to detect blank/black captures This fix ensures active window captures now correctly identify the visible top-level window instead of invisible child widgets. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
- TrayIcon changes to red when recording, yellow when paused - Adds Pause/Resume, Stop, and Abort menu items during recording - Subscribes to ScreenRecordingManager.StatusChanged events - All UI updates are dispatched to Avalonia UI thread - Added tray-recording.png and tray-recording-paused.png assets - Fix: Add semaphore to prevent concurrent StopRecordingAsync calls causing "file in use" errors during segment finalization Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Border window is now shown for all recordings (video and GIF) regardless of whether the Recording settings page is open - TrayIconHelper manages the border window lifecycle via RecordingStarted and StatusChanged events - Border color: Red for FFmpeg/GDI, Green for Modern Capture - Removed duplicate border window logic from RecordingViewModel Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add desktop environment detection (GNOME, KDE, XFCE, Hyprland, Sway, etc.) - Add grim+slurp support for wlroots-based compositors (Hyprland, Sway, River) - Add grimblast and hyprshot support for Hyprland - Add xfce4-screenshooter support for XFCE - Prioritize XDG Portal on Wayland (universal cross-DE method) - Prioritize DE-native tools before falling back to generic tools - Skip X11-only tools (scrot, import) on Wayland sessions - Fix spectacle duplicate -r flag bug Capture order on Wayland: 1. XDG Desktop Portal (GNOME, KDE, wlroots) 2. DE-native tool (gnome-screenshot, spectacle, xfce4-screenshooter) 3. grim+slurp (wlroots compositors) 4. grimblast/hyprshot (Hyprland-specific) 5. Fallback to fullscreen
- Add IThemeService interface for cross-platform theme detection - Implement LinuxThemeService using XDG Settings Portal (D-Bus) - Reads org.freedesktop.appearance.color-scheme - Falls back to gsettings and GTK theme name detection - Monitors for live theme changes via D-Bus signals - Add AppThemeMode enum (System, Light, Dark) - Add ThemeMode setting to ApplicationConfig - Update settings UI with theme selector dropdown - Replace hardcoded "Default/Dark" with "System default/Light/Dark" - Add ThemeService in UI layer to apply themes based on user preference Fixes dark mode detection on Linux where Avalonia's default detection doesn't work reliably with various desktop environments.
…ot-support [Feature] Add Wayland/Hyprland screenshot support with grim+slurp
Add Linux dark mode support and theme settings
Adds native macOS application menu
Update documentation to reflect the editor repository's new location/name. README.md clone instructions now require a sibling folder named 'XerahS.Editor'; EditorCustomization.md and EDITOR_EXTRACTION.md paths and links were adjusted to point to XerahS.Editor and the updated MainViewModel path under src/ShareX.Editor.
Update solution, project references and XAML xmlns entries to point to the relocated/renamed XerahS.Editor project/assembly instead of ShareX.Editor. Modified XerahS.sln, multiple .csproj files (XerahS.Core, XerahS.RegionCapture, XerahS.UI, tests) and XAML files (OverlayWindow.axaml, App.axaml, EditorWindow.axaml, MainWindow.axaml) so the projects and UI markup reference the correct assembly/path for a successful build.
Add a new Feature Request template and an ISSUE_TEMPLATE/config.yml (disables blank issues and adds a Discussions contact link). Also update bug_report.yml to make the .NET SDK Version field optional (validations.required: false).
- Modified CopyToPluginsDir target in both AmazonS3 and Imgur plugins to only copy plugin's own files instead of all dependencies - Made CopyToPluginsDir target conditional to skip when already being built into Plugins directory - Removed OutputPath override from App's BuildPlugins target to let plugins handle their own output - Plugins now selectively copy only their DLL, PDB, plugin.json, and non-host dependencies - Fixes MSB3030 errors where build was looking for dependencies in wrong target framework path
- Updated all using statements and fully qualified references - Updated AXAML xmlns declarations from ShareX.Editor to XerahS.Editor - Syncs with XerahS.Editor namespace change to fix font loading issues - Fixes compilation errors after editor namespace rename
- Add v0.7.7 section documenting editor namespace rename and plugin build fixes - Include commit references for all changes - Maintain consistent formatting with previous entries
Add Condition=Debug to XerahS.Audits.Tool reference Prevents NETSDK1150 error in Release builds Audits tool is only needed for Debug/development builds Both Debug and Release builds now succeed
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 pull request introduces several improvements focused on developer experience, project structure, and user contribution workflows. The most significant changes include adding structured GitHub issue templates, updating the solution to include new plugins and editor naming, improving Linux packaging and developer documentation, and updating the project version.
Contribution and Issue Reporting Improvements:
.github/ISSUE_TEMPLATE/bug_report.yml,.github/ISSUE_TEMPLATE/feature_request.yml). [1] [2].github/ISSUE_TEMPLATE/config.yml).Project Structure and Build System Updates:
XerahS.Paste2.PluginandXerahS.GitHubGist.Plugin, renamed all references fromShareX.EditortoXerahS.Editor, and bumped the Visual Studio version to 18.2 (XerahS.sln). [1] [2] [3] [4]0.7.7inDirectory.Build.props.Linux Packaging and Developer Experience:
build/package-linux.shscript for Linux builds, which automates publishing the app and plugins, deduplicates binaries, and invokes the packaging tool. Also, improved messaging in the PowerShell packaging script (build/package-linux.ps1). [1] [2]README.md). [1] [2]Documentation and Plugin Development:
Plugins/myplugin/DEVELOPER_README.md).Minor Developer Tooling:
.claude/settings.local.jsonfor searching errors/warnings and selecting output, aiding local development workflows.