You should be able to use the TSynEditMarkupMouseLink as it is.
But if you want to add your own subclass, see ide/SourceSynEditor.pas
SynEdit.MarkupManager is public (at least in trunk), so not sure why you need a subclass of TCustomSynEdit?
*IF* you do a subclass: Why do you need IsLinkable? Add your own event, in your TSynEditMarkupMouseLink subclass.
------------
But first of all: What you can do WITHOUT subclassing anything.
You can use
property OnClickLink : TMouseEvent
property OnMouseLink: TSynMouseLinkEvent
to decide what to link, and where to link too.
You can use MouseAcitons to configure what shift-key-mouse-button combo should trigger.
1) add synedit to form, then in ObjectInspector:
2) set SynEdit.MouseAction.emUseMouseActions
3) set SynEdit.MouseAction.emShowControlMouseLink
4) Right click / pop up menu, the SynEdit in the form designe, and select "Reset mouse actions"
5) You may need to deselect the SynEdit (select another component, or the form), and select SYnEdit again. (Not sure, shouldnt be needed, but I just tested, and it was needed)
Now In ObInsp, go to
SynEdit.MouseTextActions (should have 8 items)
click the [...]
In the window that appears, choose "Source Link", and edit the "shift" property
For more info:
http://wiki.lazarus.freepascal.org/IDE_Window:_EditorMouseOptionsAdvanced----------------------------------
If you want to add your own, because you need TWO mouse link handlers:
Well the behaviour should be entirely in the markup class, SynEdit should not have any special code for it. That is just because it never was entirely moved....
As I said you can get the IsLink/OnLink in your class. So all you need is to get notified when the mouse buttons are used.
Use MouseActions as described. (Actually you do not need to, if you don't SynEdit uses an internal list, and you can still extend it, see below(
In your TSynEditMarkupMouseLink subclass, you can hook
procedure RegisterMouseActionSearchHandler(AHandlerProc: TSynEditMouseActionSearchProc);
procedure UnregisterMouseActionSearchHandler(AHandlerProc: TSynEditMouseActionSearchProc);
procedure RegisterMouseActionExecHandler(AHandlerProc: TSynEditMouseActionExecProc);
And you can add a property with a new mouseaction (actually you need a list, even for just one). Make sure you use a unique command. Look how other classes do that.
The MouseAction is to trigger the link (direction set to "up")
In ActionSearchHandler you will check if it is matched, you can also check for mouse up/down.