when doing a select by area with shift pressed the object under the mouse will not be unselected if it was already selected (xctx->already_selected)
This commit is contained in:
parent
512b297e35
commit
0819211bb0
|
|
@ -1260,7 +1260,7 @@ int rstate; /* (reduced state, without ShiftMask) */
|
|||
}
|
||||
|
||||
redraw_w_a_l_r_p_rubbers();
|
||||
/* start of a mouse area select */
|
||||
/* start of a mouse area select. No shift pressed */
|
||||
if(!(xctx->ui_state & STARTPOLYGON) && (state&Button1Mask) && !(xctx->ui_state & STARTWIRE) &&
|
||||
!(xctx->ui_state & STARTPAN) && !(SET_MODMASK) &&
|
||||
!(state & ShiftMask) && !(xctx->ui_state & (PLACE_SYMBOL | PLACE_TEXT)))
|
||||
|
|
@ -1280,6 +1280,7 @@ int rstate; /* (reduced state, without ShiftMask) */
|
|||
}
|
||||
}
|
||||
}
|
||||
/* Unselect by area */
|
||||
if((state & Button1Mask) && (SET_MODMASK) && !(state & ShiftMask) &&
|
||||
!(xctx->ui_state & STARTPAN) &&
|
||||
!(xctx->ui_state & (PLACE_SYMBOL | PLACE_TEXT))) { /* unselect area */
|
||||
|
|
@ -1287,6 +1288,7 @@ int rstate; /* (reduced state, without ShiftMask) */
|
|||
select_rect(START,0);
|
||||
}
|
||||
}
|
||||
/* Select by area. Shift pressed */
|
||||
else if((state&Button1Mask) && (state & ShiftMask) &&
|
||||
!(xctx->ui_state & (PLACE_SYMBOL | PLACE_TEXT)) &&
|
||||
!(xctx->ui_state & STARTPAN) ) {
|
||||
|
|
@ -1296,8 +1298,10 @@ int rstate; /* (reduced state, without ShiftMask) */
|
|||
}
|
||||
if(abs(mx-xctx->mx_save) > 8 ||
|
||||
abs(my-xctx->my_save) > 8 ) { /* set reasonable threshold before unsel */
|
||||
select_object(X_TO_XSCHEM(xctx->mx_save),
|
||||
Y_TO_XSCHEM(xctx->my_save), 0, 0); /* remove near obj if dragging */
|
||||
if(!xctx->already_selected) {
|
||||
select_object(X_TO_XSCHEM(xctx->mx_save),
|
||||
Y_TO_XSCHEM(xctx->my_save), 0, 0); /* remove near obj if dragging */
|
||||
}
|
||||
rebuild_selected_array();
|
||||
}
|
||||
}
|
||||
|
|
@ -2714,17 +2718,12 @@ int rstate; /* (reduced state, without ShiftMask) */
|
|||
xctx->yorigin-=-CADMOVESTEP*xctx->zoom/2.;
|
||||
draw();
|
||||
}
|
||||
/* Alt - Button1 click to unselect */
|
||||
else if(button==Button1 && (SET_MODMASK) ) {
|
||||
xctx->last_command = 0;
|
||||
xctx->mx_save = mx; xctx->my_save = my;
|
||||
xctx->mx_double_save=xctx->mousex_snap;
|
||||
xctx->my_double_save=xctx->mousey_snap;
|
||||
|
||||
/* useless code ? 20200905 */
|
||||
/* if(xctx->semaphore<2) {
|
||||
rebuild_selected_array();
|
||||
} */
|
||||
|
||||
select_object(xctx->mousex, xctx->mousey, 0, 0);
|
||||
rebuild_selected_array(); /* sets or clears xctx->ui_state SELECTION flag */
|
||||
}
|
||||
|
|
@ -2902,6 +2901,7 @@ int rstate; /* (reduced state, without ShiftMask) */
|
|||
tcleval("set constrained_move 0" );
|
||||
break;
|
||||
}
|
||||
/* Button1Press to select objects */
|
||||
if( !(xctx->ui_state & STARTSELECT) && !(xctx->ui_state & STARTWIRE) && !(xctx->ui_state & STARTLINE) ) {
|
||||
Selected sel;
|
||||
int prev_last_sel = xctx->lastsel;
|
||||
|
|
|
|||
|
|
@ -1224,31 +1224,38 @@ void select_line(int c, int i, unsigned short select_mode, int fast )
|
|||
Selected select_object(double mx,double my, unsigned short select_mode, int override_lock)
|
||||
{
|
||||
Selected sel;
|
||||
xctx->already_selected = 0;
|
||||
sel = find_closest_obj(mx, my, override_lock);
|
||||
|
||||
dbg(1, "select_object(): sel.n=%d, sel.col=%d, sel.type=%d\n", sel.n, sel.col, sel.type);
|
||||
|
||||
switch(sel.type)
|
||||
{
|
||||
case WIRE:
|
||||
if(xctx->wire[sel.n].sel) xctx->already_selected = 1;
|
||||
select_wire(sel.n, select_mode, 0);
|
||||
break;
|
||||
case xTEXT:
|
||||
if(xctx->text[sel.n].sel) xctx->already_selected = 1;
|
||||
select_text(sel.n, select_mode, 0);
|
||||
break;
|
||||
case LINE:
|
||||
if(xctx->line[sel.col][sel.n].sel) xctx->already_selected = 1;
|
||||
select_line(sel.col, sel.n, select_mode,0);
|
||||
break;
|
||||
case POLYGON:
|
||||
if(xctx->poly[sel.col][sel.n].sel) xctx->already_selected = 1;
|
||||
select_polygon(sel.col, sel.n, select_mode,0);
|
||||
break;
|
||||
case xRECT:
|
||||
if(xctx->rect[sel.col][sel.n].sel) xctx->already_selected = 1;
|
||||
select_box(sel.col,sel.n, select_mode,0, override_lock);
|
||||
break;
|
||||
case ARC:
|
||||
if(xctx->arc[sel.col][sel.n].sel) xctx->already_selected = 1;
|
||||
select_arc(sel.col,sel.n, select_mode,0);
|
||||
break;
|
||||
case ELEMENT:
|
||||
if(xctx->inst[sel.n].sel) xctx->already_selected = 1;
|
||||
select_element(sel.n,select_mode,0, override_lock);
|
||||
break;
|
||||
default:
|
||||
|
|
|
|||
|
|
@ -613,6 +613,7 @@ static void alloc_xschem_data(const char *top_path, const char *win_path)
|
|||
xctx->only_probes = 0;
|
||||
xctx->menu_removed = 0; /* fullscreen previous setting */
|
||||
xctx->save_lw = 0.0; /* used to save linewidth when selecting 'only_probes' view */
|
||||
xctx->already_selected = 0;
|
||||
xctx->onetime = 0; /* callback() static var */
|
||||
xctx->save_netlist_type = 0;
|
||||
xctx->some_nets_added = 0;
|
||||
|
|
|
|||
|
|
@ -972,6 +972,7 @@ typedef struct {
|
|||
int *node_mult;
|
||||
int node_mult_size;
|
||||
/* callback.c */
|
||||
int already_selected; /* when clicking on an object that is already selected this will be 1 */
|
||||
int mx_save, my_save, last_command;
|
||||
char sel_or_clip[PATH_MAX];
|
||||
int onetime;
|
||||
|
|
|
|||
Loading…
Reference in New Issue