Index: libs/libmythtv/channeleditor.cpp
===================================================================
--- libs/libmythtv/channeleditor.cpp	(revision 14799)
+++ libs/libmythtv/channeleditor.cpp	(working copy)
@@ -326,13 +326,12 @@
          tr("Are you sure you would like to delete the channels on %1?")
          .arg(currentLabel));
 
-    int val = MythPopupBox::show2ButtonPopup(
-        gContext->GetMainWindow(), "",
-        chan_msg,
+    DialogCode val = MythPopupBox::Show2ButtonPopup(
+        gContext->GetMainWindow(), "", chan_msg,
         tr("Yes, delete the channels"),
-        tr("No, don't"), 2);
+        tr("No, don't"), kDialogCodeButton1);
 
-    if (val != 0) 
+    if (kDialogCodeButton0 != val)
         return;
 
     MSqlQuery query(MSqlQuery::InitCon());
@@ -414,13 +413,13 @@
 {
     id = list->getValue().toInt();
 
-    int val = MythPopupBox::show2ButtonPopup(
-        gContext->GetMainWindow(), "",
-        tr("Are you sure you would like to delete this channel?"),
+    DialogCode val = MythPopupBox::Show2ButtonPopup(
+        gContext->GetMainWindow(),
+        "", tr("Are you sure you would like to delete this channel?"),
         tr("Yes, delete the channel"),
-        tr("No, don't"), 2);
+        tr("No, don't"), kDialogCodeButton1);
 
-    if (val == 0) 
+    if (kDialogCodeButton0 == val)
     {
         MSqlQuery query(MSqlQuery::InitCon());
         query.prepare("DELETE FROM channel WHERE chanid = :CHID ;");
@@ -439,15 +438,14 @@
        edit();
     else
     {
-        int val = MythPopupBox::show2ButtonPopup(gContext->GetMainWindow(),
-                                                 "",
-                                                 tr("Channel Menu"),
-                                                 tr("Edit.."),
-                                                 tr("Delete.."), 1);
+        DialogCode val = MythPopupBox::Show2ButtonPopup(
+            gContext->GetMainWindow(),
+            "", tr("Channel Menu"),
+            tr("Edit.."), tr("Delete.."), kDialogCodeButton0);
 
-        if (val == 0)
+        if (kDialogCodeButton0 == val)
             emit edit();
-        else if (val == 1)
+        else if (kDialogCodeButton1 == val)
             emit del();
         else
             list->setFocus();
Index: libs/libmythtv/playgroup.cpp
===================================================================
--- libs/libmythtv/playgroup.cpp	(revision 14799)
+++ libs/libmythtv/playgroup.cpp	(working copy)
@@ -262,12 +262,13 @@
     QString message = tr("Delete playback group:") +
         QString("\n'%1'?").arg(name);
 
-    int value = MythPopupBox::show2ButtonPopup(gContext->GetMainWindow(),
-                                               "", message,
-                                               tr("Yes, delete group"),
-                                               tr("No, Don't delete group"), 2);
+    DialogCode value = MythPopupBox::Show2ButtonPopup(
+        gContext->GetMainWindow(),
+        "", message,
+        tr("Yes, delete group"),
+        tr("No, Don't delete group"), kDialogCodeButton1);
 
-    if (value == 0)
+    if (kDialogCodeButton0 == value)
     {
         MSqlQuery query(MSqlQuery::InitCon());
         query.prepare("DELETE FROM playgroup WHERE name = :NAME;");
Index: libs/libmythtv/viewschdiff.cpp
===================================================================
--- libs/libmythtv/viewschdiff.cpp	(revision 14799)
+++ libs/libmythtv/viewschdiff.cpp	(working copy)
@@ -116,7 +116,7 @@
             handled = true;
 
             if (action == "ESCAPE" || action == "LEFT")
-                done(MythDialog::Accepted);
+                done(kDialogCodeAccepted);
             else if (action == "UP")
                 cursorUp();
             else if (action == "DOWN")
Index: libs/libmythtv/tv_play.cpp
===================================================================
--- libs/libmythtv/tv_play.cpp	(revision 14799)
+++ libs/libmythtv/tv_play.cpp	(working copy)
@@ -145,20 +145,21 @@
                         recTitles.append(buttonTitle);
                         it++;
                     }
-                    int ret = MythPopupBox::showButtonPopup(
-                                    gContext->GetMainWindow(),
-                                    "",
-                                    tr("All Tuners are Busy.\n"
-                                       "Select a Current Recording"),
-                                    recTitles, 1);
-                    if ((0 < ret) && (ret <= (int)reclist->size()))
+                    DialogCode ret = MythPopupBox::ShowButtonPopup(
+                        gContext->GetMainWindow(),
+                        "",
+                        tr("All Tuners are Busy.\n"
+                           "Select a Current Recording"),
+                        recTitles, kDialogCodeButton1);
+                    int idx = ((int)ret) - ((int)kDialogCodeButton1);
+                    if ((idx < 0) || (idx >= (int)reclist->size()))
                     {
-                        p = reclist->at(ret - 1);
-                        curProgram = new ProgramInfo(*p);
+                        quitAll = true;
                     }
                     else
                     {
-                        quitAll = true;
+                        p = reclist->at(idx);
+                        curProgram = new ProgramInfo(*p);
                     }
                 }
             }
Index: libs/libmythtv/sr_dialog.cpp
===================================================================
--- libs/libmythtv/sr_dialog.cpp	(revision 14799)
+++ libs/libmythtv/sr_dialog.cpp	(working copy)
@@ -121,7 +121,7 @@
         if (action == "ESCAPE")
         {
             if (!listMenu.goBack())
-                done(MythDialog::Rejected );
+                done(kDialogCodeRejected);
         }
         else if (!listMenu.getLocked())
         {
Index: libs/libmythtv/storagegroup.cpp
===================================================================
--- libs/libmythtv/storagegroup.cpp	(revision 14799)
+++ libs/libmythtv/storagegroup.cpp	(working copy)
@@ -417,12 +417,13 @@
     QString message =
         tr("Remove '%1'\nDirectory From Storage Group?").arg(name);
 
-    int value =
-        MythPopupBox::show2ButtonPopup(gContext->GetMainWindow(), "", message,
-                                       tr("Yes, remove directory"),
-                                       tr("No, Don't remove directory"), 2);
+    DialogCode value = MythPopupBox::Show2ButtonPopup(
+        gContext->GetMainWindow(), "", message,
+        tr("Yes, remove directory"),
+        tr("No, Don't remove directory"),
+        kDialogCodeButton1);
 
-    if (value == 0)
+    if (kDialogCodeButton0 == value)
     {
         MSqlQuery query(MSqlQuery::InitCon());
         query.prepare("DELETE FROM storagegroup "
@@ -556,12 +557,13 @@
 
     QString message = tr("Delete '%1' Storage Group?").arg(dispGroup);
 
-    int value = MythPopupBox::show2ButtonPopup(gContext->GetMainWindow(),
-                                               "", message,
-                                               tr("Yes, delete group"),
-                                               tr("No, Don't delete group"), 2);
+    DialogCode value = MythPopupBox::Show2ButtonPopup(
+        gContext->GetMainWindow(),
+        "", message,
+        tr("Yes, delete group"),
+        tr("No, Don't delete group"), kDialogCodeButton1);
 
-    if (value == 0)
+    if (kDialogCodeButton0 == value)
     {
         MSqlQuery query(MSqlQuery::InitCon());
         query.prepare("DELETE FROM storagegroup "
Index: libs/libmythtv/videosource.cpp
===================================================================
--- libs/libmythtv/videosource.cpp	(revision 14799)
+++ libs/libmythtv/videosource.cpp	(working copy)
@@ -2046,17 +2046,17 @@
     } 
     else 
     {
-        int val = MythPopupBox::show2ButtonPopup(
+        DialogCode val = MythPopupBox::Show2ButtonPopup(
             gContext->GetMainWindow(),
             "",
             tr("Capture Card Menu"),
             tr("Edit.."),
             tr("Delete.."),
-            1);
+            kDialogCodeButton0);
 
-        if (val == 0)
+        if (kDialogCodeButton0 == val)
             edit();
-        else if (val == 1)
+        else if (kDialogCodeButton1 == val)
             del();
     }
 }
@@ -2066,14 +2066,14 @@
     const int cardid = listbox->getValue().toInt();
     if (-1 == cardid)
     {
-        int val = MythPopupBox::show2ButtonPopup(
+        DialogCode val = MythPopupBox::Show2ButtonPopup(
             gContext->GetMainWindow(), "",
             tr("Are you sure you want to delete "
                "ALL capture cards on %1?").arg(gContext->GetHostName()),
             tr("Yes, delete capture cards"),
-            tr("No, don't"), 2);
+            tr("No, don't"), kDialogCodeButton1);
 
-        if (0 == val)
+        if (kDialogCodeButton0 == val)
         {
             MSqlQuery cards(MSqlQuery::InitCon());
 
@@ -2102,14 +2102,14 @@
     }
     else if (-2 == cardid)
     {
-        int val = MythPopupBox::show2ButtonPopup(
+        DialogCode val = MythPopupBox::Show2ButtonPopup(
             gContext->GetMainWindow(), "",
             tr("Are you sure you want to delete "
                "ALL capture cards?"),
             tr("Yes, delete capture cards"),
-            tr("No, don't"), 2);
+            tr("No, don't"), kDialogCodeButton1);
 
-        if (0 == val)
+        if (kDialogCodeButton0 == val)
         {
             MSqlQuery query(MSqlQuery::InitCon());
             query.exec("TRUNCATE TABLE capturecard;");
@@ -2128,13 +2128,13 @@
 
 void CaptureCardEditor::del(void)
 {
-    int val = MythPopupBox::show2ButtonPopup(
+    DialogCode val = MythPopupBox::Show2ButtonPopup(
         gContext->GetMainWindow(), "",
         tr("Are you sure you want to delete this capture card?"),
         tr("Yes, delete capture card"),
-        tr("No, don't"), 2);
+        tr("No, don't"), kDialogCodeButton1);
 
-    if (val == 0)
+    if (kDialogCodeButton0 == val)
     {
         CardUtil::DeleteCard(listbox->getValue().toUInt());
         load();
@@ -2181,17 +2181,17 @@
     } 
     else 
     {
-        int val = MythPopupBox::show2ButtonPopup(
+        DialogCode val = MythPopupBox::Show2ButtonPopup(
             gContext->GetMainWindow(),
             "",
             tr("Video Source Menu"),
             tr("Edit.."),
             tr("Delete.."),
-            1);
+            kDialogCodeButton0);
 
-        if (val == 0)
+        if (kDialogCodeButton0 == val)
             edit();
-        else if (val == 1)
+        else if (kDialogCodeButton1 == val)
             del();
     }
 }
@@ -2201,14 +2201,14 @@
     const int sourceid = listbox->getValue().toInt();
     if (-1 == sourceid)
     {
-        int val = MythPopupBox::show2ButtonPopup(
+        DialogCode val = MythPopupBox::Show2ButtonPopup(
             gContext->GetMainWindow(), "",
             tr("Are you sure you want to delete "
                "ALL video sources?"),
             tr("Yes, delete video sources"),
-            tr("No, don't"), 2);
+            tr("No, don't"), kDialogCodeButton1);
 
-        if (0 == val)
+        if (kDialogCodeButton0 == val)
         {
             MSqlQuery query(MSqlQuery::InitCon());
             query.exec("TRUNCATE TABLE channel;");
@@ -2233,15 +2233,15 @@
 
 void VideoSourceEditor::del() 
 {
-    int val = MythPopupBox::show2ButtonPopup(
+    DialogCode val = MythPopupBox::Show2ButtonPopup(
         gContext->GetMainWindow(), "",
         tr("Are you sure you want to delete "
            "this video source?"),
         tr("Yes, delete video source"),
         tr("No, don't"),
-        2);
+        kDialogCodeButton1);
 
-    if (val == 0)
+    if (kDialogCodeButton0 == val)
     {
         MSqlQuery query(MSqlQuery::InitCon());
 
Index: libs/libmythtv/diseqcsettings.cpp
===================================================================
--- libs/libmythtv/diseqcsettings.cpp	(revision 14799)
+++ libs/libmythtv/diseqcsettings.cpp	(working copy)
@@ -892,7 +892,7 @@
             if (sw)
             {
                 SwitchConfig config(*sw);
-                changed = (config.exec() == MythDialog::Accepted);
+                changed = (config.exec() == kDialogCodeAccepted);
             }
         }
         break;
@@ -903,7 +903,7 @@
             if (rotor)
             {
                 RotorConfig config(*rotor);
-                changed = (config.exec() == MythDialog::Accepted);
+                changed = (config.exec() == kDialogCodeAccepted);
             }
         }
         break;
@@ -914,7 +914,7 @@
             if (lnb)
             {
                 LNBConfig config(*lnb);
-                changed = (config.exec() == MythDialog::Accepted);
+                changed = (config.exec() == kDialogCodeAccepted);
             }
         }
         break;
Index: libs/libmythtv/profilegroup.cpp
===================================================================
--- libs/libmythtv/profilegroup.cpp	(revision 14799)
+++ libs/libmythtv/profilegroup.cpp	(working copy)
@@ -296,12 +296,13 @@
         QString message = QObject::tr("Delete profile group:") + 
                           QString("\n'%1'?").arg(ProfileGroup::getName(id));
 
-        int value = MythPopupBox::show2ButtonPopup(gContext->GetMainWindow(),
-                                                   "", message, 
-                                     QObject::tr("Yes, delete group"),
-                                     QObject::tr("No, Don't delete group"), 2);
+        DialogCode value = MythPopupBox::Show2ButtonPopup(
+            gContext->GetMainWindow(),
+            "", message, 
+            QObject::tr("Yes, delete group"),
+            QObject::tr("No, Don't delete group"), kDialogCodeButton1);
 
-        if (value == 0)
+        if (kDialogCodeButton0 == value)
         {
             querystr = QString("DELETE codecparams FROM codecparams, "
                             "recordingprofiles WHERE " 
Index: libs/libmythtv/transporteditor.cpp
===================================================================
--- libs/libmythtv/transporteditor.cpp	(revision 14799)
+++ libs/libmythtv/transporteditor.cpp	(working copy)
@@ -315,13 +315,13 @@
 {
     uint mplexid = m_list->getValue().toInt();
 
-    int val = MythPopupBox::show2ButtonPopup(
+    DialogCode val = MythPopupBox::Show2ButtonPopup(
         gContext->GetMainWindow(), "", 
         tr("Are you sure you would like to delete this transport?"), 
         tr("Yes, delete the transport"), 
-        tr("No, don't"), 2);
+        tr("No, don't"), kDialogCodeButton1);
 
-    if (val == 1)
+    if (kDialogCodeButton0 != val)
         return;
 
     MSqlQuery query(MSqlQuery::InitCon());
@@ -350,16 +350,15 @@
        return;
     }
 
-    int val = MythPopupBox::show2ButtonPopup(
+    DialogCode val = MythPopupBox::Show2ButtonPopup(
         gContext->GetMainWindow(), 
-        "", 
-        tr("Transport Menu"), 
+        "", tr("Transport Menu"),
         tr("Edit.."), 
-        tr("Delete.."), 1);
+        tr("Delete.."), kDialogCodeButton0);
 
-    if (val == 0)
+    if (kDialogCodeButton0 == val)
         emit Edit();
-    else if (val == 1)
+    else if (kDialogCodeButton1 == val)
         emit Delete();
     else
         m_list->setFocus();
Index: libs/libmythtv/sr_root.cpp
===================================================================
--- libs/libmythtv/sr_root.cpp	(revision 14799)
+++ libs/libmythtv/sr_root.cpp	(working copy)
@@ -5,8 +5,10 @@
            : ManagedListGroup( "rootGroup", NULL, _parentList, _parent, "rootGroup"),
              schedRec(_rec)
 {
-    cancelItem = new DialogDoneListItem( QString("[ %1 ]").arg(QObject::tr("Cancel")), MythDialog::Rejected, NULL,
-                                        _parentList, this, "cancel");
+    cancelItem = new DialogDoneListItem(
+        QString("[ %1 ]").arg(QObject::tr("Cancel")),
+        kDialogCodeRejected, NULL,
+        _parentList, this, "cancel");
     cancelItem->setState(MLS_BOLD);
     addItem(cancelItem);
 
@@ -32,7 +34,7 @@
     connect(testButton, SIGNAL(selected(ManagedListItem*)), _rec, SLOT(testRecording()));
 
     recordAsShownItem = new DialogDoneListItem(QString("[ %1 ]").arg(QObject::tr("Save these settings")),
-                                               MythDialog::Accepted, NULL, _parentList, this, "recordAsShown");
+                                               kDialogCodeAccepted, NULL, _parentList, this, "recordAsShown");
     recordAsShownItem->setState(MLS_BOLD);
     addItem(recordAsShownItem);
 }
Index: libs/libmyth/settings.cpp
===================================================================
--- libs/libmyth/settings.cpp	(revision 14799)
+++ libs/libmyth/settings.cpp	(working copy)
@@ -1853,7 +1853,7 @@
     switch(e->key()) {
     case Key_Escape:
         reject();
-        emit popupDone(MythDialog::Rejected);
+        emit popupDone(kDialogCodeRejected);
         break;
     default:
         MythDialog::keyPressEvent(e);
Index: libs/libmyth/mythdialogs.cpp
===================================================================
--- libs/libmyth/mythdialogs.cpp	(revision 14799)
+++ libs/libmyth/mythdialogs.cpp	(working copy)
@@ -123,17 +123,17 @@
 
 void MythDialog::AcceptItem(int i)
 {
-    done(ListStart + i);
+    done(kDialogCodeListStart + i);
 }
 
 void MythDialog::accept()
 {
-    done(Accepted);
+    done(kDialogCodeAccepted);
 }
 
 void MythDialog::reject()
 {
-    done(Rejected);
+    done(kDialogCodeRejected);
 }
 
 int MythDialog::exec()
@@ -144,7 +144,7 @@
         return -1;
     }
 
-    setResult(Rejected);
+    setResult(kDialogCodeRejected);
 
     Show();
 
@@ -466,14 +466,14 @@
 
 void MythPopupBox::accept(void)
 {
-    MythDialog::done(MythDialog::Accepted);
-    emit popupDone(MythDialog::Accepted);
+    MythDialog::done(kDialogCodeAccepted);
+    emit popupDone(kDialogCodeAccepted);
 }
 
 void MythPopupBox::reject(void)
 {
-    MythDialog::done(MythDialog::Rejected);
-    emit popupDone(MythDialog::Rejected);
+    MythDialog::done(kDialogCodeRejected);
+    emit popupDone(kDialogCodeRejected);
 }
 
 int MythPopupBox::ExecPopup(QObject *target, const char *slot)
@@ -500,24 +500,67 @@
 void MythPopupBox::defaultButtonPressedHandler(void)
 {
     const QObjectList *objlist = children();
-    QObjectListIt it(*objlist);
+    QObjectListIt itf(*objlist);
     QObject *objs;
     int i = 0;
-    while ((objs = it.current()) != 0)
+    bool foundbutton = false;
+
+    // this bit of code will work if the window is focused
+    while ((objs = itf.current()) != 0)
     {
-        ++it;
+        ++itf;
         if (objs->isWidgetType())
         {
             QWidget *widget = (QWidget *)objs;
             if (widget->isA("MythPushButton"))
             {
                 if (widget->hasFocus())
+                {
+                    foundbutton = true;
                     break;
+                }
                 i++;
             }
         }
     }
-    done(i);
+    if (foundbutton)
+    {
+        VERBOSE(VB_IMPORTANT, "Button processed using hasFocus(): "<<i);
+        AcceptItem(i);
+        return;
+    }
+
+    // this bit of code should always work but requires a cast
+    QObjectListIt itd(*objlist);
+    i = 0;
+    while ((objs = itd.current()) != 0)
+    {
+        ++itd;
+        if (objs->isWidgetType())
+        {
+            QWidget *widget = (QWidget *)objs;
+            if (widget->isA("MythPushButton"))
+            {
+                MythPushButton *button = dynamic_cast<MythPushButton*>(widget);
+                if (button && button->isDown())
+                {
+                    foundbutton = true;
+                    break;
+                }
+                i++;
+            }
+        }
+    }
+    if (foundbutton)
+    {
+        VERBOSE(VB_IMPORTANT, "Button processed using isDown(): "<<i);
+        AcceptItem(i);
+        return;
+    }
+
+    VERBOSE(VB_IMPORTANT, "MythPopupBox::defaultButtonPressedHandler(void)"
+            "\n\t\t\tWe should never get here!");
+    done(kDialogCodeRejected);
 }
 
 void MythPopupBox::defaultExitHandler(int r)
@@ -530,7 +573,7 @@
 {
     MythPopupBox popup(parent, title);
     popup.addLabel(message, Medium, true);
-    QButton *okButton = popup.addButton(tr("OK"));
+    QButton *okButton = popup.addButton(tr("OK"), &popup, SLOT(accept()));
     okButton->setFocus();
     popup.ExecPopup();
 }
@@ -540,7 +583,7 @@
 {
     MythPopupBox popup(parent, title);
     popup.addLabel(message, Medium, true);
-    QButton *okButton = popup.addButton(tr("Exit"));
+    QButton *okButton = popup.addButton(tr("Exit"), &popup, SLOT(accept()));
     okButton->setFocus();
     popup.ExecPopup();
 }
@@ -550,14 +593,16 @@
 {
     MythPopupBox popup(parent, title);
     popup.addLabel(message, Medium, true);
-    QButton *okButton = popup.addButton(tr("OK"));
-    QButton *cancelButton = popup.addButton(tr("Cancel"));
+    QButton *okButton = NULL, *cancelButton = NULL;
+    okButton     = popup.addButton(tr("OK"),     &popup, SLOT(accept()));
+    cancelButton = popup.addButton(tr("Cancel"), &popup, SLOT(reject()));
+
     if (focusOk)
         okButton->setFocus();
     else
         cancelButton->setFocus();
 
-    return (popup.ExecPopup() == 0);
+    return (kDialogCodeAccepted == popup.ExecPopup());
 }
 
 bool MythPopupBox::showGetTextPopup(MythMainWindow *parent, QString title,
@@ -570,12 +615,12 @@
     textEdit->setText(text);
     popup.addWidget(textEdit);
     
-    popup.addButton(tr("OK"));
-    popup.addButton(tr("Cancel"));
+    popup.addButton(tr("OK"),     &popup, SLOT(accept()));
+    popup.addButton(tr("Cancel"), &popup, SLOT(cancel()));
     
     textEdit->setFocus();
     
-    if (popup.ExecPopup() == 0)
+    if (kDialogCodeAccepted == popup.ExecPopup())
     {
         text = textEdit->text();
         return true;
@@ -584,44 +629,26 @@
     return false;
 }
 
-
-int MythPopupBox::show2ButtonPopup(MythMainWindow *parent, QString title,
-                                   QString message, QString button1msg,
-                                   QString button2msg, int defvalue)
+DialogCode MythPopupBox::ShowButtonPopup(
+    MythMainWindow *parent,
+    const QString &title, const QString &message,
+    const QStringList &buttonmsgs,
+    DialogCode default_button)
 {
     MythPopupBox popup(parent, title);
 
     popup.addLabel(message, Medium, true);
     popup.addLabel("");
 
-    QButton *but1 = popup.addButton(button1msg);
-    QButton *but2 = popup.addButton(button2msg);
-
-    if (defvalue == 1)
-        but1->setFocus();
-    else
-        but2->setFocus();
-
-    return popup.ExecPopup();
-}
-
-int MythPopupBox::showButtonPopup(MythMainWindow *parent, QString title,
-                                  QString message, QStringList buttonmsgs,
-                                  int defvalue)
-{
-    MythPopupBox popup(parent, title);
-
-    popup.addLabel(message, Medium, true);
-    popup.addLabel("");
-
+    const uint def = ((int)default_button) - ((int)kDialogCodeButton0);
     for (unsigned int i = 0; i < buttonmsgs.size(); i++ )
     {
         QButton *but = popup.addButton(buttonmsgs[i]);
-        if (defvalue == (int)i)
+        if (def == i)
             but->setFocus();
     }
 
-    return popup.ExecPopup();
+    return (DialogCode) popup.ExecPopup();
 }
 
 MythProgressDialog::MythProgressDialog(const QString &message, int totalSteps)
Index: libs/libmyth/mythcontext.cpp
===================================================================
--- libs/libmyth/mythcontext.cpp	(revision 14799)
+++ libs/libmyth/mythcontext.cpp	(working copy)
@@ -3065,36 +3065,40 @@
         else
         {
             QStringList buttonNames;
-            int         selected;
 
             buttonNames += QObject::tr("Exit");
             buttonNames += QObject::tr("Upgrade");
             if (expertMode)
                 buttonNames += QObject::tr("Use current schema");
 
-            selected = MythPopupBox::showButtonPopup(d->mainWindow,
-                                                     "Database Upgrade",
-                                                     message, buttonNames, -1);
+            DialogCode selected = MythPopupBox::ShowButtonPopup(
+                d->mainWindow, "Database Upgrade", message,
+                buttonNames, kDialogCodeButton0);
+
             // The annoying extra confirmation:
-            if (selected == 1)
+            if (kDialogCodeButton1 == selected)
             {
                 message = tr("This cannot be un-done, so having a"
                              " database backup would be a good idea.");
                 if (connections)
                     message += "\n\n" + warnOtherCl;
 
-                selected = MythPopupBox::showButtonPopup(d->mainWindow,
-                                                         "Database Upgrade",
-                                                         message,
-                                                         buttonNames, -1);
+                selected = MythPopupBox::ShowButtonPopup(
+                    d->mainWindow, "Database Upgrade", message,
+                    buttonNames, kDialogCodeButton0);
             }
 
             switch (selected)
             {
-                case 0:  returnValue = MYTH_SCHEMA_EXIT;         break;
-                case 1:  returnValue = MYTH_SCHEMA_UPGRADE;      break;
-                case 2:  returnValue = MYTH_SCHEMA_USE_EXISTING; break;
-                default: returnValue = MYTH_SCHEMA_ERROR;
+                case kDialogCodeRejected:
+                case kDialogCodeButton0:
+                    returnValue = MYTH_SCHEMA_EXIT;         break;
+                case kDialogCodeButton1:
+                    returnValue = MYTH_SCHEMA_UPGRADE;      break;
+                case kDialogCodeButton2:
+                    returnValue = MYTH_SCHEMA_USE_EXISTING; break;
+                default:
+                    returnValue = MYTH_SCHEMA_ERROR;
             }
         }
 
Index: libs/libmyth/mythdialogs.h
===================================================================
--- libs/libmyth/mythdialogs.h	(revision 14799)
+++ libs/libmyth/mythdialogs.h	(working copy)
@@ -50,6 +50,23 @@
 
 #include "libmythui/mythmainwindow.h"
 
+typedef enum DialogCode
+{
+    kDialogCodeRejected  = 0, // should be the same as QDialog::Reject
+    kDialogCodeAccepted  = 1, // should not be the same as QDialog::Reject
+    kDialogCodeListStart = 0x10,
+    kDialogCodeButton0   = 0x10,
+    kDialogCodeButton1   = 0x11,
+    kDialogCodeButton2   = 0x12,
+    kDialogCodeButton3   = 0x13,
+    kDialogCodeButton4   = 0x14,
+    kDialogCodeButton5   = 0x15,
+    kDialogCodeButton6   = 0x16,
+    kDialogCodeButton7   = 0x17,
+    kDialogCodeButton8   = 0x18,
+    kDialogCodeButton9   = 0x19,
+} DialogCode;
+
 class MPUBLIC MythDialog : public QFrame
 {
     Q_OBJECT
@@ -57,13 +74,6 @@
     MythDialog(MythMainWindow *parent, const char *name = 0, 
                bool setsize = true);
 
-    enum DialogCode
-    {
-        Rejected  = 0,
-        Accepted  = 1,
-        ListStart = 0x10,
-    };
-
     int result(void) const { return rescode; }
 
     virtual void Show(void);
@@ -143,13 +153,28 @@
                               QString message);
     static bool showOkCancelPopup(MythMainWindow *parent, QString title,
                                   QString message, bool focusOk);
-    static int show2ButtonPopup(MythMainWindow *parent, QString title,
-                                QString message, QString button1msg,
-                                QString button2msg, int defvalue);
-    static int showButtonPopup(MythMainWindow *parent, QString title,
-                               QString message, QStringList buttonmsgs,
-                               int defvalue);
 
+    static DialogCode Show2ButtonPopup(
+        MythMainWindow *parent,
+        const QString &title, const QString &message,
+        const QString &button1msg, const QString &button2msg,
+        DialogCode default_button)
+    {
+        QStringList buttonmsgs;
+        buttonmsgs += (button1msg.isEmpty()) ?
+            QString("Button 1") : button1msg;
+        buttonmsgs += (button2msg.isEmpty()) ?
+            QString("Button 2") : button2msg;
+        return ShowButtonPopup(
+            parent, title, message, buttonmsgs, default_button);
+    }
+
+    static DialogCode ShowButtonPopup(
+        MythMainWindow *parent,
+        const QString &title, const QString &message,
+        const QStringList &buttonmsgs,
+        DialogCode default_button);
+
     static bool showGetTextPopup(MythMainWindow *parent, QString title,
                                  QString message, QString& text);
 
Index: programs/mythfrontend/playbackbox.cpp
===================================================================
--- programs/mythfrontend/playbackbox.cpp	(revision 14799)
+++ programs/mythfrontend/playbackbox.cpp	(working copy)
@@ -3787,7 +3787,7 @@
 
 void PlaybackBox::PopupDone(int r)
 {
-    if ((MythDialog::Rejected == r) && expectingPopup)
+    if ((kDialogCodeRejected == r) && expectingPopup)
     {
         cancelPopup();
         previewVideoState = kChanging;
@@ -4652,7 +4652,7 @@
 
     int result = recGroupPopup->ExecPopup();
 
-    if (result != MythDialog::Rejected)
+    if (result != kDialogCodeRejected)
     {
         if (viewMask == VIEW_NONE)
             viewMask = VIEW_TITLES;
@@ -4669,7 +4669,7 @@
         update(drawTotalBounds);
     }
 
-    closeRecGroupPopup(result != MythDialog::Rejected);
+    closeRecGroupPopup(result != kDialogCodeRejected);
 }
 
 void PlaybackBox::showRecGroupChooser(void)
@@ -4818,12 +4818,12 @@
 
     int result = recGroupPopup->ExecPopup();
 
-    if (result != MythDialog::Rejected)
+    if (result != kDialogCodeRejected)
         setGroupFilter();
 
-    closeRecGroupPopup(result != MythDialog::Rejected);
+    closeRecGroupPopup(result != kDialogCodeRejected);
 
-    if (result != MythDialog::Rejected)
+    if (result != kDialogCodeRejected)
     {
         progIndex = 0;
         titleIndex = 0;
@@ -5020,10 +5020,10 @@
 
     int result = recGroupPopup->ExecPopup();
 
-    if (result != MythDialog::Rejected)
+    if (result != kDialogCodeRejected)
         setRecGroup();
 
-    closeRecGroupPopup(result != MythDialog::Rejected);
+    closeRecGroupPopup(result != kDialogCodeRejected);
 }
 
 void PlaybackBox::doPlaylistChangePlayGroup(void)
@@ -5071,10 +5071,10 @@
 
     int result = recGroupPopup->ExecPopup();
 
-    if (result != MythDialog::Rejected)
+    if (result != kDialogCodeRejected)
         setPlayGroup();
 
-    closeRecGroupPopup(result != MythDialog::Rejected);
+    closeRecGroupPopup(result != kDialogCodeRejected);
 }
 
 void PlaybackBox::showRecTitleChanger()
@@ -5108,10 +5108,10 @@
 
     int result = recGroupPopup->ExecPopup();
 
-    if (result == MythDialog::Accepted)
+    if (result == kDialogCodeAccepted)
         setRecTitle();
 
-    closeRecGroupPopup(result == MythDialog::Accepted);
+    closeRecGroupPopup(result == kDialogCodeAccepted);
 
     delete delitem;
     delitem = NULL;
@@ -5296,7 +5296,7 @@
             SLOT(recGroupOldPasswordChanged(const QString &)));
     connect(recGroupOkButton, SIGNAL(clicked()), recGroupPopup, SLOT(accept()));
 
-    if (recGroupPopup->ExecPopup() == MythDialog::Accepted)
+    if (recGroupPopup->ExecPopup() == kDialogCodeAccepted)
         setRecGroupPassword();
 
     closeRecGroupPopup(false);
Index: programs/mythfrontend/channelrecpriority.cpp
===================================================================
--- programs/mythfrontend/channelrecpriority.cpp	(revision 14799)
+++ programs/mythfrontend/channelrecpriority.cpp	(working copy)
@@ -140,7 +140,7 @@
                 saveRecPriority(); 
                 gContext->SaveSetting("ChannelRecPrioritySorting",
                                       (int)sortType);
-                done(MythDialog::Accepted);
+                done(kDialogCodeAccepted);
             }
             else if (action == "1")
             {
Index: programs/mythfrontend/main.cpp
===================================================================
--- programs/mythfrontend/main.cpp	(revision 14799)
+++ programs/mythfrontend/main.cpp	(working copy)
@@ -700,18 +700,19 @@
                     long long pos = (long long)(atoi((*++it).ascii()) & 0xffffffffLL);
                     if (pos > 0)
                     {
-                        QString msg = QString("DVD contains a bookmark");
-                        QString button1msg = QString("Play from bookmark");
-                        QString button2msg = QString("Play from beginning");
+                        QString msg = QObject::tr("DVD contains a bookmark");
+                        QString btn0msg = QObject::tr("Play from bookmark");
+                        QString btn1msg = QObject::tr("Play from beginning");
         
-                        int ret = MythPopupBox::show2ButtonPopup(gContext->GetMainWindow(),
-                                                            "", msg,
-                                                            button1msg,
-                                                            button2msg,
-                                                            1);
-                        if (ret == 1)
+                        DialogCode ret = MythPopupBox::Show2ButtonPopup(
+                            gContext->GetMainWindow(),
+                            "", msg,
+                            btn0msg,
+                            btn1msg,
+                            kDialogCodeButton0);
+                        if (kDialogCodeButton1 == ret)
                             pginfo->setIgnoreBookmark(true);
-                        else if (ret == -1)
+                        else if (kDialogCodeRejected == ret)
                         {
                             delete tmprbuf;
                             delete pginfo;
Index: programs/mythfrontend/viewscheduled.cpp
===================================================================
--- programs/mythfrontend/viewscheduled.cpp	(revision 14799)
+++ programs/mythfrontend/viewscheduled.cpp	(working copy)
@@ -114,7 +114,7 @@
             else if (action == "DETAILS")
                 details();
             else if (action == "ESCAPE" || action == "LEFT")
-                done(MythDialog::Accepted);
+                done(kDialogCodeAccepted);
             else if (action == "UP")
                 cursorUp();
             else if (action == "DOWN")
Index: programs/mythfrontend/statusbox.cpp
===================================================================
--- programs/mythfrontend/statusbox.cpp	(revision 14799)
+++ programs/mythfrontend/statusbox.cpp	(working copy)
@@ -367,12 +367,14 @@
             if ((inContent) &&
                 (currentItem == QObject::tr("Log Entries")))
             {
-                int retval = MythPopupBox::show2ButtonPopup(my_parent,
-                                 QString("AckLogEntry"),
-                                 QObject::tr("Acknowledge all log entries at "
-                                             "this priority level or lower?"),
-                                 QObject::tr("Yes"), QObject::tr("No"), 0);
-                if (retval == 0)
+                DialogCode retval = MythPopupBox::Show2ButtonPopup(
+                    my_parent, QString("AckLogEntry"),
+                    QObject::tr("Acknowledge all log entries at "
+                                "this priority level or lower?"),
+                    QObject::tr("Yes"), QObject::tr("No"),
+                    kDialogCodeButton0);
+
+                if (kDialogCodeButton0 == retval)
                 {
                     MSqlQuery query(MSqlQuery::InitCon());
                     query.prepare("UPDATE mythlog SET acknowledged = 1 "
@@ -558,13 +560,12 @@
     {
         if (currentItem == QObject::tr("Log Entries"))
         {
-            int retval;
-
-            retval = MythPopupBox::show2ButtonPopup(my_parent,
-                                   QString("AckLogEntry"),
-                                   QObject::tr("Acknowledge this log entry?"),
-                                   QObject::tr("Yes"), QObject::tr("No"), 0);
-            if (retval == 0)
+            DialogCode retval = MythPopupBox::Show2ButtonPopup(
+                my_parent,
+                QString("AckLogEntry"),
+                QObject::tr("Acknowledge this log entry?"),
+                QObject::tr("Yes"), QObject::tr("No"), kDialogCodeButton0);
+            if (kDialogCodeButton0 == retval)
             {
                 MSqlQuery query(MSqlQuery::InitCon());
                 query.prepare("UPDATE mythlog SET acknowledged = 1 "
@@ -578,20 +579,17 @@
         {
             QStringList msgs;
             int jobStatus;
-            int retval;
 
             jobStatus = JobQueue::GetJobStatus(
                                 contentData[contentPos].toInt());
 
             if (jobStatus == JOB_QUEUED)
             {
-                retval = MythPopupBox::show2ButtonPopup(my_parent,
-                                       QString("JobQueuePopup"),
-                                       QObject::tr("Delete Job?"),
-                                       QObject::tr("Yes"),
-                                       QObject::tr("No"), 2);
-                cout << "Popup result = " << retval << endl;
-                if (retval == 0)
+                DialogCode retval = MythPopupBox::Show2ButtonPopup(
+                    my_parent,
+                    QString("JobQueuePopup"), QObject::tr("Delete Job?"),
+                    QObject::tr("Yes"), QObject::tr("No"), kDialogCodeButton1);
+                if (kDialogCodeButton0 == retval)
                 {
                     JobQueue::DeleteJob(contentData[contentPos].toInt());
                     doJobQueueStatus();
@@ -604,16 +602,17 @@
                 msgs << QObject::tr("Pause");
                 msgs << QObject::tr("Stop");
                 msgs << QObject::tr("No Change");
-                retval = MythPopupBox::showButtonPopup(my_parent,
-                                       QString("JobQueuePopup"),
-                                       QObject::tr("Job Queue Actions:"),
-                                       msgs, 2);
-                if (retval == 0)
+                DialogCode retval = MythPopupBox::ShowButtonPopup(
+                    my_parent,
+                    QString("JobQueuePopup"),
+                    QObject::tr("Job Queue Actions:"),
+                    msgs, kDialogCodeButton2);
+                if (kDialogCodeButton0 == retval)
                 {
                     JobQueue::PauseJob(contentData[contentPos].toInt());
                     doJobQueueStatus();
                 }
-                else if (retval == 1)
+                else if (kDialogCodeButton1 == retval)
                 {
                     JobQueue::StopJob(contentData[contentPos].toInt());
                     doJobQueueStatus();
@@ -624,16 +623,17 @@
                 msgs << QObject::tr("Resume");
                 msgs << QObject::tr("Stop");
                 msgs << QObject::tr("No Change");
-                retval = MythPopupBox::showButtonPopup(my_parent,
-                                       QString("JobQueuePopup"),
-                                       QObject::tr("Job Queue Actions:"),
-                                       msgs, 2);
-                if (retval == 0)
+                DialogCode retval = MythPopupBox::ShowButtonPopup(
+                    my_parent,
+                    QString("JobQueuePopup"),
+                    QObject::tr("Job Queue Actions:"),
+                    msgs, kDialogCodeButton2);
+                if (kDialogCodeButton0 == retval)
                 {
                     JobQueue::ResumeJob(contentData[contentPos].toInt());
                     doJobQueueStatus();
                 }
-                else if (retval == 1)
+                else if (kDialogCodeButton1 == retval)
                 {
                     JobQueue::StopJob(contentData[contentPos].toInt());
                     doJobQueueStatus();
@@ -641,12 +641,12 @@
             }
             else if (jobStatus & JOB_DONE)
             {
-                retval = MythPopupBox::show2ButtonPopup(my_parent,
-                                       QString("JobQueuePopup"),
-                                       QObject::tr("Requeue Job?"),
-                                       QObject::tr("Yes"),
-                                       QObject::tr("No"), 1);
-                if (retval == 0)
+                DialogCode retval = MythPopupBox::Show2ButtonPopup(
+                    my_parent,
+                    QString("JobQueuePopup"),
+                    QObject::tr("Requeue Job?"),
+                    QObject::tr("Yes"), QObject::tr("No"), kDialogCodeButton0);
+                if (kDialogCodeButton0 == retval)
                 {
                     JobQueue::ChangeJobStatus(contentData[contentPos].toInt(),
                                               JOB_QUEUED);
@@ -663,22 +663,22 @@
             if (rec) 
             {
                 QStringList msgs;
-                int retval;
 
                 msgs << QObject::tr("Delete Now");
                 msgs << QObject::tr("Disable AutoExpire");
                 msgs << QObject::tr("No Change");
                 
-                retval = MythPopupBox::showButtonPopup(my_parent,
-                             QString("AutoExpirePopup"),
-                             QObject::tr("AutoExpire Actions:"),
-                             msgs, 2);
+                DialogCode retval = MythPopupBox::ShowButtonPopup(
+                    my_parent,
+                    QString("AutoExpirePopup"),
+                    QObject::tr("AutoExpire Actions:"),
+                    msgs, kDialogCodeButton2);
 
-                if (retval == 0 && REC_CAN_BE_DELETED(rec))
+                if ((kDialogCodeButton0 == retval) && REC_CAN_BE_DELETED(rec))
                 {
                     RemoteDeleteRecording(rec, false, false);
                 }
-                else if (retval == 1)
+                else if (kDialogCodeButton1 == retval)
                 {
                     rec->SetAutoExpire(0);
                     if ((rec)->recgroup == "LiveTV")
Index: programs/mythfrontend/programrecpriority.cpp
===================================================================
--- programs/mythfrontend/programrecpriority.cpp	(revision 14799)
+++ programs/mythfrontend/programrecpriority.cpp	(working copy)
@@ -194,7 +194,7 @@
                                       (int)sortType);
                 gContext->SaveSetting("ProgramRecPriorityReverse",
                                       (int)reverseSort);
-                done(MythDialog::Accepted);
+                done(kDialogCodeAccepted);
             }
             else if (action == "1")
             {
Index: programs/mythtv-setup/main.cpp
===================================================================
--- programs/mythtv-setup/main.cpp	(revision 14799)
+++ programs/mythtv-setup/main.cpp	(working copy)
@@ -310,15 +310,14 @@
 
     if (backendIsRunning)
     {
-        int val = MythPopupBox::show2ButtonPopup(
+        DialogCode val = MythPopupBox::Show2ButtonPopup(
             gContext->GetMainWindow(), QObject::tr("WARNING"),
             warn,
             QObject::tr("Continue"),
-            QObject::tr("Exit"), 1);
-        if (1 == val)
-            return 0;
+            QObject::tr("Exit"), kDialogCodeButton0);
 
-        backendIsRunning = true;
+        if (kDialogCodeButton0 != val)
+            return 0;
     }
 
     REG_KEY("qt", "DELETE", "Delete", "D");
Index: programs/mythwelcome/welcomedialog.cpp
===================================================================
--- programs/mythwelcome/welcomedialog.cpp	(revision 14799)
+++ programs/mythwelcome/welcomedialog.cpp	(working copy)
@@ -711,7 +711,7 @@
 
 void WelcomeDialog::donePopup(int r)
 {
-    if (MythDialog::Rejected == r)
+    if (kDialogCodeRejected == r)
         cancelPopup();
 }
 
