Вопрос Обнаружение использования глобального меню ubuntu


Я переношу коммерческое приложение в Linux, оно запускается на нескольких дистрибутивах. При запуске на Ubuntu GtkMenuBar удаляется из окна приложения и помещается в основную глобальную панель меню. Все в порядке ... но в окне приложения есть соответствующее пустое место, где было удалено меню (оно помещено в GtkFixed). Мне нужно выяснить, когда это произошло (и ТОЛЬКО), когда это произошло из любого дистрибутива, чтобы я мог надежно удалить пустое пространство.

Каков наилучший способ обнаружить это? (т.е. через gtk_widget _... calls) Что было сделано для GtkMenuBar для достижения этого? Благодарю.


4
2018-02-27 15:36


происхождения




ответы:


Проблема не в том, что в GtkMenuBar ничего не было сделано (оно просто скрыто). Проблема заключается в том, что вы используете GtkFixed для его положения, и поэтому все не изменяется автоматически при выходе из меню.

Есть ли какая-то конкретная причина, по которой вы используете GtkFixed для размещения вещей, а не используя стандартную структуру макета коробки GTK +? Возможно, вы захотите изучить GtkApplication и / или GtkBuilder для создания и представления своего пользовательского интерфейса вместо того, чтобы использовать абсолютное позиционирование с помощью GtkFixed.

Если вы хотите продолжить использование GtkFixed, вам нужно будет посмотреть свойство (или сигнал) на GtkMenuBar, а также изменить и / или изменить размер других виджетов в вашем окне вручную, когда GtkMenuBar скрыт.


1
2018-02-27 15:48



Когда это уйдет? Является ли сам GtkMenuBar исправленным, чтобы я мог обнаружить это раньше или что-то пришло позже и скрыть? Есть ли способ спросить GtkMenuBar, если он останется скрытым? GtkFixed используется, потому что # 1) это портативное приложение, которое работает и на Win и Mac, так что автоматизация - это значительное препятствие, №2). Вместо этого существует сложный язык макета на основе XML. - dajoke
Я не уверен на 100%, но я думаю, что это модуль GTK +, который выполняет эту работу. Когда функция включена, и когда пользователь работает под Unity, структура меню будет разобрана, а панель в окне будет скрыта. я думаю hide когда это происходит. В документации GTK + перечислены все сигналы для виджетов. Должно быть достаточно простым, чтобы проверить с помощью простого скрипта Python, если необходимо, чтобы узнать точный метод использования. - dobey
Я не вижу никакого скрытого сигнала, а также настройки или распределения по размеру. Строка меню по-прежнему отображается как видимая, реализована и сопоставлена, хотя она выделена на 0,0 с размером 0,0. Я не уверен, как это достигается. - dajoke
PS - если кто-нибудь может направить меня к коду, который вызывает это, это будет большой помощью. - dajoke


Вот что я, наконец, пришлось прибегать к нескольким дистрибутивам и возможность того, что пользователь установил исключение:

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;
}

1
2018-03-13 23:59