static Atom atom_primary, atom_targets, atom_utf8_string,
atom_string, atom_incr;
-int screen_select_ticks = 0;
+int screen_select_ticks = 0,
+ screen_select_ticks_reset = 0;
bool screen_select_clear_now = false;
atom_string = XInternAtom(s->dpy, "STRING", False);
atom_incr = XInternAtom(s->dpy, "INCR", False);
+ /* Number of ticks to reset selection expiry timer. */
+ if (cfg_selecttimeout > 0)
+ screen_select_ticks_reset = cfg_selecttimeout *
+ (1000000 / cfg_refreshspeed);
+ else
+ screen_select_ticks_reset = 0;
+
s->focus = true;
return s;
screen_select_start(state_t *st, XButtonEvent *bev)
{
+ screen_select_ticks = screen_select_ticks_reset;
+
if (bev->button != 1)
return;
size_t bufsize;
int x, y;
+ screen_select_ticks = screen_select_ticks_reset;
+
if (bev->button != 1)
return;
if (!st->selecting)
return;
st->selecting = false;
- if (st->sel_x2 == -1 || st->sel_y2 == -1)
+ if (st->sel_x1 == -1 || st->sel_y1 == -1 ||
+ st->sel_x2 == -1 || st->sel_y2 == -1)
return;
/* Free any previous selection */
if (st->selected)
XSetSelectionOwner(screen->dpy, atom_primary, screen->win,
CurrentTime);
-
- /* Set expiry */
- if (cfg_selecttimeout > 0)
- screen_select_ticks = cfg_selecttimeout *
- (1000000 / cfg_refreshspeed);
}
void
screen_select_adjust(state_t *st, XMotionEvent *mev)
{
+ screen_select_ticks = screen_select_ticks_reset;
+
if ((mev->state & Button1Mask) == 0)
return;
if (!st->selecting)
screen_select_paste(state_t *st, XButtonEvent *bev)
{
+ screen_select_ticks = screen_select_ticks_reset;
+
if (bev->button != 2)
return;
if (st->pasting != None)