From da27fcc39e187671b5e4373848f701a3d910446c Mon Sep 17 00:00:00 2001
From: Max Kellermann <max@musicpd.org>
Date: Wed, 26 Sep 2018 09:51:09 +0200
Subject: [PATCH] {Global,}Bindings: add KeyBindings constructor to simplify
 initializers

As a side effect, this works around a build failure with GCC 4.9.

Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
[Retrieved from 
https://github.com/MusicPlayerDaemon/ncmpc/commit/da27fcc39e187671b5e4373848f701a3d910446c
and updated for 0.31 (remove NEWS update)]
---
 src/Bindings.hxx       |   3 +
 src/GlobalBindings.cxx | 142 ++++++++++++++++++++---------------------
 3 files changed, 75 insertions(+), 71 deletions(-)

diff --git a/src/Bindings.hxx b/src/Bindings.hxx
index 342d951..0c630dc 100644
--- a/src/Bindings.hxx
+++ b/src/Bindings.hxx
@@ -42,6 +42,9 @@ struct KeyBinding {
 	bool modified = false;
 #endif
 
+	constexpr KeyBinding(int a, int b=0, int c=0) noexcept
+		:keys{{a, b, c}} {}
+
 	gcc_pure
 	bool HasKey(int key) const {
 		return std::find(keys.begin(), keys.end(), key) != keys.end();
diff --git a/src/GlobalBindings.cxx b/src/GlobalBindings.cxx
index b565848..8049ed2 100644
--- a/src/GlobalBindings.cxx
+++ b/src/GlobalBindings.cxx
@@ -51,110 +51,110 @@
 
 static KeyBindings global_key_bindings{{{
 #ifdef ENABLE_KEYDEF_SCREEN
-	{ {'K', 0, 0 } },
+	{'K'},
 #endif
-	{ { 'q', 'Q', C('C') } },
+	{'q', 'Q', C('C')},
 
 	/* movement */
-	{ { UP, 'k', 0 } },
-	{ { DWN, 'j', 0 } },
-	{ { 'H', 0, 0 } },
-	{ { 'M', 0, 0 } },
-	{ { 'L', 0, 0 } },
-	{ { HOME, C('A'), 0 } },
-	{ { END, C('E'), 0 } },
-	{ { PGUP, 0, 0 } },
-	{ { PGDN, 0, 0 } },
-	{ { 'v',  0, 0 } },
-	{ { C('N'),  0, 0 } },
-	{ { C('B'),  0, 0 } },
-	{ { 'N',  0, 0 } },
-	{ { 'B',  0, 0 } },
-	{ { 'l', 0, 0 } },
+	{UP, 'k'},
+	{DWN, 'j'},
+	{'H'},
+	{'M'},
+	{'L'},
+	{HOME, C('A')},
+	{END, C('E')},
+	{PGUP},
+	{PGDN},
+	{'v',  0},
+	{C('N'),  0},
+	{C('B'),  0},
+	{'N',  0},
+	{'B',  0},
+	{'l'},
 
 	/* basic screens */
-	{ { '1', F1, 'h' } },
-	{ { '2', F2, 0 } },
-	{ { '3', F3, 0 } },
+	{'1', F1, 'h'},
+	{'2', F2},
+	{'3', F3},
 
 	/* player commands */
-	{ { RET, 0, 0 } },
-	{ { 'P', 0, 0 } },
-	{ { 's', BS, 0 } },
-	{ { 'o', 0, 0 } },
-	{ { '>', 0, 0 } },
-	{ { '<', 0, 0 } },
-	{ { 'f', 0, 0 } },
-	{ { 'b', 0, 0 } },
-	{ { '+', RGHT, 0 } },
-	{ { '-', LEFT, 0 } },
-	{ { ' ', 0, 0 } },
-	{ { 't', 0, 0 } },
-	{ { DEL, 'd', 0 } },
-	{ { 'Z', 0, 0 } },
-	{ { 'c', 0, 0 } },
-	{ { 'r', 0, 0 } },
-	{ { 'z', 0, 0 } },
-	{ { 'y', 0, 0 } },
-	{ { 'C', 0, 0 } },
-	{ { 'x', 0, 0 } },
-	{ { C('U'), 0, 0 } },
-	{ { 'S', 0, 0 } },
-	{ { 'a', 0, 0 } },
-
-	{ { '!', 0, 0 } },
-	{ { '"', 0, 0 } },
-
-	{ { 'G', 0, 0 } },
+	{RET},
+	{'P'},
+	{'s', BS},
+	{'o'},
+	{'>'},
+	{'<'},
+	{'f'},
+	{'b'},
+	{'+', RGHT},
+	{'-', LEFT},
+	{' '},
+	{'t'},
+	{DEL, 'd'},
+	{'Z'},
+	{'c'},
+	{'r'},
+	{'z'},
+	{'y'},
+	{'C'},
+	{'x'},
+	{C('U')},
+	{'S'},
+	{'a'},
+
+	{'!'},
+	{'"'},
+
+	{'G'},
 
 	/* lists */
-	{ { C('K'), 0, 0 } },
-	{ { C('J'), 0, 0 } },
-	{ { C('L'), 0, 0 } },
+	{C('K')},
+	{C('J')},
+	{C('L')},
 
 
 	/* ncmpc options */
-	{ { 'w', 0, 0 } },
-	{ { 'U', 0, 0 } },
+	{'w'},
+	{'U'},
 
 	/* change screen */
-	{ { TAB, 0, 0 } },
-	{ { STAB, 0, 0 } },
-	{ { '`', 0, 0 } },
+	{TAB},
+	{STAB},
+	{'`'},
 
 
 	/* find */
-	{ { '/', 0, 0 } },
-	{ { 'n', 0, 0 } },
-	{ { '?', 0, 0 } },
-	{ { 'p', 0, 0 } },
-	{ { '.', 0, 0 } },
+	{'/'},
+	{'n'},
+	{'?'},
+	{'p'},
+	{'.'},
 
 
 	/* extra screens */
 #ifdef ENABLE_ARTIST_SCREEN
-	{ {'4', F4, 0 } },
+	{'4', F4},
 #endif
 #ifdef ENABLE_SEARCH_SCREEN
-	{ {'5', F5, 0 } },
-	{ {'m', 0, 0 } },
+	{'5', F5},
+	{'m'},
 #endif
 #ifdef ENABLE_SONG_SCREEN
-	{ { 'i', 0, 0 } },
+	{'i'},
 #endif
 #ifdef ENABLE_LYRICS_SCREEN
-	{ {'7', F7, 0 } },
-	{ {ESC, 0, 0 } },
-	{ {'u', 0, 0 } },
-	{ {'e', 0, 0 } },
+	{'7', F7},
+	{ESC},
+	{'u'},
+	{'e'},
 #endif
 
 #ifdef ENABLE_OUTPUTS_SCREEN
-	{ {'8', F8, 0 } },
+	{'8', F8},
 #endif
 
 #ifdef ENABLE_CHAT_SCREEN
-	{ {'9', F9, 0} },
+	{'9', F9},
 #endif
 }}};