forked from enlightenment/enlightenment
add options to randr2 to ignore acpi and hotplug randr events.
This commit is contained in:
parent
a73d2583c5
commit
da4d1ecfe8
|
@ -97,6 +97,8 @@ e_randr2_init(void)
|
||||||
E_CONFIG_VAL(D, T, version, INT);
|
E_CONFIG_VAL(D, T, version, INT);
|
||||||
E_CONFIG_LIST(D, T, screens, _e_randr2_cfg_screen_edd);
|
E_CONFIG_LIST(D, T, screens, _e_randr2_cfg_screen_edd);
|
||||||
E_CONFIG_VAL(D, T, restore, UCHAR);
|
E_CONFIG_VAL(D, T, restore, UCHAR);
|
||||||
|
E_CONFIG_VAL(D, T, ignore_hotplug_events, UCHAR);
|
||||||
|
E_CONFIG_VAL(D, T, ignore_acpi_events, UCHAR);
|
||||||
|
|
||||||
if (!E_EVENT_RANDR_CHANGE) E_EVENT_RANDR_CHANGE = ecore_event_type_new();
|
if (!E_EVENT_RANDR_CHANGE) E_EVENT_RANDR_CHANGE = ecore_event_type_new();
|
||||||
// delay setting up acpi handler, as acpi is init'ed after randr
|
// delay setting up acpi handler, as acpi is init'ed after randr
|
||||||
|
@ -336,6 +338,8 @@ _config_load(void)
|
||||||
cfg->version = E_RANDR_CONFIG_VERSION;
|
cfg->version = E_RANDR_CONFIG_VERSION;
|
||||||
cfg->screens = NULL;
|
cfg->screens = NULL;
|
||||||
cfg->restore = 1;
|
cfg->restore = 1;
|
||||||
|
cfg->ignore_hotplug_events = 0;
|
||||||
|
cfg->ignore_acpi_events = 0;
|
||||||
printf("RRR: fresh config\n");
|
printf("RRR: fresh config\n");
|
||||||
return cfg;
|
return cfg;
|
||||||
}
|
}
|
||||||
|
@ -620,8 +624,11 @@ _cb_acpi(void *data EINA_UNUSED, int type EINA_UNUSED, void *event)
|
||||||
if (lid_closed == _lid_is_closed) return EINA_TRUE;
|
if (lid_closed == _lid_is_closed) return EINA_TRUE;
|
||||||
printf("RRR: lid event for lid %i\n", lid_closed);
|
printf("RRR: lid event for lid %i\n", lid_closed);
|
||||||
_lid_is_closed = lid_closed;
|
_lid_is_closed = lid_closed;
|
||||||
event_screen = EINA_TRUE;
|
if (!e_randr2_cfg->ignore_acpi_events)
|
||||||
_screen_change_delay();
|
{
|
||||||
|
event_screen = EINA_TRUE;
|
||||||
|
_screen_change_delay();
|
||||||
|
}
|
||||||
return EINA_TRUE;
|
return EINA_TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1412,11 +1419,14 @@ _cb_screen_change(void *data EINA_UNUSED, int type EINA_UNUSED, void *event)
|
||||||
{
|
{
|
||||||
Ecore_X_Event_Screen_Change *ev = event;
|
Ecore_X_Event_Screen_Change *ev = event;
|
||||||
printf("RRR: CB screen change...\n");
|
printf("RRR: CB screen change...\n");
|
||||||
event_screen = EINA_TRUE;
|
|
||||||
ecore_x_randr_config_timestamp_get(ev->root);
|
ecore_x_randr_config_timestamp_get(ev->root);
|
||||||
ecore_x_randr_screen_current_size_get(ev->root, NULL, NULL, NULL, NULL);
|
ecore_x_randr_screen_current_size_get(ev->root, NULL, NULL, NULL, NULL);
|
||||||
ecore_x_sync();
|
ecore_x_sync();
|
||||||
_screen_change_delay();
|
if (!e_randr2_cfg->ignore_hotplug_events)
|
||||||
|
{
|
||||||
|
event_screen = EINA_TRUE;
|
||||||
|
_screen_change_delay();
|
||||||
|
}
|
||||||
return EINA_TRUE;
|
return EINA_TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1428,7 +1438,10 @@ _cb_crtc_change(void *data EINA_UNUSED, int type EINA_UNUSED, void *event)
|
||||||
ecore_x_randr_config_timestamp_get(ev->win);
|
ecore_x_randr_config_timestamp_get(ev->win);
|
||||||
ecore_x_randr_screen_current_size_get(ev->win, NULL, NULL, NULL, NULL);
|
ecore_x_randr_screen_current_size_get(ev->win, NULL, NULL, NULL, NULL);
|
||||||
ecore_x_sync();
|
ecore_x_sync();
|
||||||
_screen_change_delay();
|
if (!e_randr2_cfg->ignore_hotplug_events)
|
||||||
|
{
|
||||||
|
_screen_change_delay();
|
||||||
|
}
|
||||||
return EINA_TRUE;
|
return EINA_TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1437,11 +1450,14 @@ _cb_output_change(void *data EINA_UNUSED, int type EINA_UNUSED, void *event)
|
||||||
{
|
{
|
||||||
Ecore_X_Event_Randr_Output_Change *ev = event;
|
Ecore_X_Event_Randr_Output_Change *ev = event;
|
||||||
printf("RRR: CB output change...\n");
|
printf("RRR: CB output change...\n");
|
||||||
event_screen = EINA_TRUE;
|
|
||||||
ecore_x_randr_config_timestamp_get(ev->win);
|
ecore_x_randr_config_timestamp_get(ev->win);
|
||||||
ecore_x_randr_screen_current_size_get(ev->win, NULL, NULL, NULL, NULL);
|
ecore_x_randr_screen_current_size_get(ev->win, NULL, NULL, NULL, NULL);
|
||||||
ecore_x_sync();
|
ecore_x_sync();
|
||||||
_screen_change_delay();
|
if (!e_randr2_cfg->ignore_hotplug_events)
|
||||||
|
{
|
||||||
|
event_screen = EINA_TRUE;
|
||||||
|
_screen_change_delay();
|
||||||
|
}
|
||||||
return EINA_TRUE;
|
return EINA_TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -91,6 +91,8 @@ struct _E_Config_Randr2
|
||||||
int version;
|
int version;
|
||||||
Eina_List *screens;
|
Eina_List *screens;
|
||||||
unsigned char restore;
|
unsigned char restore;
|
||||||
|
unsigned char ignore_hotplug_events;
|
||||||
|
unsigned char ignore_acpi_events;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct _E_Config_Randr2_Screen
|
struct _E_Config_Randr2_Screen
|
||||||
|
|
|
@ -23,6 +23,8 @@ struct _E_Config_Dialog_Data
|
||||||
Evas_Object *rel_to_obj;
|
Evas_Object *rel_to_obj;
|
||||||
Evas_Object *rel_align_obj;
|
Evas_Object *rel_align_obj;
|
||||||
int restore;
|
int restore;
|
||||||
|
int hotplug;
|
||||||
|
int acpi;
|
||||||
int screen;
|
int screen;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -79,6 +81,8 @@ _create_data(E_Config_Dialog *cfd EINA_UNUSED)
|
||||||
|
|
||||||
if (!(cfdata = E_NEW(E_Config_Dialog_Data, 1))) return NULL;
|
if (!(cfdata = E_NEW(E_Config_Dialog_Data, 1))) return NULL;
|
||||||
cfdata->restore = e_randr2_cfg->restore;
|
cfdata->restore = e_randr2_cfg->restore;
|
||||||
|
cfdata->hotplug = !e_randr2_cfg->ignore_hotplug_events;
|
||||||
|
cfdata->acpi = !e_randr2_cfg->ignore_acpi_events;
|
||||||
return cfdata;
|
return cfdata;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -108,6 +112,22 @@ _cb_restore_changed(void *data EINA_UNUSED, Evas_Object *obj, void *event EINA_U
|
||||||
e_config_dialog_changed_set(cfdata->cfd, EINA_TRUE);
|
e_config_dialog_changed_set(cfdata->cfd, EINA_TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_cb_hotplug_changed(void *data EINA_UNUSED, Evas_Object *obj, void *event EINA_UNUSED)
|
||||||
|
{
|
||||||
|
E_Config_Dialog_Data *cfdata = data;
|
||||||
|
cfdata->hotplug = elm_check_state_get(obj);
|
||||||
|
e_config_dialog_changed_set(cfdata->cfd, EINA_TRUE);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_cb_acpi_changed(void *data EINA_UNUSED, Evas_Object *obj, void *event EINA_UNUSED)
|
||||||
|
{
|
||||||
|
E_Config_Dialog_Data *cfdata = data;
|
||||||
|
cfdata->acpi = elm_check_state_get(obj);
|
||||||
|
e_config_dialog_changed_set(cfdata->cfd, EINA_TRUE);
|
||||||
|
}
|
||||||
|
|
||||||
static E_Config_Randr2_Screen *
|
static E_Config_Randr2_Screen *
|
||||||
_config_screen_find(E_Config_Dialog_Data *cfdata)
|
_config_screen_find(E_Config_Dialog_Data *cfdata)
|
||||||
{
|
{
|
||||||
|
@ -493,7 +513,7 @@ static Evas_Object *
|
||||||
_basic_create(E_Config_Dialog *cfd, Evas *evas EINA_UNUSED, E_Config_Dialog_Data *cfdata)
|
_basic_create(E_Config_Dialog *cfd, Evas *evas EINA_UNUSED, E_Config_Dialog_Data *cfdata)
|
||||||
{
|
{
|
||||||
Evas_Object *win = cfd->dia->win;
|
Evas_Object *win = cfd->dia->win;
|
||||||
Evas_Object *o, *bx, *tb;
|
Evas_Object *o, *bx, *tb, *bx2;
|
||||||
Eina_List *l;
|
Eina_List *l;
|
||||||
E_Randr2_Screen *s, *first = NULL;
|
E_Randr2_Screen *s, *first = NULL;
|
||||||
E_Config_Randr2_Screen *first_cfg = NULL;
|
E_Config_Randr2_Screen *first_cfg = NULL;
|
||||||
|
@ -687,15 +707,41 @@ _basic_create(E_Config_Dialog *cfd, Evas *evas EINA_UNUSED, E_Config_Dialog_Data
|
||||||
|
|
||||||
_basic_screen_info_fill(cfdata, first_cfg, first);
|
_basic_screen_info_fill(cfdata, first_cfg, first);
|
||||||
|
|
||||||
|
o = elm_box_add(win);
|
||||||
|
elm_box_horizontal_set(o, EINA_TRUE);
|
||||||
|
evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, 0.0);
|
||||||
|
evas_object_size_hint_align_set(o, 0.0, EVAS_HINT_FILL);
|
||||||
|
elm_box_pack_end(bx, o);
|
||||||
|
evas_object_show(o);
|
||||||
|
bx2 = o;
|
||||||
|
|
||||||
o = elm_check_add(win);
|
o = elm_check_add(win);
|
||||||
evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, 0.0);
|
evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, 0.0);
|
||||||
evas_object_size_hint_align_set(o, EVAS_HINT_FILL, EVAS_HINT_FILL);
|
evas_object_size_hint_align_set(o, EVAS_HINT_FILL, EVAS_HINT_FILL);
|
||||||
elm_object_text_set(o, "Restore setup on start");
|
elm_object_text_set(o, "Restore setup on start");
|
||||||
elm_check_state_set(o, e_randr2_cfg->restore);
|
elm_check_state_set(o, cfdata->restore);
|
||||||
elm_box_pack_end(bx, o);
|
elm_box_pack_end(bx2, o);
|
||||||
evas_object_show(o);
|
evas_object_show(o);
|
||||||
evas_object_smart_callback_add(o, "changed", _cb_restore_changed, cfdata);
|
evas_object_smart_callback_add(o, "changed", _cb_restore_changed, cfdata);
|
||||||
|
|
||||||
|
o = elm_check_add(win);
|
||||||
|
evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, 0.0);
|
||||||
|
evas_object_size_hint_align_set(o, EVAS_HINT_FILL, EVAS_HINT_FILL);
|
||||||
|
elm_object_text_set(o, "Monitor hotplug");
|
||||||
|
elm_check_state_set(o, cfdata->hotplug);
|
||||||
|
elm_box_pack_end(bx2, o);
|
||||||
|
evas_object_show(o);
|
||||||
|
evas_object_smart_callback_add(o, "changed", _cb_hotplug_changed, cfdata);
|
||||||
|
|
||||||
|
o = elm_check_add(win);
|
||||||
|
evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, 0.0);
|
||||||
|
evas_object_size_hint_align_set(o, EVAS_HINT_FILL, EVAS_HINT_FILL);
|
||||||
|
elm_object_text_set(o, "Lid Events");
|
||||||
|
elm_check_state_set(o, cfdata->acpi);
|
||||||
|
elm_box_pack_end(bx2, o);
|
||||||
|
evas_object_show(o);
|
||||||
|
evas_object_smart_callback_add(o, "changed", _cb_acpi_changed, cfdata);
|
||||||
|
|
||||||
evas_smart_objects_calculate(evas_object_evas_get(win));
|
evas_smart_objects_calculate(evas_object_evas_get(win));
|
||||||
|
|
||||||
e_util_win_auto_resize_fill(win);
|
e_util_win_auto_resize_fill(win);
|
||||||
|
@ -711,6 +757,9 @@ _basic_apply(E_Config_Dialog *cfd EINA_UNUSED, E_Config_Dialog_Data *cfdata)
|
||||||
E_Config_Randr2_Screen *cs, *cs2;
|
E_Config_Randr2_Screen *cs, *cs2;
|
||||||
|
|
||||||
e_randr2_cfg->restore = cfdata->restore;
|
e_randr2_cfg->restore = cfdata->restore;
|
||||||
|
e_randr2_cfg->ignore_hotplug_events = !cfdata->hotplug;
|
||||||
|
e_randr2_cfg->ignore_acpi_events = !cfdata->acpi;
|
||||||
|
|
||||||
printf("APPLY....................\n");
|
printf("APPLY....................\n");
|
||||||
EINA_LIST_FOREACH(cfdata->screens, l, cs2)
|
EINA_LIST_FOREACH(cfdata->screens, l, cs2)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue