Fix restore portal session option not working, close other notifications when showing a new one

This commit is contained in:
dec05eba
2024-11-28 15:11:50 +01:00
parent ece3d02e0a
commit 2ea0a921e8
9 changed files with 353 additions and 112 deletions

View File

@@ -60,15 +60,19 @@ namespace gsr {
void xi_grab_all_devices();
void xi_warp_pointer(mgl::vec2i position);
void process_key_bindings(mgl::Event &event);
void close_gpu_screen_recorder_output();
void update_notification_process_status();
void save_video_in_current_game_directory(const char *video_filepath, NotificationType notification_type);
void update_gsr_replay_save();
void update_gsr_process_status();
void replay_status_update_status();
void update_focused_fullscreen_status();
void update_power_supply_status();
void on_stop_recording(int exit_code);
void update_ui_recording_paused();
void update_ui_recording_unpaused();
@@ -89,26 +93,26 @@ namespace gsr {
void force_window_on_top();
private:
using KeyBindingCallback = std::function<void()>;
struct KeyBinding {
mgl::Event::KeyEvent key_event;
KeyBindingCallback callback;
};
std::unique_ptr<mgl::Window> window;
mgl::Event event;
std::string resources_path;
GsrInfo gsr_info;
egl_functions egl_funcs;
Config config;
bool visible = false;
mgl::Texture window_texture_texture;
mgl::Sprite window_texture_sprite;
mgl::Texture screenshot_texture;
mgl::Sprite screenshot_sprite;
mgl::Rectangle bg_screenshot_overlay;
mgl::Texture cursor_texture;
mgl::Sprite cursor_sprite;
mgl::vec2i cursor_hotspot;
bool cursor_drawn = false;
WindowTexture window_texture;
PageStack page_stack;
mgl::Rectangle top_bar_background;
@@ -116,14 +120,17 @@ namespace gsr {
mgl::Sprite logo_sprite;
CustomRendererWidget close_button_widget;
bool close_button_pressed_inside = false;
bool visible = false;
uint64_t default_cursor = 0;
pid_t gpu_screen_recorder_process = -1;
pid_t notification_process = -1;
Config config;
int gpu_screen_recorder_process_output_fd = -1;
FILE *gpu_screen_recorder_process_output_file = nullptr;
DropdownButton *replay_dropdown_button_ptr = nullptr;
DropdownButton *record_dropdown_button_ptr = nullptr;
DropdownButton *stream_dropdown_button_ptr = nullptr;
mgl::Clock force_window_on_top_clock;
RecordingStatus recording_status = RecordingStatus::NONE;
@@ -134,7 +141,7 @@ namespace gsr {
bool power_supply_connected = false;
bool focused_window_is_fullscreen = false;
std::array<KeyBinding, 1> key_bindings;
std::string record_filepath;
Display *xi_display = nullptr;
int xi_opcode = 0;

View File

@@ -12,8 +12,8 @@ namespace gsr {
// Arguments ending with NULL
bool exec_program_daemonized(const char **args);
// Arguments ending with NULL
pid_t exec_program(const char **args);
// Arguments ending with NULL. |read_fd| can be NULL
pid_t exec_program(const char **args, int *read_fd);
// |output_buffer| should be at least PATH_MAX in size
bool read_cmdline_arg0(const char *filepath, char *output_buffer);
}

13
include/WindowUtils.hpp Normal file
View File

@@ -0,0 +1,13 @@
#pragma once
#include <string>
#include <X11/Xlib.h>
namespace gsr {
enum class WindowCaptureType {
FOCUSED,
CURSOR
};
std::string get_focused_window_name(Display *dpy, WindowCaptureType window_capture_type);
}