ユーザーがClipboardからデータのペーストを要求した時に、コードがすべきなのはそのフォーマットをリクエストし、コールバックメソッドを提供することです。このメソッドが実際のデータと共に呼び出されます。このように:
refClipboard->request_contents("example_custom_target", sigc::mem_fun(*this, &ExampleWindow::on_clipboard_received) );
コールバックメソッドの例はこのようになります:
void ExampleWindow::on_clipboard_received(const Gtk::SelectionData& selection_data)
{
Glib::ustring clipboard_data = selection_data.get_data_as_string();
//Do something with the pasted data.
}
Clipboardが現在どんなターゲットをペーストで利用可能できるかを見つけるには、request_targets()メソッドに、情報のデータと共に呼び出されるメソッドを指定してください。このように:
refClipboard->request_targets( sigc::mem_fun(*this, &ExampleWindow::on_clipboard_received_targets) );
このコールバック内において、利用可能なターゲットのリストと、自身のアプリケーションがペーストでサポートするターゲットのリストを比較してください。このように現在何のペーストが利用可能か調べることによって、ペーストのメニューアイテムを有効化・無効化することができます。このように:
void ExampleWindow::on_clipboard_received_targets(const Gtk::SelectionData& selection_data)
{
bool bPasteIsPossible = false;
//Get the list of available clipboard targets:
typedef std::list<Glib::ustring> type_listTargets;
type_listTargets targets = selection_data.get_targets();
//and see if one is suitable:
for(type_listTargets::const_iterator iter = targets.begin(); iter != targets.end(); ++iter)
{
if(*iter == "example_custom_target")
bPasteIsPossible = true;
}
//Do something, depending on whether bPasteIsPossible is true.
}