forked from bartvdbraak/blender
Various Sticky fixes (tm)
* Revert 776bfa64a53191b and c3dad7953afccd4 (some X11 systems are doing stupid things forcing me to do an extra check that completely breaks the click type handling on other systems using the slightly changed implementation from those commits - see T44278) * Fix sample lines in Compositor+VSE (And yes, this time I tested on both of my systems to make sure everything is fine)
This commit is contained in:
parent
33a9247334
commit
bcc9a23548
@ -277,6 +277,10 @@ static int eyedropper_modal(bContext *C, wmOperator *op, const wmEvent *event)
|
||||
eyedropper_cancel(C, op);
|
||||
return OPERATOR_CANCELLED;
|
||||
case LEFTMOUSE:
|
||||
/* two release events are sent on KM_CLICK, so ignore second one */
|
||||
if (event->click_type == KM_CLICK) {
|
||||
break;
|
||||
}
|
||||
if (event->val == KM_RELEASE) {
|
||||
if (eye->accum_tot == 0) {
|
||||
eyedropper_color_sample(C, eye, event->x, event->y);
|
||||
|
@ -511,6 +511,10 @@ static int edbm_dupli_extrude_cursor_invoke(bContext *C, wmOperator *op, const w
|
||||
bool done = false;
|
||||
bool use_proj;
|
||||
|
||||
if (ELEM(event->click_type, KM_CLICK, KM_HOLD)) {
|
||||
return OPERATOR_CANCELLED;
|
||||
}
|
||||
|
||||
em_setup_viewcontext(C, &vc);
|
||||
|
||||
ED_view3d_init_mats_rv3d(vc.obedit, vc.rv3d);
|
||||
|
@ -2950,11 +2950,11 @@ static int image_sample_modal(bContext *C, wmOperator *op, const wmEvent *event)
|
||||
switch (event->type) {
|
||||
case LEFTMOUSE:
|
||||
case RIGHTMOUSE: // XXX hardcoded
|
||||
if (event->val == KM_RELEASE) {
|
||||
image_sample_exit(C, op);
|
||||
return OPERATOR_CANCELLED;
|
||||
}
|
||||
break;
|
||||
if (event->val == KM_RELEASE) {
|
||||
image_sample_exit(C, op);
|
||||
return OPERATOR_CANCELLED;
|
||||
}
|
||||
break;
|
||||
case MOUSEMOVE:
|
||||
image_sample_apply(C, op, event);
|
||||
break;
|
||||
|
@ -609,8 +609,11 @@ static int sample_modal(bContext *C, wmOperator *op, const wmEvent *event)
|
||||
switch (event->type) {
|
||||
case LEFTMOUSE:
|
||||
case RIGHTMOUSE: // XXX hardcoded
|
||||
sample_exit(C, op);
|
||||
return OPERATOR_CANCELLED;
|
||||
if (event->val == KM_RELEASE) {
|
||||
sample_exit(C, op);
|
||||
return OPERATOR_CANCELLED;
|
||||
}
|
||||
break;
|
||||
case MOUSEMOVE:
|
||||
sample_apply(C, op, event);
|
||||
break;
|
||||
|
@ -201,8 +201,10 @@ static int sample_modal(bContext *C, wmOperator *op, const wmEvent *event)
|
||||
switch (event->type) {
|
||||
case LEFTMOUSE:
|
||||
case RIGHTMOUSE: /* XXX hardcoded */
|
||||
sample_exit(C, op);
|
||||
return OPERATOR_CANCELLED;
|
||||
if (event->val == KM_RELEASE) {
|
||||
sample_exit(C, op);
|
||||
return OPERATOR_CANCELLED;
|
||||
}
|
||||
case MOUSEMOVE:
|
||||
sample_apply(C, op, event);
|
||||
break;
|
||||
|
@ -2994,7 +2994,7 @@ static wmWindow *wm_event_cursor_other_windows(wmWindowManager *wm, wmWindow *wi
|
||||
* - #KM_PRESS && time since first #KM_PRESS > U.click_timeout --> send #KM_HOLD
|
||||
* - #KM_PRESS after a #KM_RELEASE && time since previous #KM_PRESS < U.dbl_click_time --> send #KM_DBL_CLICK
|
||||
*
|
||||
* \note: only #KM_DBL_CLICK and #KM_CLICK are handled here, #KM_HOLD in #wm_window_event_clicktype_init (wm_window.c)
|
||||
* \note: only #KM_DBL_CLICK is handled here, rest in #wm_window_event_clicktype_init (wm_window.c)
|
||||
*/
|
||||
static void wm_event_clicktype_init(wmWindow *win, wmEvent *event, wmEvent *event_state)
|
||||
{
|
||||
@ -3025,16 +3025,6 @@ static void wm_event_clicktype_init(wmWindow *win, wmEvent *event, wmEvent *even
|
||||
}
|
||||
}
|
||||
|
||||
/* click */
|
||||
if ((PIL_check_seconds_timer() - event->click_time) * 1000 <= U.click_timeout) {
|
||||
if (event->val == KM_RELEASE) {
|
||||
click_type = KM_CLICK;
|
||||
if (G.debug & (G_DEBUG_HANDLERS | G_DEBUG_EVENTS)) {
|
||||
printf("%s Send click event\n", __func__);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (click_type != event->click_type) {
|
||||
event_state->click_type = event->click_type = click_type;
|
||||
}
|
||||
|
@ -1107,9 +1107,9 @@ static int ghost_event_proc(GHOST_EventHandle evt, GHOST_TUserDataPtr C_void_ptr
|
||||
}
|
||||
|
||||
/**
|
||||
* #KM_DBL_CLICK and #KM_CLICK are set in wm_event_clicktype_init (wm_event_system.c)
|
||||
* Normally, #KM_HOLD should be there too, but we need a time precision of a few
|
||||
* milliseconds for it, which we can't get from there
|
||||
* #KM_DBL_CLICK is set in wm_event_clicktype_init (wm_event_system.c)
|
||||
* Normally, this should be there too, but for #KM_CLICK/#KM_HOLD, we need a
|
||||
* time precision of a few milliseconds, which we can't get from there
|
||||
*/
|
||||
static void wm_window_event_clicktype_init(const bContext *C)
|
||||
{
|
||||
@ -1150,7 +1150,14 @@ static void wm_window_event_clicktype_init(const bContext *C)
|
||||
|
||||
/* the actual test */
|
||||
if ((PIL_check_seconds_timer() - event->click_time) * 1000 <= U.click_timeout) {
|
||||
/* sending of KM_CLICK is handled in wm_event_clicktype_init (wm_event_system.c) */
|
||||
/* for any reason some X11 systems send two release events triggering two KM_CLICK
|
||||
* events - making the rules more strict by checking for prevval resolves this */
|
||||
if (event->val == KM_RELEASE && event->prevval != KM_RELEASE) {
|
||||
click_type = KM_CLICK;
|
||||
if (G.debug & (G_DEBUG_HANDLERS | G_DEBUG_EVENTS)) {
|
||||
printf("%s Send click event\n", __func__);
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (event->is_key_pressed) {
|
||||
click_type = KM_HOLD;
|
||||
|
Loading…
Reference in New Issue
Block a user