Ticket #7939: tv_jumppoints_v8.patch

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

     
    35793579
    35803580void TV::ProcessKeypress(PlayerContext *actx, QKeyEvent *e)
    35813581{
     3582    QStringList actions;
     3583    bool handled = GetMythMainWindow()->
     3584        TranslateKeyPress("TV Playback", e, actions, false);
     3585    if (handled)
     3586        VERBOSE(VB_IMPORTANT,
     3587                "ProcessKeypress(): "
     3588                "TranslateKeyPress() unexpectedly returned true");
     3589    bool isJumpingToMain = has_action("ESCAPE", actions) &&
     3590        GetMythMainWindow()->IsExitingToMain();
     3591    unsigned iterations = 0;
     3592    // Set a limit on the number of iterations in case pressing escape
     3593    // repeatedly somehow gets into a loop.
     3594    const unsigned kMaxIterations = 10;
     3595    do {
     3596        ++iterations;
     3597
    35823598    bool ignoreKeys = actx->IsPlayerChangingBuffers();
    35833599#if DEBUG_ACTIONS
    35843600    VERBOSE(VB_IMPORTANT, LOC + QString("ProcessKeypress() ignoreKeys: %1")
     
    35913607        idleTimerId = StartTimer(db_idle_timeout, __LINE__);
    35923608    }
    35933609
    3594     QStringList actions;
    3595     bool handled = false;
     3610    handled = false;
    35963611
    35973612    if (ignoreKeys)
    35983613    {
     
    36003615                  "TV Playback", e, actions);
    36013616
    36023617        if (handled || actions.isEmpty())
    3603             return;
     3618            continue;
    36043619
    36053620        bool esc   = has_action("ESCAPE", actions) ||
    36063621                     has_action("BACK", actions);
     
    36083623        bool play  = has_action("PLAY",   actions);
    36093624
    36103625        if ((!esc || browsehelper->IsBrowsing()) && !pause && !play)
    3611             return;
     3626            continue;
    36123627    }
    36133628
    36143629    OSD *osd = GetOSDLock(actx);
    36153630    if (osd && osd->DialogVisible())
    36163631    {
    3617         osd->DialogHandleKeypress(e);
     3632        if (isJumpingToMain)
     3633            osd->DialogQuit();
     3634        else
     3635            osd->DialogHandleKeypress(e);
    36183636        handled = true;
    36193637    }
    36203638
     
    36323650            }
    36333651            if (has_action("ESCAPE", actions))
    36343652            {
     3653                if (isJumpingToMain)
     3654                    actx->player->DisableEdit(false);
     3655                else
    36353656                if (!actx->player->IsCutListSaved(actx))
    36363657                    ShowOSDCutpoint(actx, "EXIT_EDIT_MODE");
    36373658                else
     
    36663687    ReturnOSDLock(actx, osd);
    36673688
    36683689    if (handled)
    3669         return;
     3690        continue;
    36703691
    36713692    // If text is already queued up, be more lax on what is ok.
    36723693    // This allows hex teletext entry and minor channel entry.
     
    36783699        if (ok || txt=="_" || txt=="-" || txt=="#" || txt==".")
    36793700        {
    36803701            AddKeyToInputQueue(actx, txt.at(0).toLatin1());
    3681             return;
     3702            continue;
    36823703        }
    36833704    }
    36843705
     3706    bool should_continue;
    36853707    // Teletext menu
    36863708    actx->LockDeletePlayer(__FILE__, __LINE__);
    36873709    if (actx->player && (actx->player->GetCaptionMode() == kDisplayTeletextMenu))
     
    36923714
    36933715        if (!handled && !tt_actions.isEmpty())
    36943716        {
     3717            should_continue = false;
    36953718            for (int i = 0; i < tt_actions.size(); i++)
    36963719            {
    36973720                if (actx->player->HandleTeletextAction(tt_actions[i]))
    36983721                {
    36993722                    actx->UnlockDeletePlayer(__FILE__, __LINE__);
    3700                     return;
     3723                    should_continue = true;
     3724                    break;
    37013725                }
    37023726            }
     3727            if (should_continue)
     3728                continue;
    37033729        }
    37043730    }
    37053731
     
    37123738
    37133739        if (!handled && !itv_actions.isEmpty())
    37143740        {
     3741            should_continue = false;
    37153742            for (int i = 0; i < itv_actions.size(); i++)
    37163743            {
    37173744                if (actx->player->ITVHandleAction(itv_actions[i]))
    37183745                {
    37193746                    actx->UnlockDeletePlayer(__FILE__, __LINE__);
    3720                     return;
     3747                    should_continue = true;
     3748                    break;
    37213749                }
    37223750            }
     3751            if (should_continue)
     3752                continue;
    37233753        }
    37243754    }
    37253755    actx->UnlockDeletePlayer(__FILE__, __LINE__);
     
    37283758              "TV Playback", e, actions);
    37293759
    37303760    if (handled || actions.isEmpty())
    3731         return;
     3761        continue;
    37323762
    37333763    handled = false;
    37343764
     
    37563786#endif // DEBUG_ACTIONS
    37573787
    37583788    if (handled)
    3759         return;
     3789        continue;
    37603790
    37613791    if (!handled)
    37623792    {
     
    37733803            }
    37743804        }
    37753805    }
     3806
     3807    } while (isJumpingToMain &&
     3808             exitPlayerTimerId == 0 &&
     3809             iterations <= kMaxIterations);
    37763810}
    37773811
    37783812bool TV::BrowseHandleAction(PlayerContext *ctx, const QStringList &actions)
  • programs/mythfrontend/playbackbox.cpp

     
    23372337
    23382338    m_playingSomething = false;
    23392339
    2340     if (inPlaylist && !m_playListPlay.empty())
     2340    if (inPlaylist && !m_playListPlay.empty() && !GetMythMainWindow()->IsExitingToMain())
    23412341    {
    23422342        QCoreApplication::postEvent(
    23432343            this, new MythEvent("PLAY_PLAYLIST"));