Add code to handle setting a larger screen size
IF, when applying any saved crtc settings, we find that the current screen size is too small, then calculate a new screen size and apply it. Signed-off-by: Chris Michael <cp.michael@samsung.com>
This commit is contained in:
parent
e8f63e0bee
commit
2a38555368
|
@ -364,12 +364,17 @@ _e_randr_config_restore(void)
|
||||||
Ecore_X_Window root = 0;
|
Ecore_X_Window root = 0;
|
||||||
Ecore_X_Randr_Crtc *crtcs;
|
Ecore_X_Randr_Crtc *crtcs;
|
||||||
int ncrtcs = 0;
|
int ncrtcs = 0;
|
||||||
|
int sw = 0, sh = 0;
|
||||||
|
|
||||||
printf("E_RANDR Restore\n");
|
printf("E_RANDR Restore\n");
|
||||||
|
|
||||||
/* grab the root window */
|
/* grab the root window */
|
||||||
root = ecore_x_window_root_first_get();
|
root = ecore_x_window_root_first_get();
|
||||||
|
|
||||||
|
/* get the current screen size */
|
||||||
|
ecore_x_randr_screen_current_size_get(root, &sw, &sh, NULL, NULL);
|
||||||
|
printf("\tCurrent Screen Size: %d %d\n", sw, sh);
|
||||||
|
|
||||||
/* set the screen size */
|
/* set the screen size */
|
||||||
/* NB: Disabled for now as our saved screen size may not be valid
|
/* NB: Disabled for now as our saved screen size may not be valid
|
||||||
* if any of our saved outputs are missing in X */
|
* if any of our saved outputs are missing in X */
|
||||||
|
@ -521,6 +526,7 @@ _e_randr_config_restore(void)
|
||||||
Ecore_X_Randr_Output *couts;
|
Ecore_X_Randr_Output *couts;
|
||||||
Eina_List *o;
|
Eina_List *o;
|
||||||
E_Randr_Output_Config *out;
|
E_Randr_Output_Config *out;
|
||||||
|
Eina_Bool need_size_set = EINA_FALSE;
|
||||||
|
|
||||||
couts = malloc(ocount * sizeof(Ecore_X_Randr_Output));
|
couts = malloc(ocount * sizeof(Ecore_X_Randr_Output));
|
||||||
EINA_LIST_FOREACH(valid_outputs, o, out)
|
EINA_LIST_FOREACH(valid_outputs, o, out)
|
||||||
|
@ -529,13 +535,53 @@ _e_randr_config_restore(void)
|
||||||
c++;
|
c++;
|
||||||
}
|
}
|
||||||
|
|
||||||
printf("\t\t\t\t\tCrtc Settings: %d %d %d %d\n", crtc_cfg->xid,
|
switch (crtc_cfg->orient)
|
||||||
crtc_cfg->x, crtc_cfg->y, crtc_cfg->mode);
|
{
|
||||||
|
case ECORE_X_RANDR_ORIENTATION_ROT_0:
|
||||||
|
case ECORE_X_RANDR_ORIENTATION_ROT_180:
|
||||||
|
if (sw < (crtc_cfg->x + crtc_cfg->width))
|
||||||
|
{
|
||||||
|
sw += crtc_cfg->width;
|
||||||
|
need_size_set = EINA_TRUE;
|
||||||
|
}
|
||||||
|
if (sh < (crtc_cfg->y + crtc_cfg->height))
|
||||||
|
{
|
||||||
|
sh = (crtc_cfg->y + crtc_cfg->height);
|
||||||
|
need_size_set = EINA_TRUE;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case ECORE_X_RANDR_ORIENTATION_ROT_90:
|
||||||
|
case ECORE_X_RANDR_ORIENTATION_ROT_270:
|
||||||
|
if (sw < (crtc_cfg->x + crtc_cfg->width))
|
||||||
|
{
|
||||||
|
sw = (crtc_cfg->x + crtc_cfg->width);
|
||||||
|
need_size_set = EINA_TRUE;
|
||||||
|
}
|
||||||
|
if (sh < (crtc_cfg->y + crtc_cfg->height))
|
||||||
|
{
|
||||||
|
sh += crtc_cfg->height;
|
||||||
|
need_size_set = EINA_TRUE;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
/* Evas_Coord mw, mh; */
|
if (need_size_set)
|
||||||
/* get the size of the mode */
|
{
|
||||||
/* ecore_x_randr_mode_size_get(root, crtc_cfg->mode, &mw, &mh); */
|
|
||||||
/* printf("\t\t\t\t\t\tMode Size: %d %d\n", mw, mh); */
|
printf("\t\t\t\t\tNew Screen Size: %d %d\n",
|
||||||
|
sw, sh);
|
||||||
|
ecore_x_randr_screen_current_size_set(root,
|
||||||
|
sw, sh,
|
||||||
|
-1, -1);
|
||||||
|
need_size_set = EINA_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("\t\t\t\t\tCrtc Settings: %d %d %d %d %d %d\n",
|
||||||
|
crtc_cfg->xid, crtc_cfg->x, crtc_cfg->y,
|
||||||
|
crtc_cfg->width, crtc_cfg->height,
|
||||||
|
crtc_cfg->mode);
|
||||||
|
|
||||||
ecore_x_randr_crtc_settings_set(root, crtc_cfg->xid,
|
ecore_x_randr_crtc_settings_set(root, crtc_cfg->xid,
|
||||||
couts, ocount,
|
couts, ocount,
|
||||||
|
@ -806,6 +852,7 @@ _e_randr_event_cb_output_change(void *data EINA_UNUSED, int type EINA_UNUSED, vo
|
||||||
if ((crtc_cfg = _e_randr_config_output_crtc_find(output_cfg)))
|
if ((crtc_cfg = _e_randr_config_output_crtc_find(output_cfg)))
|
||||||
{
|
{
|
||||||
Ecore_X_Randr_Mode mode;
|
Ecore_X_Randr_Mode mode;
|
||||||
|
int ocount, c = 0;
|
||||||
|
|
||||||
/* we found a valid crtc for this output */
|
/* we found a valid crtc for this output */
|
||||||
output_cfg->crtc = crtc_cfg->xid;
|
output_cfg->crtc = crtc_cfg->xid;
|
||||||
|
@ -831,10 +878,7 @@ _e_randr_event_cb_output_change(void *data EINA_UNUSED, int type EINA_UNUSED, vo
|
||||||
crtc_cfg->outputs =
|
crtc_cfg->outputs =
|
||||||
eina_list_append(crtc_cfg->outputs, output_cfg);
|
eina_list_append(crtc_cfg->outputs, output_cfg);
|
||||||
|
|
||||||
printf("APPLY NEW OUTPUT: %d\n", output_cfg->xid);
|
|
||||||
/* tell X about this new output */
|
/* tell X about this new output */
|
||||||
int ocount, c = 0;
|
|
||||||
|
|
||||||
ocount = eina_list_count(crtc_cfg->outputs);
|
ocount = eina_list_count(crtc_cfg->outputs);
|
||||||
printf("\tNum Outputs: %d\n", ocount);
|
printf("\tNum Outputs: %d\n", ocount);
|
||||||
|
|
||||||
|
@ -854,11 +898,6 @@ _e_randr_event_cb_output_change(void *data EINA_UNUSED, int type EINA_UNUSED, vo
|
||||||
printf("\tCrtc Settings: %d %d %d %d\n", crtc_cfg->xid,
|
printf("\tCrtc Settings: %d %d %d %d\n", crtc_cfg->xid,
|
||||||
crtc_cfg->x, crtc_cfg->y, crtc_cfg->mode);
|
crtc_cfg->x, crtc_cfg->y, crtc_cfg->mode);
|
||||||
|
|
||||||
/* Evas_Coord mw, mh; */
|
|
||||||
/* get the size of the mode */
|
|
||||||
/* ecore_x_randr_mode_size_get(root, crtc_cfg->mode, &mw, &mh); */
|
|
||||||
/* printf("\t\t\t\t\t\tMode Size: %d %d\n", mw, mh); */
|
|
||||||
|
|
||||||
ecore_x_randr_crtc_settings_set(ev->win, crtc_cfg->xid,
|
ecore_x_randr_crtc_settings_set(ev->win, crtc_cfg->xid,
|
||||||
couts, ocount,
|
couts, ocount,
|
||||||
crtc_cfg->x,
|
crtc_cfg->x,
|
||||||
|
|
Loading…
Reference in New Issue