Ticket #10053: mythinputevent-2011-10-18.diff

File mythinputevent-2011-10-18.diff, 21.9 KB (added by Xavier Hervy <xavier.hervy@…>, 19 months ago)
  • mythtv/libs/libmythui/libmythui.pro

    diff --git a/mythtv/libs/libmythui/libmythui.pro b/mythtv/libs/libmythui/libmythui.pro
    index 32b839e..869fdba 100644
    a b HEADERS += mythgenerictree.h mythuibuttontree.h mythuiutils.h 
    3030HEADERS += mythvirtualkeyboard.h mythuishape.h mythuiguidegrid.h 
    3131HEADERS += mythrender_base.h mythfontmanager.h mythuieditbar.h 
    3232HEADERS += mythdisplay.h mythuivideo.h mythudplistener.h 
    33 HEADERS += mythuiexp.h 
     33HEADERS += mythuiexp.h mythinputmanager.h mythinputevent.h  
    3434 
    3535SOURCES  = mythmainwindow.cpp mythpainter.cpp mythimage.cpp mythrect.cpp 
    3636SOURCES += myththemebase.cpp  mythpainter_qimage.cpp mythpainter_yuva.cpp 
    SOURCES += themeinfo.cpp mythxdisplay.cpp DisplayRes.cpp DisplayResScreen.cpp 
    4747SOURCES += mythgenerictree.cpp mythuibuttontree.cpp mythuiutils.cpp 
    4848SOURCES += mythvirtualkeyboard.cpp mythuishape.cpp mythuiguidegrid.cpp 
    4949SOURCES += mythfontmanager.cpp mythuieditbar.cpp 
    50 SOURCES += mythdisplay.cpp mythuivideo.cpp mythudplistener.cpp 
     50SOURCES += mythdisplay.cpp mythuivideo.cpp mythudplistener.cpp mythinputevent.cpp 
    5151 
    5252 
    5353inc.path = $${PREFIX}/include/mythtv/libmythui/ 
    inc.files += mythuiprogressbar.h mythuiwebbrowser.h mythuiutils.h 
    6464inc.files += x11colors.h mythgenerictree.h mythuibuttontree.h 
    6565inc.files += mythvirtualkeyboard.h mythuishape.h mythuiguidegrid.h 
    6666inc.files += mythuieditbar.h mythuifilebrowser.h mythuivideo.h 
    67 inc.files += mythuiexp.h mythuiactions.h 
     67inc.files += mythuiexp.h mythuiactions.h mythinputevent.h 
    6868 
    6969INSTALLS += inc 
    7070 
  • mythtv/libs/libmythui/lirc.cpp

    diff --git a/mythtv/libs/libmythui/lirc.cpp b/mythtv/libs/libmythui/lirc.cpp
    index aa9b6e0..057ff90 100644
    a b using namespace std; 
    2222#include "mythdb.h" 
    2323#include "mythsystem.h" 
    2424#include "lircevent.h" 
     25#include "mythinputevent.h" 
    2526#include "lirc_client.h" 
    2627 
    2728#include <sys/types.h> 
    bool LIRC::Init(void) 
    297298            LOG(vtype, LOG_ERR, LOC + 
    298299                QString("Failed to read config file '%1'").arg(configFile)); 
    299300 
    300             lirc_deinit(d->lircState); 
     301            /*lirc_deinit(d->lircState); 
    301302            d->lircState = NULL; 
    302             return false; 
     303            return false;*/ 
     304            return true; 
    303305        } 
    304306    } 
    305307 
    bool LIRC::IsDoRunSet(void) const 
    330332    return doRun; 
    331333} 
    332334 
     335/** 
     336 * Send a MythInoutEvent from date 
     337 * use when no .lircrc found or config can not be converted to QKeyEvnt 
     338 */ 
     339void LIRC::processData(const QByteArray &data) 
     340{ 
     341    QString remoteName; 
     342    QString buttonName; 
     343    QString code(data); 
     344    QStringList codes = code.split(" "); 
     345    if (codes.size() == 4) 
     346    { 
     347        buttonName=QString(codes.at(2)); 
     348        remoteName=QString(codes.at(3)); 
     349        LOG(VB_GENERAL, LOG_ERR, QString("lircd: %1 %2") 
     350                .arg(buttonName).arg(remoteName)); 
     351        MythInputEvent * event = new MythInputEvent("lirc", remoteName, buttonName); 
     352        QCoreApplication::postEvent(m_mainWindow, event); 
     353    } 
     354} 
     355 
    333356void LIRC::Process(const QByteArray &data) 
    334357{ 
    335358    QMutexLocker static_lock(&lirclib_lock); 
    336359 
    337     // lirc_code2char will make code point to a static datafer.. 
    338     char *code = NULL; 
    339     int ret = lirc_code2char( 
    340         d->lircState, d->lircConfig, const_cast<char*>(data.constData()), &code); 
    341  
    342     while ((0 == ret) && code) 
     360    if (d->lircConfig) 
    343361    { 
    344         QString lirctext(code); 
    345         QString qtcode = code; 
    346         qtcode.replace("ctrl-",  "ctrl+",  Qt::CaseInsensitive); 
    347         qtcode.replace("alt-",   "alt+",   Qt::CaseInsensitive); 
    348         qtcode.replace("shift-", "shift+", Qt::CaseInsensitive); 
    349         qtcode.replace("meta-",  "meta+",  Qt::CaseInsensitive); 
    350         QKeySequence a(qtcode); 
    351  
    352         // Send a dummy keycode if we couldn't convert the key sequence. 
    353         // This is done so the main code can output a warning for bad 
    354         // mappings. 
    355         if (!a.count()) 
    356         { 
    357             QCoreApplication::postEvent( 
    358                 m_mainWindow, new LircKeycodeEvent( 
    359                     QEvent::KeyPress, 0, 
    360                     (Qt::KeyboardModifiers) 
    361                     LircKeycodeEvent::kLIRCInvalidKeyCombo, 
    362                     QString(), lirctext)); 
    363         } 
     362        // lirc_code2char will make code point to a static datafer.. 
     363        char *code = NULL; 
     364        int ret = lirc_code2char( 
     365            d->lircState, d->lircConfig, const_cast<char*>(data.constData()), &code); 
    364366 
    365         vector<LircKeycodeEvent*> keyReleases; 
    366         for (unsigned int i = 0; i < a.count(); i++) 
     367            LOG(VB_GENERAL, LOG_ERR, QString("lircd: ret %1") 
     368                    .arg(ret)); 
     369 
     370        while ((0 == ret) && code) 
    367371        { 
    368             int keycode = a[i]; 
    369             Qt::KeyboardModifiers mod = Qt::NoModifier; 
    370             mod |= (Qt::SHIFT & keycode) ? Qt::ShiftModifier : Qt::NoModifier; 
    371             mod |= (Qt::META  & keycode) ? Qt::MetaModifier  : Qt::NoModifier; 
    372             mod |= (Qt::CTRL  & keycode) ? Qt::ControlModifier: Qt::NoModifier; 
    373             mod |= (Qt::ALT   & keycode) ? Qt::AltModifier   : Qt::NoModifier; 
    374  
    375             keycode &= ~Qt::MODIFIER_MASK; 
    376  
    377             QString text = ""; 
    378             if (!mod) 
    379                 text = QString(QChar(keycode)); 
    380  
    381             QCoreApplication::postEvent( 
    382                 m_mainWindow, new LircKeycodeEvent( 
    383                     QEvent::KeyPress, keycode, mod, text, lirctext)); 
    384  
    385             keyReleases.push_back( 
    386                 new LircKeycodeEvent( 
    387                     QEvent::KeyRelease, keycode, mod, text, lirctext)); 
    388         } 
     372            QString lirctext(code); 
     373            QString qtcode = code; 
     374            qtcode.replace("ctrl-",  "ctrl+",  Qt::CaseInsensitive); 
     375            qtcode.replace("alt-",   "alt+",   Qt::CaseInsensitive); 
     376            qtcode.replace("shift-", "shift+", Qt::CaseInsensitive); 
     377            qtcode.replace("meta-",  "meta+",  Qt::CaseInsensitive); 
     378            QKeySequence a(qtcode); 
     379 
     380            LOG(VB_GENERAL, LOG_ERR, QString("lircd:  %1") 
     381                    .arg(code)); 
     382 
     383            // Send a dummy keycode if we couldn't convert the key sequence. 
     384            // This is done so the main code can output a warning for bad 
     385            // mappings. 
     386            if (!a.count()) 
     387            { 
     388            LOG(VB_GENERAL, LOG_ERR, QString("lircd: dummy code %1") 
     389                    .arg(QString(data))); 
     390                processData(data); 
     391                /*QCoreApplication::postEvent( 
     392                    m_mainWindow, new LircKeycodeEvent( 
     393                        QEvent::KeyPress, 0, 
     394                        (Qt::KeyboardModifiers) 
     395                        LircKeycodeEvent::kLIRCInvalidKeyCombo, 
     396                        QString(), lirctext));*/ 
     397            } 
     398 
     399            vector<LircKeycodeEvent*> keyReleases; 
     400            for (unsigned int i = 0; i < a.count(); i++) 
     401            { 
     402                int keycode = a[i]; 
     403                Qt::KeyboardModifiers mod = Qt::NoModifier; 
     404                mod |= (Qt::SHIFT & keycode) ? Qt::ShiftModifier : Qt::NoModifier; 
     405                mod |= (Qt::META  & keycode) ? Qt::MetaModifier  : Qt::NoModifier; 
     406                mod |= (Qt::CTRL  & keycode) ? Qt::ControlModifier: Qt::NoModifier; 
     407                mod |= (Qt::ALT   & keycode) ? Qt::AltModifier   : Qt::NoModifier; 
     408 
     409                keycode &= ~Qt::MODIFIER_MASK; 
     410 
     411                QString text = ""; 
     412                if (!mod) 
     413                    text = QString(QChar(keycode)); 
     414 
     415                QCoreApplication::postEvent( 
     416                    m_mainWindow, new LircKeycodeEvent( 
     417                        QEvent::KeyPress, keycode, mod, text, lirctext)); 
     418 
     419                keyReleases.push_back( 
     420                    new LircKeycodeEvent( 
     421                        QEvent::KeyRelease, keycode, mod, text, lirctext)); 
     422            } 
    389423 
    390         for (int i = (int)keyReleases.size() - 1; i>=0; i--) 
    391             QCoreApplication::postEvent(m_mainWindow, keyReleases[i]); 
     424            for (int i = (int)keyReleases.size() - 1; i>=0; i--) 
     425                QCoreApplication::postEvent(m_mainWindow, keyReleases[i]); 
    392426 
    393         ret = lirc_code2char( 
    394             d->lircState, d->lircConfig, const_cast<char*>(data.constData()), &code); 
     427            ret = lirc_code2char( 
     428                d->lircState, d->lircConfig, const_cast<char*>(data.constData()), &code); 
     429        } 
     430    } 
     431    else 
     432    { 
     433        processData(data); 
    395434    } 
    396435} 
    397436 
  • mythtv/libs/libmythui/lirc.h

    diff --git a/mythtv/libs/libmythui/lirc.h b/mythtv/libs/libmythui/lirc.h
    index a75d1a4..f44d703 100644
    a b class LIRC : public QObject, public MThread 
    4242    virtual void run(void); 
    4343    QList<QByteArray> GetCodes(void); 
    4444    void Process(const QByteArray &data); 
     45    void processData(const QByteArray &data); 
    4546 
    4647    mutable QMutex  lock; 
    4748    static  QMutex  lirclib_lock; 
  • mythtv/libs/libmythui/mythmainwindow.cpp

    diff --git a/mythtv/libs/libmythui/mythmainwindow.cpp b/mythtv/libs/libmythui/mythmainwindow.cpp
    index e69e4fd..2e4fc37 100644
    a b using namespace std; 
    5252#include "lircevent.h" 
    5353#include "mythudplistener.h" 
    5454#include "mythrender_base.h" 
     55#include "mythinputmanager.h" 
    5556 
    5657#ifdef USING_APPLEREMOTE 
    5758#include "AppleRemoteListener.h" 
    struct MPData { 
    115116    MediaPlayCallback playFn; 
    116117}; 
    117118 
     119 
     120class ButtonMapping 
     121{ 
     122  public: 
     123    ButtonMapping(const QString &buttonName):m_buttonName(buttonName),m_jump(0){}; 
     124    QString buttonName(){return m_buttonName;}; 
     125    void addMapping(const QString &context, const QString & action) 
     126    { 
     127        m_contextMapping[context].append(action); 
     128    } 
     129 
     130    bool getMapping(const QString &context, QStringList &actions) 
     131    { 
     132        if (m_contextMapping.count(context) > 0) 
     133        { 
     134            actions += m_contextMapping[context]; 
     135            return true; 
     136        } 
     137        return false; 
     138    }; 
     139     
     140    void addJump(JumpData * jump) 
     141    { 
     142        m_jump=jump; 
     143    } 
     144 
     145    JumpData * getJump() 
     146    { 
     147        return m_jump; 
     148    } 
     149    void clearJump(const QString &destination) 
     150    { 
     151        if (m_jump && m_jump->destination == destination) 
     152            m_jump=NULL; 
     153    } 
     154 
     155  private: 
     156    QString m_buttonName; 
     157    JumpData * m_jump; 
     158    QMap<QString,QStringList> m_contextMapping; //i.e context -> action(s) 
     159}; 
     160 
     161class RemoteMapping 
     162{ 
     163  public: 
     164    RemoteMapping(const QString &remoteName):m_remoteName(remoteName){} 
     165    QString remoteName(){return m_remoteName;}; 
     166    void addMapping(const QString &buttonName, const QString &context, const QString & action) 
     167    { 
     168        if (!m_buttonMapping.contains(buttonName)) 
     169        { 
     170            m_buttonMapping[buttonName]=new ButtonMapping(buttonName); 
     171        } 
     172        m_buttonMapping[buttonName]->addMapping(context, action); 
     173    } 
     174    bool getMapping(const QString &buttonName, const QString &context, QStringList &actions) 
     175    { 
     176        if (m_buttonMapping.contains(buttonName)) 
     177            return m_buttonMapping[buttonName]->getMapping(context, actions); 
     178        return false; 
     179    } 
     180    void addJump(const QString &buttonName, JumpData * jump) 
     181    { 
     182        if (!m_buttonMapping.contains(buttonName)) 
     183        { 
     184            m_buttonMapping[buttonName]=new ButtonMapping(buttonName); 
     185        } 
     186        m_buttonMapping[buttonName]->addJump(jump); 
     187    } 
     188    JumpData * getJump(const QString &buttonName) 
     189    { 
     190        ButtonMapping * buttonMapping = m_buttonMapping.value(buttonName); 
     191        if (buttonMapping) 
     192        { 
     193            return buttonMapping->getJump(); 
     194        } 
     195        return NULL; 
     196    } 
     197    void clearJump(const QString &destination) 
     198    { 
     199        ButtonMapping*buttonMapping; 
     200        foreach (buttonMapping, m_buttonMapping) 
     201            buttonMapping->clearJump(destination); 
     202    } 
     203  private: 
     204    QMap<QString,ButtonMapping*> m_buttonMapping; 
     205    QString m_remoteName; 
     206}; 
     207 
     208class InputMapping 
     209{ 
     210  public: 
     211    InputMapping(const QString &inputName) 
     212        :m_inputName(inputName){}; 
     213    QString inputName(){return m_inputName;}; 
     214    void addMapping(const QString &remoteName, const QString &buttonName, const QString &context, const QString & action) 
     215    { 
     216        if (!m_remoteMapping.contains(remoteName)) 
     217        { 
     218            m_remoteMapping[remoteName]=new RemoteMapping(remoteName); 
     219        } 
     220        m_remoteMapping[remoteName]->addMapping(buttonName, context, action); 
     221    } 
     222    bool getMapping(const QString &remoteName, const QString &buttonName, const QString &context, QStringList &actions) 
     223    { 
     224        if (m_remoteMapping.contains(remoteName)) 
     225            return m_remoteMapping[remoteName]->getMapping(buttonName, context, actions); 
     226        return true; 
     227    } 
     228    void addJump(const QString &remoteName, const QString &buttonName, JumpData * jump) 
     229    { 
     230        if (!m_remoteMapping.contains(remoteName)) 
     231        { 
     232            m_remoteMapping[remoteName]=new RemoteMapping(remoteName); 
     233        } 
     234        m_remoteMapping[remoteName]->addJump(buttonName, jump); 
     235    } 
     236    JumpData * getJump(const QString &remoteName, const QString &buttonName) 
     237    { 
     238        if (m_remoteMapping.contains(remoteName)) 
     239        { 
     240            return m_remoteMapping[remoteName]->getJump(buttonName); 
     241        } 
     242        return NULL; 
     243    } 
     244    void clearJump(const QString &destination) 
     245    { 
     246        RemoteMapping*remoteMapping; 
     247        foreach (remoteMapping, m_remoteMapping) 
     248            remoteMapping->clearJump(destination); 
     249    } 
     250  private: 
     251    QMap <QString,RemoteMapping*> m_remoteMapping; 
     252    QString m_inputName; 
     253}; 
     254 
     255 
    118256class MythMainWindowPrivate 
    119257{ 
    120258  public: 
    class MythMainWindowPrivate (this hunk was shorter than expected) 
    211351    QMap<int, JumpData*> jumpMap; 
    212352    QMap<QString, JumpData> destinationMap; 
    213353    QMap<QString, MPData> mediaPluginMap; 
     354    QMap<QString, InputMapping*> inputsMapping; 
    214355 
    215356    void (*exitmenucallback)(void); 
    216357 
    void MythMainWindow::ExitToMainMenu(void) 
    14301583    } 
    14311584} 
    14321585 
     1586bool MythMainWindow::TranslateKeyPress(const QString &context, 
     1587                                       MythInputEvent *e, QStringList &actions, 
     1588                                       bool allowJumps) 
     1589{ 
     1590    actions.clear(); 
     1591 
     1592    QStringList localActions; 
     1593 
     1594    JumpData * jump = NULL; 
     1595 
     1596    if (allowJumps) 
     1597    { 
     1598        InputMapping * inputMapping = d->inputsMapping.value(e->inputName()); 
     1599        if (inputMapping) 
     1600        { 
     1601            jump = inputMapping->getJump(e->remoteName(), 
     1602                    e->buttonName()); 
     1603            if (jump) 
     1604            { 
     1605                inputMapping->getMapping(e->remoteName(), 
     1606                        e->buttonName(), context, localActions); 
     1607                if (localActions.contains(jump->localAction)) 
     1608                    allowJumps = false;                 
     1609            } 
     1610        } 
     1611    } 
     1612 
     1613    if (allowJumps && jump && !jump->exittomain && d->exitmenucallback == NULL) 
     1614    { 
     1615        d->exitingtomain = true; 
     1616        d->exitmenucallback = jump->callback; 
     1617        QCoreApplication::postEvent( 
     1618            this, new QEvent(MythEvent::kExitToMainMenuEventType)); 
     1619        return true; 
     1620    } 
     1621 
     1622    if (d->inputsMapping.value(e->inputName())) 
     1623    { 
     1624        d->inputsMapping.value(e->inputName())->getMapping(e->remoteName(), 
     1625            e->buttonName(), context, actions); 
     1626 
     1627        d->inputsMapping.value(e->inputName())->getMapping(e->remoteName(), 
     1628            e->buttonName(), "Global", actions); 
     1629    } 
     1630    return false;  
     1631} 
     1632 
    14331633/** 
    14341634 * \brief Get a list of actions for a keypress in the given context 
    14351635 * \param context The context in which to lookup the keypress for actions. 
    bool MythMainWindow::TranslateKeyPress(const QString &context, 
    14441644                                       QKeyEvent *e, QStringList &actions, 
    14451645                                       bool allowJumps) 
    14461646{ 
     1647    MythInputEvent * me = dynamic_cast<MythInputEvent *>(e); 
     1648    if (me) 
     1649    { 
     1650        bool handled =  TranslateKeyPress(context,me, actions, allowJumps); 
     1651        if (handled || actions.size()>0)  
     1652            return handled; 
     1653    } 
     1654 
    14471655    actions.clear(); 
    14481656 
    14491657    // Special case for custom QKeyEvent where the action is embedded directly 
    void MythMainWindow::RegisterKey(const QString &context, const QString &action, 
    15791787    { 
    15801788        query.prepare("SELECT keylist, description FROM keybindings WHERE " 
    15811789                      "context = :CONTEXT AND action = :ACTION AND " 
    1582                       "hostname = :HOSTNAME ;"); 
     1790                      "hostname = :HOSTNAME AND input='' AND device='';"); 
    15831791        query.bindValue(":CONTEXT", context); 
    15841792        query.bindValue(":ACTION", action); 
    15851793        query.bindValue(":HOSTNAME", GetMythDB()->GetHostName()); 
    void MythMainWindow::RegisterKey(const QString &context, const QString &action, 
    16171825            QString inskey = keybind; 
    16181826 
    16191827            query.prepare("INSERT INTO keybindings (context, action, " 
    1620                           "description, keylist, hostname) VALUES " 
     1828                          "description, keylist, hostname, input, device) VALUES " 
    16211829                          "( :CONTEXT, :ACTION, :DESCRIPTION, :KEYLIST, " 
    1622                           ":HOSTNAME );"); 
     1830                          ":HOSTNAME , '', '');"); 
    16231831            query.bindValue(":CONTEXT", context); 
    16241832            query.bindValue(":ACTION", action); 
    16251833            query.bindValue(":DESCRIPTION", description); 
    void MythMainWindow::RegisterKey(const QString &context, const QString &action, 
    16341842    } 
    16351843 
    16361844    BindKey(context, action, keybind); 
     1845 
     1846    if (d->m_useDB && query.isConnected()) 
     1847    { 
     1848        query.prepare("SELECT input, device, keylist FROM keybindings WHERE " 
     1849                      "context = :CONTEXT AND action = :ACTION AND " 
     1850                      "hostname = :HOSTNAME AND input!='' AND device!='';"); 
     1851        query.bindValue(":CONTEXT", context); 
     1852        query.bindValue(":ACTION", action); 
     1853        query.bindValue(":HOSTNAME", GetMythDB()->GetHostName()); 
     1854        if (query.exec()) 
     1855        { 
     1856        while (query.next()) 
     1857        { 
     1858            QString inputName  = query.value(0).toString(); 
     1859            QString remoteName = query.value(1).toString(); 
     1860            QString buttonName = query.value(2).toString(); 
     1861            LOG(VB_GENERAL, LOG_ERR, 
     1862            QString("MythMainWindow::RegisterKey %1 %2 %3") 
     1863                    .arg(inputName).arg(remoteName).arg(buttonName)); 
     1864            if (!d->inputsMapping.value(inputName)) 
     1865                d->inputsMapping[inputName]=new InputMapping(inputName); 
     1866            d->inputsMapping[inputName]->addMapping(remoteName, buttonName, context, action); 
     1867        } 
     1868        } 
     1869    } 
    16371870} 
    16381871 
    16391872QString MythMainWindow::GetKey(const QString &context, 
    QString MythMainWindow::GetKey(const QString &context, 
    16601893 
    16611894void MythMainWindow::ClearJump(const QString &destination) 
    16621895{ 
     1896    InputMapping * inputMapping; 
     1897    foreach(inputMapping, d->inputsMapping) 
     1898        inputMapping->clearJump(destination); 
     1899 
    16631900    /* make sure that the jump point exists (using [] would add it)*/ 
    16641901    if (d->destinationMap.find(destination) == d->destinationMap.end()) 
    16651902    { 
    void MythMainWindow::RegisterJump(const QString &destination, 
    17291966    if (query.isConnected()) 
    17301967    { 
    17311968        query.prepare("SELECT keylist FROM jumppoints WHERE " 
    1732                       "destination = :DEST and hostname = :HOST ;"); 
     1969                      "destination = :DEST and hostname = :HOST and input='' and device='';"); 
    17331970        query.bindValue(":DEST", destination); 
    17341971        query.bindValue(":HOST", GetMythDB()->GetHostName()); 
    17351972 
    void MythMainWindow::RegisterJump(const QString &destination, 
    17421979            QString inskey = keybind; 
    17431980 
    17441981            query.prepare("INSERT INTO jumppoints (destination, description, " 
    1745                           "keylist, hostname) VALUES ( :DEST, :DESC, :KEYLIST, " 
    1746                           ":HOST );"); 
     1982                          "keylist, hostname, input, device) VALUES ( :DEST, :DESC, :KEYLIST, " 
     1983                          ":HOST, '', '' );"); 
    17471984            query.bindValue(":DEST", destination); 
    17481985            query.bindValue(":DESC", description); 
    17491986            query.bindValue(":KEYLIST", inskey); 
    void MythMainWindow::RegisterJump(const QString &destination, 
    17611998    d->destinationMap[destination] = jd; 
    17621999 
    17632000    BindJump(destination, keybind); 
     2001 
     2002    //TODO Xavier load additionnal jumppoint for remote 
     2003    if (query.isConnected()) 
     2004    { 
     2005        query.prepare("SELECT input, device, keylist FROM jumppoints WHERE " 
     2006                      "destination = :DEST and hostname = :HOST and input!='' and device!='';"); 
     2007        query.bindValue(":DEST", destination); 
     2008        query.bindValue(":HOST", GetMythDB()->GetHostName()); 
     2009 
     2010        if (query.exec() && query.next()) 
     2011        { 
     2012            QString inputName  = query.value(0).toString(); 
     2013            QString remoteName = query.value(1).toString(); 
     2014            QString buttonName = query.value(2).toString(); 
     2015 
     2016            if (!d->inputsMapping.value(inputName)) 
     2017                d->inputsMapping[inputName]=new InputMapping(inputName); 
     2018            d->inputsMapping[inputName]->addJump(remoteName, buttonName, &jd); 
     2019        } 
     2020    } 
    17642021} 
    17652022 
    17662023void MythMainWindow::ClearAllJumps() 
  • mythtv/libs/libmythui/mythmainwindow.h

    diff --git a/mythtv/libs/libmythui/mythmainwindow.h b/mythtv/libs/libmythui/mythmainwindow.h
    index 46ea69d..75f4844 100644
    a b  
    66#include "mythuiactions.h" 
    77#include "mythuitype.h" 
    88#include "mythscreenstack.h" 
     9#include "mythinputevent.h" 
    910 
    1011class QEvent; 
    1112 
    class MUI_PUBLIC MythMainWindow : public QWidget 
    4849    MythScreenStack *GetStack(const QString &stackname); 
    4950    MythScreenStack *GetStackAt(int pos); 
    5051 
     52    bool TranslateKeyPress(const QString &context, MythInputEvent *e, 
     53                           QStringList &actions, bool allowJumps = true) 
     54                           MUNUSED_RESULT; 
     55 
    5156    bool TranslateKeyPress(const QString &context, QKeyEvent *e, 
    5257                           QStringList &actions, bool allowJumps = true) 
    5358                           MUNUSED_RESULT;