<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>

    <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
  </head>
  <body text="#000000" bgcolor="#ffffff">
    Hi krh,<br>
    &nbsp;&nbsp;&nbsp; We thinked over how to handling panel and popup windows in
    fullscreen support. Just would like to get your suggestion and
    decision here. <br>
    <br>
    &nbsp; These three pictures demostrate fullscreen cases we need to
    implement:<br>
    &nbsp; fullscreen window on the top: The panels will be hidden<br>
    <a
href="https://gitorious.org/dataforuse/dataforuse/blobs/master/fullscreen.png">&nbsp;
https://gitorious.org/dataforuse/dataforuse/blobs/master/fullscreen.png</a><br>
    <br>
    &nbsp; un-fullscreen window over fullscreen window: The panels will be
    shown<br>
    <a
href="https://gitorious.org/dataforuse/dataforuse/blobs/master/nFoverF.png">&nbsp;
https://gitorious.org/dataforuse/dataforuse/blobs/master/nFoverF.png</a><br>
    <br>
    &nbsp; Popup window over fullscreen window: panels will be hidden<br>
    <a
href="https://gitorious.org/dataforuse/dataforuse/blobs/master/PoverF.png">&nbsp;
https://gitorious.org/dataforuse/dataforuse/blobs/master/PoverF.png</a>
    <br>
    <br>
    &nbsp; To handling panels, we are thinking about three methods:<br>
    &nbsp; 1. surface grouping in struct weston_compositor<br>
    &nbsp;&nbsp; &nbsp;&nbsp; We can split the surface list to different surface type lists,
    for example weston_compositor::panel_surfaces,
    weston_compositor::cursor_surfaces. If using this method, lots of
    things should be changed.<br>
    &nbsp;&nbsp;&nbsp; <br>
    &nbsp; 2. add weston_surface::type to differentiate the types.<br>
    &nbsp;&nbsp; we still use that west_compositor::surface_list, we can add type
    member in struct weston_surface, and initialise them when they are
    created. (In our previous fullscreen patches, we use this method as
    a workaround)<br>
    <br>
    &nbsp;3. handle surface type management in shell side(shell.c).<br>
    &nbsp;&nbsp;&nbsp; keep one weston_surface list in struct weston_compositor(The
    current solution). Add the modification in shell.c:<br>
    &nbsp;&nbsp;&nbsp; Add one wl_shell::hidden_panels, when we would like to hide the
    panel surfaces, just move them from compositor-&gt;surface_list to
    this hidden_panels. And when we would like to unhide them, just move
    it back to the compositor-&gt;surface_list. It's similar to what
    happened on wl_shell::hidden_surface_list when locking/unlocking.<br>
    <br>
    For these three methods, which method do you prefer? Or any other
    ideas?<br>
    <br>
    Thanks,<br>
    Juan<br>
    <br>
  </body>
</html>