Show notification when saving a large replay that is taking some time

This commit is contained in:
dec05eba
2025-02-07 19:41:39 +01:00
parent 51367ac078
commit efb5fc53c1
5 changed files with 37 additions and 1 deletions

4
TODO
View File

@@ -114,4 +114,6 @@ For keyboards that report supporting mice the keyboard grab will be delayed unti
Instead of installing gsr-global-hotkeys in flatpak use kms-server-proxy to launch gsr-global-hotkeys inside the flatpak with root, just like gsr-kms-server. This removes the need to update gsr-global-hotkeys everytime there is an update. Instead of installing gsr-global-hotkeys in flatpak use kms-server-proxy to launch gsr-global-hotkeys inside the flatpak with root, just like gsr-kms-server. This removes the need to update gsr-global-hotkeys everytime there is an update.
Check if "modprobe uinput" is needed on some systems (old fedora?). Check if "modprobe uinput" is needed on some systems (old fedora?).
Add recording timer to see duration of recording/streaming.

View File

@@ -185,5 +185,8 @@ namespace gsr {
std::unique_ptr<GlobalHotkeysJoystick> global_hotkeys_js = nullptr; std::unique_ptr<GlobalHotkeysJoystick> global_hotkeys_js = nullptr;
Display *x11_mapping_display = nullptr; Display *x11_mapping_display = nullptr;
XEvent x11_mapping_xev; XEvent x11_mapping_xev;
mgl::Clock replay_save_clock;
bool replay_save_show_notification = false;
}; };
} }

View File

@@ -41,6 +41,7 @@ namespace gsr {
static const mgl::Color bg_color(0, 0, 0, 100); static const mgl::Color bg_color(0, 0, 0, 100);
static const double force_window_on_top_timeout_seconds = 1.0; static const double force_window_on_top_timeout_seconds = 1.0;
static const double replay_status_update_check_timeout_seconds = 1.0; static const double replay_status_update_check_timeout_seconds = 1.0;
static const double replay_saving_notification_timeout_seconds = 0.5;
static mgl::Texture texture_from_ximage(XImage *img) { static mgl::Texture texture_from_ximage(XImage *img) {
uint8_t *texture_data = (uint8_t*)malloc(img->width * img->height * 3); uint8_t *texture_data = (uint8_t*)malloc(img->width * img->height * 3);
@@ -1484,6 +1485,11 @@ namespace gsr {
} }
void Overlay::update_gsr_replay_save() { void Overlay::update_gsr_replay_save() {
if(replay_save_show_notification && replay_save_clock.get_elapsed_time_seconds() >= replay_saving_notification_timeout_seconds) {
replay_save_show_notification = false;
show_notification("Saving replay, this might take some time", 3.0, mgl::Color(255, 255, 255), get_color_theme().tint_color, NotificationType::REPLAY);
}
if(gpu_screen_recorder_process_output_file) { if(gpu_screen_recorder_process_output_file) {
char buffer[1024]; char buffer[1024];
char *replay_saved_filepath = fgets(buffer, sizeof(buffer), gpu_screen_recorder_process_output_file); char *replay_saved_filepath = fgets(buffer, sizeof(buffer), gpu_screen_recorder_process_output_file);
@@ -1803,6 +1809,8 @@ namespace gsr {
if(recording_status != RecordingStatus::REPLAY || gpu_screen_recorder_process <= 0) if(recording_status != RecordingStatus::REPLAY || gpu_screen_recorder_process <= 0)
return; return;
replay_save_show_notification = true;
replay_save_clock.restart();
kill(gpu_screen_recorder_process, SIGUSR1); kill(gpu_screen_recorder_process, SIGUSR1);
} }
@@ -1820,6 +1828,7 @@ namespace gsr {
} }
paused = false; paused = false;
replay_save_show_notification = false;
// window->close(); // window->close();
// usleep(1000 * 50); // 50 milliseconds // usleep(1000 * 50); // 50 milliseconds

View File

@@ -0,0 +1,21 @@
# About
Global hotkeys for X11 and all Wayland compositors by using linux device api. Keyboards are grabbed and only the non-hotkey keys are passed through to the system.
The program accepts text commands as input. Run the program with the option `--virtual` to only grab virtual devices. This is useful when using keyboard input mapping software such as
kanata, otherwise kanata may fail to launch or this program may fail to launch.
# Commands
## Bind
To add a key send `bind <action> <keycode+keycode+...><newline>` to the programs stdin, for example:
```
bind show_hide 56+44
```
which will bind alt+z. When alt+z is pressed the program will output `show_hide` (and a newline) to stdout.
The program only accepts one key for each keybind command but accepts a multiple modifier keys.
The keybinding requires at least one modifier key (ctrl, alt, super or shift) and a key to be used.
The keycodes are values from `<linux/input-event-codes.h>` linux api header (which is the same as X11 keycode value minus 8).
## Unbind
To unbind all keys send `unbind_all<newline>` to the programs stdin, for example:
```
unbind_all
```

View File

@@ -523,6 +523,7 @@ void keyboard_event_deinit(keyboard_event *self) {
self->num_global_hotkeys = 0; self->num_global_hotkeys = 0;
if(self->uinput_fd > 0) { if(self->uinput_fd > 0) {
ioctl(self->uinput_fd, UI_DEV_DESTROY);
close(self->uinput_fd); close(self->uinput_fd);
self->uinput_fd = -1; self->uinput_fd = -1;
} }