static void clickdot_destroy(struct clickdot *clickdot) { display_unwatch_fd(window_get_display(clickdot->window), clickdot->cursor_timeout_fd); close(clickdot->cursor_timeout_fd); if (clickdot->buffer) cairo_surface_destroy(clickdot->buffer); widget_destroy(clickdot->widget); window_destroy(clickdot->window); free(clickdot); }
static void show_menu(struct panel *panel, struct input *input, uint32_t time) { int32_t x, y; static const char *entries[] = { "Roy", "Pris", "Leon", "Zhora" }; input_get_position(input, &x, &y); window_show_menu(window_get_display(panel->window), input, time, panel->window, x - 10, y - 10, menu_func, entries, 4); }
static struct triangle * triangle_create(struct window *window, struct egl_state *egl) { struct triangle *tri; tri = calloc(1, sizeof *tri); tri->egl = egl; tri->widget = window_add_subsurface(window, tri, int_to_mode(option_triangle_mode)); widget_set_resize_handler(tri->widget, triangle_resize_handler); widget_set_redraw_handler(tri->widget, triangle_redraw_handler); set_empty_input_region(tri->widget, window_get_display(window)); return tri; }
static struct clickdot * clickdot_create(struct display *display) { struct clickdot *clickdot; clickdot = xzalloc(sizeof *clickdot); clickdot->window = window_create(display); clickdot->widget = window_frame_create(clickdot->window, clickdot); window_set_title(clickdot->window, "Wayland ClickDot"); clickdot->display = display; clickdot->buffer = NULL; window_set_key_handler(clickdot->window, key_handler); window_set_user_data(clickdot->window, clickdot); window_set_keyboard_focus_handler(clickdot->window, keyboard_focus_handler); widget_set_redraw_handler(clickdot->widget, redraw_handler); widget_set_button_handler(clickdot->widget, button_handler); widget_set_motion_handler(clickdot->widget, motion_handler); widget_set_resize_handler(clickdot->widget, resize_handler); widget_set_leave_handler(clickdot->widget, leave_handler); widget_schedule_resize(clickdot->widget, 500, 400); clickdot->dot.x = 250; clickdot->dot.y = 200; clickdot->line.x = -1; clickdot->line.y = -1; clickdot->line.old_x = -1; clickdot->line.old_y = -1; clickdot->reset = 0; clickdot->cursor_timeout_fd = timerfd_create(CLOCK_MONOTONIC, TFD_CLOEXEC); clickdot->cursor_timeout_task.run = cursor_timeout_func; display_watch_fd(window_get_display(clickdot->window), clickdot->cursor_timeout_fd, EPOLLIN, &clickdot->cursor_timeout_task); return clickdot; }