Reworked on_ecore_event().
authorTilman Sauerbeck <tilman@code-monkey.de>
Tue, 14 Feb 2006 19:06:43 +0000 (19:06 +0000)
committerTilman Sauerbeck <tilman@code-monkey.de>
Tue, 14 Feb 2006 19:06:43 +0000 (19:06 +0000)
If one event handler's block returns false, don't call neither the other
C handlers nor the other Ruby handlers.

src/ecore/rb_event_handler.c

index f296ae26255655b8f0f96966738b841fd2368f29..a360ef70cac34cb42447fcb5f831adb6930ac68a 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * $Id: rb_event_handler.c 363 2006-02-14 19:02:53Z tilman $
+ * $Id: rb_event_handler.c 364 2006-02-14 19:06:43Z tilman $
  *
  * Copyright (C) 2004 ruby-ecore team (see AUTHORS)
  *
@@ -130,7 +130,7 @@ static int on_ecore_event (void *data, int type, void *event)
 {
        RbEventHandler *h = NULL;
        VALUE handler, klass, obj, tmp, res;
-       int handler_type, len, i;
+       int handler_type, len, ret = 1, i;
 
        /* instantiate the event object
         * first, find the class we're gonna use
@@ -157,13 +157,14 @@ static int on_ecore_event (void *data, int type, void *event)
                        /* if the block returned false, don't call the other
                         * event handlers
                         */
-                       if (res == Qfalse)
+                       if (res == Qfalse) {
+                               ret = 0;
                                break;
+                       }
                }
        }
 
-       /* call other event handlers, too */
-       return 1;
+       return ret;
 }
 
 VALUE c_ev_generic_init (VALUE self, VALUE event)