2016-09-24 11 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消息區域內的兒童列表,並測試其中每個孩子的味道不好。它看起來像GTK3 API中缺少一些GtkWidget* gtk_statusbar_get_label (GtkStatusbar*);函數。

PS。 FWIW,代碼是GPLv3 +,在文件gui.c的github上的expjs分支的提交58feb1d9473c34aca..上。更多詳細信息&關於該軟件項目的動機this & that問題。

回答

0

如果沒有直接的API來訪問內部的孩子,那麼這可能是有目的的,從而使GTK開發人員可以保持他們的選擇權來重組部件的內部佈局在將來的版本。