我有一个状态栏,我希望在Linux / Debian上使用GTK3(Debian / Sid上的3.21.5)可以选择其文本(例如copy和pastable)。状态栏的标签是其私有数据的label
字段,并且没有直接API可以访问它。
我能够编码(在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 statmsgarea@%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 chwidg@%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 +,位于expjs分支的commit gui.c上的文件58feb1d9473c34aca..中的github上。更多细节&关于this&的软件项目的动机that个问题。
答案 0 :(得分:0)
如果没有直接API来访问内部子项,那么这可能是故意的,这样GTK开发人员可以保持其选项在未来版本中重新组织窗口小部件的内部布局。