我使用的是动态创建项目的组合框,对于黑色组合框内的标题,可能会或可能不会显示,这取决于当前的选择。它看起来像这样:
单元格布局渲染器的代码是这样的(仅用于概念,我的后续问题不会对细节感兴趣):
void option_list_with_headlines
(G_GNUC_UNUSED GtkCellLayout *cell_layout,
GtkCellRenderer *action_option_combo_box_renderer,
GtkTreeModel *action_option_combo_box_model,
GtkTreeIter *action_option_combo_box_iter,
G_GNUC_UNUSED gpointer data) {
gchar *action_option_combo_item;
GdkRGBA normal_fg_color, normal_bg_color;
gboolean headline;
gtk_style_context_get_color (gtk_widget_get_style_context (action_option),
GTK_STATE_NORMAL, &normal_fg_color);
gtk_style_context_get_background_color (gtk_widget_get_style_context
(action_option), GTK_STATE_NORMAL, &normal_bg_color);
gtk_tree_model_get (action_option_combo_box_model,
action_option_combo_box_iter, ACTION_OPTION_COMBO_ITEM,
&action_option_combo_item, -1);
headline = g_regex_match_simple ("Add|Choose",
action_option_combo_item, G_REGEX_ANCHORED, 0);
g_object_set (action_option_combo_box_renderer,
"foreground-rgba", (headline) ? &((GdkRGBA) { 1.0, 1.0, 1.0, 1.0 }) :
&normal_fg_color, "background-rgba"
(g_str_has_prefix(action_option_combo_item, "Choose")) ?
&((GdkRGBA) { 0.31, 0.31, 0.79, 1.0 }) :
((g_str_has_prefix (action_option_combo_item, "Add")) ?
&((GdkRGBA) { 0.0, 0.0, 0.0, 1.0 }) : &normal_bg_color),
"sensitive", !headline, NULL);
// Cleanup
g_free (action_option_combo_item);
}
现在关于此功能的问题:
从Gtk> = 3.16开始,我不再使用gtk_style_context_get_background_color
。但是,我可以在组合框项目列表中将颜色设置为默认值,就像我在上面的图像中使用“名称”和“提示”一样?目前,我使用g_object_set
以及我使用gtk_style_context_get_background_color
和GTK_STATE_NORMAL作为参数收集的颜色。
答案 0 :(得分:0)
解决方案已经证明非常简单:我根本不必检索默认的背景颜色;使用background-rgba
:
g_object_set
的值设置为NULL就足够了
g_object_set (action_option_combo_box_renderer, "background-rgba", NULL, ...)
我不知道这是可能的;我认为background-rgba总是需要某种价值。