ペースト

ユーザーが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.
}