Буфер обмена и перетаскивание
Так как пользователи работают с всё большим количеством типов данных в различных приложения, то возрастает необходимость в обмене объектами и данными между приложениями. GNOME поддерживает два связанных метода обмена данными между приложениями: операция перетаскивания и копирование в общесистемный буфер обмена и вставка из него. Оба эти механизма работают между различными приложениями, включая те, что были разработаны без помощи GNOME.
Буфер обмена используется, когда пользователь явно копирует данные в приложении. В этом случае приложение захватывает буфер обмена. Когда пользователь вставляет данные в другое приложение, то это приложение запрашивает буфер обмена из первого приложения. Операции с буфером обмена полностью поддерживаются в GTK+.
Операции перетаскивания похожи, но требуют отслеживания курсора и его обновления при движении над потенциальными целями. Когда приложение уведомляется о движении курсора над ним во время перетаскивания, оно должно изменить курсор таким образом, чтобы показать может ли оно принять перетаскивание. GTK+ поддерживает перетаскивание с помощью сложного API, позволяющего легко управлять целями перетаскивания в приложениях.
Оба механизма — перетаскивание и буфер обмена, поддерживают обмен не только текстом, но и произвольными данными. Когда у приложения есть данные для обмена оно объявляет доступные форматы этих данных. Например, при копировании текста в веб-браузере, текстовый процессор может обработать данные в формате HTML, в то время как обычный текстовый редактор может принять только обычный текст без форматирования.
Необходимо обеспечить поддержку работы с буфером обмена и перетаскивания для всех данных, с которыми работает приложение. Буфер обмена и перетаскивание полезно не только для обработки текста, но и переноса между приложениями фрагментов файлов, изображений, звука. При использовании GTK+ приложения автоматически поддерживают работу с буфером обмена и перетаскивание для текстовых полей, цветовых кнопок, диалогов выбора файлов и других встроенных элементов управления. Для поддержки любого другого типа данных необходимо использовать API GTK+.
За дальнейшей информацией обратитесь к описаниями протоколов Drag-and-Drop Protocol for the X Window System, X Clipboard Explanation и The Clipboard Manager Specification.