Ticket #7939: tv_jumppoints_v9.patch

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

    diff --git a/mythtv/libs/libmythtv/tv_play.cpp b/mythtv/libs/libmythtv/tv_play.cpp
    index d7a381c..802528a 100644
    a b static bool has_action(QString action, const QStringList &actions) 
    35303530
    35313531void TV::ProcessKeypress(PlayerContext *actx, QKeyEvent *e)
    35323532{
     3533    QStringList actions;
     3534    bool handled = GetMythMainWindow()->
     3535        TranslateKeyPress("TV Playback", e, actions, false);
     3536    if (handled)
     3537        VERBOSE(VB_IMPORTANT,
     3538                "ProcessKeypress(): "
     3539                "TranslateKeyPress() unexpectedly returned true");
     3540    bool isJumpingToMain = has_action("ESCAPE", actions) &&
     3541        GetMythMainWindow()->IsExitingToMain();
     3542    unsigned iterations = 0;
     3543    // Set a limit on the number of iterations in case pressing escape
     3544    // repeatedly somehow gets into a loop.
     3545    const unsigned kMaxIterations = 10;
     3546    do {
     3547        ++iterations;
     3548
    35333549    bool ignoreKeys = actx->IsPlayerChangingBuffers();
    35343550#if DEBUG_ACTIONS
    35353551    VERBOSE(VB_IMPORTANT, LOC + QString("ProcessKeypress() ignoreKeys: %1")
    void TV::ProcessKeypress(PlayerContext *actx, QKeyEvent *e) 
    35423558        idleTimerId = StartTimer(db_idle_timeout, __LINE__);
    35433559    }
    35443560
    3545     QStringList actions;
    3546     bool handled = false;
     3561    handled = false;
    35473562
    35483563    if (ignoreKeys)
    35493564    {
    void TV::ProcessKeypress(PlayerContext *actx, QKeyEvent *e) 
    35513566                  "TV Playback", e, actions);
    35523567
    35533568        if (handled || actions.isEmpty())
    3554             return;
     3569            continue;
    35553570
    35563571        bool esc   = has_action("ESCAPE", actions) ||
    35573572                     has_action("BACK", actions);
    void TV::ProcessKeypress(PlayerContext *actx, QKeyEvent *e) 
    35593574        bool play  = has_action("PLAY",   actions);
    35603575
    35613576        if ((!esc || browsehelper->IsBrowsing()) && !pause && !play)
    3562             return;
     3577            continue;
    35633578    }
    35643579
    35653580    OSD *osd = GetOSDLock(actx);
    35663581    if (osd && osd->DialogVisible())
    35673582    {
    3568         osd->DialogHandleKeypress(e);
     3583        if (isJumpingToMain)
     3584            osd->DialogQuit();
     3585        else
     3586            osd->DialogHandleKeypress(e);
    35693587        handled = true;
    35703588    }
    35713589    ReturnOSDLock(actx, osd);
    void TV::ProcessKeypress(PlayerContext *actx, QKeyEvent *e) 
    35843602            }
    35853603            if (has_action("ESCAPE", actions))
    35863604            {
     3605                if (isJumpingToMain)
     3606                    actx->player->DisableEdit(false);
     3607                else
    35873608                if (!actx->player->IsCutListSaved(actx))
    35883609                    ShowOSDCutpoint(actx, "EXIT_EDIT_MODE");
    35893610                else
    void TV::ProcessKeypress(PlayerContext *actx, QKeyEvent *e) 
    36173638    }
    36183639
    36193640    if (handled)
    3620         return;
     3641        continue;
    36213642
    36223643    // If text is already queued up, be more lax on what is ok.
    36233644    // This allows hex teletext entry and minor channel entry.
    void TV::ProcessKeypress(PlayerContext *actx, QKeyEvent *e) 
    36293650        if (ok || txt=="_" || txt=="-" || txt=="#" || txt==".")
    36303651        {
    36313652            AddKeyToInputQueue(actx, txt.at(0).toLatin1());
    3632             return;
     3653            continue;
    36333654        }
    36343655    }
    36353656
     3657    bool should_continue;
    36363658    // Teletext menu
    36373659    actx->LockDeletePlayer(__FILE__, __LINE__);
    36383660    if (actx->player && (actx->player->GetCaptionMode() == kDisplayTeletextMenu))
    void TV::ProcessKeypress(PlayerContext *actx, QKeyEvent *e) 
    36433665
    36443666        if (!handled && !tt_actions.isEmpty())
    36453667        {
     3668            should_continue = false;
    36463669            for (int i = 0; i < tt_actions.size(); i++)
    36473670            {
    36483671                if (actx->player->HandleTeletextAction(tt_actions[i]))
    36493672                {
    36503673                    actx->UnlockDeletePlayer(__FILE__, __LINE__);
    3651                     return;
     3674                    should_continue = true;
     3675                    break;
    36523676                }
    36533677            }
     3678            if (should_continue)
     3679                continue;
    36543680        }
    36553681    }
    36563682
    void TV::ProcessKeypress(PlayerContext *actx, QKeyEvent *e) 
    36633689
    36643690        if (!handled && !itv_actions.isEmpty())
    36653691        {
     3692            should_continue = false;
    36663693            for (int i = 0; i < itv_actions.size(); i++)
    36673694            {
    36683695                if (actx->player->ITVHandleAction(itv_actions[i]))
    36693696                {
    36703697                    actx->UnlockDeletePlayer(__FILE__, __LINE__);
    3671                     return;
     3698                    should_continue = true;
     3699                    break;
    36723700                }
    36733701            }
     3702            if (should_continue)
     3703                continue;
    36743704        }
    36753705    }
    36763706    actx->UnlockDeletePlayer(__FILE__, __LINE__);
    void TV::ProcessKeypress(PlayerContext *actx, QKeyEvent *e) 
    36793709              "TV Playback", e, actions);
    36803710
    36813711    if (handled || actions.isEmpty())
    3682         return;
     3712        continue;
    36833713
    36843714    handled = false;
    36853715
    void TV::ProcessKeypress(PlayerContext *actx, QKeyEvent *e) 
    37063736#endif // DEBUG_ACTIONS
    37073737
    37083738    if (handled)
    3709         return;
     3739        continue;
    37103740
    37113741    if (!handled)
    37123742    {
    void TV::ProcessKeypress(PlayerContext *actx, QKeyEvent *e) 
    37233753            }
    37243754        }
    37253755    }
     3756
     3757    } while (isJumpingToMain &&
     3758             exitPlayerTimerId == 0 &&
     3759             iterations <= kMaxIterations);
    37263760}
    37273761
    37283762bool TV::BrowseHandleAction(PlayerContext *ctx, const QStringList &actions)
  • mythtv/programs/mythfrontend/playbackbox.cpp

    diff --git a/mythtv/programs/mythfrontend/playbackbox.cpp b/mythtv/programs/mythfrontend/playbackbox.cpp
    index 2bebd94..68ccc10 100644
    a b bool PlaybackBox::Play( 
    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"));