Захотелось как-то написать свой клиент для Music Player Daemon. Не имея опыта работы с GTK+, через две недели я всё же имел клиент, соответствующий моим требованиям. Осталось только реализовать Drag’n’Drop в плейлисте с возможностью тянуть несколько строк за раз. Так как штатными средствами GtkTreeView и GtkListStore этого не добиться, а официальный способ — написание собственной модели — сулил несколько дней курения мануалов и переписывание большого куска кода, было принято решение идти в обход.
Так, что нам мешает? Ага, клик мышкой с целью перетащить несколько выбранных строк воспринимается как выбор кликнутой строки, она же одна и тянется. Ну и ладно — пишем callback на кликанье по плейлисту, проверяем кнопки-модификаторы, смотрим, выбраны ли несколько строк и приходится ли клик на одну из них, ждём 120 миллисекунд, проверяем состояние мыши. Что, вы ещё не отпустили кнопку? Тогда тяните, сударь, наше дело — return TRUE;