Недавно потребовалось сделать так, чтобы при нажатии правой кнопкой мыши по заголовку колонки GtkTreeView возникало меню, с помощью которого можно было бы выбрать для отображения или скрыть отдельные колонки. Порывшись в документации к GTK, я обнаружил, что это не так то просто. А именно - нет какой-либо функции, которая могла бы возвратить виджет заголовка колонки, к которому я бы смог привязать обработчик сигнала на нажатие кнопки мыши.
Т. к. поиск в документации не дал никаких результатов, я начал искать обходные пути решения данной проблемы. Оказалось, что GTK позволяет назначить собственный виджет, который будет помещен в кнопку заголовка GtkTreeViewColumn. По умолчанию, если пользователь не назначит собственный виджет, вместо него используется обычный GtkLabel с именем колонки. Если же мы назначим заголовку собственный виджет, то сможем подняться от него вверх по дереву содержащих его контейнеров и получить нужную нам кнопку.
Поэтому, недолго думая, я написал следующую функцию, которая возвращает заветную кнопку заголовка колонки (функция написана для Gtkmm, но переписать ее под обычный GTK не составит никакого труда):