Browse Source

Merge pull request #5298 from Paulb23/caret_draw_focus

Text Edit no longer draws caret on focus loss
Rémi Verschelde 9 years ago
parent
commit
618d34463d
2 changed files with 16 additions and 0 deletions
  1. 15 0
      scene/gui/text_edit.cpp
  2. 1 0
      scene/gui/text_edit.h

+ 15 - 0
scene/gui/text_edit.cpp

@@ -417,8 +417,22 @@ void TextEdit::_notification(int p_what) {
 
 			_update_caches();
 		} break;
+		case MainLoop::NOTIFICATION_WM_FOCUS_IN: {
+			window_has_focus = true;
+			draw_caret = true;
+			update();
+		} break;
+		case MainLoop::NOTIFICATION_WM_FOCUS_OUT: {
+			window_has_focus = false;
+			draw_caret = false;
+			update();
+		} break;
 		case NOTIFICATION_DRAW: {
 
+			if ((!has_focus() && !menu->has_focus()) || !window_has_focus) {
+				draw_caret = false;
+			}
+
 			if (draw_breakpoint_gutter) {
 				breakpoint_gutter_width = (get_row_height() * 55) / 100;
 				cache.breakpoint_gutter_width = breakpoint_gutter_width;
@@ -4518,6 +4532,7 @@ TextEdit::TextEdit()  {
 	brace_matching_enabled=false;
 	auto_indent=false;
 	insert_mode = false;
+	window_has_focus=true;
 
 	menu = memnew( PopupMenu );
 	add_child(menu);

+ 1 - 0
scene/gui/text_edit.h

@@ -217,6 +217,7 @@ class TextEdit : public Control  {
 	Timer *caret_blink_timer;
 	bool caret_blink_enabled;
 	bool draw_caret;
+	bool window_has_focus;
 
 	bool setting_row;
 	bool wrap;