struct window {
struct display *display;
- struct window *parent;
struct wl_list window_output_list;
char *title;
struct rectangle saved_allocation;
struct menu {
struct window *window;
+ struct window *parent;
struct widget *widget;
struct input *input;
struct frame *frame;
switch (index) {
case 0: /* close */
if (window->close_handler)
- window->close_handler(window->parent,
- window->user_data);
+ window->close_handler(window->user_data);
else
display_exit(window->display);
break;
if (status & FRAME_STATUS_CLOSE) {
if (window->close_handler)
- window->close_handler(window->parent,
- window->user_data);
+ window->close_handler(window->user_data);
else
display_exit(window->display);
return;
input->modifiers == MOD_ALT_MASK &&
state == WL_KEYBOARD_KEY_STATE_PRESSED) {
if (window->close_handler)
- window->close_handler(window->parent,
- window->user_data);
+ window->close_handler(window->user_data);
else
display_exit(window->display);
} else if (window->key_handler) {
}
static struct window *
-window_create_internal(struct display *display,
- struct window *parent, int type)
+window_create_internal(struct display *display, int type)
{
struct window *window;
struct surface *surface;
window = xzalloc(sizeof *window);
wl_list_init(&window->subsurface_list);
window->display = display;
- window->parent = parent;
surface = surface_create(window);
window->main_surface = surface;
struct window *
window_create(struct display *display)
{
- return window_create_internal(display, NULL, TYPE_NONE);
+ return window_create_internal(display, TYPE_NONE);
}
struct window *
window_create_custom(struct display *display)
{
- return window_create_internal(display, NULL, TYPE_CUSTOM);
+ return window_create_internal(display, TYPE_CUSTOM);
}
struct window *
{
struct window *window;
- window = window_create_internal(parent->display,
- parent, TYPE_TRANSIENT);
+ window = window_create_internal(parent->display, TYPE_TRANSIENT);
window->x = x;
window->y = y;
if (display->shell)
wl_shell_surface_set_transient(
window->shell_surface,
- window->parent->main_surface->surface,
+ parent->main_surface->surface,
window->x, window->y, flags);
return window;
(menu->release_count > 0 || time - menu->time > 500)) {
/* Either relase after press-drag-release or
* click-motion-click. */
- menu->func(menu->window->parent, input,
- menu->current, menu->window->parent->user_data);
+ menu->func(menu->parent, input,
+ menu->current, menu->parent->user_data);
input_ungrab(input);
menu_destroy(menu);
} else if (state == WL_POINTER_BUTTON_STATE_RELEASED) {
if (!menu)
return;
- window = window_create_internal(parent->display, parent, TYPE_MENU);
+ window = window_create_internal(parent->display, TYPE_MENU);
if (!window) {
free(menu);
return;
}
menu->window = window;
+ menu->parent = parent;
menu->widget = window_add_widget(menu->window, menu);
window_set_buffer_scale (menu->window, window_get_buffer_scale (parent));
window_set_buffer_transform (menu->window, window_get_buffer_transform (parent));
frame_interior(menu->frame, &ix, &iy, NULL, NULL);
wl_shell_surface_set_popup(window->shell_surface, input->seat,
display_get_serial(window->display),
- window->parent->main_surface->surface,
+ parent->main_surface->surface,
window->x - ix, window->y - iy, 0);
}