質問

私はカット、コピーして編集メニューを持っている、とだけでなく、テキストのGtkTextViewを貼り付けグレイド、GtkBuilder、及びC. Iを使用してGTKで(運動など)些細なテキストエディタを作ってるんです。 GtkTextViewは自動的に自身のためにカット/コピー/ペーストするシーケンスを結合し(さらにメニュー項目を提供します右クリックした場合)。私はカット、コピーを接続し、期待どおりに動作しますので、私のテキストビューに私のメニューバーのメニュー項目を貼り付けたい。

これは双方向の接続であること

注。カットの一つ、コピー、または貼り付けGtkMenuItemのが有効になると(1)、それが何かをするGtkTextViewを伝えます。 (2)選択はGtkTextView、切り取りとコピーで作らまたはクリアされている(例として、geditの参照)をそれぞれ有効または無効にされています。また、有効になっている貼り付けたか否か(3)は、クリップボードの状態に依存します。

どのように私は私のカット、コピーを接続し、テキストビューにメニュー項目を貼り付けていますか?グレイドでそれを行う方法はありますか、私のCプログラムでは、このためのいくつかの余分なコードが必要になりますか?これを行うには合理方法はありますか、私は上の段落で述べた3つのすべての動作を実装する必要があります手動で?

役に立ちましたか?

解決

あなたはあまりない、いくつかの余分なCコードが必要になります。この例では、私はあなたのメニュー項目のGtkActionsを使用していると仮定していますが、あなたは解決策いないのであれば似ている必要があります。

まず、カットのためのコールバックを行うコピー、およびグレイドでアクションを貼り付けます。あなたは信号を接続すると、ユーザデータとして、カット、コピー、およびアクションを貼り付け、テキストビューに少なくともポインタに含むいくつかのデータ構造を渡します。

void
on_cut(GtkAction *action, SomeStruct *data)
{
    g_signal_emit_by_name(data->view, "cut-clipboard", NULL);
    gtk_action_set_sensitive(data->paste_action, TRUE);
}

void
on_copy(GtkAction *action, SomeStruct *data)
{
    g_signal_emit_by_name(data->view, "copy-clipboard", NULL);
    gtk_action_set_sensitive(data->paste_action, TRUE);
}

void
on_paste(GtkAction *action, SomeStruct *data)
{
    g_signal_emit_by_name(data->view, "paste-clipboard", NULL);
}

次に、あなたのnotify::has-selectionGtkTextBuffer信号に接続します:

void
on_has_selection_notify(GtkTextBuffer *buffer, GParamSpec *pspec, SomeStruct *data)
{
    gboolean has_selection = gtk_text_buffer_get_has_selection(buffer);
    gtk_action_set_sensitive(data->cut_action, has_selection);
    gtk_action_set_sensitive(data->copy_action, has_selection);
}
あなたのインターフェイスを構築している間に実行(あなたがアプリケーションを起動し、クリップボード上のテキストがある場合)は、次のコードを貼り付けアクションの初期状態を決定するために:

gtk_action_set_sensitive(data->paste_action, 
    gtk_clipboard_wait_is_text_available(gtk_clipboard_get(GDK_SELECTION_CLIPBOARD)));

これは、ユーザーが手動でクリップボードをクリアするための方法はありませんと仮定し(ほとんどのプログラムは、あなたがそれを行うことはできませんが。)

警告レクター:ここに入力されたように、コードは、すべてのテストされていません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top