aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorTse Kit Yam <me@kytse.com>2016-11-23 10:46:28 +1100
committerTse Kit Yam <me@kytse.com>2016-11-23 10:46:28 +1100
commitd2c7abab397926735f5a41ca17fd280a409e2940 (patch)
treeefe207d319eef0ac417295439593a7baf36e20c7 /src
parent4ae76e455aec66826a284356d63cc2b5995c0b2f (diff)
downloadscintilla-mirror-d2c7abab397926735f5a41ca17fd280a409e2940.tar.gz
Implementation of MarginRightClick event.
Diffstat (limited to 'src')
-rw-r--r--src/Editor.cxx21
-rw-r--r--src/Editor.h2
-rw-r--r--src/ScintillaBase.cxx14
-rw-r--r--src/ScintillaBase.h4
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);