A.29. Test Mainloop

win_mainloop := nil;

function mainloop_destroyed(window)
{
  gtk_main_quit();
  win_mainloop = nil;
}

function create_mainloop ()
{
  local label, button, vbox, action_area;
  
  if (!win_mainloop)
    {
      win_mainloop = new (GtkDialog);
      win_mainloop.signal ("destroy", `mainloop_destroyed(@win_mainloop));
      win_mainloop.title = "Test Main Loop";
      win_mainloop.border_width = 0;
      
      vbox = car(win_mainloop.children());
      action_area = cadr(vbox.children());
      
      label = new(GtkLabel);
      label.set_text("In recursive main loop...");
      label.set_padding(20, 20);
      vbox.pack_start(label, TRUE, TRUE, 0);
      label.show();
      
      button = new(GtkButton);
      button.label = "Leave";
      action_area.pack_start(button, FALSE, TRUE, 0);
      button.signal("clicked", `(@win_mainloop).destroy());
      button.can_default = TRUE;
      button.grab_default();
            
      win_mainloop.show_all();
      princ("create_mainloop: start\n");
      gtk_main ();
      princ ("create_mainloop: done\n");
    }
  
  win_mainloop;
}