This is an automated email from the git hooks/post-receive script.

git pushed a commit to branch master
in repository enlightenment.

View the commit online.

commit d7470837144eff2a1de5a66cdab347f76540aa1b
Author: Carsten Haitzler <ras...@rasterman.com>
AuthorDate: Thu May 30 18:45:12 2024 +0100

    randr - add "use output" option to use output name (or not)
    
    @feat
---
 src/bin/e_randr2.c                           | 100 ++++++++++++++++++++++++---
 src/bin/e_randr2.h                           |   1 +
 src/modules/conf_randr/e_int_config_randr2.c |  20 ++++++
 3 files changed, 113 insertions(+), 8 deletions(-)

diff --git a/src/bin/e_randr2.c b/src/bin/e_randr2.c
index 24bc464e6..80807b912 100644
--- a/src/bin/e_randr2.c
+++ b/src/bin/e_randr2.c
@@ -91,6 +91,7 @@ e_randr2_init(void)
    E_CONFIG_VAL(D, T, hotplug_response, DOUBLE);
    E_CONFIG_VAL(D, T, restore, UCHAR);
    E_CONFIG_VAL(D, T, use_cmd, UCHAR);
+   E_CONFIG_VAL(D, T, ignore_output, UCHAR);
    E_CONFIG_VAL(D, T, ignore_hotplug_events, UCHAR);
    E_CONFIG_VAL(D, T, ignore_acpi_events, UCHAR);
    E_CONFIG_VAL(D, T, default_policy, UINT);
@@ -395,6 +396,7 @@ _config_load(void)
    cfg->screens = NULL;
    cfg->restore = 1;
    cfg->use_cmd = 0;
+   cfg->ignore_output = 0;
    cfg->ignore_hotplug_events = 0;
    cfg->ignore_acpi_events = 0;
    cfg->default_policy = E_RANDR2_POLICY_EXTEND;
@@ -644,9 +646,20 @@ _config_screen_match_count(E_Randr2 *r, E_Config_Randr2 *cfg)
         if (!cs->id) continue;
         EINA_LIST_FOREACH(r->screens, ll, s)
           {
+             const char *s1, *s2;
+
              if ((!s->id) || (!s->info.connected) ||
                  (_screen_closed(s))) continue;
-             if (!strcmp(cs->id, s->id)) count++;
+             s1 = cs->id;
+             s2 = s->id;
+             if ((e_randr2_cfg) && (e_randr2_cfg->ignore_output))
+               {
+                  s1 = strchr(cs->id, '/');
+                  if (!s1) s1 = cs->id;
+                  s2 = strchr(s->id, '/');
+                  if (!s2) s2 = s->id;
+               }
+             if (!strcmp(s1, s2)) count++;
           }
      }
    return count;
@@ -667,10 +680,18 @@ _screens_fingerprint(E_Randr2 *r)
         if (!s->id) eina_strbuf_append(buf, ":NULL:");
         else
           {
+             const char *s1;
+
              eina_strbuf_append(buf, ":");
-             eina_strbuf_append(buf, s->id);
+             s1 = s->id;
+             if ((e_randr2_cfg) && (e_randr2_cfg->ignore_output))
+               {
+                  s1 = strchr(s->id, '/');
+                  if (!s1) s1 = s->id;
+               }
+             eina_strbuf_append(buf, s1);
              eina_strbuf_append(buf, ":");
-// Don't do this asbecause this forces a screen replug when you open and
+// Don't do this because this forces a screen replug when you open and
 // close your laptop lid and if that is the only thing you open or close...
 //             if (s->info.lid_closed) eina_strbuf_append(buf, ":LC:");
 //             else eina_strbuf_append(buf, ":LO:");
@@ -733,7 +754,23 @@ _screens_differ(E_Randr2 *r1, E_Randr2 *r2)
                printf("RRR: look at r1 screen ID %s\n", ss->id);
              else
                printf("RRR: look at r1 screen ID NIL\n");
-             if ((ss->id) && (!strcmp(s->id, ss->id))) break;
+
+             if (ss->id)
+               {
+                  const char *ss1, *ss2;
+
+                  ss1 = s->id;
+                  ss2 = ss->id;
+                  if ((e_randr2_cfg) && (e_randr2_cfg->ignore_output))
+                    {
+                       ss1 = strchr(s->id, '/');
+                       if (!ss1) ss1 = s->id;
+                       ss2 = strchr(ss->id, '/');
+                       if (!ss2) ss2 = ss->id;
+                    }
+
+                  if (!strcmp(ss1, ss2)) break;
+               }
              ss = NULL;
           }
         if (!ss)
@@ -973,7 +1010,19 @@ _screen_id_find(const char *id)
    Eina_List *l;
    EINA_LIST_FOREACH(e_randr2->screens, l, s)
      {
-        if (!strcmp(s->id, id)) return s;
+        const char *s1, *s2;
+
+        s1 = s->id;
+        s2 = id;
+        if ((e_randr2_cfg) && (e_randr2_cfg->ignore_output))
+          {
+             s1 = strchr(s->id, '/');
+             if (!s1) s1 = s->id;
+             s2 = strchr(id, '/');
+             if (!s2) s2 = id;
+          }
+
+        if (!strcmp(s1, s2)) return s;
      }
    return NULL;
 }
@@ -1001,8 +1050,21 @@ _config_screen_string_find(E_Config_Randr2 *cfg, const char *id)
    if ((!id) || (!cfg)) return NULL;
    EINA_LIST_FOREACH(cfg->screens, l, cs)
      {
+        const char *s1, *s2;
+
         if (!cs->id) continue;
-        if (!strcmp(cs->id, id)) return cs;
+
+        s1 = cs->id;
+        s2 = id;
+        if ((e_randr2_cfg) && (e_randr2_cfg->ignore_output))
+          {
+             s1 = strchr(cs->id, '/');
+             if (!s1) s1 = cs->id;
+             s2 = strchr(id, '/');
+             if (!s2) s2 = id;
+          }
+
+        if (!strcmp(s1, s2)) return cs;
      }
    return NULL;
 }
@@ -1482,8 +1544,19 @@ e_randr2_config_screen_find(E_Randr2_Screen *s, E_Config_Randr2 *cfg)
    if (!s->id) return NULL;
    EINA_LIST_FOREACH(cfg->screens, l, cs)
      {
+        const char *s1, *s2;
+
         if (!cs->id) continue;
-        if (!strcmp(cs->id, s->id)) return cs;
+        s1 = cs->id;
+        s2 = s->id;
+        if ((e_randr2_cfg) && (e_randr2_cfg->ignore_output))
+          {
+             s1 = strchr(cs->id, '/');
+             if (!s1) s1 = cs->id;
+             s2 = strchr(s->id, '/');
+             if (!s2) s2 = s->id;
+          }
+        if (!strcmp(s1, s2)) return cs;
      }
    return NULL;
 }
@@ -1615,7 +1688,18 @@ e_randr2_screen_id_find(const char *id)
    if (!id) return NULL;
    EINA_LIST_FOREACH(e_randr2->screens, l, s)
      {
-        if (!strcmp(id, s->id)) return s;
+        const char *s1, *s2;
+
+        s1 = id;
+        s2 = s->id;
+        if ((e_randr2_cfg) && (e_randr2_cfg->ignore_output))
+          {
+             s1 = strchr(id, '/');
+             if (!s1) s1 = id;
+             s2 = strchr(s->id, '/');
+             if (!s2) s2 = s->id;
+          }
+        if (!strcmp(s1, s2)) return s;
      }
    return NULL;
 }
diff --git a/src/bin/e_randr2.h b/src/bin/e_randr2.h
index 9d36af328..8af4492b8 100644
--- a/src/bin/e_randr2.h
+++ b/src/bin/e_randr2.h
@@ -103,6 +103,7 @@ struct _E_Config_Randr2
    unsigned char  ignore_hotplug_events;
    unsigned char  ignore_acpi_events;
    unsigned char  use_cmd;
+   unsigned char  ignore_output;
    E_Randr2_Policy default_policy;
    double         hotplug_response;
 };
diff --git a/src/modules/conf_randr/e_int_config_randr2.c b/src/modules/conf_randr/e_int_config_randr2.c
index 3a2cf6323..f1c66e645 100644
--- a/src/modules/conf_randr/e_int_config_randr2.c
+++ b/src/modules/conf_randr/e_int_config_randr2.c
@@ -31,6 +31,7 @@ struct _E_Config_Dialog_Data
    Evas_Object *policy_obj;
    int restore;
    int use_cmd;
+   int no_ignore_output;
    int hotplug;
    int acpi;
    int screen;
@@ -105,6 +106,7 @@ _create_data(E_Config_Dialog *cfd EINA_UNUSED)
    if (cfd->data) cfdata->params = strdup(cfd->data);
    cfdata->restore = e_randr2_cfg->restore;
    cfdata->use_cmd = e_randr2_cfg->use_cmd;
+   cfdata->no_ignore_output = !e_randr2_cfg->ignore_output;
    cfdata->hotplug = !e_randr2_cfg->ignore_hotplug_events;
    cfdata->acpi = !e_randr2_cfg->ignore_acpi_events;
    cfdata->policy = e_randr2_cfg->default_policy;
@@ -157,6 +159,14 @@ _cb_use_cmd_changed(void *data EINA_UNUSED, Evas_Object *obj, void *event EINA_U
    e_config_dialog_changed_set(cfdata->cfd, EINA_TRUE);
 }
 
+static void
+_cb_no_ignore_output_changed(void *data EINA_UNUSED, Evas_Object *obj, void *event EINA_UNUSED)
+{
+   E_Config_Dialog_Data *cfdata = data;
+   cfdata->no_ignore_output = elm_check_state_get(obj);
+   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)
 {
@@ -1204,6 +1214,15 @@ _basic_create(E_Config_Dialog *cfd, Evas *evas EINA_UNUSED, E_Config_Dialog_Data
    evas_object_show(o);
    evas_object_smart_callback_add(o, "changed", _cb_use_cmd_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, _("Use output"));
+   elm_check_state_set(o, cfdata->no_ignore_output);
+   elm_box_pack_end(bx2, o);
+   evas_object_show(o);
+   evas_object_smart_callback_add(o, "changed", _cb_no_ignore_output_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);
@@ -1249,6 +1268,7 @@ _basic_apply(E_Config_Dialog *cfd EINA_UNUSED, E_Config_Dialog_Data *cfdata)
 
    e_randr2_cfg->restore = cfdata->restore;
    e_randr2_cfg->use_cmd = cfdata->use_cmd;
+   e_randr2_cfg->ignore_output = !cfdata->no_ignore_output;
    e_randr2_cfg->ignore_hotplug_events = !cfdata->hotplug;
    e_randr2_cfg->ignore_acpi_events = !cfdata->acpi;
    e_randr2_cfg->default_policy = cfdata->policy;

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.

Reply via email to