Index: gui/CGUI.cpp
===================================================================
--- gui/CGUI.cpp	(Revision 9986)
+++ gui/CGUI.cpp	(Arbeitskopie)
@@ -132,8 +132,11 @@
 		// TODO Gee: Optimizations needed!
 		//  these two recursive function are quite overhead heavy.
 
-		// pNearest will after this point at the hovered object, possibly NULL
-		pNearest = FindObjectUnderMouse();
+		// If no object is currently capturing the mouse, pNearest will point at the topmost hovered object, possibly NULL.
+		if (m_MouseCapturingObject == NULL)
+			pNearest = FindObjectUnderMouse();
+		else
+			pNearest = m_MouseCapturingObject;
 
 		// Is placed in the UpdateMouseOver function
 		//if (ev->ev.type == SDL_MOUSEMOTION && pNearest)
@@ -157,6 +160,10 @@
 
 				if (pNearest)
 				{
+					// Should this GUIObject capture all mouse-input until the left mouse-button is released again?
+					if(pNearest->DoesCaptureMouse())
+						m_MouseCapturingObject = pNearest;
+
 					ret = pNearest->SendEvent(GUIM_MOUSE_PRESS_LEFT, "mouseleftpress");
 				}
 				break;
@@ -206,6 +213,8 @@
 					{
 						ret = pNearest->SendEvent(GUIM_MOUSE_RELEASE_LEFT, "mouseleftrelease");
 					}
+					// Stop capturing 
+					m_MouseCapturingObject = NULL;
 				}
 				break;
 			case SDL_BUTTON_RIGHT:
@@ -382,7 +391,7 @@
 	NULL, NULL, NULL, NULL
 };
 
-CGUI::CGUI() : m_MouseButtons(0), m_FocusedObject(NULL), m_InternalNameNumber(0)
+CGUI::CGUI() : m_MouseButtons(0), m_FocusedObject(NULL), m_MouseCapturingObject(NULL), m_InternalNameNumber(0)
 {
 	m_BaseObject = new CGUIDummyObject;
 	m_BaseObject->SetGUI(this);
Index: gui/IGUIObject.h
===================================================================
--- gui/IGUIObject.h	(Revision 9986)
+++ gui/IGUIObject.h	(Arbeitskopie)
@@ -405,6 +405,8 @@
 	 */
 	void SetFocus();
 
+	bool DoesCaptureMouse() { return m_CaptureMouseAfterLMBClick; }
+
 protected:
 	/**
 	 * Check if object is focused.
@@ -549,6 +551,10 @@
 
 	// Is mouse hovering the object? used with the function MouseOver()
 	bool									m_MouseHovering;
+	
+	// Still receive mouse input after click-dragging the cursor out of the GUIObject until
+	// LMB is released?
+	bool m_CaptureMouseAfterLMBClick;
 
 	/**
 	 * Settings pool, all an object's settings are located here
Index: gui/IGUIObject.cpp
===================================================================
--- gui/IGUIObject.cpp	(Revision 9986)
+++ gui/IGUIObject.cpp	(Arbeitskopie)
@@ -44,7 +44,8 @@
 	m_pGUI(NULL), 
 	m_pParent(NULL),
 	m_MouseHovering(false),
-	m_JSObject(NULL)
+	m_JSObject(NULL),
+	m_CaptureMouseAfterLMBClick(false)
 {
 	AddSetting(GUIST_bool,			"enabled");
 	AddSetting(GUIST_bool,			"hidden");
Index: gui/MiniMap.cpp
===================================================================
--- gui/MiniMap.cpp	(Revision 9986)
+++ gui/MiniMap.cpp	(Arbeitskopie)
@@ -60,6 +60,7 @@
 	AddSetting(GUIST_CStr,		"tooltip_style");
 	m_Clicking = false;
 	m_Hovering = false;
+	m_CaptureMouseAfterLMBClick = true;
 }
 
 CMiniMap::~CMiniMap()
@@ -105,7 +106,6 @@
 		}
 	case GUIM_MOUSE_LEAVE:
 		{
-			m_Clicking = false;
 			m_Hovering = false;
 			break;
 		}
Index: gui/CGUI.h
===================================================================
--- gui/CGUI.h	(Revision 9986)
+++ gui/CGUI.h	(Arbeitskopie)
@@ -629,6 +629,12 @@
 	 */
 	IGUIObject* m_FocusedObject;
 
+	/**
+	 * Object that captures all mouse input.
+	 * This is currently only needed for the minimap.
+	 */
+	IGUIObject* m_MouseCapturingObject;
+
 	/** 
 	 * Just pointers for fast name access, each object
 	 * is really constructed within its parent for easy
