Index: libs/libmythui/mythdialogbox.cpp
===================================================================
--- libs/libmythui/mythdialogbox.cpp	(revision 18128)
+++ libs/libmythui/mythdialogbox.cpp	(working copy)
@@ -4,6 +4,7 @@
 #include "mythdialogbox.h"
 #include "mythmainwindow.h"
 #include "mythfontproperties.h"
+#include "mythverbose.h"
 
 MythDialogBox::MythDialogBox(const QString &text,
                              MythScreenStack *parent, const char *name)
@@ -203,6 +204,133 @@
 
 /////////////////////////////////////////////////////////////////
 
+MythConfirmationDialog2::MythConfirmationDialog2(MythScreenStack *parent,
+                                               const QString &message,
+                                               bool showCancel)
+                       : MythScreenType(parent, "mythconfirmpopup")
+{
+    m_message = message;
+    m_showCancel = showCancel;
+
+    m_result = -1;
+    m_initialized = false;
+}
+
+MythConfirmationDialog2::MythConfirmationDialog2(const QString &message,
+                                                 bool showCancel)
+    : MythScreenType(GetMythMainWindow()->GetStack("popup stack"),
+                     "mythconfirmpopup")
+{
+    m_message = message;
+    m_showCancel = showCancel;
+
+    m_result = -1;
+    m_initialized = false;
+}
+
+bool MythConfirmationDialog2::Create(void)
+{
+    if (!CopyWindowFromBase("MythConfirmationDialog", this))
+        return false;
+
+    MythUIText *messageText = dynamic_cast<MythUIText *>
+                                            (GetChild("message"));
+    MythUIButton *okButton = dynamic_cast<MythUIButton *>
+                                         (GetChild("ok"));
+    MythUIButton *cancelButton = dynamic_cast<MythUIButton *>
+                                         (GetChild("cancel"));
+
+    if (!messageText || !okButton || !cancelButton)
+        return false;
+
+    if (m_showCancel)
+    {
+        connect(cancelButton, SIGNAL(buttonPressed()), SLOT(Cancel()));
+    }
+    else
+        cancelButton->SetVisible(false);
+
+    connect(okButton, SIGNAL(buttonPressed()), SLOT(Confirm()));
+
+    okButton->SetText(tr("Ok"));
+    cancelButton->SetText(tr("Cancel"));
+
+    messageText->SetText(m_message);
+
+    BuildFocusList();
+
+    return true;
+}
+
+bool MythConfirmationDialog2::Exec(void)
+{
+    if (!m_initialized)
+    {
+        if (!Create())
+        {
+            VERBOSE(VB_IMPORTANT, "MythConfirmationDialog: Failed to create dialog");
+            return false;
+        }
+
+        m_initialized = true;
+    }
+
+    GetScreenStack()->AddScreen(this);
+
+    while (m_result == -1)
+    {
+        qApp->processEvents();
+        usleep(500);
+    }
+
+    Close();
+
+    return (m_result == 1);
+}
+
+void MythConfirmationDialog2::Confirm()
+{
+    m_result = 1;
+}
+
+void MythConfirmationDialog2::Cancel()
+{
+    m_result = 0;
+}
+
+bool MythConfirmationDialog2::keyPressEvent(QKeyEvent *event)
+{
+    if (GetFocusWidget()->keyPressEvent(event))
+        return true;
+
+    bool handled = false;
+    QStringList actions;
+    if (GetMythMainWindow()->TranslateKeyPress("qt", event, actions))
+    {
+        for (int i = 0; i < actions.size() && !handled; i++)
+        {
+            QString action = actions[i];
+            handled = true;
+
+            if (action == "ESCAPE" || action == "MENU")
+            {
+                m_result = 0;
+            }
+            else
+                handled = false;
+        }
+    }
+
+    if (!handled)
+        MythScreenType::keyPressEvent(event);
+
+    // we don't want another screen to get these while the popup is visible
+    return true;
+}
+
+
+/////////////////////////////////////////////////////////////////
+
 MythTextInputDialog::MythTextInputDialog(MythScreenStack *parent,
                                          const QString &message,
                                          InputFilter filter,
Index: libs/libmythui/mythdialogbox.h
===================================================================
--- libs/libmythui/mythdialogbox.h	(revision 18128)
+++ libs/libmythui/mythdialogbox.h	(working copy)
@@ -93,6 +93,31 @@
     void Cancel();
 };
 
+class MythConfirmationDialog2 : public MythScreenType
+{
+    Q_OBJECT
+
+  public:
+    MythConfirmationDialog2(MythScreenStack *parent, const QString &message,
+                           bool showCancel = true);
+    MythConfirmationDialog2(const QString &message, bool showCancel = true);
+
+    bool Create(void);
+    bool Exec(void);
+
+    virtual bool keyPressEvent(QKeyEvent *event);
+
+  private:
+    QString m_message;
+    bool m_showCancel;
+    int  m_result;
+    bool m_initialized;
+
+  private slots:
+    void Confirm(void);
+    void Cancel();
+};
+
 class MythTextInputDialog : public MythScreenType
 {
     Q_OBJECT
