Как подключить копировать / вставлять / выбирать / вырезать пункты меню к виджетам Gtk #?

#c# #clipboard #monodevelop #gtk#

#c# #буфер обмена #monodevelop #gtk#

Вопрос:

Как создать пункты меню в Gtk #, которые правильно обрабатываются всеми возможными виджетами? Я добавил действия копирования / вставки / etc в меню Gtk #, но как это передается любому виджету, имеющему фокус? Вам нужно что-то подключить для каждого возможного виджета?

Например, я хотел бы иметь возможность копировать из Gtk.Метки и Gtk.Текстовые области и вставить в Gtk.Entries и Gtk.Текстовые области. Аналогично, опция меню вставки не должна быть чувствительной, скажем, при использовании Gtk только для чтения.Текстовая область.

В связи с этим я хотел бы иметь возможность копировать / вставлять между приложениями, и это должно работать на Linux, Mac и Windows.

Любые указания приветствуются! Хотелось бы увидеть простой пример на C #, который правильно обрабатывает это. Кстати, я работаю в MonoDevelop.

Ответ №1:

В любом случае у меня есть простой пример на C. Посмотрите функции action_cut() , action_copy() , и action_paste() в этом файле: https://github.com/ptomato/gnome-inform7/blob/master/src/actions.c

Если вы хотите, чтобы ваши действия были чувствительными или нечувствительными в зависимости от того, какой виджет находится в фокусе, вам нужно будет подключиться к некоторому сигналу, который сообщает вам, когда фокус меняется, а затем соответствующим образом настроить чувствительность этих действий. Это было бы с моей головы notify::focus-child .

Комментарии:

1. Спасибо! Похоже, ваш метод является правильным, хотя нужно явно знать типы объектов в вашем окне, проверять типы и знать, что делать для каждого действия для каждого типа. Было бы лучше, если бы GTK создал стандартный интерфейс для виджета для обработки всех стандартных операций gui (вырезать, копировать, выбрать все и т. Д.).