It seems that this was only used by the popup menu infrastructure,
which can handle this all on its own. Implementing e.g. transients
in the future can be done with a simple xdg_shell_set_transient_for.
---
 clients/image.c    |  2 +-
 clients/terminal.c |  2 +-
 clients/view.c     |  2 +-
 clients/window.c   | 28 ++++++++++++----------------
 clients/window.h   |  2 +-
 5 files changed, 16 insertions(+), 20 deletions(-)

diff --git a/clients/image.c b/clients/image.c
index c73d0c0..3a52c22 100644
--- a/clients/image.c
+++ b/clients/image.c
@@ -336,7 +336,7 @@ fullscreen_handler(struct window *window, void *data)
 }
 
 static void
-close_handler(struct window *window, void *data)
+close_handler(void *data)
 {
        struct image *image = data;
 
diff --git a/clients/terminal.c b/clients/terminal.c
index a321a1e..d09f94b 100644
--- a/clients/terminal.c
+++ b/clients/terminal.c
@@ -2212,7 +2212,7 @@ fullscreen_handler(struct window *window, void *data)
 }
 
 static void
-close_handler(struct window *window, void *data)
+close_handler(void *data)
 {
        struct terminal *terminal = data;
 
diff --git a/clients/view.c b/clients/view.c
index cedef08..4ac9ca5 100644
--- a/clients/view.c
+++ b/clients/view.c
@@ -168,7 +168,7 @@ fullscreen_handler(struct window *window, void *data)
 }
 
 static void
-close_handler(struct window *window, void *data)
+close_handler(void *data)
 {
        struct view *view = data;
 
diff --git a/clients/window.c b/clients/window.c
index 0afd46b..46372d2 100644
--- a/clients/window.c
+++ b/clients/window.c
@@ -221,7 +221,6 @@ struct surface {
 
 struct window {
        struct display *display;
-       struct window *parent;
        struct wl_list window_output_list;
        char *title;
        struct rectangle saved_allocation;
@@ -358,6 +357,7 @@ struct window_frame {
 
 struct menu {
        struct window *window;
+       struct window *parent;
        struct widget *widget;
        struct input *input;
        struct frame *frame;
@@ -2274,8 +2274,7 @@ frame_menu_func(struct window *window,
        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;
@@ -2392,8 +2391,7 @@ frame_handle_status(struct window_frame *frame, struct 
input *input,
 
        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;
@@ -2894,8 +2892,7 @@ keyboard_handle_key(void *data, struct wl_keyboard 
*keyboard,
                   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) {
@@ -4230,8 +4227,7 @@ surface_create(struct window *window)
 }
 
 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;
@@ -4239,7 +4235,6 @@ window_create_internal(struct display *display,
        window = xzalloc(sizeof *window);
        wl_list_init(&window->subsurface_list);
        window->display = display;
-       window->parent = parent;
 
        surface = surface_create(window);
        window->main_surface = surface;
@@ -4283,13 +4278,13 @@ window_create_internal(struct display *display,
 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 *
@@ -4374,8 +4369,8 @@ menu_button_handler(struct widget *widget,
            (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) {
@@ -4437,13 +4432,14 @@ window_show_menu(struct display *display,
        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));
@@ -4477,7 +4473,7 @@ window_show_menu(struct display *display,
        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);
 }
 
diff --git a/clients/window.h b/clients/window.h
index 59e483e..d5e40ed 100644
--- a/clients/window.h
+++ b/clients/window.h
@@ -214,7 +214,7 @@ typedef void (*window_drop_handler_t)(struct window *window,
                                      struct input *input,
                                      int32_t x, int32_t y, void *data);
 
-typedef void (*window_close_handler_t)(struct window *window, void *data);
+typedef void (*window_close_handler_t)(void *data);
 typedef void (*window_fullscreen_handler_t)(struct window *window, void *data);
 
 typedef void (*window_output_handler_t)(struct window *window, struct output 
*output,
-- 
1.8.4.2

_______________________________________________
wayland-devel mailing list
wayland-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to