[Message Prev][Message Next][Thread Prev][Thread Next][Message Index][Thread Index]

[MD:7425] ticket 321 への対応



藤井です。

ticket 321 への対応として、クリップボードの仕組を変更しました。

これまで、w32-get-clipboard-data は、w32-set-clipboard-data でクリップ
ボードに格納する際に覚えていた文字列の内容と w32-get-clipboard-data 実
行時に取得した文字列と同じ場合は nil を返していました。

# 外部からクリップボードに変更のあった場合のみ文字列を返すという仕様を
# 実現するために、このような実装をしています。

これが文字列に ^@ が含まれる場合に w32-get-clipboard-data で取得したク
リップボードの内容と過去に記憶していた内容を正しく比較することができま
せん。

# rev3956 の変更によって ^@ を含むとクリップボードに変更がなくても、変
# 更なしとは判定されなくなっています。
# ただし、rev3956 までの判定が正しかったとは言えなさそうです。

このため ticket 321 のような現象が発生します。

この対策として、かつて NTEmacs で使用していた
GetClipboardSequenceNumber API を用いた判定を導入しました。
# 現在は使用されていないので Sync した訳ではありません。

なお、以前三好さんはこの API 使用に関連した部分を Sync しなかったという
経緯がありますし(下記引用参照)、現在の NTEmacs でもこの API を使用して
いないようです。この API 実装には問題があるのかもしれません。

From: MIYOSHI Masanori <miyoshi@xxxxxxxxxxx>
Subject: Re: [MD:5035] Re: bug of clipboard
Date: Fri, 13 Aug 2004 07:21:47 +0900
> 藤井> ところで、CVS HEAD では GetClipboardSequenceNumber() を使える環境であ
> 藤井> れば、この API が返す値でクリップボードの更新を判定している部分がある
> 藤井> のですが、これが反映されていないのはどうしてでしょう。メモリの節約にな
> 藤井> ると思うのですが。
> 
> 修正箇所が多くなる割には、メリットがはっきりしないのでマージしま
> せんでした。GetClipboardSequenceNumber() の仕様がよく分からないの
> ですよ。
> 
> メリットがあると藤井さんが判断されるのであれば、関連するコードを
> マージして頂けませんか?

また、この API が存在しない Win95 では従来の処理が行なわれるはずですが、
手元では未検証です。

--
藤井 正行 / Masayuki FUJII