forked from enlightenment/enlightenment
Record primary output in randr config.
Signed-off-by: Chris Michael <devilhorns@comcast.net>
This commit is contained in:
parent
d6a392d127
commit
9f95515926
|
@ -156,6 +156,7 @@ _e_randr_config_load(void)
|
|||
E_CONFIG_VAL(D, T, restore, UCHAR);
|
||||
E_CONFIG_VAL(D, T, poll_interval, INT);
|
||||
E_CONFIG_VAL(D, T, config_timestamp, ULL);
|
||||
E_CONFIG_VAL(D, T, primary, INT);
|
||||
|
||||
/* try to load the randr config */
|
||||
if ((e_randr_cfg = e_config_domain_load("e_randr", _e_randr_edd)))
|
||||
|
@ -232,7 +233,7 @@ _e_randr_config_new(void)
|
|||
root = ecore_x_window_root_first_get();
|
||||
|
||||
/* get which output is primary */
|
||||
primary = ecore_x_randr_primary_output_get(root);
|
||||
e_randr_cfg->primary = ecore_x_randr_primary_output_get(root);
|
||||
|
||||
/* record the current screen size in our config */
|
||||
ecore_x_randr_screen_current_size_get(root, &e_randr_cfg->screen.width,
|
||||
|
@ -277,7 +278,7 @@ _e_randr_config_new(void)
|
|||
/* assign crtc for this output */
|
||||
output_cfg->crtc = crtcs[i];
|
||||
output_cfg->exists = EINA_TRUE;
|
||||
if (outputs[j] == primary)
|
||||
if ((int)outputs[j] == e_randr_cfg->primary)
|
||||
output_cfg->primary = EINA_TRUE;
|
||||
|
||||
if (!primary)
|
||||
|
@ -288,10 +289,10 @@ _e_randr_config_new(void)
|
|||
/* if no primary is set, then we should
|
||||
* use the first output listed by xrandr */
|
||||
output_cfg->primary = EINA_TRUE;
|
||||
primary = outputs[j];
|
||||
e_randr_cfg->primary = (int)outputs[j];
|
||||
|
||||
ecore_x_randr_primary_output_set(root,
|
||||
primary);
|
||||
e_randr_cfg->primary);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -550,7 +551,8 @@ _e_randr_config_restore(void)
|
|||
crtc_cfg->orient);
|
||||
|
||||
EINA_LIST_FOREACH(valid_outputs, o, out)
|
||||
if (out->primary)
|
||||
if ((out->primary) &&
|
||||
((int)out->xid == e_randr_cfg->primary))
|
||||
{
|
||||
ecore_x_randr_primary_output_set(root, out->xid);
|
||||
break;
|
||||
|
@ -574,6 +576,7 @@ _e_randr_event_cb_screen_change(void *data EINA_UNUSED, int type EINA_UNUSED, vo
|
|||
{
|
||||
Ecore_X_Event_Screen_Change *ev;
|
||||
Eina_Bool changed = EINA_FALSE;
|
||||
Ecore_X_Randr_Output primary = 0;
|
||||
|
||||
ev = event;
|
||||
|
||||
|
@ -584,6 +587,14 @@ _e_randr_event_cb_screen_change(void *data EINA_UNUSED, int type EINA_UNUSED, vo
|
|||
if (ev->root != e_manager_current_get()->root)
|
||||
return ECORE_CALLBACK_RENEW;
|
||||
|
||||
primary = ecore_x_randr_primary_output_get(ev->root);
|
||||
|
||||
if (e_randr_cfg->primary != (int)primary)
|
||||
{
|
||||
e_randr_cfg->primary = (int)primary;
|
||||
changed = EINA_TRUE;
|
||||
}
|
||||
|
||||
if (e_randr_cfg->screen.width != ev->size.width)
|
||||
{
|
||||
printf("\tWidth Changed\n");
|
||||
|
@ -861,13 +872,7 @@ _e_randr_event_cb_output_change(void *data EINA_UNUSED, int type EINA_UNUSED, vo
|
|||
|
||||
/* if we added or removed any outputs, we need to reset */
|
||||
if ((output_new) || (output_removed))
|
||||
{
|
||||
/* we need to inform X about the changes */
|
||||
/* easier just to call the restore function with the updated config */
|
||||
/* _e_randr_config_restore(); */
|
||||
|
||||
ecore_x_randr_screen_reset(ev->win);
|
||||
}
|
||||
ecore_x_randr_screen_reset(ev->win);
|
||||
|
||||
return ECORE_CALLBACK_RENEW;
|
||||
}
|
||||
|
|
|
@ -14,7 +14,7 @@ typedef struct _E_Randr_Config E_Randr_Config;
|
|||
#define E_RANDR_VERSION_1_4 ((1 << 16) | 4)
|
||||
|
||||
#define E_RANDR_CONFIG_FILE_EPOCH 1
|
||||
#define E_RANDR_CONFIG_FILE_GENERATION 2
|
||||
#define E_RANDR_CONFIG_FILE_GENERATION 3
|
||||
#define E_RANDR_CONFIG_FILE_VERSION \
|
||||
((E_RANDR_CONFIG_FILE_EPOCH * 1000000) + E_RANDR_CONFIG_FILE_GENERATION)
|
||||
|
||||
|
@ -56,6 +56,7 @@ struct _E_Randr_Config
|
|||
int poll_interval;
|
||||
unsigned char restore;
|
||||
unsigned long config_timestamp;
|
||||
int primary;
|
||||
};
|
||||
|
||||
EINTERN Eina_Bool e_randr_init(void);
|
||||
|
|
Loading…
Reference in New Issue