e_input_evdev: fix wrong output-assignment 63/273663/1
authorduna.oh <duna.oh@samsung.com>
Wed, 6 Apr 2022 23:44:17 +0000 (08:44 +0900)
committerduna.oh <duna.oh@samsung.com>
Mon, 11 Apr 2022 23:48:36 +0000 (08:48 +0900)
If only one device with the capability is in the device list,
do not assign it to an external output.

Change-Id: I6e4a266d5a556463f84174a857b584d46f5b3550

src/bin/e_input_evdev.c

index 1b22f3f..2e74f1d 100644 (file)
@@ -108,6 +108,7 @@ _device_output_assign(E_Input_Evdev *edev, E_Input_Seat_Capabilities cap)
    Eina_List *l;
    Eina_Bool need_assign_output = EINA_FALSE;
    const char *output_name;
+   E_Output *output;
 
    if (!(edev->caps & cap)) return;
    if (edev->output_name) return; //already assigned
@@ -117,7 +118,8 @@ _device_output_assign(E_Input_Evdev *edev, E_Input_Seat_Capabilities cap)
    EINA_LIST_FOREACH(edev->seat->devices, l, ed)
      {
         if (!(ed->caps & cap)) continue;
-        if ((ed != edev) && (ed->output_name))
+        if (ed == edev) continue;
+        if (ed->output_name)
           {
              need_assign_output = EINA_FALSE;
              break;
@@ -126,7 +128,9 @@ _device_output_assign(E_Input_Evdev *edev, E_Input_Seat_Capabilities cap)
      }
    if (need_assign_output)
      {
-        output_name = e_output_output_id_get(e_output_find_by_index(last_output_idx));
+        output = e_output_find_by_index(last_output_idx);
+        if (!output->info.connected) return;
+        output_name = e_output_output_id_get(output);
         if (output_name) edev->output_name = eina_stringshare_add(output_name);
         ELOGF("E_INPUT_EVDEV", "Device is assigned to output:%s", NULL, output_name);
      }