【问题标题】:Copying the text from a GTK MessageDialog从 GTK MessageDialog 复制文本
【发布时间】:2020-04-08 02:08:54
【问题描述】:

通过一个窗口错误对话框,我可以使用 CTRL-C 来复制窗口文本。

我希望允许用户对我在 GTK 应用程序中使用的消息对话框执行相同的操作。

有没有办法让 GTK MessageDialog 类处理复制命令?

【问题讨论】:

  • 您能否提供更多运行时环境的详细信息? Gtk 消息对话框类似于任何窗口。因此,复制文本应该没有任何问题。
  • @Praveen,您能否提供有关“类似于任何窗口”的含义的任何见解?任何窗口如何处理这个?我最终不得不捕获键盘向上信号。
  • 默认情况下您可以选择并复制GtkMessageDialog 的文本,尽管您可以将其关闭。这对您不起作用似乎表明还有其他问题。您不必使用键盘信号来执行此操作。你在哪个平台?你是如何显示消息对话框的?

标签: gtk messagedialog


【解决方案1】:

有一种更简单的方法可以做到这一点。 在 gtk_message_dialog_new() 之后使用对话框调用 _set_labels_selectable()

static void _set_label_selectable(gpointer data, gpointer user_data)
{
    GtkWidget *widget = GTK_WIDGET(data);

    if (GTK_IS_LABEL(widget))
    {
        gtk_label_set_selectable(GTK_LABEL(widget), TRUE);
    }
}

static void _set_lables_selectable(GtkWidget *dialog)
{
    GtkWidget *area = gtk_message_dialog_get_message_area(
        GTK_MESSAGE_DIALOG(dialog));
    GtkContainer *box = (GtkContainer *) area;

    GList *children = gtk_container_get_children(box);
    g_list_foreach(children, _set_label_selectable, NULL);
    g_list_free(children);
}

例子

GtkWidget *dialog =  gtk_message_dialog_new(opgU_window,
GTK_DIALOG_DESTROY_WITH_PARENT,
GTK_MESSAGE_QUESTION,
GTK_BUTTONS_YES_NO,
"%s", mbuf);

_set_lables_selectable(dialog);

【讨论】:

    【解决方案2】:

    我最终做的是在对话框中添加一个消息处理程序以捕获键盘向上命令。

    当它被触发时,我检查了 CTRL-C 组合并将文本放到那里的剪贴板上。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多