Merge branch 'labwc:master' into osd

This commit is contained in:
droc12345 2024-03-12 17:17:00 -05:00 committed by GitHub
commit 22da242a32
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 31 additions and 3 deletions

View file

@ -47,7 +47,7 @@ an arbitrary order; any variables that must be set in a particular sequence
should be set within the same file. Unless the --merge-config option is
specified, labwc will consider a particular XDG Base Directory to have provided
an environment file if that directory contains either the "environment"
directory or at least one "environment.d/\*.env" file.
file or at least one "environment.d/\*.env" file.
Note: environment files are treated differently by Openbox, which will simply
source the file as a valid shell script before running the window manager. Files

View file

@ -119,6 +119,7 @@ void cursor_update_focus(struct server *server);
void cursor_update_image(struct seat *seat);
void cursor_init(struct seat *seat);
void cursor_load(struct seat *seat);
void cursor_emulate_move_absolute(struct seat *seat,
struct wlr_input_device *device,
double x, double y, uint32_t time_msec);

View file

@ -1253,12 +1253,15 @@ cursor_frame(struct wl_listener *listener, void *data)
}
void
cursor_init(struct seat *seat)
cursor_load(struct seat *seat)
{
const char *xcursor_theme = getenv("XCURSOR_THEME");
const char *xcursor_size = getenv("XCURSOR_SIZE");
uint32_t size = xcursor_size ? atoi(xcursor_size) : 24;
if (seat->xcursor_manager) {
wlr_xcursor_manager_destroy(seat->xcursor_manager);
}
seat->xcursor_manager = wlr_xcursor_manager_create(xcursor_theme, size);
wlr_xcursor_manager_load(seat->xcursor_manager, 1);
@ -1293,6 +1296,12 @@ cursor_init(struct seat *seat)
"Cursor theme is missing cursor names, using fallback");
cursor_names = cursors_x11;
}
}
void
cursor_init(struct seat *seat)
{
cursor_load(seat);
/* Set the initial cursor image so the cursor is visible right away */
cursor_set(seat, LAB_CURSOR_DEFAULT);

View file

@ -1,5 +1,7 @@
// SPDX-License-Identifier: GPL-2.0-only
#define _POSIX_C_SOURCE 200809L
#include <assert.h>
#include <stdlib.h>
#include <wlr/backend/multi.h>
#include <wlr/backend/session.h>
#include <wlr/interfaces/wlr_keyboard.h>
@ -628,6 +630,8 @@ reset_window_keyboard_layout_groups(struct server *server)
static void
set_layout(struct server *server, struct wlr_keyboard *kb)
{
static bool fallback_mode;
struct xkb_rule_names rules = { 0 };
struct xkb_context *context = xkb_context_new(XKB_CONTEXT_NO_FLAGS);
struct xkb_keymap *keymap = xkb_map_new_from_names(context, &rules,
@ -639,7 +643,14 @@ set_layout(struct server *server, struct wlr_keyboard *kb)
}
xkb_keymap_unref(keymap);
} else {
wlr_log(WLR_ERROR, "Failed to create xkb keymap");
wlr_log(WLR_ERROR, "failed to create xkb keymap for layout '%s'",
getenv("XKB_DEFAULT_LAYOUT"));
if (!fallback_mode) {
wlr_log(WLR_ERROR, "entering fallback mode with layout 'us'");
fallback_mode = true;
setenv("XKB_DEFAULT_LAYOUT", "us", 1);
set_layout(server, kb);
}
}
xkb_context_unref(context);
}

View file

@ -296,6 +296,11 @@ new_keyboard(struct seat *seat, struct wlr_input_device *device, bool virtual)
keyboard->wlr_keyboard = kb;
keyboard->is_virtual = virtual;
if (!seat->keyboard_group->keyboard.keymap) {
wlr_log(WLR_ERROR, "cannot set keymap");
exit(EXIT_FAILURE);
}
wlr_keyboard_set_keymap(kb, seat->keyboard_group->keyboard.keymap);
/*
@ -529,6 +534,7 @@ seat_init(struct server *server)
seat->input_method_relay = input_method_relay_create(seat);
seat->xcursor_manager = NULL;
seat->cursor = wlr_cursor_create();
if (!seat->cursor) {
wlr_log(WLR_ERROR, "unable to create cursor");
@ -571,6 +577,7 @@ seat_reconfigure(struct server *server)
{
struct seat *seat = &server->seat;
struct input *input;
cursor_load(seat);
wl_list_for_each(input, &seat->inputs, link) {
switch (input->wlr_input_device->type) {
case WLR_INPUT_DEVICE_KEYBOARD: