+(defun elmo-multi-connect-signals (folder)
+ (elmo-connect-signal
+ nil 'flag-changing folder
+ (elmo-define-signal-handler (folder child number old-flags new-flags)
+ (elmo-emit-signal 'flag-changing folder
+ (car (elmo-multi-map-numbers folder child (list number)))
+ old-flags new-flags))
+ (elmo-define-signal-filter (folder sender)
+ (memq sender (elmo-multi-folder-children-internal folder))))
+ (elmo-connect-signal
+ nil 'flag-changed folder
+ (elmo-define-signal-handler (folder child numbers)
+ (elmo-emit-signal 'flag-changed folder
+ (elmo-multi-map-numbers folder child numbers)))
+ (elmo-define-signal-filter (folder sender)
+ (memq sender (elmo-multi-folder-children-internal folder))))
+ (elmo-connect-signal
+ nil 'cache-changed folder
+ (elmo-define-signal-handler (folder child number)
+ (elmo-emit-signal
+ 'cache-changed folder
+ (car (elmo-multi-map-numbers folder child (list number)))))
+ (elmo-define-signal-filter (folder sender)
+ (memq sender (elmo-multi-folder-children-internal folder))))
+ (elmo-connect-signal
+ nil 'update-overview folder
+ (elmo-define-signal-handler (folder child number)
+ (elmo-emit-signal
+ 'update-overview folder
+ (car (elmo-multi-map-numbers folder child (list number)))))
+ (elmo-define-signal-filter (folder sender)
+ (memq sender (elmo-multi-folder-children-internal folder)))))
+
+(defun elmo-multi-map-numbers (folder child numbers)
+ (let ((multi (catch 'found
+ (let ((children (elmo-multi-folder-children-internal folder))
+ (index 0))
+ (while children
+ (setq index (1+ index))
+ (when (eq (car children) child)
+ (throw 'found index))
+ (setq children (cdr children)))))))
+ (when multi
+ (let ((offset (* (elmo-multi-folder-divide-number-internal folder)
+ multi)))
+ (mapcar (lambda (number) (+ offset number))
+ numbers)))))
+
+