Index: mythtv/libs/libmythui/myththemedmenu.cpp
===================================================================
--- mythtv/libs/libmythui/myththemedmenu.cpp	(revision 14265)
+++ mythtv/libs/libmythui/myththemedmenu.cpp	(working copy)
@@ -103,6 +103,10 @@
     void parseButtonDefinition(const QString &dir, QDomElement &element);
     void parseButton(const QString &dir, QDomElement &element);
 
+//added by Anthony D'Alberto to support back button
+    void parseBackButton(const QString &dir, QDomElement &element);
+//end of added section
+
     void parseText(TextAttributes &attributes, QDomElement &element);
     void parseOutline(TextAttributes &attributes, QDomElement &element);
     void parseShadow(TextAttributes &attributes, QDomElement &element);
@@ -146,6 +150,11 @@
     MythImage *downarrow;
     QRect downarrowRect;
 
+//added by Anthony D'Alberto to support back button
+    MythImage *backbutton;
+    QRect backbuttonRect;
+//end of added section
+
     QPoint watermarkPos;
     QRect watermarkRect;
 
@@ -233,6 +242,11 @@
     MythUIStateType *watermark;
     MythUIImage *uparrow;
     MythUIImage *downarrow;
+
+//added by Anthony D'Alberto to support back button
+    MythUIImage *backbutton;
+//end of added section
+
 };
 
 /////////////////////////////////////////////////////////////////////////////
@@ -249,6 +263,10 @@
     downarrow = NULL;
     buttonBackground = NULL;
 
+//added by Anthony D'Alberto to support back button
+    backbutton = NULL;
+//end of added section
+
     loaded = false;
 
     callback = NULL;
@@ -275,6 +293,10 @@
         downarrow->DownRef();
     if (buttonBackground)
         buttonBackground->DownRef();
+//added by Anthony D'Alberto to support back button
+    if (backbutton)
+	backbutton->DownRef();
+//end of added section
 
     logo = NULL;
     buttonnormal = NULL;
@@ -282,6 +304,9 @@
     uparrow = NULL;
     downarrow = NULL;
     buttonBackground = NULL;
+//added by Anthony D'Alberto to support back button
+    backbutton = NULL;
+//end of added section
 
     QMap<QString, ButtonIcon>::Iterator it;
     for (it = allButtonIcons.begin(); it != allButtonIcons.end(); ++it)
@@ -958,11 +983,77 @@
     }
     else
     {
-        downarrow = MythImage::FromQImage(&pix);
-        downarrowRect = arrowrect;
+	downarrow = MythImage::FromQImage(&pix);
+	downarrowRect = arrowrect;
     }
 }
 
+//added by Anthony D'Alberto to support back button
+void MythThemedMenuState::parseBackButton(const QString &dir, QDomElement &element)
+{
+    QRect backrect;
+    QPoint backpos;
+    QImage *pix = NULL;
+
+    bool hasimage = false;
+    bool hasposition = false;
+
+    for (QDomNode child = element.firstChild(); !child.isNull();
+         child = child.nextSibling())
+    {
+        QDomElement info = child.toElement();
+        if (!info.isNull())
+        {
+            if (info.tagName() == "image")
+            {
+                QString backpath = dir + getFirstText(info);
+                pix = gContext->LoadScaleImage(backpath);
+                if (pix)
+                    hasimage = true;
+            }
+            else if (info.tagName() == "position")
+            {
+                backpos = parsePoint(info);
+                hasposition = true;
+            }
+            else
+            {
+                VERBOSE(VB_GENERAL, QString("MythThemedMenuPrivate: Unknown tag %1 "
+                                            "in back button").arg(info.tagName()));
+                return;
+            }
+        }
+    }
+
+    if (!hasimage)
+    {
+        VERBOSE(VB_IMPORTANT, "MythThemedMenuPrivate: Missing image tag in back button");
+        return;
+    }
+
+    if (!hasposition)
+    {
+        VERBOSE(VB_IMPORTANT, "MythThemedMenuPrivate: Missing position tag in back button");
+        return;
+    }
+
+    backrect = QRect(backpos.x(), backpos.y(), pix->width(),
+                      pix->height());
+
+    backbutton = MythImage::FromQImage(&pix);
+    backbuttonRect = backrect;
+}
+//end of added section
+
+
+
+
+
+
+
+
+
+
 void MythThemedMenuState::parseButton(const QString &dir, QDomElement &element)
 {
     bool hasname = false;
@@ -1108,6 +1199,10 @@
     titleText = "";
     uparrow = NULL;
     downarrow = NULL;
+//added by Anthony D'Albeto to support back button
+    backbutton = NULL;
+//end of added section
+
     watermarkPos = QPoint(0, 0);
     watermarkRect = QRect(0, 0, 0, 0);
 }
@@ -1183,6 +1278,12 @@
             {
                 parseArrow(dir, e, false);
             }
+//added by Anthony D'Alberto to support back button
+            else if (e.tagName() == "backbutton")
+	    {
+		parseBackButton(dir, e);
+	    }
+//end of added section
             else if (e.tagName() == "font")
             {
                 if (parseFonts)
@@ -1513,6 +1614,17 @@
     downarrow->SetVisible(false);
     downarrow->SetCanTakeFocus(true);
 
+//added by Anthony D'Alberto to support back button
+    backbutton = new MythUIImage(parent, "menu back button");
+    if (m_state->backbutton)
+    {
+	backbutton->SetArea(m_state->backbuttonRect);
+	backbutton->SetImage(m_state->backbutton);
+    }
+    backbutton->SetVisible(true);
+    backbutton->SetCanTakeFocus(true);
+//end of added section
+
     checkScrollArrows();
 }
 
@@ -2035,6 +2147,14 @@
             QStringList action = "PAGEDOWN";
             keyHandler(action, false);
         }
+//added by Anthony D'Alberto to support back button
+	else if (origtype == backbutton)
+	{
+	    QStringList action = "ESCAPE";
+	    keyHandler(action, true);
+	    return(true);
+	}
+//end of added section
         else
         {
             if (ThemedButton *button = reinterpret_cast<ThemedButton*>(origtype))
Index: mythtv/libs/libmyth/uilistbtntype.h
===================================================================
--- mythtv/libs/libmyth/uilistbtntype.h	(revision 14265)
+++ mythtv/libs/libmyth/uilistbtntype.h	(working copy)
@@ -27,6 +27,10 @@
 class UIListBtnType;
 class UIListBtnTypeItem;
 
+//added by Anthony D'Alberto to support the mouse press
+enum MouseMove{ListMoveLeft=1, ListMoveRight=2, ClickCheck=4, ListMoveUp=8, ListMoveDown=16, ListPageUp=32, ListPageDown=64};
+//end of added section
+
 class MPUBLIC UIListGenericTree : public GenericTree
 {
   public:
@@ -123,7 +127,11 @@
   public slots:
     bool takeFocus();
     void looseFocus();
-      
+     
+//Added by Anthony D'Alberto to support mouse press
+    int mousePressHandler(QMouseEvent *e);
+//end of added section
+ 
   private:
     void FillLevelFromTree(UIListGenericTree *item, UIListBtnType *list);
     void ClearLevel(UIListBtnType *list);
@@ -220,6 +228,10 @@
     bool takeFocus();
     void looseFocus();
 
+//added by Anthony D'Alberto to support mouse press
+    int mousePressHandler(QMouseEvent *e);
+//end if added section
+
   private:
     void  Init();
     void  LoadPixmap(QPixmap& pix, const QString& fileName);
@@ -337,7 +349,11 @@
     bool moveUpDown(bool flag);
     
     void paint(QPainter *p, fontProp *font, int x, int y, bool active_on);
-    
+
+//added by Anthony D'Alberto to support mouse presses
+    int MouseClicked(int x, int y);
+//end of added section
+ 
   protected:
     void  CalcDimensions(void);
 
Index: mythtv/libs/libmyth/mythdialogs.cpp
===================================================================
--- mythtv/libs/libmyth/mythdialogs.cpp	(revision 14265)
+++ mythtv/libs/libmyth/mythdialogs.cpp	(working copy)
@@ -528,6 +528,7 @@
     popup.addLabel(message, Medium, true);
     
     MythRemoteLineEdit* textEdit = new MythRemoteLineEdit(&popup, "chooseEdit");
+
     textEdit->setText(text);
     popup.addWidget(textEdit);
     
@@ -1323,6 +1324,110 @@
     widget_with_current_focus->takeFocus();
 }
 
+//added by Anthony D'Alberto to support back button...and mouse presses
+void MythThemedDialog::mouseReleaseEvent(QMouseEvent *e)
+{
+        if(e->button() == QMouseEvent::RightButton)
+        {
+                e->accept();
+                reject();
+                return;
+        }
+        else if(e->button() == QMouseEvent::LeftButton)
+        {
+                int x=e->x();
+                int y=e->y();
+                //qDebug("MythThemedDialog::mouseReleaseEvent %d %d", x, y);
+
+                UIType *type = widget_with_current_focus;
+
+                if(type)
+                {
+                        QRect rc = type->getScreenArea();
+                        if(rc.contains(x,y))
+                        {
+                        //      qDebug("target %p %s %d %d \n",
+                       //                      type,
+                        //              type->getName().local8Bit().data(),
+                        //              rc.x(),
+                        //              rc.y());
+                                type->activate();
+                                e->accept();
+                                return;
+                        }
+                }else
+                {
+                        //qDebug("Widget not defined");
+                }
+        }
+        MythDialog::mouseReleaseEvent(e);
+}
+
+
+void MythThemedDialog::mousePressEvent(QMouseEvent *e)
+{
+        if(e->button() != QMouseEvent::LeftButton)
+        {
+//              MythDialog::mouseReleaseEvent(e);
+                return;
+        }
+        int x=e->x();
+        int y=e->y();
+        //printf("MythThemedDialog::mousePressEvent %d %d", x, y);
+        QPtrListIterator<LayerSet> an_it(my_containers);
+        LayerSet        *looper;
+
+        while((looper= an_it.current()) != 0)
+        {
+                QRect container_area = looper->GetAreaRect();
+                if(container_area.isValid() &&
+                        container_area.contains(x,y) &&
+                        looper->GetName().lower() != "background")
+                {
+                        //loop over UI types within each container
+                        vector<UIType *> *all_ui_type_objects = looper->getAllTypes();
+                        vector<UIType *>::iterator i=all_ui_type_objects->begin();
+                        for(; i!=all_ui_type_objects->end();i++)
+                        {
+                                UIType *type = (*i);
+                                QRect rc = type->getScreenArea();
+                               //if the UI element is under the mouse
+                                if(rc.contains(x,y))
+                                {
+                                        printf("target %p %s %d %d\n",
+                                        type,
+                                        type->getName().local8Bit().data(),
+                                        rc.x(),
+                                        rc.y());
+
+                                        if(type->canTakeFocus())
+                                        {
+                                                if(widget_with_current_focus)
+                                                {
+                                                        widget_with_current_focus->looseFocus();
+                                                }
+                                                widget_with_current_focus=type;
+                                                widget_with_current_focus->takeFocus();
+                                        }
+                                        else
+                                        {
+                                                //qDebug("Cannot Take Focus");
+                                                //type->mousePressHandler(e);
+                                                //the child class should take care of this
+                                        }
+
+                                        e->accept();
+                                        return;
+                                }
+                        }
+                }
+                ++an_it;
+        }
+        MythDialog::mousePressEvent(e);
+}
+
+//end of added section
+
 UIManagedTreeListType* MythThemedDialog::getUIManagedTreeListType(const QString &name)
 {
     QPtrListIterator<LayerSet> an_it(my_containers);
@@ -1753,7 +1858,7 @@
     QStringList actions;
     if (gContext->GetMainWindow()->TranslateKeyPress("qt", e, actions))
     {
-        for (unsigned int i = 0; i < actions.size() && !handled; i++)
+        for (unsigned int i = 0; i < actions.size() && !handled; i++)                                   
         {
             QString action = actions[i];
             if (action == "ESCAPE")
Index: mythtv/libs/libmyth/mythwidgets.cpp
===================================================================
--- mythtv/libs/libmyth/mythwidgets.cpp	(revision 14265)
+++ mythtv/libs/libmyth/mythwidgets.cpp	(working copy)
@@ -736,7 +736,7 @@
 {
     bool handled = false;
     QStringList actions;
-
+   
     if ((!popup || !popup->isShown()) &&
           gContext->GetMainWindow()->TranslateKeyPress("qt", e, actions, false))
     {
@@ -769,6 +769,7 @@
             {
                 if (gContext->GetNumSetting("UseVirtualKeyboard", 1) == 1)
                 {
+                  printf("UseVirtualKeyboard\n");
                     popup = new VirtualKeyboard(gContext->GetMainWindow(), this);
                     gContext->GetMainWindow()->detach(popup);
                     popup->exec();
Index: mythtv/libs/libmyth/uilistbtntype.cpp
===================================================================
--- mythtv/libs/libmyth/uilistbtntype.cpp	(revision 14265)
+++ mythtv/libs/libmyth/uilistbtntype.cpp	(working copy)
@@ -853,6 +853,78 @@
     UIType::looseFocus();
 }
 
+//added by Anthony D'Alberto to support mouse press
+int UIListTreeType::mousePressHandler(QMouseEvent *e)
+{
+    int iReturnValue = -1;
+    QRect	rect;
+    QRect	arearect;
+
+	if(currentlevel != NULL)
+	{
+		//get screen area where widget resides
+		arearect = currentlevel->GetArea();
+		int iDrawOffset = currentlevel->GetDrawOffset();
+		
+		//now create a new rectangle, adjusting for the offset
+		rect.setRect(arearect.x() + iDrawOffset + screen_area.x(),
+				arearect.y() + screen_area.y(),
+				arearect.width(),
+				arearect.height() );
+
+		if(rect.contains(e->x(), e->y()))
+		{
+			//define a new point with the screen offset taken out
+			//to get relative position in widget
+			QPoint pt(e->x() - rect.x(), e->y() - rect.y());
+
+			//now define a new event with our new point
+			QMouseEvent NewEvent(QEvent::MouseButtonPress,
+						pt,
+						e->button(),
+						e->state());
+			iReturnValue = currentlevel->mousePressHandler(&NewEvent);
+			SetCurrentPosition();
+			RedrawCurrent();
+
+			if((iReturnValue & ListMoveRight) == ListMoveRight)
+			{
+				MoveRight(true);
+			}
+
+			if((iReturnValue & ListPageDown) == ListPageDown)
+			{
+				MoveDown(MovePage);
+			}
+
+			if((iReturnValue & ListPageUp) == ListPageUp)
+			{
+				MoveUp(MovePage);
+			}
+		}
+		else
+		{
+			//if the Y position is good, and we are just not
+			//in on the X, we are probably going back a menu
+			if(e->y() >= rect.y() && e->y() <= rect.y() + rect.height())
+			{
+				MoveLeft(true);
+			}else
+			{
+				//indicate we did not handle this case
+				iReturnValue = -1;
+			}
+		}
+	}
+	else
+	{
+		iReturnValue = -2;
+	}
+
+     return(iReturnValue);
+}
+//end of added section
+
 //////////////////////////////////////////////////////////////////////////////
 
 UIListBtnType::UIListBtnType(const QString& name, const QRect& area,
@@ -1920,6 +1992,67 @@
     UIType::looseFocus();
 }
 
+//added by Anthony D'Alberto to support mouse press
+int UIListBtnType::mousePressHandler(QMouseEvent *e)
+{
+	int mousepos;
+	int iReturnValue = 0;
+	if(m_arrowsRect.contains(e->x(), e->y()))
+	{
+		iReturnValue = 0;
+		if( ((e->x() - m_arrowsRect.x()) <= m_upArrowRegPix.width()) &&
+		    m_showUpArrow == true)
+		{
+			iReturnValue = ListPageUp;
+		}
+		else if( (e->x()-m_arrowsRect.x() >= m_upArrowRegPix.width() +
+							m_itemMargin) &&
+			m_showDnArrow == true)
+		{
+			iReturnValue = ListPageDown;
+		}
+	}
+	else
+	{
+		//the x and y positions were already adjusted by previous
+		//ListType
+		//now attempt to calculate which item the mouse is over
+		
+		mousepos = (e->y() / (m_itemHeight + m_itemSpacing)) +
+				m_topPosition;
+
+		if(mousepos < m_itemCount)
+		{
+			if(mousepos > m_selPosition)
+			{
+				for(int i=0;i<mousepos - m_selPosition;i++)
+					++(*m_selIterator);
+			}
+			else if(mousepos < m_selPosition)
+			{
+				for(int i=0;i<m_selPosition - mousepos;i++)
+					--(*m_selIterator);
+			}
+			
+			if(m_selIterator->current())
+			{
+				m_selItem = m_selIterator->current();
+			}
+			m_selPosition = mousepos;
+		}
+	
+		mousepos -= m_topPosition;
+
+		iReturnValue = m_selItem->MouseClicked(e->x(),
+			e->y() - (mousepos * (m_itemHeight+m_itemSpacing)));
+
+		emit itemSelected(m_selItem);
+	}
+
+	return(iReturnValue);
+}
+//end of added section
+
 //////////////////////////////////////////////////////////////////////////////
 
 UIListBtnTypeItem::UIListBtnTypeItem(UIListBtnType* lbtype, const QString& text,
@@ -2155,3 +2288,29 @@
     p->drawText(tr, Qt::AlignLeft|Qt::AlignVCenter, text);    
 }
 
+//added by Anthony D'Alberto to support mouse press
+int UIListBtnTypeItem::MouseClicked(int x, int y)
+{
+	int iReturnValue = 0;
+	QRect NewArrowRect(m_arrowRect.x() - 50,
+			m_arrowRect.y() - 50,
+			m_arrowRect.width() + 100,
+			m_arrowRect.height() + 100);
+
+	QRect NewCheckRect(m_checkRect.x() - 50,
+			m_checkRect.y() - 50,
+			m_checkRect.width() + 100,
+			m_checkRect.height() + 100);
+
+	if(NewArrowRect.contains(x,y))
+		iReturnValue |= ListMoveRight;
+
+	if(NewCheckRect.contains(x,y))
+		iReturnValue |= ClickCheck;
+
+	return(iReturnValue);
+}
+
+//end of added section
+
+
Index: mythtv/libs/libmyth/uitypes.cpp
===================================================================
--- mythtv/libs/libmyth/uitypes.cpp	(revision 14265)
+++ mythtv/libs/libmyth/uitypes.cpp	(working copy)
@@ -3358,6 +3358,15 @@
     rightArrowOffset.setX(0);
     rightArrowOffset.setY(0);
     incSearch = "";
+
+//added by Anhtony D'Alberto to support mouse presses
+    iMapUsed = -1;
+    x_map_location = 0;
+    y_map_location = 0;
+    boHasChildren = false;
+    boHasParent = false;
+//end of added section
+
 }
 
 UIManagedTreeListType::~UIManagedTreeListType()
@@ -3434,6 +3443,11 @@
         return;
     }
 
+//added by Anthony D'Alberto to support mouse press
+//initialize this each time the screen is drawn
+        boHasChildren = false;
+        boHasParent = false;
+//end of added section
     //
     //  Put something on the LCD device (if one exists)
     //
@@ -3557,7 +3571,6 @@
             int x_location = bin_corners[i].left();
             int y_location = bin_corners[i].top() + (bin_corners[i].height() / 2)
                              + (QFontMetrics(tmpfont->face).height() / 2);
-
             if (!show_whole_tree)
             {
                 x_location = area.left();
@@ -3658,17 +3671,37 @@
                     p->drawPixmap(x_location + selectPoint.x(), y_location - QFontMetrics(tmpfont->face).height() + QFontMetrics(tmpfont->face).descent() + selectPoint.y(), (*highlight_map[i]));
                     //p->drawPixmap(x_location, y_location - QFontMetrics(tmpfont->face).height() + QFontMetrics(tmpfont->face).descent(), (*highlight_map[i]));
 
+//added by Anthony D'Alberto to support mouse presses
+                    x_map_location = x_location + selectPoint.x() + screen_area.left();
+
+                    y_map_location = y_location - QFontMetrics(tmpfont->face).height() +
+                                        QFontMetrics(tmpfont->face).descent() + selectPoint.y() +
+                                        screen_area.top();
+
+                    iMapUsed = i;
+
+//end of added section
+
                     //
                     //  Left or right arrows
                     //
                     if (i == bins && hotspot_node->childCount() > 0)
                     {
+//added by Anthony D'Alberto to support mouse press
+//see if there is a child node
+                        boHasChildren = true;
+//end of added section
+
                         p->drawPixmap(x_location + (*highlight_map[i]).width() - right_arrow_image.width() + rightArrowOffset.x(),
                                       y_location + rightArrowOffset.y() - QFontMetrics(tmpfont->face).height() + right_arrow_image.height() / 2,
                                       right_arrow_image);
                     }
                     if (i == 1 && hotspot_node->getParent()->getParent())
                     {
+//added by Anthony D'Alberto to support mouse press
+//see if there is a parent node
+                        boHasParent = true;
+//end of added section
                         p->drawPixmap(x_location + leftArrowOffset.x(),
                                       y_location + leftArrowOffset.y() - QFontMetrics(tmpfont->face).height() + left_arrow_image.height() / 2,
                                       left_arrow_image);
@@ -3677,6 +3710,16 @@
                 else
                 {
                     p->drawPixmap(x_location + selectPoint.x(), y_location - QFontMetrics(tmpfont->face).height() + QFontMetrics(tmpfont->face).descent() + selectPoint.y(), (*highlight_map[0]));
+
+//added by Anthony D'Alberto to support mouse presses
+                    x_map_location = x_location + selectPoint.x() + screen_area.left();
+                    y_map_location = y_location - QFontMetrics(tmpfont->face).height() +
+                                        QFontMetrics(tmpfont->face).descent() + selectPoint.y() +
+                                        screen_area.top();
+               
+                    iMapUsed = 0;
+//end of added section
+
                 }
             }
 
@@ -4754,6 +4797,7 @@
         QRect r = (*it);
         r.moveBy(m_parent->GetAreaRect().left(),
                  m_parent->GetAreaRect().top());
+        
         ++i;
         screen_corners[i] = r;
     }
@@ -4761,6 +4805,141 @@
     screen_area = m_parent->GetAreaRect();
 }
 
+//added by Anthony D'Alberto to support mouse presses
+
+int UIManagedTreeListType::mousePressHandler(QMouseEvent *e)
+{
+        int iReturnValue = -1;
+
+        //printf("X: %i - Y: %i\n", e->x(), e->y());
+
+        //see if we are inside the control//
+        if(screen_area.contains(e->x(), e->y()))
+        {
+               
+                
+                QRect   BinRect(bin_corners[active_bin].left(),
+                                bin_corners[active_bin].top() + 
+                                       screen_corners[active_bin].top(),
+                                 bin_corners[active_bin].right(),
+                                 bin_corners[active_bin].bottom() -
+                                        screen_corners[active_bin].top());
+
+
+                //if I'm inside the active bin
+                if(BinRect.contains(e->x(), e->y()))
+                {
+                        //if I'm in the active bin, I might want out
+                        //this is identified by going over the next bin's
+                        //left edge.  Bins can overlap.  Therefore...
+
+                        //check to see if there is another higher bin
+                        if( ((active_bin +1) <= bins) && 
+                                (e->x() >= bin_corners[active_bin+1].left()) )
+                        {
+                                pushDown();
+                        }
+
+                        //get the height of the selection rectangle
+                        //to try to figure out how many items to move
+                        int iItemHeight = highlight_map[iMapUsed]->height();
+
+                        int iItems;
+                        
+                        //create a temp rectangle the size of the selection map
+                        QRect   tmpRect(x_map_location,
+                                        y_map_location,
+                                        highlight_map[iMapUsed]->width(),
+                                        highlight_map[iMapUsed]->height());
+
+                        //if I'm not in the rectangle
+                        if(!tmpRect.contains(e->x(), e->y()))
+                        {
+                                //if I'm above the rectangle
+                                if(e->y() < tmpRect.top())
+                                {
+                                        iItems = (tmpRect.top() - e->y()) / (iItemHeight) + 1;
+
+                                        //now move the number of items
+                                        for(int i=0;i<iItems;i++)
+                                        {
+                                                moveUp(false);
+                                        }
+                                }
+
+                                //now check for being below the rectangle
+                                if(e->y() > tmpRect.bottom())
+                                {
+                                        iItems = (e->y() - tmpRect.bottom()) / (iItemHeight) + 1;
+                                        
+                                        //now move the number of items
+                                        for(int i=0;i<iItems;i++)
+                                        {
+                                                moveDown(false);
+                                        }
+                                }
+                        }else
+                        {
+                                //I'm in the selection rectangle
+                                //but first, check for a next higher bin
+                                //if I'm near the edge of the rectangle,
+                                //go to the next higher bin
+
+                                //if I've drawn the right hand arrow
+                                if(boHasChildren == true)
+                                {
+                                        //if I've clicked within 25% of the right edge 
+                                        if(e->x() >= (0.85 * (x_map_location + highlight_map[iMapUsed]->width())) )
+                                        {
+                                                pushDown();
+                                        }else
+                                        {
+                                                select();
+                                        }
+                                }else if(boHasParent == true)   //if there is a left arrow
+                                {
+                                        if(e->x() <= (x_map_location + (0.15 * highlight_map[iMapUsed]->width())))
+                                        {
+                                                popUp();
+                                        }else
+                                        {
+                                                select();
+                                        }
+                                
+                                }else
+                                {
+                                        select();
+                                }
+                        }
+                      
+                        iReturnValue = 0; 
+                }else   //I'm not inside the active bin
+                {
+
+                        //I'm to the left of the active bin
+                        if(e->x() < BinRect.left())
+                        {
+                                popUp();
+                                iReturnValue = 0;
+                        }
+
+                        //I'm to the right of the active bin
+                        if(e->x() > BinRect.right())
+                        {
+                                pushDown();
+                                iReturnValue = 0;
+                        }
+                }
+
+        refresh();
+       
+        }        
+
+        return(iReturnValue);
+}
+
+//end of added section
+
 // ********************************************************************
 
 UIPushButtonType::UIPushButtonType(const QString &name, QPixmap on, QPixmap off, QPixmap pushed)
Index: mythtv/libs/libmyth/uitypes.h
===================================================================
--- mythtv/libs/libmyth/uitypes.h	(revision 14265)
+++ mythtv/libs/libmyth/uitypes.h	(working copy)
@@ -125,7 +125,15 @@
     virtual void hide();
     virtual bool toggleShow();
 
+//added by Anthony D'Alberto to support mouse presses in UITypes
+//this is done by making calling the handler function in 
+//the event handler.
+//for some reason, the uipushbutton already has this.
 
+//this is the default handler, do nothing
+    virtual int mousePressHandler(QMouseEvent *e){return (-1);}
+//end of added section
+
   signals:
 
     //
@@ -1113,6 +1121,10 @@
     bool    incSearchStart();
     bool    incSearchNext();
 
+//added by Anthony D'Alberto to support mouse press in Managed List
+    int     mousePressHandler(QMouseEvent *e);
+//end of added section
+
   signals:
 
     void    nodeSelected(int, IntVector*); //  emit int and attributes when user selects a node
@@ -1159,6 +1171,15 @@
     QPoint                  rightArrowOffset;
     QString                 incSearch;
     bool                    bIncSearchContains;
+
+//added by Anthony D'Alberto to support mouse presses in List box
+
+    int			    iMapUsed;
+    int			    x_map_location;
+    int			    y_map_location;
+    bool		    boHasChildren;
+    bool		    boHasParent;
+//end of added section
 };
 
 class MPUBLIC UIPushButtonType : public UIType
Index: mythtv/libs/libmyth/mythdialogs.h
===================================================================
--- mythtv/libs/libmyth/mythdialogs.h	(revision 14265)
+++ mythtv/libs/libmyth/mythdialogs.h	(working copy)
@@ -322,6 +322,11 @@
     QPixmap my_background;
     QPixmap my_foreground;
 
+//added by Anthony D'Alberto to support back button
+    virtual void mousePressEvent(QMouseEvent *e);
+    virtual void mouseReleaseEvent(QMouseEvent *e);
+//end of added section
+
   private:
 
     void ReallyUpdateForeground(const QRect &);

