changeset 22871:24dfef623410

Check if a key is already bound before assigning a menu trigger
author Richard Nelson <wabz@pidgin.im>
date Sun, 11 May 2008 07:20:42 +0000
parents 3d7e9eff04d0
children c9aebd4762a8
files ChangeLog ChangeLog.API finch/libgnt/gntbindable.c finch/libgnt/gntbindable.h finch/libgnt/gntmenu.c
diffstat 5 files changed, 23 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog	Sun May 11 05:08:08 2008 +0000
+++ b/ChangeLog	Sun May 11 07:20:42 2008 +0000
@@ -53,6 +53,7 @@
 
 	Finch:
 	* New default binding ctrl+x to open context menus.
+	* Menu triggers and other bindings will no longer conflict.
 
 version 2.4.1 (03/31/2008):
 	http://developer.pidgin.im/query?status=closed&milestone=2.4.1
--- a/ChangeLog.API	Sun May 11 05:08:08 2008 +0000
+++ b/ChangeLog.API	Sun May 11 07:20:42 2008 +0000
@@ -11,6 +11,9 @@
 		* Callbacks to Purple::Util::fetch_url and the
 		  Purple::Request::* functions can now be specified as both
 		  strings (the name of the callback function) and as coderefs.
+	Finch:
+		libgnt:
+		* Added gnt_bindable_check_key to check if a keystroke is bound.
 
 version 2.4.0 (02/29/2008):
 	libpurple:
--- a/finch/libgnt/gntbindable.c	Sun May 11 05:08:08 2008 +0000
+++ b/finch/libgnt/gntbindable.c	Sun May 11 07:20:42 2008 +0000
@@ -339,6 +339,13 @@
 	return FALSE;
 }
 
+gboolean
+gnt_bindable_check_key(GntBindable *bindable, const char *keys) {
+	GntBindableClass *klass = GNT_BINDABLE_CLASS(GNT_BINDABLE_GET_CLASS(bindable));
+	GntBindableActionParam *param = g_hash_table_lookup(klass->bindings, keys);
+	return (param && param->action);
+}
+
 static void
 register_binding(GntBindableClass *klass, const char *name, const char *trigger, GList *list)
 {
--- a/finch/libgnt/gntbindable.h	Sun May 11 05:08:08 2008 +0000
+++ b/finch/libgnt/gntbindable.h	Sun May 11 07:20:42 2008 +0000
@@ -149,6 +149,16 @@
 gboolean gnt_bindable_perform_action_key(GntBindable *bindable, const char *keys);
 
 /**
+ * Discover if a key is bound.
+ *
+ * @param bindable  The bindable object.
+ * @param keys      The key to check for.
+ *
+ * @return  @c TRUE if the the key has an action associated with it.
+ */
+gboolean gnt_bindable_check_key(GntBindable *bindable, const char *keys);
+
+/**
  * Perform an action on a bindable object.
  *
  * @param bindable  The bindable object.
--- a/finch/libgnt/gntmenu.c	Sun May 11 05:08:08 2008 +0000
+++ b/finch/libgnt/gntmenu.c	Sun May 11 07:20:42 2008 +0000
@@ -168,7 +168,8 @@
 			continue;
 		while (*text) {
 			char ch = tolower(*text++);
-			if (ch == ' ' || bools[(int)GET_VAL(ch)])
+			char t[2] = {ch, '\0'};
+			if (ch == ' ' || bools[(int)GET_VAL(ch)] || gnt_bindable_check_key(GNT_BINDABLE(menu), t))
 				continue;
 			trigger = ch;
 			break;