+;; Event notification/observer framework
+(eval-and-compile
+ (luna-define-class elmo-event-handler ()))
+
+(luna-define-generic elmo-event-handler-flag-changed (handler numbers)
+ "Notify flag of the messages with NUMBERS is changed.")
+
+(defun elmo-folder-add-handler (folder handler)
+ (unless (memq handler (elmo-folder-handlers-internal folder))
+ (elmo-folder-set-handlers-internal
+ folder
+ (cons handler (elmo-folder-handlers-internal folder)))))
+
+(defun elmo-folder-remove-handler (folder handler)
+ (elmo-folder-set-handlers-internal
+ folder
+ (delq handler (elmo-folder-handlers-internal folder))))
+
+(defun elmo-folder-notify-event (folder event &rest args)
+ (when (elmo-folder-handlers-internal folder)
+ (let ((message (format "elmo-event-handler-%s" event)))
+ (dolist (handler (elmo-folder-handlers-internal folder))
+ (apply #'luna-send handler message handler args)))))
+
+;;;