Index: /branches/gui/src/lib/gui/gl_gui/glgui.h
===================================================================
--- /branches/gui/src/lib/gui/gl_gui/glgui.h	(revision 7879)
+++ /branches/gui/src/lib/gui/gl_gui/glgui.h	(revision 7880)
@@ -6,4 +6,7 @@
 #ifndef _GLGUI_H
 #define _GLGUI_H
+
+#include "glgui_handler.h"
+
 #include "glgui_widget.h"
 
Index: /branches/gui/src/lib/gui/gl_gui/glgui_handler.cc
===================================================================
--- /branches/gui/src/lib/gui/gl_gui/glgui_handler.cc	(revision 7879)
+++ /branches/gui/src/lib/gui/gl_gui/glgui_handler.cc	(revision 7880)
@@ -20,4 +20,8 @@
 
 #include "glgui_mainwidget.h"
+#include "glgui_cursor.h"
+
+#include "class_list.h"
+
 
 namespace OrxGui
@@ -32,4 +36,6 @@
     this->setName("GLGuiHandler");
 
+
+    this->cursor = NULL;
     //this->subscribeEvent()
 
@@ -48,4 +54,20 @@
     GLGuiHandler::singletonRef = NULL;
   }
+
+  void GLGuiHandler::activateCursor()
+  {
+    this->cursor = new GLGuiCursor();
+    this->cursor->show();
+  }
+
+  void GLGuiHandler::deactivateCursor()
+  {
+    if (this->cursor)
+    {
+      delete this->cursor;
+      this->cursor = NULL;
+    }
+  }
+
 
   void GLGuiHandler::activate()
@@ -76,4 +98,24 @@
   void GLGuiHandler::tick(float dt)
   {
+
+    // CHECK THE COLLISIONS.
+    const std::list<BaseObject*>* objects = ClassList::getList(CL_GLGUI_WIDGET);
+
+    if (objects != NULL && this->cursor != NULL)
+    {
+      for (std::list<BaseObject*>::const_iterator it = objects->begin(); it != objects->end(); it++)
+      {
+        GLGuiWidget* widget = dynamic_cast<GLGuiWidget*>(*it);
+        if (widget->focusOverWidget(this->cursor->getAbsCoor2D().x, this->cursor->getAbsCoor2D().y))
+        {
+          // receiving Focus
+          if (GLGuiWidget::focused() != widget)
+          {
+            printf("yeah\n");
+            widget->giveFocus();
+          }
+        }
+      }
+    }
   }
 }
Index: /branches/gui/src/lib/gui/gl_gui/glgui_handler.h
===================================================================
--- /branches/gui/src/lib/gui/gl_gui/glgui_handler.h	(revision 7879)
+++ /branches/gui/src/lib/gui/gl_gui/glgui_handler.h	(revision 7880)
@@ -8,7 +8,11 @@
 
 #include "event_listener.h"
+#include "glgui_widget.h"
 
 namespace OrxGui
 {
+
+  class GLGuiCursor;
+
   // FORWARD DECLARATION
 
@@ -21,4 +25,8 @@
     /** @returns a Pointer to the only object of this Class */
     inline static GLGuiHandler* getInstance(void) { if (!GLGuiHandler::singletonRef) GLGuiHandler::singletonRef = new GLGuiHandler();  return GLGuiHandler::singletonRef; };
+
+    void activateCursor();
+    void deactivateCursor();
+    GLGuiCursor* getCursor() const { return this->cursor; }
 
     void activate();
@@ -36,4 +44,6 @@
 
     bool                 isActive;
+    GLGuiCursor*         cursor;
+
   };
 }
Index: /branches/gui/src/lib/gui/gl_gui/glgui_widget.cc
===================================================================
--- /branches/gui/src/lib/gui/gl_gui/glgui_widget.cc	(revision 7879)
+++ /branches/gui/src/lib/gui/gl_gui/glgui_widget.cc	(revision 7880)
@@ -65,5 +65,5 @@
 
 
-  bool GLGuiWidget::focusOverWidget(float x, float y)
+  bool GLGuiWidget::focusOverWidget(float x, float y) const
   {
     if (this->getAbsCoor2D().x < x && this->getAbsCoor2D().x + this->getSizeX2D() > x &&
Index: /branches/gui/src/lib/gui/gl_gui/glgui_widget.h
===================================================================
--- /branches/gui/src/lib/gui/gl_gui/glgui_widget.h	(revision 7879)
+++ /branches/gui/src/lib/gui/gl_gui/glgui_widget.h	(revision 7880)
@@ -52,7 +52,9 @@
     void hide();
 
+    void giveFocus() { GLGuiWidget::_focused = this; this->receivedFocus(); };
+
     void connectSignal(SignalType signalType, BaseObject* obj, const Executor* signal);
     void disconnectSignal(SignalType signalType);
-    bool focusOverWidget(float x, float y);
+    bool focusOverWidget(float x, float y) const;
 
 
@@ -65,4 +67,9 @@
     Material& frontMaterial() { return this->frontMat; };
     const Material& frontMaterial() const { return this->frontMat; };
+
+
+
+    static const GLGuiWidget* const focused() { return GLGuiWidget::_focused; };
+
 
   protected:
Index: /branches/gui/src/story_entities/simple_game_menu.cc
===================================================================
--- /branches/gui/src/story_entities/simple_game_menu.cc	(revision 7879)
+++ /branches/gui/src/story_entities/simple_game_menu.cc	(revision 7880)
@@ -67,6 +67,5 @@
   pb->setAbsCoor2D(50, 50);
 
-  OrxGui::GLGuiCursor* cursor = new OrxGui::GLGuiCursor();
-  cursor->show();
+  OrxGui::GLGuiHandler::getInstance()->activateCursor();
 
   if (root != NULL)
@@ -315,4 +314,7 @@
   GameWorld::tick();
 
+  // Make the GLGui tick.
+  OrxGui::GLGuiHandler::getInstance()->tick(this->dtS);
+
   this->animateScene(this->dtS);
 }
