raster pushed a commit to branch master.

http://git.enlightenment.org/core/enlightenment.git/commit/?id=da4d1ecfe8626f4afd6af521366974f19862b2f0

commit da4d1ecfe8626f4afd6af521366974f19862b2f0
Author: Carsten Haitzler (Rasterman) <ras...@rasterman.com>
Date:   Thu Apr 9 15:44:07 2015 +0900

    add options to randr2 to ignore acpi and hotplug randr events.
---
 src/bin/e_randr2.c                           | 30 +++++++++++----
 src/bin/e_randr2.h                           |  2 +
 src/modules/conf_randr/e_int_config_randr2.c | 55 ++++++++++++++++++++++++++--
 3 files changed, 77 insertions(+), 10 deletions(-)

diff --git a/src/bin/e_randr2.c b/src/bin/e_randr2.c
index 698b819..3b1c77b 100644
--- a/src/bin/e_randr2.c
+++ b/src/bin/e_randr2.c
@@ -97,6 +97,8 @@ e_randr2_init(void)
    E_CONFIG_VAL(D, T, version, INT);
    E_CONFIG_LIST(D, T, screens, _e_randr2_cfg_screen_edd);
    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();
    // 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->screens = NULL;
    cfg->restore = 1;
+   cfg->ignore_hotplug_events = 0;
+   cfg->ignore_acpi_events = 0;
    printf("RRR: fresh config\n");
    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;
    printf("RRR: lid event for lid %i\n", lid_closed);
    _lid_is_closed = lid_closed;
-   event_screen = EINA_TRUE;
-   _screen_change_delay();
+   if (!e_randr2_cfg->ignore_acpi_events)
+     {
+        event_screen = EINA_TRUE;
+        _screen_change_delay();
+     }
    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;
    printf("RRR: CB screen change...\n");
-   event_screen = EINA_TRUE;
    ecore_x_randr_config_timestamp_get(ev->root);
    ecore_x_randr_screen_current_size_get(ev->root, NULL, NULL, NULL, NULL);
    ecore_x_sync();
-   _screen_change_delay();
+   if (!e_randr2_cfg->ignore_hotplug_events)
+     {
+        event_screen = EINA_TRUE;
+        _screen_change_delay();
+     }
    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_screen_current_size_get(ev->win, NULL, NULL, NULL, NULL);
    ecore_x_sync();
-   _screen_change_delay();
+   if (!e_randr2_cfg->ignore_hotplug_events)
+     {
+        _screen_change_delay();
+     }
    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;
    printf("RRR: CB output change...\n");
-   event_screen = EINA_TRUE;
    ecore_x_randr_config_timestamp_get(ev->win);
    ecore_x_randr_screen_current_size_get(ev->win, NULL, NULL, NULL, NULL);
    ecore_x_sync();
-   _screen_change_delay();
+   if (!e_randr2_cfg->ignore_hotplug_events)
+     {
+        event_screen = EINA_TRUE;
+        _screen_change_delay();
+     }
    return EINA_TRUE;
 }
 
diff --git a/src/bin/e_randr2.h b/src/bin/e_randr2.h
index ab7aa0b..41480cc 100644
--- a/src/bin/e_randr2.h
+++ b/src/bin/e_randr2.h
@@ -91,6 +91,8 @@ struct _E_Config_Randr2
    int            version;
    Eina_List     *screens;
    unsigned char  restore;
+   unsigned char  ignore_hotplug_events;
+   unsigned char  ignore_acpi_events;
 };
 
 struct _E_Config_Randr2_Screen
diff --git a/src/modules/conf_randr/e_int_config_randr2.c 
b/src/modules/conf_randr/e_int_config_randr2.c
index f823fdb..78a99d4 100644
--- a/src/modules/conf_randr/e_int_config_randr2.c
+++ b/src/modules/conf_randr/e_int_config_randr2.c
@@ -23,6 +23,8 @@ struct _E_Config_Dialog_Data
    Evas_Object *rel_to_obj;
    Evas_Object *rel_align_obj;
    int restore;
+   int hotplug;
+   int acpi;
    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;
    cfdata->restore = e_randr2_cfg->restore;
+   cfdata->hotplug = !e_randr2_cfg->ignore_hotplug_events;
+   cfdata->acpi = !e_randr2_cfg->ignore_acpi_events;
    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);
 }
 
+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 *
 _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)
 {
    Evas_Object *win = cfd->dia->win;
-   Evas_Object *o, *bx, *tb;
+   Evas_Object *o, *bx, *tb, *bx2;
    Eina_List *l;
    E_Randr2_Screen *s, *first = 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);
 
+   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);
    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, "Restore setup on start");
-   elm_check_state_set(o, e_randr2_cfg->restore);
-   elm_box_pack_end(bx, o);
+   elm_check_state_set(o, cfdata->restore);
+   elm_box_pack_end(bx2, o);
    evas_object_show(o);
    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));
 
    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_randr2_cfg->restore = cfdata->restore;
+   e_randr2_cfg->ignore_hotplug_events = !cfdata->hotplug;
+   e_randr2_cfg->ignore_acpi_events = !cfdata->acpi;
+
    printf("APPLY....................\n");
    EINA_LIST_FOREACH(cfdata->screens, l, cs2)
      {

-- 


Reply via email to