Ticket #7939: tv_jumppoints_v5.patch

File tv_jumppoints_v5.patch, 4.8 KB (added by Jim Stichnoth <stichnot@…>, 10 years ago)
  • libs/libmythtv/tv_play.cpp

     
    35003500
    35013501void TV::ProcessKeypress(PlayerContext *actx, QKeyEvent *e)
    35023502{
     3503    QStringList actions;
     3504    bool handled = GetMythMainWindow()->
     3505        TranslateKeyPress("TV Playback", e, actions, false);
     3506    if (handled)
     3507        VERBOSE(VB_IMPORTANT,
     3508                "ProcessKeypress(): "
     3509                "TranslateKeyPress() unexpectedly returned true");
     3510    bool isJumpingToMain = has_action("ESCAPE", actions) &&
     3511        GetMythMainWindow()->IsExitingToMain();
     3512    unsigned iterations = 0;
     3513    // Set a limit on the number of iterations in case pressing escape
     3514    // repeatedly somehow gets into a loop.
     3515    const unsigned kMaxIterations = 10;
     3516    do {
     3517        ++iterations;
     3518
    35033519    bool ignoreKeys = actx->IsPlayerChangingBuffers();
    35043520#if DEBUG_ACTIONS
    35053521    VERBOSE(VB_IMPORTANT, LOC + QString("ProcessKeypress() ignoreKeys: %1")
     
    35123528        idleTimerId = StartTimer(db_idle_timeout, __LINE__);
    35133529    }
    35143530
    3515     QStringList actions;
    3516     bool handled = false;
     3531    handled = false;
    35173532
    35183533    if (ignoreKeys)
    35193534    {
     
    35213536                  "TV Playback", e, actions);
    35223537
    35233538        if (handled || actions.isEmpty())
    3524             return;
     3539            continue;
    35253540
    35263541        bool esc   = has_action("ESCAPE", actions);
    35273542        bool pause = has_action("PAUSE",  actions);
    35283543        bool play  = has_action("PLAY",   actions);
    35293544
    35303545        if ((!esc || browsemode) && !pause && !play)
    3531             return;
     3546            continue;
    35323547    }
    35333548
    35343549    OSD *osd = GetOSDLock(actx);
    35353550    if (osd && osd->DialogVisible())
    35363551    {
    3537         osd->DialogHandleKeypress(e);
     3552        if (GetMythMainWindow()->IsExitingToMain())
     3553            osd->DialogQuit();
     3554        else
     3555            osd->DialogHandleKeypress(e);
    35383556        handled = true;
    35393557    }
    35403558
     
    35613579    ReturnOSDLock(actx, osd);
    35623580
    35633581    if (handled)
    3564         return;
     3582        continue;
    35653583
    35663584    // If text is already queued up, be more lax on what is ok.
    35673585    // This allows hex teletext entry and minor channel entry.
     
    35733591        if (ok || txt=="_" || txt=="-" || txt=="#" || txt==".")
    35743592        {
    35753593            AddKeyToInputQueue(actx, txt.at(0).toLatin1());
    3576             return;
     3594            continue;
    35773595        }
    35783596    }
    35793597
     3598    bool should_continue;
    35803599    // Teletext menu
    35813600    actx->LockDeletePlayer(__FILE__, __LINE__);
    35823601    if (actx->player && (actx->player->GetCaptionMode() == kDisplayTeletextMenu))
     
    35873606
    35883607        if (!handled && !tt_actions.isEmpty())
    35893608        {
     3609            should_continue = false;
    35903610            for (int i = 0; i < tt_actions.size(); i++)
    35913611            {
    35923612                if (actx->player->HandleTeletextAction(tt_actions[i]))
    35933613                {
    35943614                    actx->UnlockDeletePlayer(__FILE__, __LINE__);
    3595                     return;
     3615                    should_continue = true;
     3616                    break;
    35963617                }
    35973618            }
     3619            if (should_continue)
     3620                continue;
    35983621        }
    35993622    }
    36003623
     
    36073630
    36083631        if (!handled && !itv_actions.isEmpty())
    36093632        {
     3633            should_continue = false;
    36103634            for (int i = 0; i < itv_actions.size(); i++)
    36113635            {
    36123636                if (actx->player->ITVHandleAction(itv_actions[i]))
    36133637                {
    36143638                    actx->UnlockDeletePlayer(__FILE__, __LINE__);
    3615                     return;
     3639                    should_continue = true;
     3640                    break;
    36163641                }
    36173642            }
     3643            if (should_continue)
     3644                continue;
    36183645        }
    36193646    }
    36203647    actx->UnlockDeletePlayer(__FILE__, __LINE__);
     
    36233650              "TV Playback", e, actions);
    36243651
    36253652    if (handled || actions.isEmpty())
    3626         return;
     3653        continue;
    36273654
    36283655    handled = false;
    36293656
     
    36493676#endif // DEBUG_ACTIONS
    36503677
    36513678    if (handled)
    3652         return;
     3679        continue;
    36533680
    36543681    if (!handled)
    36553682    {
     
    36663693            }
    36673694        }
    36683695    }
     3696
     3697    } while (isJumpingToMain &&
     3698             exitPlayerTimerId == 0 &&
     3699             iterations <= kMaxIterations);
    36693700}
    36703701
    36713702bool TV::BrowseHandleAction(PlayerContext *ctx, const QStringList &actions)
  • programs/mythfrontend/playbackbox.cpp

     
    22442244
    22452245    m_playingSomething = false;
    22462246
    2247     if (inPlaylist && !m_playListPlay.empty())
     2247    if (inPlaylist && !m_playListPlay.empty() && !GetMythMainWindow()->IsExitingToMain())
    22482248    {
    22492249        QCoreApplication::postEvent(
    22502250            this, new MythEvent("PLAY_PLAYLIST"));