Merge pull request #79 from Green-Sky/patch-1

input using 'alt gr' not working on linux
diff --git a/.gitignore b/.gitignore
index 259148f..0da26e3 100644
--- a/.gitignore
+++ b/.gitignore
@@ -30,3 +30,4 @@
 *.exe
 *.out
 *.app
+TextEditor.cpp.bak
diff --git a/TextEditor.cpp b/TextEditor.cpp
index 1f03e9c..0266ecd 100644
--- a/TextEditor.cpp
+++ b/TextEditor.cpp
@@ -43,6 +43,9 @@
 	, mSelectionMode(SelectionMode::Normal)

 	, mCheckComments(true)

 	, mLastClick(-1.0f)

+	, mHandleKeyboardInputs(true)

+	, mHandleMouseInputs(true)

+	, mIgnoreImGuiChild(false)

 {

 	SetPalette(GetDarkPalette());

 	SetLanguageDefinition(LanguageDefinition::HLSL());

@@ -461,7 +464,7 @@
 

 	if (ImGui::IsWindowFocused())

 	{

-		if (ImGui::IsWindowHovered())

+		if (ImGui::IsWindowHovered() && !ImGui::IsAnyItemHovered() && !ImGui::IsAnyItemFocused())

 			ImGui::SetMouseCursor(ImGuiMouseCursor_TextInput);

 		//ImGui::CaptureKeyboardFromApp(true);

 

@@ -836,16 +839,22 @@
 

 	ImGui::PushStyleColor(ImGuiCol_ChildWindowBg, ImGui::ColorConvertU32ToFloat4(mPalette[(int)PaletteIndex::Background]));

 	ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(0.0f, 0.0f));

-	ImGui::BeginChild(aTitle, aSize, aBorder, ImGuiWindowFlags_HorizontalScrollbar | ImGuiWindowFlags_AlwaysHorizontalScrollbar | ImGuiWindowFlags_NoMove);

-	ImGui::PushAllowKeyboardFocus(true);

+	if( !mIgnoreImGuiChild)

+		ImGui::BeginChild(aTitle, aSize, aBorder, ImGuiWindowFlags_HorizontalScrollbar | ImGuiWindowFlags_AlwaysHorizontalScrollbar | ImGuiWindowFlags_NoMove);

+	

+	if (mHandleKeyboardInputs) {

+		HandleKeyboardInputs();

+		ImGui::PushAllowKeyboardFocus(true);

+	}

 

-	HandleKeyboardInputs();

-	HandleMouseInputs();

+	if( mHandleMouseInputs)    HandleMouseInputs();

+

 	ColorizeInternal();

 	Render();

 

-	ImGui::PopAllowKeyboardFocus();

-	ImGui::EndChild();

+	if (mHandleKeyboardInputs) ImGui::PopAllowKeyboardFocus();

+

+	if( !mIgnoreImGuiChild) ImGui::EndChild();

 	ImGui::PopStyleVar();

 	ImGui::PopStyleColor();

 

@@ -935,6 +944,9 @@
 				end.mColumn = (int)mLines[end.mLine].size();

 			}

 

+			if (end.mColumn >= (int)mLines[end.mLine].size())

+				end.mColumn = (int)mLines[end.mLine].size() - 1;

+

 			u.mRemovedStart = start;

 			u.mRemovedEnd = end;

 			u.mRemoved = GetText(start, end);

@@ -978,6 +990,8 @@
 

 			if (modified)

 			{

+				assert(mLines.size() > start.mLine && mLines[start.mLine].size() > start.mColumn);

+				assert(mLines.size() > end.mLine && mLines[end.mLine].size() > end.mColumn);

 				u.mAddedStart = start;

 				u.mAddedEnd = end;

 				u.mAdded = GetText(start, end);

@@ -1949,7 +1963,6 @@
 			}

 		}

 		mCheckComments = false;

-		return;

 	}

 

 	if (mColorRangeMin < mColorRangeMax)

diff --git a/TextEditor.h b/TextEditor.h
index 66df7eb..cfc68d5 100644
--- a/TextEditor.h
+++ b/TextEditor.h
@@ -206,6 +206,10 @@
 	Coordinates GetCursorPosition() const { return GetActualCursorCoordinates(); }

 	void SetCursorPosition(const Coordinates& aPosition);

 

+	void SetHandleMouseInputs    (bool aValue){ mHandleMouseInputs    = aValue;}

+	void SetHandleKeyboardInputs (bool aValue){ mHandleKeyboardInputs = aValue;}

+	void SetImGuiChildIgnored    (bool aValue){ mIgnoreImGuiChild     = aValue;}

+

 	void InsertText(const std::string& aValue);

 	void InsertText(const char* aValue);

 

@@ -335,6 +339,9 @@
 	bool mCursorPositionChanged;

 	int mColorRangeMin, mColorRangeMax;

 	SelectionMode mSelectionMode;

+	bool mHandleKeyboardInputs;
+	bool mHandleMouseInputs;
+	bool mIgnoreImGuiChild;
 
 	Palette mPaletteBase;

 	Palette mPalette;