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 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 specified, labwc will consider a particular XDG Base Directory to have provided
an environment file if that directory contains either the "environment" 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 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 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_update_image(struct seat *seat);
void cursor_init(struct seat *seat); void cursor_init(struct seat *seat);
void cursor_load(struct seat *seat);
void cursor_emulate_move_absolute(struct seat *seat, void cursor_emulate_move_absolute(struct seat *seat,
struct wlr_input_device *device, struct wlr_input_device *device,
double x, double y, uint32_t time_msec); double x, double y, uint32_t time_msec);

View file

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

View file

@ -1,5 +1,7 @@
// SPDX-License-Identifier: GPL-2.0-only // SPDX-License-Identifier: GPL-2.0-only
#define _POSIX_C_SOURCE 200809L
#include <assert.h> #include <assert.h>
#include <stdlib.h>
#include <wlr/backend/multi.h> #include <wlr/backend/multi.h>
#include <wlr/backend/session.h> #include <wlr/backend/session.h>
#include <wlr/interfaces/wlr_keyboard.h> #include <wlr/interfaces/wlr_keyboard.h>
@ -628,6 +630,8 @@ reset_window_keyboard_layout_groups(struct server *server)
static void static void
set_layout(struct server *server, struct wlr_keyboard *kb) set_layout(struct server *server, struct wlr_keyboard *kb)
{ {
static bool fallback_mode;
struct xkb_rule_names rules = { 0 }; struct xkb_rule_names rules = { 0 };
struct xkb_context *context = xkb_context_new(XKB_CONTEXT_NO_FLAGS); struct xkb_context *context = xkb_context_new(XKB_CONTEXT_NO_FLAGS);
struct xkb_keymap *keymap = xkb_map_new_from_names(context, &rules, 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); xkb_keymap_unref(keymap);
} else { } 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); 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->wlr_keyboard = kb;
keyboard->is_virtual = virtual; 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); 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->input_method_relay = input_method_relay_create(seat);
seat->xcursor_manager = NULL;
seat->cursor = wlr_cursor_create(); seat->cursor = wlr_cursor_create();
if (!seat->cursor) { if (!seat->cursor) {
wlr_log(WLR_ERROR, "unable to create cursor"); wlr_log(WLR_ERROR, "unable to create cursor");
@ -571,6 +577,7 @@ seat_reconfigure(struct server *server)
{ {
struct seat *seat = &server->seat; struct seat *seat = &server->seat;
struct input *input; struct input *input;
cursor_load(seat);
wl_list_for_each(input, &seat->inputs, link) { wl_list_for_each(input, &seat->inputs, link) {
switch (input->wlr_input_device->type) { switch (input->wlr_input_device->type) {
case WLR_INPUT_DEVICE_KEYBOARD: case WLR_INPUT_DEVICE_KEYBOARD: