diff options
| author | Tse Kit Yam <me@kytse.com> | 2016-11-23 10:46:28 +1100 | 
|---|---|---|
| committer | Tse Kit Yam <me@kytse.com> | 2016-11-23 10:46:28 +1100 | 
| commit | d2c7abab397926735f5a41ca17fd280a409e2940 (patch) | |
| tree | efe207d319eef0ac417295439593a7baf36e20c7 /src | |
| parent | 4ae76e455aec66826a284356d63cc2b5995c0b2f (diff) | |
| download | scintilla-mirror-d2c7abab397926735f5a41ca17fd280a409e2940.tar.gz | |
Implementation of MarginRightClick event.
Diffstat (limited to 'src')
| -rw-r--r-- | src/Editor.cxx | 21 | ||||
| -rw-r--r-- | src/Editor.h | 2 | ||||
| -rw-r--r-- | src/ScintillaBase.cxx | 14 | ||||
| -rw-r--r-- | src/ScintillaBase.h | 4 | 
4 files changed, 38 insertions, 3 deletions
diff --git a/src/Editor.cxx b/src/Editor.cxx index 43d28a8c0..9c4e39490 100644 --- a/src/Editor.cxx +++ b/src/Editor.cxx @@ -2465,6 +2465,22 @@ bool Editor::NotifyMarginClick(Point pt, bool shift, bool ctrl, bool alt) {  	return NotifyMarginClick(pt, ModifierFlags(shift, ctrl, alt));  } +bool Editor::NotifyMarginRightClick(Point pt, int modifiers) { +	int marginRightClicked = vs.MarginFromLocation(pt); +	if ((marginRightClicked >= 0) && vs.ms[marginRightClicked].sensitive) { +		int position = pdoc->LineStart(LineFromLocation(pt)); +		SCNotification scn = {}; +		scn.nmhdr.code = SCN_MARGINRIGHTCLICK; +		scn.modifiers = modifiers; +		scn.position = position; +		scn.margin = marginRightClicked; +		NotifyParent(scn); +		return true; +	} else { +		return false; +	} +} +  void Editor::NotifyNeedShown(int pos, int len) {  	SCNotification scn = {};  	scn.nmhdr.code = SCN_NEEDSHOWN; @@ -4578,6 +4594,11 @@ void Editor::ButtonDownWithModifiers(Point pt, unsigned int curTime, int modifie  	ShowCaretAtCurrentPosition();  } +void Editor::RightButtonDownWithModifiers(Point pt, unsigned int, int modifiers) { +	if (NotifyMarginRightClick(pt, modifiers)) +		return; +} +  void Editor::ButtonDown(Point pt, unsigned int curTime, bool shift, bool ctrl, bool alt) {  	return ButtonDownWithModifiers(pt, curTime, ModifierFlags(shift, ctrl, alt));  } diff --git a/src/Editor.h b/src/Editor.h index 9eec7a38a..052507381 100644 --- a/src/Editor.h +++ b/src/Editor.h @@ -439,6 +439,7 @@ protected:	// ScintillaBase subclass needs access to much of Editor  	void NotifyIndicatorClick(bool click, int position, bool shift, bool ctrl, bool alt);  	bool NotifyMarginClick(Point pt, int modifiers);  	bool NotifyMarginClick(Point pt, bool shift, bool ctrl, bool alt); +	bool NotifyMarginRightClick(Point pt, int modifiers);  	void NotifyNeedShown(int pos, int len);  	void NotifyDwelling(Point pt, bool state);  	void NotifyZoom(); @@ -508,6 +509,7 @@ protected:	// ScintillaBase subclass needs access to much of Editor  	void DwellEnd(bool mouseMoved);  	void MouseLeave();  	virtual void ButtonDownWithModifiers(Point pt, unsigned int curTime, int modifiers); +	virtual void RightButtonDownWithModifiers(Point pt, unsigned int curTime, int modifiers);  	virtual void ButtonDown(Point pt, unsigned int curTime, bool shift, bool ctrl, bool alt);  	void ButtonMoveWithModifiers(Point pt, int modifiers);  	void ButtonMove(Point pt); diff --git a/src/ScintillaBase.cxx b/src/ScintillaBase.cxx index 92605d9b3..08b9fe829 100644 --- a/src/ScintillaBase.cxx +++ b/src/ScintillaBase.cxx @@ -64,7 +64,7 @@ using namespace Scintilla;  #endif  ScintillaBase::ScintillaBase() { -	displayPopupMenu = true; +	displayPopupMenu = SC_POPUP_ALL;  	listType = 0;  	maxListWidth = 0;  	multiAutoCMode = SC_MULTIAUTOC_ONCE; @@ -478,6 +478,11 @@ void ScintillaBase::CallTipClick() {  	NotifyParent(scn);  } +bool ScintillaBase::ShouldDisplayPopup(Point ptInWindowCoordinates) const { +	return (displayPopupMenu == SC_POPUP_ALL || +		(displayPopupMenu == SC_POPUP_TEXT && !PointInSelMargin(ptInWindowCoordinates))); +} +  void ScintillaBase::ContextMenu(Point pt) {  	if (displayPopupMenu) {  		bool writable = !WndProc(SCI_GETREADONLY, 0, 0); @@ -510,6 +515,11 @@ void ScintillaBase::ButtonDown(Point pt, unsigned int curTime, bool shift, bool  	ButtonDownWithModifiers(pt, curTime, ModifierFlags(shift, ctrl, alt));  } +void ScintillaBase::RightButtonDownWithModifiers(Point pt, unsigned int curTime, int modifiers) { +	CancelModes(); +	Editor::RightButtonDownWithModifiers(pt, curTime, modifiers); +} +  #ifdef SCI_LEXER  #ifdef SCI_NAMESPACE @@ -970,7 +980,7 @@ sptr_t ScintillaBase::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lPara  		break;  	case SCI_USEPOPUP: -		displayPopupMenu = wParam != 0; +		displayPopupMenu = static_cast<int>(wParam);  		break;  #ifdef SCI_LEXER diff --git a/src/ScintillaBase.h b/src/ScintillaBase.h index 4bdf24ef2..e66403367 100644 --- a/src/ScintillaBase.h +++ b/src/ScintillaBase.h @@ -40,7 +40,7 @@ protected:  	enum { maxLenInputIME = 200 }; -	bool displayPopupMenu; +	int displayPopupMenu;  	Menu popup;  	AutoComplete ac; @@ -84,10 +84,12 @@ protected:  	virtual void CreateCallTipWindow(PRectangle rc) = 0;  	virtual void AddToPopUp(const char *label, int cmd=0, bool enabled=true) = 0; +	bool ShouldDisplayPopup(Point ptInWindowCoordinates) const;  	void ContextMenu(Point pt);  	virtual void ButtonDownWithModifiers(Point pt, unsigned int curTime, int modifiers);  	virtual void ButtonDown(Point pt, unsigned int curTime, bool shift, bool ctrl, bool alt); +	virtual void RightButtonDownWithModifiers(Point pt, unsigned int curTime, int modifiers);  	void NotifyStyleToNeeded(int endStyleNeeded);  	void NotifyLexerChanged(Document *doc, void *userData);  | 
