aboutsummaryrefslogtreecommitdiffhomepage
AgeCommit message (Collapse)Author
13 daysdebian: 1.0.0-6HEAD1.0.0-6debianMaria Lisina
13 dayssrc/gsr-info: Add Apple GPU supportMaria Lisina
13 dayssrc/gsr-window: Fix default window sizeMaria Lisina
13 daysmeson: Suppress deprecated-declarationsMaria Lisina
13 dayssrc/main: Backport and refactor on_shortcuts_action()Maria Lisina
13 daysicons: Remove unused tray iconsMaria Lisina
2026-06-11Merge pull request #11 from runlevel5/feature/i18n-vietnameseTrung Lê
feat: add gettext i18n + translations (vi, de, fr, it, es, pt)
2026-06-10feat: add gettext i18n with translations (vi, de, fr, it, es, pt)Trung Lê
Wire up internationalization for the app and ship six translations. Infrastructure: - meson: import i18n, define GETTEXT_PACKAGE/GSR_LOCALEDIR, add po/ subdir, and translate the .desktop and AppStream metainfo via i18n.merge_file (renamed to .desktop.in / .metainfo.xml.in). - main.c: setlocale + bindtextdomain/textdomain so the catalog is loaded. - po/: LINGUAS, POTFILES.in, meson.build (glib preset). String marking: - Wrap every user-visible string with _() across main.c, gsr-window.c, the four pages and the shortcut dialog (titles, subtitles, labels, buttons, combo display names, notifications, toasts, dialogs, menu items). - Leave ids/keys untranslated: codec/container/service ids, GAction/icon/CSS names, GVariant/format strings, accelerators, etc. Linting: - Re-enable gobject-linter's untranslated_string rule (now that i18n exists) as an error so new user-visible strings must be wrapped. Translations (141 messages each, %s/%d/markup placeholders preserved): - Vietnamese (vi), German (de), French (fr), Italian (it), Spanish (es), Portuguese (pt). Codec names, "OK", proper nouns and the product name are intentionally left in English. Verified: msgfmt --check-format passes and the compiled catalogs resolve (e.g. "Record" -> "Ghi hình" / "Aufnahme" / "Enregistrement").
2026-06-10Merge pull request #10 from runlevel5/fix/auto-cleanup-conversionsTrung Lê
refactor: adopt g_autoptr/g_autofree for scope-local cleanup (use_auto_cleanup clean)
2026-06-10refactor: adopt g_autoptr/g_autofree for scope-local cleanupTrung Lê
Resolve the remaining use_auto_cleanup advisories by converting the genuinely scope-local owners to g_autoptr/g_autofree and dropping the manual cleanup: - main.c: GtkCssProvider, AdwApplication - gsr-window.c: GNotification, the menu GMenuItem/GMenu builders, and all the notification message strings - gsr-config-page.c: the window-subtitle and monitor-label strings - gsr-record-page.c / gsr-replay-page.c: the save-folder GtkFileDialog + GFile (the async select_folder call keeps its own ref) - gsr-shortcut-accel-dialog.c: the escaped-title / markup strings The three audio-input pointers in gsr-config-page.c are borrowed const char* into config-owned memory (nothing to free); they're false positives, suppressed inline with a reason. The whole tree is now gobject-linter clean.
2026-06-10Merge pull request #9 from runlevel5/fix/global-shortcuts-autocleanupTrung Lê
ci: exclude global_shortcuts.c from use_auto_cleanup (false positives)
2026-06-10ci: exclude global_shortcuts.c from use_auto_cleanupTrung Lê
Every use_auto_cleanup finding in the D-Bus portal plumbing is a false positive: floating GVariant references sunk by g_variant_new_tuple/builders, GVariant* arrays, and the request GDBusProxy that is deliberately kept alive past the function to receive its reply signal. Converting any of them to g_autoptr would over-unref and crash, so the rule is excluded for this file rather than worked around in the (correct) code.
2026-06-10Merge pull request #8 from runlevel5/feature/notification-open-folderTrung Lê
feat: click the saved-recording notification to open its folder
2026-06-10fix: derive default Videos dir from $XDG_VIDEOS_DIR, fall back to ~/VideosTrung Lê
Use the standard XDG_VIDEOS_DIR environment variable for the default save directory, falling back to $HOME/Videos when it is unset. The record and replay pages now reuse gsr_config_get_videos_dir() instead of duplicating the lookup.
2026-06-10feat: open the saved recording's folder when its notification is clickedTrung Lê
The "Recording saved to <path>" desktop notification is now clickable: activating it opens the default file manager at the file's containing folder (and highlights the file where the file manager supports it). - Add an app.open-folder action (string target = file path) that uses GtkFileLauncher.open_containing_folder() — portal-backed, so it works on both X11 and Wayland. - The saved-recording GNotification sets that action as its default action, and the in-app AdwToast gains a matching "Open Folder" button. send_notification() gains a send_notification_full() variant carrying the optional path; all other notifications are unchanged.
2026-06-10Merge pull request #7 from runlevel5/feature/goblint-analysisTrung Lê
ci: adopt gobject-linter as a blocking static-analysis gate
2026-06-10ci: pin GitHub Actions to commit SHAs (checkout v6.0.3, codeql-action v4.36.2)Trung Lê
2026-06-10ci: adopt gobject-linter as a blocking static-analysis gateTrung Lê
Add gobject-linter (github.com/bilelmoussaoui/gobject-linter) to CI to catch GObject/GLib correctness and idiom issues. Config (gobject-linter.toml): - min_glib_version = 2.80 (libadwaita >= 1.8) - default_level = error: every enabled rule blocks CI - type_style ignored: the project deliberately uses plain C scalar types - untranslated_string ignored: app is not internationalized yet - use_auto_cleanup downgraded to warn: it mis-fires on floating GVariant references (consumed by g_variant_new_tuple/builders) and on objects kept alive past the function (the GlobalShortcuts GDBusProxy); converting those to g_autoptr would over-unref and crash, so it advises rather than blocks Workflow (.github/workflows/gobject-linter.yml): runs the official container image on push/PR, uploads SARIF to code scanning (non-fatal for fork PRs), and fails the build on any error-level finding. Code is brought to a green baseline by applying the auto-fixable findings: - strcmp -> g_strcmp0 (NULL-safe) - manual g_free/g_strdup -> g_set_str - manual source removal -> g_clear_handle_id / g_clear_object / g_clear_pointer - g_string_free(.., FALSE) -> g_string_free_and_steal - g_idle_add one-shot -> g_idle_add_once (id now stored and cleared in finalize, also closing a latent use-after-free if the window is finalized first) - include ordering and #pragma once The 37 remaining use_auto_cleanup findings are reported as warnings for incremental manual review.
2026-05-17Merge pull request #2 from BrycensRanch/patch-1Trung Lê
docs: openSUSE Tumbleweed builds & lack of CentOS build
2026-02-24docs: openSUSE Tumbleweed builds & lack of CentOS buildBrycen G
2026-02-23docs: Add links to Fedora COPRTrung Lê
2026-02-23Add AppStream metainfo for GNOME Software discoverabilityTrung Lê
2026-02-22Prepare 1.0.0: fix memory leaks, use-after-free bugs, and code quality issuesTrung Lê
- Version 6.0.0 → 1.0.0, C standard gnu17 → gnu23 - Fix desktop file path (was referencing parent directory) - global_shortcuts.c: fix systematic GVariant/GDBusProxy leaks, guint64-to-gchar* type mismatch, buffer overflow risk, missing malloc NULL checks, debug artifacts - gsr-window.c: fix notification timeout use-after-free, menu object leak in finalize, localtime NULL check, extract active_mode_to_string helper - gsr-stream-page.c, gsr-record-page.c, gsr-replay-page.c: fix timer source leak in finalize (use-after-free if destroyed while timer running) - gsr-shortcut-accel-dialog.c: fix Pango markup injection via shortcut titles - gsr-info.c: fix pclose UB, replace fprintf with g_warning - gsr-config.c: include errno in fopen failure warning - Remove unused include, stale Phase 5 comments
2026-02-22Show View menu section only when Config tab is activeTrung Lê
2026-02-22Hide unavailable record area options, fix recording saved notification, and ↵Trung Lê
update about dialog - Only show Window/Focused window options on X11 (compile-time and runtime) - Only show Desktop portal option on Wayland with portal support - Fix default record area selection to use dynamic index instead of hardcoded 2 - Use notify_saved preference (default: true) for recording saved notification instead of notify_stopped (default: false) so users see the file path by default - Update about dialog: website and issues URL to GitHub, revert developer to dec05eba with Trung Lê credited for the Adwaita port
2026-02-21Initial commitTrung Lê