Support more keys for hotkeys (media keys)

This commit is contained in:
dec05eba
2025-03-14 00:20:08 +01:00
parent 7d1f6f9a25
commit 6c7158c06d
4 changed files with 19 additions and 6 deletions

9
TODO
View File

@@ -138,3 +138,12 @@ Make input work with cjk input systems (such as fcitx).
System startup option should also support runit and some other init systems, not only soystemd.
Allow using a hotkey such as printscreen or any other non-alphanumeric key without a modifier. Allow that in gsr-ui and gsr-global-hotkeys. Update the ui to match that.
Implement region capture by adding it as a capture target. The region selection should be done in the same way as the gsr-ui overlay works, by doing xi grab and displaying a fullscreen semi-transparent window.
The window however should covert all monitors combined (use XWidthOfScreen/XHeightOfScreen) and selecting a region should make that region fully transparent to make it clear which region is selected.
Clicking instead of dragging should select that monitor (by passing region 0x0+X+Y).
Hide gsr-ui overlay before showing the region capture (the region capture should start when you start recording/screenshot).
Use x11 shm instead of XGetImage (https://stackoverflow.com/questions/43442675/how-to-use-xshmgetimage-and-xshmputimage).
Add a hotkey to record/stream/replay/screenshot region.

View File

@@ -351,14 +351,14 @@ namespace gsr {
list->add_widget(std::move(video_bitrate_entry));
if(type == Type::STREAM) {
auto size_mb_label = std::make_unique<Label>(&get_theme().body_font, "1.92MB", get_color_theme().text_color);
auto size_mb_label = std::make_unique<Label>(&get_theme().body_font, "1.64MB", get_color_theme().text_color);
Label *size_mb_label_ptr = size_mb_label.get();
list->add_widget(std::move(size_mb_label));
video_bitrate_entry_ptr->on_changed = [size_mb_label_ptr](const std::string &text) {
const double video_bitrate_mb_per_seconds = (double)atoi(text.c_str()) / 1000LL / 8LL * 1.024;
const double video_bitrate_mbits_per_seconds = (double)atoi(text.c_str()) / 1024.0;
char buffer[32];
snprintf(buffer, sizeof(buffer), "%.2fMB", video_bitrate_mb_per_seconds);
snprintf(buffer, sizeof(buffer), "%.2fMbps", video_bitrate_mbits_per_seconds);
size_mb_label_ptr->set_text(buffer);
};
}

View File

@@ -294,7 +294,11 @@ static bool keyboard_event_try_add_device_if_keyboard(keyboard_event *self, cons
unsigned char key_bits[KEY_MAX/8 + 1] = {0};
ioctl(fd, EVIOCGBIT(EV_KEY, sizeof(key_bits)), &key_bits);
const bool supports_key_events = key_bits[KEY_A/8] & (1 << (KEY_A % 8));
const bool supports_key_a = key_bits[KEY_A/8] & (1 << (KEY_A % 8));
const bool supports_key_esc = key_bits[KEY_ESC/8] & (1 << (KEY_ESC % 8));
const bool supports_key_volume_up = key_bits[KEY_VOLUMEUP/8] & (1 << (KEY_VOLUMEUP % 8));
const bool supports_key_events = supports_key_a || supports_key_esc || supports_key_volume_up;
const bool supports_mouse_events = key_bits[BTN_MOUSE/8] & (1 << (BTN_MOUSE % 8));
//const bool supports_touch_events = key_bits[BTN_TOUCH/8] & (1 << (BTN_TOUCH % 8));
const bool supports_joystick_events = key_bits[BTN_JOYSTICK/8] & (1 << (BTN_JOYSTICK % 8));