从GTK MessageDialog复制文本

时间:2010-07-14 18:05:23

标签: gtk messagedialog

使用Windows错误对话框,我可以使用CTRL-C复制窗口文本。

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

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

2 个答案:

答案 0 :(得分:0)

我最终做的是在对话框中添加一个消息处理程序来捕获Keyboard up命令。

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

答案 1 :(得分:0)

有一种更简单的方法可以做到这一点。 在gtk_message_dialog_new()之后,通过对话框调用_set_lables_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);