I noticed that if I changed the reply-to selector that my crypto-selector hook wasn't getting called, so I've made a branch called rerun_crypto_selector (and merged it to next). From the main commit message in the branch:
Re-run the crypto selector hook after message changes. The crypto-selector hook will be re-run after the message is edited, or after the recipients change due to changing the "Reply to" selector in reply-mode. So when the recipients change, the default selector will also change. However, if the user has manually changed the crypto selector then the hook will not be re-run, so as to avoid over-riding the user's choice. I've also updated the wiki as the headers["to"] bit is sometimes an array. Working much nicer now. I've pasted in the two patches at the end for those who like to review them in the email. Hamish Downer commit f111201a469fd1c1dccb143e089cc623ce35025d Author: Hamish Downer <dmi...@gmail.com> Date: Tue Feb 8 23:53:13 2011 +0000 added @changed_by_user to HorizontalSelector diff --git a/lib/sup/horizontal-selector.rb b/lib/sup/horizontal-selector.rb index 35a028e..e6ec6dc 100644 --- a/lib/sup/horizontal-selector.rb +++ b/lib/sup/horizontal-selector.rb @@ -1,7 +1,7 @@ module Redwood class HorizontalSelector - attr_accessor :label + attr_accessor :label, :changed_by_user def initialize label, vals, labels, base_color=:horizontal_selector_unselected_color, selected_color=:horizontal_selector_selected_color @label = label @@ -10,6 +10,7 @@ class HorizontalSelector @base_color = base_color @selected_color = selected_color @selection = 0 + @changed_by_user = false end def set_to val; @selection = @vals.index(val) end @@ -37,10 +38,12 @@ class HorizontalSelector def roll_left @selection = (@selection - 1) % @labels.length + @changed_by_user = true end def roll_right @selection = (@selection + 1) % @labels.length + @changed_by_user = true end end commit 3cbccb471fc73b1593374ef8efea1a22ba237d89 Author: Hamish Downer <dmi...@gmail.com> Date: Wed Feb 9 18:58:30 2011 +0000 Re-run the crypto selector hook after message changes. The crypto-selector hook will be re-run after the message is edited, or after the recipients change due to changing the "Reply to" selector in reply-mode. So when the recipients change, the default selector will also change. However, if the user has manually changed the crypto selector then the hook will not be re-run, so as to avoid over-riding the user's choice. diff --git a/lib/sup/modes/edit-message-mode.rb b/lib/sup/modes/edit-message-mode.rb index 734a879..6c2d61c 100644 --- a/lib/sup/modes/edit-message-mode.rb +++ b/lib/sup/modes/edit-message-mode.rb @@ -179,6 +179,7 @@ EOS header, @body = parse_file @file.path @header = header - NON_EDITABLE_HEADERS handle_new_text @header, @body + rerun_crypto_selector_hook update @edited @@ -215,6 +216,12 @@ EOS protected + def rerun_crypto_selector_hook + if @crypto_selector && !@crypto_selector.changed_by_user + HookManager.run "crypto-mode", :header => @header, :body => @body, :crypto_selector => @crypto_selector + end + end + def mime_encode string string = [string].pack('M') # basic quoted-printable string.gsub!(/=\n/,'') # .. remove trailing newline diff --git a/lib/sup/modes/reply-mode.rb b/lib/sup/modes/reply-mode.rb index 079e4de..ccdf371 100644 --- a/lib/sup/modes/reply-mode.rb +++ b/lib/sup/modes/reply-mode.rb @@ -165,6 +165,7 @@ protected if @headers[@type_selector.val] != self.header self.header = @headers[@type_selector.val] self.body = @bodies[@type_selector.val] unless @edited + rerun_crypto_selector_hook update end end @@ -174,6 +175,7 @@ protected if @headers[@type_selector.val] != self.header self.header = @headers[@type_selector.val] self.body = @bodies[@type_selector.val] unless @edited + rerun_crypto_selector_hook update end end _______________________________________________ Sup-devel mailing list Sup-devel@rubyforge.org http://rubyforge.org/mailman/listinfo/sup-devel