randr - add response timeout config value

This commit is contained in:
Carsten Haitzler 2020-06-20 01:50:03 +01:00
parent e8f5794b81
commit ddc9ff7280
3 changed files with 41 additions and 2 deletions

View File

@ -1,6 +1,6 @@
#include "e.h"
#define E_RANDR_CONFIG_VERSION 2
#define E_RANDR_CONFIG_VERSION 3
/////////////////////////////////////////////////////////////////////////
static Eina_Bool _screen_closed(E_Randr2_Screen *s);
@ -83,6 +83,7 @@ e_randr2_init(void)
#define D _e_randr2_cfg_edd
E_CONFIG_VAL(D, T, version, INT);
E_CONFIG_LIST(D, T, screens, _e_randr2_cfg_screen_edd);
E_CONFIG_VAL(D, T, hotplug_response, DOUBLE);
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);
@ -349,6 +350,9 @@ _config_upgrade(E_Config_Randr2 *cfg)
{
if (cfg->version < 2)
cfg->default_policy = E_RANDR2_POLICY_EXTEND;
if (cfg->version < 3)
cfg->hotplug_response = 1.0;
cfg->version = E_RANDR_CONFIG_VERSION;
}
static E_Config_Randr2 *
@ -362,6 +366,10 @@ _config_load(void)
{
if (cfg->version < E_RANDR_CONFIG_VERSION)
_config_upgrade(cfg);
if (cfg->hotplug_response < 0.2)
cfg->hotplug_response = 0.2;
else if (cfg->hotplug_response > 9.0)
cfg->hotplug_response = 9.0;
printf("RRR: loaded existing config\n");
return cfg;
}
@ -374,6 +382,7 @@ _config_load(void)
cfg->ignore_hotplug_events = 0;
cfg->ignore_acpi_events = 0;
cfg->default_policy = E_RANDR2_POLICY_EXTEND;
cfg->hotplug_response = 1.0;
printf("RRR: fresh config\n");
return cfg;
}
@ -1403,7 +1412,13 @@ e_randr2_screen_refresh_queue(Eina_Bool lid_event)
if (_screen_delay_timer)
ecore_timer_loop_reset(_screen_delay_timer);
else
_screen_delay_timer = ecore_timer_loop_add(1.0, _cb_screen_change_delay, NULL);
{
double t = 1.0;
if ((e_randr2_cfg) && (e_randr2_cfg->hotplug_response > 0.2))
t = e_randr2_cfg->hotplug_response;
_screen_delay_timer = ecore_timer_loop_add(t, _cb_screen_change_delay, NULL);
}
event_screen |= !!lid_event;
}

View File

@ -102,6 +102,7 @@ struct _E_Config_Randr2
unsigned char ignore_hotplug_events;
unsigned char ignore_acpi_events;
E_Randr2_Policy default_policy;
double hotplug_response;
};
struct _E_Config_Randr2_Screen

View File

@ -33,6 +33,7 @@ struct _E_Config_Dialog_Data
int hotplug;
int acpi;
int screen;
double hotplug_response;
E_Randr2_Policy policy;
};
@ -105,6 +106,7 @@ _create_data(E_Config_Dialog *cfd EINA_UNUSED)
cfdata->hotplug = !e_randr2_cfg->ignore_hotplug_events;
cfdata->acpi = !e_randr2_cfg->ignore_acpi_events;
cfdata->policy = e_randr2_cfg->default_policy;
cfdata->hotplug_response = e_randr2_cfg->hotplug_response;
return cfdata;
}
@ -128,6 +130,14 @@ _free_data(E_Config_Dialog *cfd EINA_UNUSED, E_Config_Dialog_Data *cfdata)
E_FREE(cfdata);
}
static void
_cb_hotplug_response_changed(void *data EINA_UNUSED, Evas_Object *obj, void *event EINA_UNUSED)
{
E_Config_Dialog_Data *cfdata = data;
cfdata->hotplug_response = elm_slider_value_get(obj);
e_config_dialog_changed_set(cfdata->cfd, EINA_TRUE);
}
static void
_cb_restore_changed(void *data EINA_UNUSED, Evas_Object *obj, void *event EINA_UNUSED)
{
@ -1104,6 +1114,18 @@ _basic_create(E_Config_Dialog *cfd, Evas *evas EINA_UNUSED, E_Config_Dialog_Data
evas_object_show(o);
bx2 = o;
o = elm_slider_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, _("Response"));
elm_slider_unit_format_set(o, "%1.1f sec");
elm_slider_span_size_set(o, 88);
elm_slider_min_max_set(o, 0.2, 9.0);
elm_slider_value_set(o, cfdata->hotplug_response);
elm_box_pack_end(bx2, o);
evas_object_show(o);
evas_object_smart_callback_add(o, "changed", _cb_hotplug_response_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);
@ -1160,6 +1182,7 @@ _basic_apply(E_Config_Dialog *cfd EINA_UNUSED, E_Config_Dialog_Data *cfdata)
e_randr2_cfg->ignore_hotplug_events = !cfdata->hotplug;
e_randr2_cfg->ignore_acpi_events = !cfdata->acpi;
e_randr2_cfg->default_policy = cfdata->policy;
e_randr2_cfg->hotplug_response = cfdata->hotplug_response;
printf("APPLY....................\n");
EINA_LIST_FOREACH(cfdata->screens, l, cs2)