gtk&x2B;在窗口级别使用按键信号,但在子窗口小部件级别阻止特定的按键信号

gtk&x2B;在窗口级别使用按键信号,但在子窗口小部件级别阻止特定的按键信号,gtk,signals,Gtk,Signals,我正在使用vte在gtk+中创建一个终端应用程序。当我创建一个选项卡并使用ctrl+t组合键将其添加到笔记本时,它会按预期在选项卡中添加带有新终端的选项卡。但是,按键信号也会传递到终端,并在命令提示前显示为“^T”,并伴有系统蜂鸣音。如何在窗口级别使用按键信号,以便添加选项卡,但在终端级别阻止此特定按键信号?下面是一段代码,它显示了如何组装所有组件: window_main = gtk_window_new (GTK_WINDOW_TOPLEVEL); vte = vte_termin

我正在使用vte在gtk+中创建一个终端应用程序。当我创建一个选项卡并使用ctrl+t组合键将其添加到笔记本时,它会按预期在选项卡中添加带有新终端的选项卡。但是,按键信号也会传递到终端,并在命令提示前显示为“^T”,并伴有系统蜂鸣音。如何在窗口级别使用按键信号,以便添加选项卡,但在终端级别阻止此特定按键信号?下面是一段代码,它显示了如何组装所有组件:

  window_main = gtk_window_new (GTK_WINDOW_TOPLEVEL);

  vte = vte_terminal_new();
  terminal = VTE_TERMINAL (vte);

  notebook = gtk_notebook_new ();

  vbox = gtk_vbox_new(FALSE,0);
  gtk_container_add (GTK_CONTAINER (window_main), vbox);
  gtk_box_pack_start (GTK_BOX (vbox), notebook, TRUE, TRUE, 0);  

  scrollwin[0] = gtk_scrolled_window_new (NULL, terminal->adjustment);
  gtk_container_add(GTK_CONTAINER(scrollwin[0]),vte);
  gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrollwin[0]), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);

  label = gtk_label_new ("term1");
  gtk_notebook_append_page (GTK_NOTEBOOK (notebook), scrollwin[0], label);

谢谢。

Windows在按键事件中首先受到攻击,然后进入焦点链。任何返回
true
的信号处理程序都会停止此传播。因此,如果在处理
ctrl-t
(或任何其他您不想传播的按键)时,从按键信号处理程序返回
true
,则应避免它进入术语小部件。

从信号处理程序返回true不会起作用?@ergosys,谢谢您的评论。然而,当涉及到信号处理程序时,我不得不声明自己是无知的。是学习的时候了。我读过关于如何获取处理程序id的内容,也读过关于如何使用
g\u signal\u handler\u block
阻止信号的内容,但这似乎有些过分。我将从哪个信号处理程序返回true?在哪一级仅阻止信号到达终端,而不是窗口?举个例子会很有帮助。我一直在找,但找不到。谢谢。我不确定我能帮上什么忙,但首先知道你是如何得到ctrl-t的会很有用。@ergosys,你的问题很不清楚,但我会尽力的。首先我点击组合键ctrl+t,然后我有一个g_signal_connect语句,它连接了主窗口的按键事件,并具有处理这些按键的功能。由于根据定义,终端需要按键操作,因此此ctrl+t信号也会发送到终端,并在终端上注册为:^t(这种情况很有趣,因为大写锁定已关闭)。不管怎样,希望这能解释它。据我所知,windows首先在按键信号上出现裂缝,然后进入焦点链。因此,如果在处理ctrl-t(或任何其他您不想传播的按键)时从该函数返回true,则应防止它进入术语小部件。