On Sun, Nov 26, 2017 at 2:23 PM, ferreiradaselva <ferreiradase...@protonmail.com> wrote: > Hi, > > My first time posting here (sorry if I'm posting on the wrong place).
You're in the right place. Welcome! > > I'm working on this window creation framework > (https://github.com/ferreiradaselva/swfw), and for the Wayland backend I > need to implement a function to hide the "window". > > I found that that is done by destroying the surface (I'm assuming the > wl_shell_surface). This is currently how I'm trying to do: > > ============================= > void swfw_hide_window_wl(struct swfw_window_wl *swfw_win_wl) > { > if (swfw_win_wl->shell_surface) { > wl_shell_surface_destroy(swfw_win_wl->shell_surface); > swfw_win_wl->shell_surface = NULL; > wl_surface_commit(swfw_win_wl->surface); > } > } > > void swfw_show_window_wl(struct swfw_window_wl *swfw_win_wl) > { > if (!swfw_win_wl->shell_surface) { > swfw_win_wl->shell_surface = > wl_shell_get_shell_surface(swfw_win_wl->swfw_ctx_wl->shell, > swfw_win_wl->surface); > wl_shell_surface_add_listener(swfw_win_wl->shell_surface, > &shell_surface_listener, swfw_win_wl); > wl_shell_surface_set_toplevel(swfw_win_wl->shell_surface); > wl_surface_commit(swfw_win_wl->surface); > } > } > ============================= > > However, even after destroying the shell surface, the surface is still > rendered (testing on weston). Calling the function to show the surface again > will result in the surface being rendered twice on the screen. I'm also > using EGL, if that matters somehow. > > I couldn't find any example on internet on how to properly hide the surface > (I couldn't get working with GLFW, and SDL doesn't seem to implement the > hide function on wayland). There are a couple levels of abstraction you might choose to approach your need from. If you're always going to be using wl-shell, then you can minimize the window. Have a look at wl_shell_surface::minimize. Depending on the desktop environment, that may be the behavior you were most closely seeking anyway. If you simply want the application-defined window content to disappear, however, then just attach a null buffer to the wl_surface. That is, wl_surface::attach( NULL ). Upon the next wl_surface::commit(), the prior renderbuffers will no longer get painted into the composited scene. _______________________________________________ wayland-devel mailing list wayland-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/wayland-devel