diff options
| -rw-r--r-- | gtk/ScintillaGTK.cxx | 13 | ||||
| -rw-r--r-- | src/Editor.cxx | 23 | ||||
| -rw-r--r-- | src/Editor.h | 4 | ||||
| -rw-r--r-- | win32/ScintillaWin.cxx | 8 | 
4 files changed, 32 insertions, 16 deletions
diff --git a/gtk/ScintillaGTK.cxx b/gtk/ScintillaGTK.cxx index a8644e81f..83ba91798 100644 --- a/gtk/ScintillaGTK.cxx +++ b/gtk/ScintillaGTK.cxx @@ -260,13 +260,11 @@ gint ScintillaGTK::CursorMoved(GtkWidget *widget, int xoffset, int yoffset, Scin  gint ScintillaGTK::FocusIn(GtkWidget *widget, GdkEventFocus * /*event*/, ScintillaGTK *sciThis) {  	//Platform::DebugPrintf("ScintillaGTK::focus in %x\n", sciThis);  	GTK_WIDGET_SET_FLAGS(widget, GTK_HAS_FOCUS); -	sciThis->NotifyFocus(true); -	sciThis->ShowCaretAtCurrentPosition(); -	sciThis->InvalidateCaret(); +	sciThis->SetFocusState(true);  #ifdef USE_XIM -  if (sciThis->ic) -    gdk_im_begin (sciThis->ic, widget->window); +	if (sciThis->ic) +		gdk_im_begin(sciThis->ic, widget->window);  #endif  	return FALSE; @@ -275,11 +273,10 @@ gint ScintillaGTK::FocusIn(GtkWidget *widget, GdkEventFocus * /*event*/, Scintil  gint ScintillaGTK::FocusOut(GtkWidget *widget, GdkEventFocus * /*event*/, ScintillaGTK *sciThis) {  	//Platform::DebugPrintf("ScintillaGTK::focus out %x\n", sciThis);  	GTK_WIDGET_UNSET_FLAGS(widget, GTK_HAS_FOCUS); -	sciThis->NotifyFocus(false); -	sciThis->DropCaret(); +	sciThis->SetFocusState(false);  #ifdef USE_XIM -  gdk_im_end (); +	gdk_im_end();  #endif  	return FALSE; diff --git a/src/Editor.cxx b/src/Editor.cxx index 698bb65d2..5bfe8fb25 100644 --- a/src/Editor.cxx +++ b/src/Editor.cxx @@ -41,6 +41,7 @@ Editor::Editor() {  	printMagnification = 0;  	printColourMode = SC_PRINT_NORMAL; +	hasFocus = false;  	hideSelection = false;  	inOverstrike = false; @@ -608,7 +609,7 @@ void Editor::EnsureCaretVisible(bool useMargin) {  }  void Editor::ShowCaretAtCurrentPosition() { -	if (!wMain.HasFocus()) { +	if (!hasFocus) {  		caret.active = false;  		caret.on = false;  		return ; @@ -1096,7 +1097,7 @@ void Editor::Paint(Surface *surfaceWindow, PRectangle rcArea) {  	}  	surfaceWindow->SetPalette(&palette, true); -	pixmapLine.SetPalette(&palette, !wMain.HasFocus()); +	pixmapLine.SetPalette(&palette, !hasFocus);  	//Platform::DebugPrintf("Paint: (%3d,%3d) ... (%3d,%3d)\n",  	//	rcArea.left, rcArea.top, rcArea.right, rcArea.bottom); @@ -2811,6 +2812,17 @@ void Editor::Tick() {  	}  } +void Editor::SetFocusState(bool focusState) { +	hasFocus = focusState; +	NotifyFocus(hasFocus); +	if (hasFocus) { +		ShowCaretAtCurrentPosition(); +		InvalidateCaret(); +	} else { +		DropCaret(); +	} +} +  static bool IsIn(int a, int minimum, int maximum) {  	return (a >= minimum) && (a <= maximum);  } @@ -4265,6 +4277,13 @@ long Editor::WndProc(unsigned int iMessage, unsigned long wParam, long lParam) {  	case SCI_GETOVERTYPE:  		return inOverstrike ? TRUE : FALSE; +	case SCI_SETFOCUS: +		SetFocusState(wParam); +		break; +	 +	case SCI_GETFOCUS: +		return hasFocus; +	  #ifdef MACRO_SUPPORT  	case SCI_STARTRECORD:  		recordingMacro = 1; diff --git a/src/Editor.h b/src/Editor.h index 83967cfd6..38d7ad913 100644 --- a/src/Editor.h +++ b/src/Editor.h @@ -61,7 +61,8 @@ protected:	// ScintillaBase subclass needs access to much of Editor  	Palette palette;  	int printMagnification;  	int printColourMode; -	 + +	bool hasFocus;  	bool hideSelection;  	bool inOverstrike; @@ -285,6 +286,7 @@ protected:	// ScintillaBase subclass needs access to much of Editor  	virtual void SetTicking(bool on) = 0;  	virtual void SetMouseCapture(bool on) = 0;  	virtual bool HaveMouseCapture() = 0; +	void SetFocusState(bool focusState);  	void CheckForChangeOutsidePaint(Range r);  	int BraceMatch(int position, int maxReStyle); diff --git a/win32/ScintillaWin.cxx b/win32/ScintillaWin.cxx index dfb53a825..b3b40660b 100644 --- a/win32/ScintillaWin.cxx +++ b/win32/ScintillaWin.cxx @@ -388,7 +388,7 @@ LRESULT ScintillaWin::WndProc(unsigned int iMessage, unsigned long wParam, long  		// i.e. if datazoomed out only class structures are visible, when datazooming in the control  		// structures appear, then eventually the individual statements...)  		if (wParam & MK_SHIFT) { -            return ::DefWindowProc(wMain.GetID(), iMessage, wParam, lParam); +            		return ::DefWindowProc(wMain.GetID(), iMessage, wParam, lParam);  		}  		// Either SCROLL or ZOOM. We handle the wheel steppings calculation @@ -501,14 +501,12 @@ LRESULT ScintillaWin::WndProc(unsigned int iMessage, unsigned long wParam, long  		return DLGC_HASSETSEL | DLGC_WANTALLKEYS;  	case WM_KILLFOCUS: -		NotifyFocus(false); -		DropCaret(); +		SetFocusState(false);  		//RealizeWindowPalette(true);  		break;  	case WM_SETFOCUS: -		NotifyFocus(true); -		ShowCaretAtCurrentPosition(); +		SetFocusState(true);  		RealizeWindowPalette(false);  		break;  | 
