mirror of
https://github.com/labwc/labwc.git
synced 2026-04-12 08:21:13 -04:00
Merge branch 'labwc:master' into osd
This commit is contained in:
commit
22da242a32
5 changed files with 31 additions and 3 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue