[gnome-nibbles] Prevent duplicate keys in controls Partial fix for 694244
- From: Bryan Quigley <bryanquigs src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-nibbles] Prevent duplicate keys in controls Partial fix for 694244
- Date: Sun, 3 Nov 2013 03:47:32 +0000 (UTC)
commit 7bbef5fef0975826a5831c53cf57290279dfd564
Author: Jakub Motyčka <>
Date: Sat Nov 2 23:43:39 2013 -0400
Prevent duplicate keys in controls
Partial fix for 694244
src/games-controls.c | 37 ++++++++++++++++++++++++++++++++++++-
1 files changed, 36 insertions(+), 1 deletions(-)
---
diff --git a/src/games-controls.c b/src/games-controls.c
index f9136bc..df643fb 100644
--- a/src/games-controls.c
+++ b/src/games-controls.c
@@ -25,8 +25,12 @@
#include <glib/gi18n.h>
#include <gtk/gtk.h>
+#include "gnibbles.h"
#include "games-controls.h"
+extern GSettings *worm_settings[NUMWORMS];
+extern GtkWidget *window;
+
enum {
CONFKEY_COLUMN = 0,
LABEL_COLUMN,
@@ -61,6 +65,8 @@ accel_edited_cb (GtkCellRendererAccel *cell,
GtkTreePath *path;
GtkTreeIter iter;
char *conf_key = NULL;
+ gboolean valid = TRUE;
+ int i = 0;
path = gtk_tree_path_new_from_string (path_string);
if (!path)
@@ -78,9 +84,38 @@ accel_edited_cb (GtkCellRendererAccel *cell,
if (!conf_key)
return;
+ if (g_settings_get_int (list->priv->settings, conf_key) == keyval) {
+ g_free (conf_key);
+ return;
+ }
+
+ /* Duplicate key check */
+ for (i = 0; i < NUMWORMS; i++) {
+ if (g_settings_get_int (worm_settings[i], "key-up") == keyval ||
+ g_settings_get_int (worm_settings[i], "key-down") == keyval ||
+ g_settings_get_int (worm_settings[i], "key-left") == keyval ||
+ g_settings_get_int (worm_settings[i], "key-right") == keyval) {
+ valid = FALSE;
+
+ GtkWidget *dialog;
+
+ dialog = gtk_message_dialog_new_with_markup (GTK_WINDOW(window),
+ GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_MESSAGE_WARNING,
+ GTK_BUTTONS_OK,
+ "<span weight=\"bold\" size=\"larger\">%s</span>",
+ _("The shortcut you selected is already assigned."));
+
+ gtk_dialog_run (GTK_DIALOG(dialog));
+ gtk_widget_destroy (dialog);
+ break;
+ }
+ }
+
/* Note: the model is updated in the conf notification callback */
/* FIXME: what to do with the modifiers? */
- g_settings_set_int (list->priv->settings, conf_key, keyval);
+ if (valid)
+ g_settings_set_int (list->priv->settings, conf_key, keyval);
g_free (conf_key);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]