return FALSE;
}
+/**
+ * Check if a key is used in one of our windows.
+ *
+ * This is needed because the tomboy_keybinder_bind() function allows
+ * more than one callback to be registered for the same key.
+ */
+gboolean
+tilda_controller_global_key_in_use (const TildaController *self, const gchar *keystr)
+{
+ gint i;
+ TildaWindow *tw;
+
+ guint key1, key2;
+ GdkModifierType mod1, mod2;
+
+ gtk_accelerator_parse (keystr, &key1, &mod1);
+
+ for (i=0; i<self->windows->len; ++i)
+ {
+ tw = g_ptr_array_index (self->windows, i);
+ gtk_accelerator_parse (tw->key, &key2, &mod2);
+
+ if (key1 == key2 && mod1 == mod2)
+ return TRUE;
+ }
+
+ /* No identical keys found, we're ok */
+ return FALSE;
+}
+
gboolean
tilda_controller_quit (TildaController *self, GError **error)
{
/* API */
gboolean tilda_controller_remove_window (TildaController *self, gint window_number);
+gboolean tilda_controller_global_key_in_use (const TildaController *self, const gchar *keystr);
#endif /* TILDA_CONTROLLER_H */
if (new_key == NULL || strcmp("", new_key) == 0)
return FALSE;
+ /* Check that no other windows are using the key */
+ // FIXME: there should be a hidden option to disable this. Maybe some people want
+ // to have logs in two Tildas, and just show them with one key. Crazy...
+ if (tilda_controller_global_key_in_use(TILDA_CONTROLLER(self->controller), new_key))
+ return FALSE;
+
/* Unbind if we were set */
if (self->key)
tomboy_keybinder_unbind (self->key, tilda_window_keybinding_cb);