Ticket #10894: Enable-mythconfirmation-dialog-to-pause-playback.patch

File Enable-mythconfirmation-dialog-to-pause-playback.patch, 5.2 KB (added by Tobias Maier <diespambox@…>, 12 years ago)
  • mythtv/libs/libmythtv/osd.cpp

    From 238d243481669fc54011db7bc939268d1b6390df Mon Sep 17 00:00:00 2001
    From: Tobias Maier <diespambox@gmx.net>
    Date: Wed, 4 Jul 2012 08:43:55 +0200
    Subject: [PATCH] Enable mythconfirmation dialog to pause playback. If a
     MythUserMessage with ExtraData set to "pauseplayback"
     (instead of a timeout) is received while in playback,
     playback is paused until the dialog is dissmissed.
    
    ---
     mythtv/libs/libmythtv/osd.cpp     |   35 ++++++++++++++++++++++++-----------
     mythtv/libs/libmythtv/osd.h       |    2 +-
     mythtv/libs/libmythtv/tv_play.cpp |   21 ++++++++++++++++++++-
     3 files changed, 45 insertions(+), 13 deletions(-)
    
    diff --git a/mythtv/libs/libmythtv/osd.cpp b/mythtv/libs/libmythtv/osd.cpp
    index 6b2f09f..3b5a4b4 100644
    a b void OSD::DialogQuit(void) 
    967967    m_PulsedDialogText = QString();
    968968}
    969969
    970 void OSD::DialogShow(const QString &window, const QString &text, int updatefor)
     970void OSD::DialogShow(const QString &window, const QString &text, int updatefor,
     971        const QString &confirmationData)
    971972{
    972973    if (m_Dialog)
    973974    {
    void OSD::DialogShow(const QString &window, const QString &text, int updatefor) 
    10091010            MythConfirmationDialog *cbox = dynamic_cast<MythConfirmationDialog*>(m_Dialog);
    10101011            if (cbox)
    10111012            {
    1012                 cbox->SetReturnEvent(m_ParentObject, window);
    1013                 cbox->SetData("DIALOG_CONFIRM_X_X");
     1013                PositionWindow(dialog);
     1014                m_Dialog = dialog;
     1015                MythDialogBox *dbox = dynamic_cast<MythDialogBox*>(m_Dialog);
     1016                if (dbox)
     1017                    dbox->SetReturnEvent(m_ParentObject, window);
     1018                MythConfirmationDialog *cbox = dynamic_cast<MythConfirmationDialog*>(m_Dialog);
     1019                if (cbox)
     1020                {
     1021                    cbox->SetReturnEvent(m_ParentObject, window);
     1022                    if (!confirmationData.isEmpty() && confirmationData.contains("_"))
     1023                        cbox->SetData(QString("DIALOG_CONFIRM_%1").arg(confirmationData));
     1024                    else
     1025                        cbox->SetData("DIALOG_CONFIRM_X_X");
     1026                }
     1027                m_Children.insert(window, m_Dialog);
    10141028            }
    1015             m_Children.insert(window, m_Dialog);
    1016         }
    1017         else
    1018         {
     1029            else
     1030            {
     1031                RevertUIScale();
     1032                delete dialog;
     1033                return;
     1034            }
     1035
    10191036            RevertUIScale();
    1020             delete dialog;
    1021             return;
    10221037        }
    1023            
    1024         RevertUIScale();
    10251038    }
    10261039
    10271040    if (updatefor)
  • mythtv/libs/libmythtv/osd.h

    diff --git a/mythtv/libs/libmythtv/osd.h b/mythtv/libs/libmythtv/osd.h
    index 2136fa2..b6615ea 100644
    a b class OSD 
    167167    bool DialogHandleKeypress(QKeyEvent *e);
    168168    void DialogQuit(void);
    169169    void DialogShow(const QString &window, const QString &text = "",
    170                     int updatefor = 0);
     170                    int updatefor = 0, const QString  &confirmationData ="");
    171171    void DialogSetText(const QString &text);
    172172    void DialogBack(QString text = "", QVariant data = 0, bool exit = false);
    173173    void DialogAddButton(QString text, QVariant data,
  • mythtv/libs/libmythtv/tv_play.cpp

    diff --git a/mythtv/libs/libmythtv/tv_play.cpp b/mythtv/libs/libmythtv/tv_play.cpp
    index 750b3dd..ddd127b 100644
    a b void TV::customEvent(QEvent *e) 
    87138713            return;
    87148714
    87158715        uint timeout = 0;
     8716        bool pausePlayback = false;
    87168717        if (me->ExtraDataCount() == 1)
    87178718        {
    87188719            uint t = me->ExtraData(0).toUInt();
    87198720            if (t > 0 && t < 1000)
    87208721                timeout = t * 1000;
     8722
     8723            if (t == 0 && me->ExtraData(0).contains("pauseplayback"))
     8724                pausePlayback = true;
    87218725        }
    87228726
    87238727        if (timeout > 0)
    87248728            message += " (%d)";
    87258729
     8730
    87268731        PlayerContext *mctx = GetPlayerReadLock(0, __FILE__, __LINE__);
     8732
     8733        QString confirmationData;
     8734        if (pausePlayback && !ContextIsPaused(mctx, __FILE__, __LINE__))
     8735        {
     8736            gTV->NormalSpeed(mctx);
     8737            gTV->StopFFRew(mctx);
     8738            gTV->DoTogglePause(mctx, false);
     8739            confirmationData = "RESUME_PLAYBACK";
     8740        }
     8741
    87278742        OSD *osd = GetOSDLock(mctx);
    87288743        if (osd)
    8729             osd->DialogShow(OSD_DLG_CONFIRM, message, timeout);
     8744            osd->DialogShow(OSD_DLG_CONFIRM, message, timeout, confirmationData);
    87308745        ReturnOSDLock(mctx, osd);
    87318746        ReturnPlayerLock(mctx);
    87328747
    void TV::customEvent(QEvent *e) 
    87538768    {
    87548769        DialogCompletionEvent *dce =
    87558770            reinterpret_cast<DialogCompletionEvent*>(e);
     8771
    87568772        OSDDialogEvent(dce->GetResult(), dce->GetResultText(),
    87578773                       dce->GetData().toString());
    87588774        return;
    void TV::OSDDialogEvent(int result, QString text, QString action) 
    1017110187        }
    1017210188        else if (valid && desc[0] == "CONFIRM")
    1017310189        {
     10190            if (desc[1] == "RESUME" && desc[2] == "PLAYBACK")
     10191                if (ContextIsPaused(actx, __FILE__, __LINE__))
     10192                    gTV->DoTogglePause(actx, false);
    1017410193        }
    1017510194        else
    1017610195        {