Commit 07b28cab authored by cutealien's avatar cutealien

Remove lot's of setFocus and removeFocus calls. Also several places where...

Remove lot's of setFocus and removeFocus calls. Also several places where elements check if they have the focus inside events.
Slightly risky change - but it's hard to improve all this without cleaning it up first. And most elements should _not_ be responsible for their 
own focus but the guienvironment should do that (and does do it).


git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@4757 dfc29bdd-3216-0410-991c-e03cc46cb475
parent 5b156c1d
...@@ -179,17 +179,9 @@ bool CGUIButton::OnEvent(const SEvent& event) ...@@ -179,17 +179,9 @@ bool CGUIButton::OnEvent(const SEvent& event)
case EET_MOUSE_INPUT_EVENT: case EET_MOUSE_INPUT_EVENT:
if (event.MouseInput.Event == EMIE_LMOUSE_PRESSED_DOWN) if (event.MouseInput.Event == EMIE_LMOUSE_PRESSED_DOWN)
{ {
if (Environment->hasFocus(this) &&
!AbsoluteClippingRect.isPointInside(core::position2d<s32>(event.MouseInput.X, event.MouseInput.Y)))
{
Environment->removeFocus(this);
return false;
}
if (!IsPushButton) if (!IsPushButton)
setPressed(true); setPressed(true);
Environment->setFocus(this);
return true; return true;
} }
else else
......
...@@ -82,7 +82,6 @@ bool CGUICheckBox::OnEvent(const SEvent& event) ...@@ -82,7 +82,6 @@ bool CGUICheckBox::OnEvent(const SEvent& event)
{ {
Pressed = true; Pressed = true;
CheckTime = os::Timer::getTime(); CheckTime = os::Timer::getTime();
Environment->setFocus(this);
return true; return true;
} }
else else
......
...@@ -363,11 +363,9 @@ bool CGUIColorSelectDialog::OnEvent(const SEvent& event) ...@@ -363,11 +363,9 @@ bool CGUIColorSelectDialog::OnEvent(const SEvent& event)
DragStart.X = event.MouseInput.X; DragStart.X = event.MouseInput.X;
DragStart.Y = event.MouseInput.Y; DragStart.Y = event.MouseInput.Y;
Dragging = true; Dragging = true;
Environment->setFocus(this);
return true; return true;
case EMIE_LMOUSE_LEFT_UP: case EMIE_LMOUSE_LEFT_UP:
Dragging = false; Dragging = false;
Environment->removeFocus(this);
return true; return true;
case EMIE_MOUSE_MOVED: case EMIE_MOUSE_MOVED:
if (Dragging) if (Dragging)
......
...@@ -224,7 +224,7 @@ bool CGUIEnvironment::setFocus(IGUIElement* element) ...@@ -224,7 +224,7 @@ bool CGUIEnvironment::setFocus(IGUIElement* element)
return false; return false;
} }
// GUI Environment should not get the focus // GUI Environment should just reset the focus to 0
if (element == this) if (element == this)
element = 0; element = 0;
......
...@@ -262,7 +262,6 @@ bool CGUIFileOpenDialog::OnEvent(const SEvent& event) ...@@ -262,7 +262,6 @@ bool CGUIFileOpenDialog::OnEvent(const SEvent& event)
DragStart.X = event.MouseInput.X; DragStart.X = event.MouseInput.X;
DragStart.Y = event.MouseInput.Y; DragStart.Y = event.MouseInput.Y;
Dragging = true; Dragging = true;
Environment->setFocus(this);
return true; return true;
case EMIE_LMOUSE_LEFT_UP: case EMIE_LMOUSE_LEFT_UP:
Dragging = false; Dragging = false;
......
...@@ -130,11 +130,6 @@ bool CGUIMenu::OnEvent(const SEvent& event) ...@@ -130,11 +130,6 @@ bool CGUIMenu::OnEvent(const SEvent& event)
{ {
case EMIE_LMOUSE_PRESSED_DOWN: case EMIE_LMOUSE_PRESSED_DOWN:
{ {
if (!Environment->hasFocus(this))
{
Environment->setFocus(this);
}
if (Parent) if (Parent)
Parent->bringToFront(this); Parent->bringToFront(this);
......
...@@ -166,7 +166,6 @@ bool CGUIScrollBar::OnEvent(const SEvent& event) ...@@ -166,7 +166,6 @@ bool CGUIScrollBar::OnEvent(const SEvent& event)
DraggedBySlider = SliderRect.isPointInside(p); DraggedBySlider = SliderRect.isPointInside(p);
TrayClick = !DraggedBySlider; TrayClick = !DraggedBySlider;
DesiredPos = getPosFromMousePos(p); DesiredPos = getPosFromMousePos(p);
Environment->setFocus ( this );
return true; return true;
} }
break; break;
......
...@@ -588,21 +588,18 @@ bool CGUITable::OnEvent(const SEvent &event) ...@@ -588,21 +588,18 @@ bool CGUITable::OnEvent(const SEvent &event)
case EMIE_LMOUSE_PRESSED_DOWN: case EMIE_LMOUSE_PRESSED_DOWN:
if (Environment->hasFocus(this) && if (VerticalScrollBar->isVisible() &&
VerticalScrollBar->isVisible() &&
VerticalScrollBar->getAbsolutePosition().isPointInside(p) && VerticalScrollBar->getAbsolutePosition().isPointInside(p) &&
VerticalScrollBar->OnEvent(event)) VerticalScrollBar->OnEvent(event))
return true; return true;
if (Environment->hasFocus(this) && if (HorizontalScrollBar->isVisible() &&
HorizontalScrollBar->isVisible() &&
HorizontalScrollBar->getAbsolutePosition().isPointInside(p) && HorizontalScrollBar->getAbsolutePosition().isPointInside(p) &&
HorizontalScrollBar->OnEvent(event)) HorizontalScrollBar->OnEvent(event))
return true; return true;
if ( dragColumnStart( event.MouseInput.X, event.MouseInput.Y ) ) if ( dragColumnStart( event.MouseInput.X, event.MouseInput.Y ) )
{ {
Environment->setFocus(this);
return true; return true;
} }
...@@ -610,28 +607,21 @@ bool CGUITable::OnEvent(const SEvent &event) ...@@ -610,28 +607,21 @@ bool CGUITable::OnEvent(const SEvent &event)
return true; return true;
Selecting = true; Selecting = true;
Environment->setFocus(this);
return true; return true;
case EMIE_LMOUSE_LEFT_UP: case EMIE_LMOUSE_LEFT_UP:
CurrentResizedColumn = -1; CurrentResizedColumn = -1;
Selecting = false; Selecting = false;
if (!getAbsolutePosition().isPointInside(p))
{
Environment->removeFocus(this);
}
if (Environment->hasFocus(this) && if (VerticalScrollBar->isVisible() &&
VerticalScrollBar->isVisible() &&
VerticalScrollBar->getAbsolutePosition().isPointInside(p) && VerticalScrollBar->getAbsolutePosition().isPointInside(p) &&
VerticalScrollBar->OnEvent(event)) VerticalScrollBar->OnEvent(event))
{ {
return true; return true;
} }
if (Environment->hasFocus(this) && if (HorizontalScrollBar->isVisible() &&
HorizontalScrollBar->isVisible() &&
HorizontalScrollBar->getAbsolutePosition().isPointInside(p) && HorizontalScrollBar->getAbsolutePosition().isPointInside(p) &&
HorizontalScrollBar->OnEvent(event)) HorizontalScrollBar->OnEvent(event))
{ {
......
...@@ -631,38 +631,26 @@ bool CGUITreeView::OnEvent( const SEvent &event ) ...@@ -631,38 +631,26 @@ bool CGUITreeView::OnEvent( const SEvent &event )
case EMIE_LMOUSE_PRESSED_DOWN: case EMIE_LMOUSE_PRESSED_DOWN:
if (Environment->hasFocus(this) && !AbsoluteClippingRect.isPointInside(p) ) if( ( ScrollBarV && ScrollBarV->getAbsolutePosition().isPointInside( p ) && ScrollBarV->OnEvent( event ) ) ||
{
Environment->removeFocus(this);
return false;
}
if( Environment->hasFocus( this ) &&
( ( ScrollBarV && ScrollBarV->getAbsolutePosition().isPointInside( p ) && ScrollBarV->OnEvent( event ) ) ||
( ScrollBarH && ScrollBarH->getAbsolutePosition().isPointInside( p ) && ScrollBarH->OnEvent( event ) ) ( ScrollBarH && ScrollBarH->getAbsolutePosition().isPointInside( p ) && ScrollBarH->OnEvent( event ) )
) )
)
{ {
return true; return true;
} }
Selecting = true; Selecting = true;
Environment->setFocus( this );
return true; return true;
break; break;
case EMIE_LMOUSE_LEFT_UP: case EMIE_LMOUSE_LEFT_UP:
if( Environment->hasFocus( this ) && if( ( ScrollBarV && ScrollBarV->getAbsolutePosition().isPointInside( p ) && ScrollBarV->OnEvent( event ) ) ||
( ( ScrollBarV && ScrollBarV->getAbsolutePosition().isPointInside( p ) && ScrollBarV->OnEvent( event ) ) ||
( ScrollBarH && ScrollBarH->getAbsolutePosition().isPointInside( p ) && ScrollBarH->OnEvent( event ) ) ( ScrollBarH && ScrollBarH->getAbsolutePosition().isPointInside( p ) && ScrollBarH->OnEvent( event ) )
) )
)
{ {
return true; return true;
} }
Selecting = false; Selecting = false;
Environment->removeFocus( this );
mouseAction( event.MouseInput.X, event.MouseInput.Y ); mouseAction( event.MouseInput.X, event.MouseInput.Y );
return true; return true;
break; break;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment