e randr x - move pointer to a visible screen coord if outside screens
on reconfigure if we find the pointer outside the screen region bounds it can get caught there until a warp forces it in. this is due to the barriers i added i think. this fixes that @fix
This commit is contained in:
parent
373b4c5ee1
commit
a018f8273f
|
@ -490,6 +490,8 @@ e_comp_x_randr_config_apply(void)
|
||||||
int crtcs_num = 0, outputs_num = 0, i, numout;
|
int crtcs_num = 0, outputs_num = 0, i, numout;
|
||||||
Ecore_X_Randr_Crtc_Info *info;
|
Ecore_X_Randr_Crtc_Info *info;
|
||||||
int top_priority = 0;
|
int top_priority = 0;
|
||||||
|
int px, py;
|
||||||
|
Eina_Bool fix_pointer = EINA_TRUE;
|
||||||
|
|
||||||
ecore_x_grab();
|
ecore_x_grab();
|
||||||
// set virtual resolution
|
// set virtual resolution
|
||||||
|
@ -509,6 +511,8 @@ e_comp_x_randr_config_apply(void)
|
||||||
if (nh < minh) nh = minh;
|
if (nh < minh) nh = minh;
|
||||||
ww = nw; if (nw < pw) ww = pw;
|
ww = nw; if (nw < pw) ww = pw;
|
||||||
hh = nh; if (nh < ph) hh = ph;
|
hh = nh; if (nh < ph) hh = ph;
|
||||||
|
|
||||||
|
ecore_x_pointer_xy_get(root, &px, &py);
|
||||||
ecore_x_randr_screen_current_size_set(root, ww, hh, -1, -1);
|
ecore_x_randr_screen_current_size_set(root, ww, hh, -1, -1);
|
||||||
{
|
{
|
||||||
int dww = 0, dhh = 0, dww2 = 0, dhh2 = 0;
|
int dww = 0, dhh = 0, dww2 = 0, dhh2 = 0;
|
||||||
|
@ -610,6 +614,16 @@ e_comp_x_randr_config_apply(void)
|
||||||
screenconf[i]->config.geom.y,
|
screenconf[i]->config.geom.y,
|
||||||
mode, orient))
|
mode, orient))
|
||||||
printf("RRR: failed to set crtc!!!!!!\n");
|
printf("RRR: failed to set crtc!!!!!!\n");
|
||||||
|
if (E_INSIDE(px, py,
|
||||||
|
screenconf[i]->config.geom.x,
|
||||||
|
screenconf[i]->config.geom.y,
|
||||||
|
screenconf[i]->config.geom.w,
|
||||||
|
screenconf[i]->config.geom.h))
|
||||||
|
fix_pointer = EINA_FALSE;
|
||||||
|
px = screenconf[i]->config.geom.x +
|
||||||
|
(screenconf[i]->config.geom.w / 2);
|
||||||
|
py = screenconf[i]->config.geom.y +
|
||||||
|
(screenconf[i]->config.geom.h / 2);
|
||||||
ecore_x_randr_crtc_panning_area_set
|
ecore_x_randr_crtc_panning_area_set
|
||||||
(root, crtcs[i],
|
(root, crtcs[i],
|
||||||
screenconf[i]->config.geom.x,
|
screenconf[i]->config.geom.x,
|
||||||
|
@ -644,6 +658,10 @@ e_comp_x_randr_config_apply(void)
|
||||||
ecore_x_root_screen_barriers_set(NULL, 0);
|
ecore_x_root_screen_barriers_set(NULL, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (fix_pointer)
|
||||||
|
{
|
||||||
|
ecore_x_pointer_warp(root, px, py);
|
||||||
|
}
|
||||||
free(outputs);
|
free(outputs);
|
||||||
free(crtcs);
|
free(crtcs);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue