How to change the layout of a Gtk application on fullscreen?
Question: I'm developing another image viewer using Python and Gtk and the viewer is
currently very simple: it consists of a `GtkWindow` with a `GtkTreeView` on
the left side displaying the list of my images, and a `GtkImage` on the right
side, displaying the actual image. So far, so good.

Now, I would like to go fullscreen, and display only the image with a black
background, etc.

I can see several ways of doing this:

  * I can hide() the window, and display a big `GtkImage` instead, but I'm loosing all the stuff that I setup on the window before (signals for example), and I'm hiding the window which goes fullscreen, which is a bit weird;
  * I can hide() the content of the window, remove the content of the window (which can have only one child, as far as I know?), and put a `GtkImage` inside instead (and do the reverse on exiting fullscreen);
  * I can try to play with the containers inside my window, and hiding/showing their content when the window is going fullscreen/exiting fullscreen. More precisely, I was thinking of adding another `GtkHBox` as a direct child of my window, with two child, and displaying only the first one on "normal" mode, and only the second one on fullscreen.

That all seem a bit hacky, so I wonder what would be the recommended way to
handle this kind of situation. Thanks!


Answer: I think the simplest way to implement this is to have one layout with all your
widgets setup and the signals setup. Then when you toggle in and out off
fullscreen you have a set of widgets that you make visible and not visible.
Try out the demonstration below. It's a simple implementation that goes in and
out of fullscreen when you press F11. An HBox is used to make the layout,
which contains a label on the left and an image on the right. I've filled the
label with some dummy text so that it takes up a good amount of space. As you
toggle in and out of fullscreen it will toggle the visibility of the label and
thus make the image either take the full screen real estate or share it with
the label. I just used one of the stock images that comes with gtk for
demonstration purposes. Below are two screenshots showing the layout in and
out of fullscreen.

**Code**

    
    
    import gtk
    
    def keypress(win, event):
        if event.keyval == gtk.keysyms.F11:
            win.is_fullscreen = not getattr(win, 'is_fullscreen', False)
            action = win.fullscreen if win.is_fullscreen else win.unfullscreen
            action()
            label.set_visible(not win.is_fullscreen)
    
    win = gtk.Window()
    win.connect("delete-event", gtk.main_quit)
    win.connect('key-press-event', keypress)
    image = gtk.image_new_from_stock(gtk.STOCK_ABOUT, gtk.ICON_SIZE_DIALOG)
    label = gtk.Label(('test ' * 20 + '\n') * 20)
    vbox = gtk.HBox()
    vbox.add(label)
    vbox.add(image)
    win.add(vbox)
    win.show_all()
    gtk.main()
    

**Normal window**

![enter image description here](http://i.stack.imgur.com/Df0Yt.png)

**Full screen**

![enter image description here](http://i.stack.imgur.com/NaGEM.png)

