diff options
author | dec05eba <dec05eba@protonmail.com> | 2025-04-11 21:51:38 +0200 |
---|---|---|
committer | dec05eba <dec05eba@protonmail.com> | 2025-04-11 21:51:38 +0200 |
commit | 38feee9f29c134d7734f76db8af196618380e8f5 (patch) | |
tree | 92f9072c8688bcea3d3dbb1b07079056f80e4f8f /src | |
parent | 90a1272a653f9ac7b00e902a343e22455dbb67b1 (diff) |
Fix unable to change hotkey settings while recording
Diffstat (limited to 'src')
-rw-r--r-- | src/GlobalHotkeysLinux.cpp | 35 | ||||
-rw-r--r-- | src/Overlay.cpp | 24 |
2 files changed, 38 insertions, 21 deletions
diff --git a/src/GlobalHotkeysLinux.cpp b/src/GlobalHotkeysLinux.cpp index fbba0ea..20b089f 100644 --- a/src/GlobalHotkeysLinux.cpp +++ b/src/GlobalHotkeysLinux.cpp @@ -1,5 +1,4 @@ #include "../include/GlobalHotkeysLinux.hpp" -#include <signal.h> #include <sys/wait.h> #include <fcntl.h> #include <limits.h> @@ -71,21 +70,39 @@ namespace gsr { } GlobalHotkeysLinux::~GlobalHotkeysLinux() { + if(write_pipes[PIPE_WRITE] > 0) { + char command[32]; + const int command_size = snprintf(command, sizeof(command), "exit\n"); + if(write(write_pipes[PIPE_WRITE], command, command_size) != command_size) { + fprintf(stderr, "Error: GlobalHotkeysLinux::~GlobalHotkeysLinux: failed to write command to gsr-global-hotkeys, error: %s\n", strerror(errno)); + close_fds(); + } + } + + if(process_id > 0) { + int status; + waitpid(process_id, &status, 0); + } + + close_fds(); + } + + void GlobalHotkeysLinux::close_fds() { for(int i = 0; i < 2; ++i) { - if(read_pipes[i] > 0) + if(read_pipes[i] > 0) { close(read_pipes[i]); + read_pipes[i] = -1; + } - if(write_pipes[i] > 0) + if(write_pipes[i] > 0) { close(write_pipes[i]); + write_pipes[i] = -1; + } } - if(read_file) + if(read_file) { fclose(read_file); - - if(process_id > 0) { - kill(process_id, SIGKILL); - int status; - waitpid(process_id, &status, 0); + read_file = nullptr; } } diff --git a/src/Overlay.cpp b/src/Overlay.cpp index 2a4ca81..c342d37 100644 --- a/src/Overlay.cpp +++ b/src/Overlay.cpp @@ -1580,9 +1580,9 @@ namespace gsr { return; if(is_capture_target_monitor(recording_capture_target.c_str())) - snprintf(msg, sizeof(msg), "Saved recording of this monitor to '%s'", filename.c_str()); + snprintf(msg, sizeof(msg), "Saved a recording of this monitor to '%s'", filename.c_str()); else - snprintf(msg, sizeof(msg), "Saved recording of %s to '%s'", recording_capture_target.c_str(), filename.c_str()); + snprintf(msg, sizeof(msg), "Saved a recording of %s to '%s'", recording_capture_target.c_str(), filename.c_str()); capture_target = recording_capture_target.c_str(); break; @@ -1592,9 +1592,9 @@ namespace gsr { return; if(is_capture_target_monitor(replay_capture_target.c_str())) - snprintf(msg, sizeof(msg), "Saved replay of this monitor to '%s'", filename.c_str()); + snprintf(msg, sizeof(msg), "Saved a replay of this monitor to '%s'", filename.c_str()); else - snprintf(msg, sizeof(msg), "Saved replay of %s to '%s'", replay_capture_target.c_str(), filename.c_str()); + snprintf(msg, sizeof(msg), "Saved a replay of %s to '%s'", replay_capture_target.c_str(), filename.c_str()); capture_target = replay_capture_target.c_str(); break; @@ -1604,9 +1604,9 @@ namespace gsr { return; if(is_capture_target_monitor(screenshot_capture_target.c_str())) - snprintf(msg, sizeof(msg), "Saved screenshot of this monitor to '%s'", filename.c_str()); + snprintf(msg, sizeof(msg), "Saved a screenshot of this monitor to '%s'", filename.c_str()); else - snprintf(msg, sizeof(msg), "Saved screenshot of %s to '%s'", screenshot_capture_target.c_str(), filename.c_str()); + snprintf(msg, sizeof(msg), "Saved a screenshot of %s to '%s'", screenshot_capture_target.c_str(), filename.c_str()); capture_target = screenshot_capture_target.c_str(); break; @@ -1626,9 +1626,9 @@ namespace gsr { const std::string filename = filepath_get_filename(replay_saved_filepath); char msg[512]; if(is_capture_target_monitor(replay_capture_target.c_str())) - snprintf(msg, sizeof(msg), "Saved replay of this monitor to '%s'", filename.c_str()); + snprintf(msg, sizeof(msg), "Saved a replay of this monitor to '%s'", filename.c_str()); else - snprintf(msg, sizeof(msg), "Saved replay of %s to '%s'", replay_capture_target.c_str(), filename.c_str()); + snprintf(msg, sizeof(msg), "Saved a replay of %s to '%s'", replay_capture_target.c_str(), filename.c_str()); show_notification(msg, notification_timeout_seconds, mgl::Color(255, 255, 255), get_color_theme().tint_color, NotificationType::REPLAY, replay_capture_target.c_str()); } } @@ -1729,9 +1729,9 @@ namespace gsr { const std::string filename = filepath_get_filename(screenshot_filepath.c_str()); char msg[512]; if(is_capture_target_monitor(screenshot_capture_target.c_str())) - snprintf(msg, sizeof(msg), "Saved screenshot of this monitor to '%s'", filename.c_str()); + snprintf(msg, sizeof(msg), "Saved a screenshot of this monitor to '%s'", filename.c_str()); else - snprintf(msg, sizeof(msg), "Saved screenshot of %s to '%s'", screenshot_capture_target.c_str(), filename.c_str()); + snprintf(msg, sizeof(msg), "Saved a screenshot of %s to '%s'", screenshot_capture_target.c_str(), filename.c_str()); show_notification(msg, notification_timeout_seconds, mgl::Color(255, 255, 255), get_color_theme().tint_color, NotificationType::SCREENSHOT, screenshot_capture_target.c_str()); } } else { @@ -1835,9 +1835,9 @@ namespace gsr { const std::string filename = filepath_get_filename(record_filepath.c_str()); char msg[512]; if(is_capture_target_monitor(recording_capture_target.c_str())) - snprintf(msg, sizeof(msg), "Saved recording of this monitor to '%s'", filename.c_str()); + snprintf(msg, sizeof(msg), "Saved a recording of this monitor to '%s'", filename.c_str()); else - snprintf(msg, sizeof(msg), "Saved recording of %s to '%s'", recording_capture_target.c_str(), filename.c_str()); + snprintf(msg, sizeof(msg), "Saved a recording of %s to '%s'", recording_capture_target.c_str(), filename.c_str()); show_notification(msg, notification_timeout_seconds, mgl::Color(255, 255, 255), get_color_theme().tint_color, NotificationType::RECORD, recording_capture_target.c_str()); } } else { |