def __cursesWrapper(self, stdscr):
        curses.curs_set(0) # No cursor
        stdscr.nodelay(1) # getch returns immediately
        stdscr.notimeout(1) # escape sequences come immediately

        # Begin with the initialization screen
        prefs = self.preferences
        doneHandler = self.__initializationFinished
        self.mainScreen = InitializationScreen(prefs, doneHandler, None, (0, 0))
        self.mainScreen.stdscr = stdscr

        # Make sure the terminal has enough space
        self.__handleTerminalResize(False)
        self.mainScreen.makeFirstResponder()

        # Main runloop
        while True:
            # Notifications
            Notification.handleNotifications()

            # List of responders
            c = stdscr.getch()
            if c == -1:
                continue
            
            if c == curses.KEY_RESIZE:
                self.__handleTerminalResize()
                continue

            r = self.mainScreen
            responders = [r]
            while True: 
                r = r.parentResponder
                if r != None:
                    responders.append(r)
                else:
                    break

            # Top down
            for i in range(len(responders)-1, -1, -1):
                r = responders[i]
                if r.activeModalSession() != None:
                    break
                
                if r.respondsTo(c):
                    r.handleEvent(c)
                    break