You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GtkText添加CSS边框后右键菜单失效问题及解决方法咨询

解决GtkText添加CSS边框后右键菜单失效的问题

问题现象

为GtkText组件添加CSS边框后,出现以下异常:

  • 右键上下文菜单的复制、粘贴功能无法使用
  • 控制台输出警告:Gtk-WARNING **: 23:17:00.572: Broken accounting of active state for widget 0x5591d99d8220(GtkPopoverMenu)

测试代码如下:

#include <gtk/gtk.h>

static const char *css =
  "text {"
  "        all: unset;"
  "        border: 1px solid black;" /*copy past from right click contextmenu not working by this line */
  "        min-height:20px;"
  "        padding-left: 10px;"
  "        font-size: 9.5px;"
  "}" ;

static void
activate (GtkApplication* app,
          gpointer        user_data)
{
  GtkWidget *window;
  window = gtk_application_window_new (app);
  gtk_window_set_title (GTK_WINDOW (window), "Window");
  gtk_window_set_default_size (GTK_WINDOW (window), 200, 200);
  gtk_window_present (GTK_WINDOW (window));

  GtkWidget *grid = gtk_grid_new ();
  gtk_window_set_child (GTK_WINDOW (window), grid);

  GtkCssProvider* provider = gtk_css_provider_new ();
  gtk_css_provider_load_from_data (provider, css, -1);
  gtk_style_context_add_provider_for_display (gdk_display_get_default (),
                                              GTK_STYLE_PROVIDER (provider),
                                              GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
  g_object_unref(provider);

  GtkWidget *text = gtk_text_new();
  gtk_grid_attach ((GtkGrid *)grid, text, 0, 0, 1, 1);

  gtk_window_present (GTK_WINDOW(window));
}

int
main (int    argc,
      char **argv)
{
  GtkApplication *app;
  int status;
  app = gtk_application_new ("org.gtk.example", G_APPLICATION_FLAGS_NONE);
  g_signal_connect (app, "activate", G_CALLBACK (activate), NULL);
  status = g_application_run (G_APPLICATION (app), argc, argv);
  g_object_unref (app);

  return status;
}

问题原因

CSS中的all: unset;会重置GtkText组件的所有默认样式规则,包括与组件内部交互、上下文菜单关联的状态样式和行为依赖样式,导致组件的状态管理逻辑异常,进而引发右键菜单功能失效和警告。

解决方法

移除all: unset;语句,仅保留需要自定义的样式属性即可恢复功能:

修改后的CSS代码:

text {
        border: 1px solid black;
        min-height:20px;
        padding-left: 10px;
        font-size: 9.5px;
}

如果需要重置部分样式,可针对性地覆盖特定属性(如background-color、color),避免使用all: unset破坏组件的默认行为基础。

内容的提问来源于stack exchange,提问作者dibyendu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 22:30:54