2016-09-24 2 views
0

У меня есть строка состояния, и я хочу, чтобы ее текст можно было выбирать (например, копировать и пастировать), на Linux/Debian, с GTK3 (3.21.5 на Debian/Sid). Метка панели состояния - это поле его личных данных label, и для доступа к ней нет прямого API.делает выбор текста GtkStatusbar

Я был в состоянии кода (в C99) Далее, который работает:

mom_cmdstatusbar = // some global variable 
    gtk_statusbar_new(); 
{ 
    GtkWidget *statmsgarea = 
    gtk_statusbar_get_message_area (GTK_STATUSBAR (mom_cmdstatusbar)); 
    MOM_ASSERTPRINTF (GTK_IS_CONTAINER (statmsgarea), "bad [email protected]%p", 
        statmsgarea); 
    GList *lischs = gtk_container_get_children (GTK_CONTAINER (statmsgarea)); 
    for (GList * l = lischs; l != NULL; l = l->next) 
    { 
     GtkWidget *chwidg = l->data; 
     MOM_ASSERTPRINTF (GTK_IS_WIDGET (chwidg), "bad [email protected]%p", chwidg); 
     if (GTK_IS_LABEL (chwidg)) 
     gtk_label_set_selectable (GTK_LABEL(chwidg), true); 
    } 
    g_list_free (lischs), lischs = NULL; 
} 

Это делает работу, но есть лучше или простой способ сделать это? Получение списка детей внутри области сообщений GtkStatusbar и тестирование каждого из них плохо пахнет. Похоже, что в API GTK3 отсутствует функция GtkWidget* gtk_statusbar_get_label (GtkStatusbar*);.

PS. FWIW, код GPLv3 +, на github в файле gui.c при фиксации 58feb1d9473c34aca.. ветви expjs. Подробнее & мотивация об этом программном проекте на this & that вопросы.

ответ

0

Если нет прямого API для доступа к внутреннему дочернему объекту, то это, вероятно, специально, так что разработчики GTK могут сохранить свои возможности открытыми для реорганизации внутреннего макета виджета в будущих версиях.

Смежные вопросы