Chapter 17. クリップボード

Table of Contents

単純なテキストのコピー・ペースト機能はGtk::EntryやGtk::TextViewのようなウィジットでは何もしなくても提供されています。しかし、自分で定義したデータフォーマットを扱うには特別なコードが必要になるでしょう。例えば、ペイントソフトでは描画とテキストのコピー・ペーストを行うために特別なコードが必要です。

Gtk::Clipboardはシングルトンです。ただ一つのインスタンスだけをGtk::Clipboard::get()から取得できます。

アプリケーションにクリップボードの動作を待たせる必要はありません。特に、ユーザーがコピーを選んだからといってペーストするまでの間待つことはありません。ですから、ほとんどGtk::Clipboardのメソッドはsigc::slotを引数にとり、これでコールバックを指定します。 Gtk::Clipboardの準備ができたとき、これらのメソッドは与えられたデータ、あるいは要求されたデータと共に呼ばれます。

Reference

ターゲット

異なったアプリケーションはそれぞれ異なったデータ型を持っていますし、データを様々なフォーマットで提供することもあります。gtkmmではこのようなデータ型のことをtargetと呼んでいます。

例えば、geditは"UTF8_STRING"ターゲットを提供したり受け取ることができます。ですから、このターゲットを提供する任意のアプリケーションからgeditにデータをペーストすることができます。また、2つの異なった画像エディタアプリケーション間ではターゲットとして様々な画像フォーマットのやりとりができます。あるアプリケーションが別のあるアプリケーションの提供しているターゲットのひとつを受け取ることができるのであれば、前者から後者にデータをコピーすることができます。

ターゲットは様々なバイナリフォーマットをとることができます。この章と例では、データは8ビットテキストと仮定しています。そうしておくとクリップボードのデータとしてXMLフォーマットを使うことができるからです。しかし、これはイメージのようなバイナリデータに対して適切ではないでしょう。Gtk::Clipboardはオーバーロードを提供し、必要ならばフォーマットを詳細に設定できるようになっています。

ドラッグ・アンド・ドロップのAPIも同じ機構を使っています。クリップボード操作とドラッグ・アンド・ドロップでは、両方で同じデータのターゲットとフォーマットを使った方がいいでしょう。