def METHOD_NAME(signal, message="", timeout=0):
    """Waits (max timeout msecs if given) for a signal to be emitted.
    It the waiting lasts more than 2 seconds, a progress dialog is displayed
    with the message.
    Returns True if the signal was emitted.
    Return False if the wait timed out or the dialog was canceled by the user.
    """
    loop = QEventLoop()
    dlg = QProgressDialog(minimum=0, maximum=0, labelText=message)
    dlg.setWindowTitle(appinfo.appname)
    dlg.setWindowModality(Qt.ApplicationModal)
    QTimer.singleShot(2000, dlg.show)
    dlg.canceled.connect(loop.quit)
    if timeout:
        QTimer.singleShot(timeout, dlg.cancel)
    stop = lambda: loop.quit()
    signal.connect(stop)
    loop.exec_()
    signal.disconnect(stop)
    dlg.hide()
    dlg.deleteLater()
    return not dlg.wasCanceled()