Fix various bugs

This commit is contained in:
Drew DeVault 2018-08-15 18:48:31 -04:00
parent 5f4c64fbeb
commit 09c8a048da
1 changed files with 16 additions and 6 deletions

View File

@ -220,6 +220,9 @@ static struct tinywl_view *desktop_view_at(
} }
static void focus_view(struct tinywl_view *view, struct wlr_surface *surface) { static void focus_view(struct tinywl_view *view, struct wlr_surface *surface) {
if (view == NULL) {
return;
}
struct tinywl_server *server = view->server; struct tinywl_server *server = view->server;
struct wlr_seat *seat = server->seat; struct wlr_seat *seat = server->seat;
struct wlr_surface *prev_surface = seat->keyboard_state.focused_surface; 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; double sx, sy;
struct wlr_seat *seat = server->seat; struct wlr_seat *seat = server->seat;
struct wlr_surface *surface; struct wlr_surface *surface = NULL;
struct tinywl_view *view = desktop_view_at(server, struct tinywl_view *view = desktop_view_at(server,
server->cursor->x, server->cursor->y, &surface, &sx, &sy); server->cursor->x, server->cursor->y, &surface, &sx, &sy);
if (!view) { if (!view) {
wlr_xcursor_manager_set_cursor_image( wlr_xcursor_manager_set_cursor_image(
server->cursor_mgr, "left_ptr", server->cursor); server->cursor_mgr, "left_ptr", server->cursor);
return;
} }
if (surface) { if (surface) {
bool focus_changed = seat->pointer_state.focused_surface != surface; bool focus_changed = seat->pointer_state.focused_surface != surface;
wlr_seat_pointer_notify_enter(seat, surface, sx, sy); 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) { static void server_cursor_motion(struct wl_listener *listener, void *data) {
struct tinywl_server *server = 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; struct wlr_event_pointer_motion *event = data;
wlr_cursor_move(server->cursor, event->device, wlr_cursor_move(server->cursor, event->device,
event->delta_x, event->delta_y); event->delta_x, event->delta_y);
@ -400,7 +401,9 @@ static void output_frame(struct wl_listener *listener, void *data) {
struct timespec now; struct timespec now;
clock_gettime(CLOCK_MONOTONIC, &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; int width, height;
wlr_output_effective_resolution(output->wlr_output, &width, &height); wlr_output_effective_resolution(output->wlr_output, &width, &height);
wlr_renderer_begin(renderer, 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); render_surface, &rdata);
} }
wlr_output_swap_buffers(output->wlr_output, NULL, NULL);
wlr_renderer_end(renderer); wlr_renderer_end(renderer);
wlr_output_swap_buffers(output->wlr_output, NULL, NULL);
} }
static void server_new_output(struct wl_listener *listener, void *data) { 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); wl_container_of(listener, server, new_output);
struct wlr_output *wlr_output = data; 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 = struct tinywl_output *output =
calloc(1, sizeof(struct tinywl_output)); calloc(1, sizeof(struct tinywl_output));
output->wlr_output = wlr_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[]) { int main(int argc, char *argv[]) {
wlr_log_init(WLR_DEBUG, NULL);
char *startup_cmd = NULL; char *startup_cmd = NULL;
int c; int c;