Я портирую коммерческое приложение на Linux, оно должно работать на нескольких дистрибутивах. При запуске в Ubuntu GtkMenuBar удаляется из окна приложения и помещается в главную глобальную панель меню. Это нормально ... но в окне приложения, где было удалено меню, есть соответствующее пустое место (оно помещается с помощью GtkFixed). Я должен быть в состоянии определить, когда это произошло (и ТОЛЬКО), когда это произошло из любого дистрибутива, чтобы я мог надежно удалить пустое пространство.
Какой лучший способ обнаружить это? (то есть через gtk_widget _... вызовы) Что было сделано с GtkMenuBar для достижения этой цели? Благодаря.
Вот что мне, наконец, пришлось прибегнуть к нескольким дистрибутивам и возможности, которую пользователь установил для исключения:
static int menu_proxy = -1;
typedef void *(*KVoidPtoF)();
void *proxylib;
KVoidPtoF gtk_menu_proxy_get;
menu_proxy = 0;
proxylib = dlopen("libappmenu.so", RTLD_NOLOAD | RTLD_LAZY);
if (proxylib)
{
gtk_menu_proxy_get = (KVoidPtoF)dlsym(proxylib,
"ubuntu_menu_proxy_get");
if (gtk_menu_proxy_get && (*gtk_menu_proxy_get)() != 0)
menu_proxy = 1;
}
Проблема не в том, что с GtkMenuBar было сделано что-то особенное (оно просто скрыто). Проблема заключается в том, что вы используете GtkFixed для его позиционирования, и поэтому при изменении MenuBar все не изменяется автоматически.
Есть ли какая-то конкретная причина, по которой вы используете GtkFixed для позиционирования, а не обычную структуру компоновки блоков GTK +? Возможно, вы захотите изучить использование GtkApplication и / или GtkBuilder для создания и представления вашего пользовательского интерфейса, вместо использования абсолютного позиционирования с GtkFixed.
Если вы хотите продолжить использовать GtkFixed, вам нужно будет просмотреть свойство (или сигнал) на GtkMenuBar, а также вручную изменить положение и / или изменить размеры других виджетов в вашем окне, когда GtkMenuBar скрыт.