Commit Diff


commit - 83438dc0ea419cbf0de45ca9e88b421376ed87c2
commit + 9881c98ce0817889c42c9ad4146d7e1db91d7005
blob - 588dcade69d138c72e8904a546dfe0ab1cd7d2b2
blob + a2aae07b18f8dce0457f2850ee368e6509b68854
--- amused.h
+++ amused.h
@@ -93,6 +93,10 @@ struct player_seek {
 
 struct ctl_command;
 
+#define MODE_ON		+1
+#define MODE_OFF	 0
+#define MODE_UNDEF	-1
+#define MODE_TOGGLE	-2
 struct player_mode {
 	int	repeat_one;
 	int	repeat_all;
blob - e85d663a95e38a25f7fb412dafd703cf13ae6a3a
blob + 9cceb02c58723fda2af8a479d1c57b2be97b9518
--- control.c
+++ control.c
@@ -240,6 +240,16 @@ control_notify(int type)
 	}
 }
 
+static int
+new_mode(int val, int newval)
+{
+	if (newval == MODE_UNDEF)
+		return val;
+	if (newval == MODE_TOGGLE)
+		return !val;
+	return !!newval;
+}
+
 void
 control_dispatch_imsg(int fd, short event, void *bula)
 {
@@ -353,12 +363,9 @@ control_dispatch_imsg(int fd, short event, void *bula)
 				break;
 			}
 			memcpy(&mode, imsg.data, sizeof(mode));
-			if (mode.repeat_all != -1)
-				repeat_all = mode.repeat_all;
-			if (mode.repeat_one != -1)
-				repeat_one = mode.repeat_one;
-			if (mode.consume != -1)
-				consume = mode.consume;
+			consume = new_mode(consume, mode.consume);
+			repeat_all = new_mode(repeat_all, mode.repeat_all);
+			repeat_one = new_mode(repeat_one, mode.repeat_one);
 			control_notify(imsg.hdr.type);
 			break;
 		case IMSG_CTL_BEGIN: