Fix various bugs
This commit is contained in:
parent
5f4c64fbeb
commit
09c8a048da
|
@ -220,6 +220,9 @@ static struct tinywl_view *desktop_view_at(
|
|||
}
|
||||
|
||||
static void focus_view(struct tinywl_view *view, struct wlr_surface *surface) {
|
||||
if (view == NULL) {
|
||||
return;
|
||||
}
|
||||
struct tinywl_server *server = view->server;
|
||||
struct wlr_seat *seat = server->seat;
|
||||
struct wlr_surface *prev_surface = seat->keyboard_state.focused_surface;
|
||||
|
@ -286,15 +289,13 @@ static void process_cursor_motion(struct tinywl_server *server, uint32_t time) {
|
|||
|
||||
double sx, sy;
|
||||
struct wlr_seat *seat = server->seat;
|
||||
struct wlr_surface *surface;
|
||||
struct wlr_surface *surface = NULL;
|
||||
struct tinywl_view *view = desktop_view_at(server,
|
||||
server->cursor->x, server->cursor->y, &surface, &sx, &sy);
|
||||
if (!view) {
|
||||
wlr_xcursor_manager_set_cursor_image(
|
||||
server->cursor_mgr, "left_ptr", server->cursor);
|
||||
return;
|
||||
}
|
||||
|
||||
if (surface) {
|
||||
bool focus_changed = seat->pointer_state.focused_surface != surface;
|
||||
wlr_seat_pointer_notify_enter(seat, surface, sx, sy);
|
||||
|
@ -308,7 +309,7 @@ static void process_cursor_motion(struct tinywl_server *server, uint32_t time) {
|
|||
|
||||
static void server_cursor_motion(struct wl_listener *listener, void *data) {
|
||||
struct tinywl_server *server =
|
||||
wl_container_of(listener, server, cursor_motion_absolute);
|
||||
wl_container_of(listener, server, cursor_motion);
|
||||
struct wlr_event_pointer_motion *event = data;
|
||||
wlr_cursor_move(server->cursor, event->device,
|
||||
event->delta_x, event->delta_y);
|
||||
|
@ -400,7 +401,9 @@ static void output_frame(struct wl_listener *listener, void *data) {
|
|||
struct timespec now;
|
||||
clock_gettime(CLOCK_MONOTONIC, &now);
|
||||
|
||||
wlr_output_make_current(output->wlr_output, NULL);
|
||||
if (!wlr_output_make_current(output->wlr_output, NULL)) {
|
||||
return;
|
||||
}
|
||||
int width, height;
|
||||
wlr_output_effective_resolution(output->wlr_output, &width, &height);
|
||||
wlr_renderer_begin(renderer, width, height);
|
||||
|
@ -423,8 +426,8 @@ static void output_frame(struct wl_listener *listener, void *data) {
|
|||
render_surface, &rdata);
|
||||
}
|
||||
|
||||
wlr_output_swap_buffers(output->wlr_output, NULL, NULL);
|
||||
wlr_renderer_end(renderer);
|
||||
wlr_output_swap_buffers(output->wlr_output, NULL, NULL);
|
||||
}
|
||||
|
||||
static void server_new_output(struct wl_listener *listener, void *data) {
|
||||
|
@ -432,6 +435,12 @@ static void server_new_output(struct wl_listener *listener, void *data) {
|
|||
wl_container_of(listener, server, new_output);
|
||||
struct wlr_output *wlr_output = data;
|
||||
|
||||
if (!wl_list_empty(&wlr_output->modes)) {
|
||||
struct wlr_output_mode *mode =
|
||||
wl_container_of(wlr_output->modes.prev, mode, link);
|
||||
wlr_output_set_mode(wlr_output, mode);
|
||||
}
|
||||
|
||||
struct tinywl_output *output =
|
||||
calloc(1, sizeof(struct tinywl_output));
|
||||
output->wlr_output = wlr_output;
|
||||
|
@ -529,6 +538,7 @@ static void server_new_xdg_surface(struct wl_listener *listener, void *data) {
|
|||
}
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
wlr_log_init(WLR_DEBUG, NULL);
|
||||
char *startup_cmd = NULL;
|
||||
|
||||
int c;
|
||||
|
|
Loading…
Reference in New Issue