upstream update: merge sway 1.8.1 (#111)
This commit is contained in:
parent
3efd3b558f
commit
e78fc3364b
|
@ -2,7 +2,7 @@
|
|||
|
||||
### CHANGE THESE VARIABLES BEFORE RELEASE:
|
||||
# Change to current Sway base version!
|
||||
%global SwayBaseVersion 1.8
|
||||
%global SwayBaseVersion 1.8.1
|
||||
# Change to current SwayFX tag!
|
||||
%global Tag 0.1.1
|
||||
|
||||
|
|
|
@ -63,7 +63,7 @@ void sway_configure_tablet_pad(struct sway_tablet_pad *tablet_pad);
|
|||
|
||||
void sway_tablet_pad_destroy(struct sway_tablet_pad *tablet_pad);
|
||||
|
||||
void sway_tablet_pad_notify_enter(struct sway_tablet_pad *tablet_pad,
|
||||
void sway_tablet_pad_set_focus(struct sway_tablet_pad *tablet_pad,
|
||||
struct wlr_surface *surface);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -33,10 +33,10 @@ struct cmd_results *cmd_font(int argc, char **argv) {
|
|||
return cmd_results_new(CMD_FAILURE, "Invalid font family.");
|
||||
}
|
||||
|
||||
const gint size = pango_font_description_get_size(font_description);
|
||||
if (size == 0) {
|
||||
const PangoFontMask flags = pango_font_description_get_set_fields(font_description);
|
||||
if ((flags & PANGO_FONT_MASK_SIZE) == 0) {
|
||||
pango_font_description_free(font_description);
|
||||
return cmd_results_new(CMD_FAILURE, "Invalid font size.");
|
||||
return cmd_results_new(CMD_FAILURE, "Font size not given.");
|
||||
}
|
||||
|
||||
if (config->font_description != NULL) {
|
||||
|
|
|
@ -1022,6 +1022,7 @@ static void output_manager_apply(struct sway_server *server,
|
|||
oc->y = config_head->state.y;
|
||||
oc->transform = config_head->state.transform;
|
||||
oc->scale = config_head->state.scale;
|
||||
oc->adaptive_sync = config_head->state.adaptive_sync_enabled;
|
||||
|
||||
if (test_only) {
|
||||
ok &= test_output_config(oc, output);
|
||||
|
|
|
@ -1399,6 +1399,41 @@ void output_render(struct sway_output *output, struct timespec *when,
|
|||
goto renderer_end;
|
||||
}
|
||||
|
||||
if (server.session_lock.locked) {
|
||||
float clear_color[] = {0.0f, 0.0f, 0.0f, 1.0f};
|
||||
if (server.session_lock.lock == NULL) {
|
||||
// abandoned lock -> red BG
|
||||
clear_color[0] = 1.f;
|
||||
}
|
||||
int nrects;
|
||||
pixman_box32_t *rects = pixman_region32_rectangles(damage, &nrects);
|
||||
for (int i = 0; i < nrects; ++i) {
|
||||
scissor_output(wlr_output, &rects[i]);
|
||||
fx_renderer_clear(clear_color);
|
||||
}
|
||||
|
||||
if (server.session_lock.lock != NULL) {
|
||||
struct render_data data = {
|
||||
.damage = damage,
|
||||
.deco_data = get_undecorated_decoration_data(),
|
||||
};
|
||||
|
||||
struct wlr_session_lock_surface_v1 *lock_surface;
|
||||
wl_list_for_each(lock_surface, &server.session_lock.lock->surfaces, link) {
|
||||
if (lock_surface->output != wlr_output) {
|
||||
continue;
|
||||
}
|
||||
if (!lock_surface->mapped) {
|
||||
continue;
|
||||
}
|
||||
|
||||
output_surface_for_each_surface(output, lock_surface->surface,
|
||||
0.0, 0.0, render_surface_iterator, &data);
|
||||
}
|
||||
}
|
||||
goto renderer_end;
|
||||
}
|
||||
|
||||
if (output_has_opaque_overlay_layer_surface(output)) {
|
||||
goto render_overlay;
|
||||
}
|
||||
|
|
|
@ -97,6 +97,24 @@ struct sway_node *node_at_coords(
|
|||
double ox = lx, oy = ly;
|
||||
wlr_output_layout_output_coords(root->output_layout, wlr_output, &ox, &oy);
|
||||
|
||||
if (server.session_lock.locked) {
|
||||
if (server.session_lock.lock == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
struct wlr_session_lock_surface_v1 *lock_surf;
|
||||
wl_list_for_each(lock_surf, &server.session_lock.lock->surfaces, link) {
|
||||
if (lock_surf->output != wlr_output) {
|
||||
continue;
|
||||
}
|
||||
|
||||
*surface = wlr_surface_surface_at(lock_surf->surface, ox, oy, sx, sy);
|
||||
if (*surface != NULL) {
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
// layer surfaces on the overlay layer are rendered on top
|
||||
if ((*surface = layer_surface_at(output,
|
||||
&output->layers[ZWLR_LAYER_SHELL_V1_LAYER_OVERLAY],
|
||||
|
@ -1322,6 +1340,10 @@ static void warp_to_constraint_cursor_hint(struct sway_cursor *cursor) {
|
|||
double sy = constraint->current.cursor_hint.y;
|
||||
|
||||
struct sway_view *view = view_from_wlr_surface(constraint->surface);
|
||||
if (!view) {
|
||||
return;
|
||||
}
|
||||
|
||||
struct sway_container *con = view->container;
|
||||
|
||||
double lx = sx + con->pending.content_x - view->geometry.x;
|
||||
|
|
|
@ -176,11 +176,11 @@ static void seat_keyboard_notify_enter(struct sway_seat *seat,
|
|||
state->pressed_keycodes, state->npressed, &keyboard->modifiers);
|
||||
}
|
||||
|
||||
static void seat_tablet_pads_notify_enter(struct sway_seat *seat,
|
||||
static void seat_tablet_pads_set_focus(struct sway_seat *seat,
|
||||
struct wlr_surface *surface) {
|
||||
struct sway_seat_device *seat_device;
|
||||
wl_list_for_each(seat_device, &seat->devices, link) {
|
||||
sway_tablet_pad_notify_enter(seat_device->tablet_pad, surface);
|
||||
sway_tablet_pad_set_focus(seat_device->tablet_pad, surface);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -204,7 +204,7 @@ static void seat_send_focus(struct sway_node *node, struct sway_seat *seat) {
|
|||
#endif
|
||||
|
||||
seat_keyboard_notify_enter(seat, view->surface);
|
||||
seat_tablet_pads_notify_enter(seat, view->surface);
|
||||
seat_tablet_pads_set_focus(seat, view->surface);
|
||||
sway_input_method_relay_set_focus(&seat->im_relay, view->surface);
|
||||
|
||||
struct wlr_pointer_constraint_v1 *constraint =
|
||||
|
@ -1080,9 +1080,20 @@ void seat_configure_xcursor(struct sway_seat *seat) {
|
|||
|
||||
bool seat_is_input_allowed(struct sway_seat *seat,
|
||||
struct wlr_surface *surface) {
|
||||
if (server.session_lock.locked) {
|
||||
if (server.session_lock.lock == NULL) {
|
||||
return false;
|
||||
}
|
||||
struct wlr_session_lock_surface_v1 *lock_surf;
|
||||
wl_list_for_each(lock_surf, &server.session_lock.lock->surfaces, link) {
|
||||
if (lock_surf->surface == surface) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
struct wl_client *client = wl_resource_get_client(surface->resource);
|
||||
return seat->exclusive_client == client ||
|
||||
(seat->exclusive_client == NULL && !server.session_lock.locked);
|
||||
return seat->exclusive_client == client || seat->exclusive_client == NULL;
|
||||
}
|
||||
|
||||
static void send_unfocus(struct sway_container *con, void *data) {
|
||||
|
@ -1313,7 +1324,7 @@ void seat_set_focus_surface(struct sway_seat *seat,
|
|||
}
|
||||
|
||||
sway_input_method_relay_set_focus(&seat->im_relay, surface);
|
||||
seat_tablet_pads_notify_enter(seat, surface);
|
||||
seat_tablet_pads_set_focus(seat, surface);
|
||||
}
|
||||
|
||||
void seat_set_focus_layer(struct sway_seat *seat,
|
||||
|
|
|
@ -334,14 +334,10 @@ static void handle_pad_tablet_surface_destroy(struct wl_listener *listener,
|
|||
struct sway_tablet_pad *tablet_pad =
|
||||
wl_container_of(listener, tablet_pad, surface_destroy);
|
||||
|
||||
wlr_tablet_v2_tablet_pad_notify_leave(tablet_pad->tablet_v2_pad,
|
||||
tablet_pad->current_surface);
|
||||
wl_list_remove(&tablet_pad->surface_destroy.link);
|
||||
wl_list_init(&tablet_pad->surface_destroy.link);
|
||||
tablet_pad->current_surface = NULL;
|
||||
sway_tablet_pad_set_focus(tablet_pad, NULL);
|
||||
}
|
||||
|
||||
void sway_tablet_pad_notify_enter(struct sway_tablet_pad *tablet_pad,
|
||||
void sway_tablet_pad_set_focus(struct sway_tablet_pad *tablet_pad,
|
||||
struct wlr_surface *surface) {
|
||||
if (!tablet_pad || !tablet_pad->tablet) {
|
||||
return;
|
||||
|
@ -360,7 +356,8 @@ void sway_tablet_pad_notify_enter(struct sway_tablet_pad *tablet_pad,
|
|||
tablet_pad->current_surface = NULL;
|
||||
}
|
||||
|
||||
if (!wlr_surface_accepts_tablet_v2(tablet_pad->tablet->tablet_v2, surface)) {
|
||||
if (surface == NULL ||
|
||||
!wlr_surface_accepts_tablet_v2(tablet_pad->tablet->tablet_v2, surface)) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -368,7 +365,6 @@ void sway_tablet_pad_notify_enter(struct sway_tablet_pad *tablet_pad,
|
|||
tablet_pad->tablet->tablet_v2, surface);
|
||||
|
||||
tablet_pad->current_surface = surface;
|
||||
wl_list_remove(&tablet_pad->surface_destroy.link);
|
||||
tablet_pad->surface_destroy.notify = handle_pad_tablet_surface_destroy;
|
||||
wl_signal_add(&surface->events.destroy, &tablet_pad->surface_destroy);
|
||||
}
|
||||
|
|
|
@ -558,7 +558,7 @@ static void ipc_json_describe_view(struct sway_container *c, json_object *object
|
|||
|
||||
struct wlr_box window_box = {
|
||||
c->pending.content_x - c->pending.x,
|
||||
(c->current.border == B_PIXEL) ? c->current.border_thickness : 0,
|
||||
(c->current.border == B_PIXEL) ? c->pending.content_y - c->pending.y : 0,
|
||||
c->pending.content_width,
|
||||
c->pending.content_height
|
||||
};
|
||||
|
|
|
@ -32,6 +32,7 @@ static void handle_surface_map(struct wl_listener *listener, void *data) {
|
|||
if (server.session_lock.focused == NULL) {
|
||||
set_lock_focused_surface(surf->surface);
|
||||
}
|
||||
wlr_surface_send_enter(surf->surface, surf->output->wlr_output);
|
||||
output_damage_whole(surf->output);
|
||||
}
|
||||
|
||||
|
|
|
@ -23,6 +23,7 @@ sway_sources = files(
|
|||
'desktop/transaction.c',
|
||||
'desktop/xdg_shell.c',
|
||||
'desktop/launcher.c',
|
||||
|
||||
'input/input-manager.c',
|
||||
'input/cursor.c',
|
||||
'input/keyboard.c',
|
||||
|
|
|
@ -76,6 +76,11 @@ bool server_init(struct sway_server *server) {
|
|||
return false;
|
||||
}
|
||||
|
||||
if (!server->backend) {
|
||||
sway_log(SWAY_ERROR, "Unable to create backend");
|
||||
return false;
|
||||
}
|
||||
|
||||
server->wlr_renderer = wlr_renderer_autocreate(server->backend);
|
||||
if (!server->wlr_renderer) {
|
||||
sway_log(SWAY_ERROR, "Failed to create wlr_renderer");
|
||||
|
|
|
@ -337,8 +337,9 @@ node and will have the following properties:
|
|||
this, but borders are included.
|
||||
|- window_rect
|
||||
: object
|
||||
: The geometry of the contents inside the node. The window decorations are
|
||||
excluded from this calculation, but borders are included.
|
||||
: The geometry of the content inside the node. These coordinates are relative
|
||||
to the node itself. Window decorations and borders are outside the
|
||||
_window_rect_
|
||||
|- deco_rect
|
||||
: object
|
||||
: The geometry of the decorations for the node relative to the parent node
|
||||
|
|
|
@ -119,7 +119,7 @@ must be separated by one space. For example:
|
|||
Enables or disables the specified output (all outputs are enabled by
|
||||
default).
|
||||
|
||||
As opposed to the _power_ command, the output will loose its current
|
||||
As opposed to the _power_ command, the output will lose its current
|
||||
workspace and windows.
|
||||
|
||||
*output* <name> toggle
|
||||
|
|
|
@ -377,6 +377,7 @@ void view_request_activate(struct sway_view *view) {
|
|||
case FOWA_SMART:
|
||||
if (workspace_is_visible(ws)) {
|
||||
seat_set_focus_container(seat, view->container);
|
||||
container_raise_floating(view->container);
|
||||
} else {
|
||||
view_set_urgent(view, true);
|
||||
}
|
||||
|
@ -386,10 +387,12 @@ void view_request_activate(struct sway_view *view) {
|
|||
break;
|
||||
case FOWA_FOCUS:
|
||||
seat_set_focus_container(seat, view->container);
|
||||
container_raise_floating(view->container);
|
||||
break;
|
||||
case FOWA_NONE:
|
||||
break;
|
||||
}
|
||||
transaction_commit_dirty();
|
||||
}
|
||||
|
||||
void view_set_csd_from_server(struct sway_view *view, bool enabled) {
|
||||
|
|
|
@ -292,7 +292,7 @@ static uint32_t render_status_block(struct render_context *ctx,
|
|||
}
|
||||
|
||||
double offset = 0;
|
||||
if (strncmp(block->align, "left", 5) == 0) {
|
||||
if (strncmp(block->align, "left", 4) == 0) {
|
||||
offset = x_pos;
|
||||
} else if (strncmp(block->align, "right", 5) == 0) {
|
||||
offset = x_pos + width - text_width;
|
||||
|
|
Loading…
Reference in a new issue