@@ -6327,9 +6327,16 @@ void handleMouseDown(Event event) {
6327
6327
return ;
6328
6328
}
6329
6329
clickCount = event .count ;
6330
+ boolean addSelection = (event .stateMask & SWT .MOD3 ) != 0 ;
6330
6331
if (clickCount == 1 ) {
6331
- boolean select = (event .stateMask & SWT .MOD2 ) != 0 ;
6332
- doMouseLocationChange (event .x , event .y , select );
6332
+ if (addSelection && !blockSelection ) {
6333
+ int offset = getOffsetAtPoint (event .x , event .y , null );
6334
+ addSelection (offset , 0 );
6335
+ sendSelectionEvent ();
6336
+ } else {
6337
+ boolean expandSelection = (event .stateMask & SWT .MOD2 ) != 0 ;
6338
+ doMouseLocationChange (event .x , event .y , expandSelection );
6339
+ }
6333
6340
} else {
6334
6341
if (doubleClickEnabled ) {
6335
6342
boolean wordSelect = (clickCount & 1 ) == 0 ;
@@ -6349,7 +6356,14 @@ void handleMouseDown(Event event) {
6349
6356
}
6350
6357
int start = Math .max (min , getWordPrevious (offset , SWT .MOVEMENT_WORD_START ));
6351
6358
int end = Math .min (max , getWordNext (start , SWT .MOVEMENT_WORD_END ));
6352
- setSelection (new int [] {start , end - start }, false , true );
6359
+ int [] regions = new int [2 ];
6360
+ if (addSelection ) {
6361
+ int [] current = getSelectionRanges ();
6362
+ regions = Arrays .copyOf (current , current .length + 2 );
6363
+ }
6364
+ regions [regions .length - 2 ] = start ;
6365
+ regions [regions .length - 1 ] = end - start ;
6366
+ setSelection (regions , false , true );
6353
6367
sendSelectionEvent ();
6354
6368
} else {
6355
6369
if (blockSelection ) {
@@ -6359,7 +6373,14 @@ void handleMouseDown(Event event) {
6359
6373
if (lineIndex + 1 < content .getLineCount ()) {
6360
6374
lineEnd = content .getOffsetAtLine (lineIndex + 1 );
6361
6375
}
6362
- setSelection (new int [] {lineOffset , lineEnd - lineOffset }, false , false );
6376
+ int [] regions = new int [2 ];
6377
+ if (addSelection ) {
6378
+ int [] current = getSelectionRanges ();
6379
+ regions = Arrays .copyOf (current , current .length + 2 );
6380
+ }
6381
+ regions [regions .length - 2 ] = lineOffset ;
6382
+ regions [regions .length - 1 ] = lineEnd - lineOffset ;
6383
+ setSelection (regions , false , false );
6363
6384
sendSelectionEvent ();
6364
6385
}
6365
6386
}
@@ -6368,6 +6389,15 @@ void handleMouseDown(Event event) {
6368
6389
}
6369
6390
}
6370
6391
}
6392
+
6393
+ void addSelection (int offset , int length ) {
6394
+ int [] ranges = getSelectionRanges ();
6395
+ ranges = Arrays .copyOf (ranges , ranges .length + 2 );
6396
+ ranges [ranges .length - 2 ] = offset ;
6397
+ ranges [ranges .length - 1 ] = length ;
6398
+ setSelection (ranges , true , true );
6399
+ }
6400
+
6371
6401
/**
6372
6402
* Updates the caret location and selection if mouse button 1 is pressed
6373
6403
* during the mouse move.
0 commit comments