From: Felix Domke Date: Thu, 19 May 2005 22:53:21 +0000 (+0000) Subject: - add focus stuff X-Git-Url: http://code.vuplus.com/gitweb/?p=vuplus_dvbapp;a=commitdiff_plain;h=e3a70a61207238b3c6ac464752a61f5965d95f14 - add focus stuff --- diff --git a/lib/gui/ewidget.cpp b/lib/gui/ewidget.cpp index 3ba248f..2241577 100644 --- a/lib/gui/ewidget.cpp +++ b/lib/gui/ewidget.cpp @@ -17,6 +17,9 @@ eWidget::eWidget(eWidget *parent): m_parent(parent ? parent->child() : 0) m_parent->m_childs.push_back(this); m_parent->getStyle(m_style); } + + m_current_focus = 0; + m_focus_owner = 0; } void eWidget::move(ePoint pos) @@ -155,6 +158,14 @@ void eWidget::setBackgroundColor(const gRGB &col) m_have_background_color = 1; } +void eWidget::mayKillFocus() +{ + setFocus(0); + /* when we have the focus, remove it first. */ + if (m_focus_owner) + m_focus_owner->setFocus(0); +} + eWidget::~eWidget() { hide(); @@ -249,9 +260,28 @@ int eWidget::event(int event, void *data, void *data2) m_clip_region = gRegion(eRect(ePoint(0, 0), m_size)); break; } + case evtFocusGot: + m_focus_owner = (eWidget*)data; + break; + case evtFocusLost: + eDebug("unhandled focus lost in %p", this); + m_focus_owner = 0; + break; default: return -1; } return 0; } +void eWidget::setFocus(eWidget *focus) +{ + eDebug("setFocus in %p to %p, was %p", this, focus, m_current_focus); + if (m_current_focus) + m_current_focus->event(evtFocusLost, this); + + m_current_focus = focus; + + if (m_current_focus) + m_current_focus->event(evtFocusGot, this); +} + diff --git a/lib/gui/ewidget.h b/lib/gui/ewidget.h index cb39a00..9f3df2c 100644 --- a/lib/gui/ewidget.h +++ b/lib/gui/ewidget.h @@ -61,8 +61,11 @@ private: gRGB m_background_color; int m_have_background_color; + + eWidget *m_current_focus, *m_focus_owner; protected: virtual ~eWidget(); + void mayKillFocus(); public: // all in local space! @@ -82,9 +85,13 @@ public: evtAction, + evtFocusGot, + evtFocusLost, + evtUserWidget, }; virtual int event(int event, void *data = 0, void *data2 = 0); + void setFocus(eWidget *focus); }; extern eWidgetDesktop *getDesktop(); diff --git a/lib/python/Screens/Screen.py b/lib/python/Screens/Screen.py index 1b42141..aed7dc6 100644 --- a/lib/python/Screens/Screen.py +++ b/lib/python/Screens/Screen.py @@ -34,3 +34,5 @@ class Screen(dict, HTMLSkin, GUISkin): def close(self, retval=None): self.session.close() + def setFocus(self, o): + self.instance.setFocus(o.instance)