From d910829930a58518e614b3114ef2863935529f8f Mon Sep 17 00:00:00 2001
From: June Tate-Gans <june@theonelab.com>
Date: Sun, 25 Apr 2021 14:33:48 -0500
Subject: [PATCH] g13d: More C++11 iteration and exit on no more managed
 devices

Since we start from udev/systemd these days, we should exit when we don't have
any more devices to manage, and let udev/systemd manage things when a new one is
connected.
---
 g13d/g13.cc | 19 ++++++++++++-------
 1 file changed, 12 insertions(+), 7 deletions(-)

diff --git a/g13d/g13.cc b/g13d/g13.cc
index 0d68910..0bdb429 100644
--- a/g13d/g13.cc
+++ b/g13d/g13.cc
@@ -734,10 +734,12 @@ int G13_Manager::run() {
     return 1;
   }
 
-  for (int i = 0; i < g13s.size(); i++) {
-    g13s[i]->register_context(ctx);
+  for (auto device : g13s) {
+    device->register_context(ctx);
   }
+
   signal(SIGINT, set_stop);
+
   if (g13s.size() > 0 && logo_filename.size()) {
     g13s[0]->write_lcd_file(logo_filename);
   }
@@ -753,13 +755,16 @@ int G13_Manager::run() {
 
   do {
     if (g13s.size() > 0)
-      for (int i = 0; i < g13s.size(); i++) {
-        int status = g13s[i]->read_keys();
-        g13s[i]->read_commands();
-        if (status < 0)
+      for (auto device : g13s) {
+        int status = device->read_keys();
+        device->read_commands();
+
+        if (status < 0) {
           running = false;
+        }
       }
-  } while (running);
+  } while (running && (g13s.size() > 0));
+
   cleanup();
 
   return 0;