# File gtk/sample/gtk-demo/changedisplay.rb, line 256
    def query_for_toplevel(screen, prompt)
      toplevel = nil

      display = screen.display

      popup = Gtk::Window.new(Gtk::Window::POPUP)
      popup.screen = screen
      popup.modal = true
      popup.window_position = Gtk::Window::POS_CENTER

      frame = Gtk::Frame.new
      frame.set_shadow_type(Gtk::SHADOW_OUT)
      popup.add(frame)

      label = Gtk::Label.new(prompt)
      label.set_padding(10, 10)
      frame.add(label)

      popup.show_all

      # TODO: Gdk::Cursor.new(screen.display, Gdk::Cursor::CROSSHAIR)
      cursor = Gdk::Cursor.new(Gdk::Cursor::CROSSHAIR)

      if Gdk::pointer_grab(popup.window, false,
                           Gdk::Event::BUTTON_RELEASE_MASK,
                           nil,
                           cursor,
                           Gdk::Event::CURRENT_TIME) == Gdk::GRAB_SUCCESS
        clicked = false

        popup.signal_connect('button-release-event') do
          clicked = true
        end

        # Process events until clicked is set by button_release_event_cb.
        # We pass in may_block = true since we want to wait if there
        # are no events currently.
        until clicked
          Gtk.main_iteration # TODO: GLib::main_context_iteration(nil, true)

          toplevel = find_toplevel_at_pointer(screen.display)
          if toplevel == popup
            toplevel = nil
          end
        end

        popup.destroy
        Gdk.flush # Really release the grab

        return toplevel
      end
    end