我该如何使用gtk响应

时间:2015-10-16 17:57:33

标签: c linux gtk

我有一个带有OK按钮的gtk对话框 我想在按下OK按钮时执行特定的功能,所以我使用了以下代码:

    static struct data callback_params;
    callback_params.entry = gtk_entry_new();
    callback_params.file = config;
    gtk_container_add(GTK_CONTAINER(content_area), callback_params.entry);
    g_signal_connect(dialog,"response",G_CALLBACK (add_new_set),&callback_params);
    g_signal_connect_swapped (dialog, "response",G_CALLBACK (gtk_widget_destroy),dialog);
    gtk_window_set_modal (GTK_WINDOW(dialog), TRUE);
    gtk_widget_show_all (dialog);


void add_new_set(GtkDialog *dialog, gint response_id, gpointer callback_params)
{
  g_print ("%s\n",gtk_entry_get_text ((GtkEntry *)((struct data *) callback_params)->entry));
  fputs("set \"",((FILE *)((struct data *) callback_params)->file));
  fputs(gtk_entry_get_text ((GtkEntry *)((struct data *) callback_params)->entry),((FILE *)((struct data *) callback_params)->file));
  fputs("\"",((FILE *)((struct data *) callback_params)->file));
}

工作正常,除了close(x)按钮也执行该功能,我理解这是“响应”信号的正常行为,我希望(x)关闭对话框而不是运行功能

我认为这应该与gtk响应有关,例如: GTK_RESPONSE_OK GTK_RESPONSE_CLOSE

但我不确定如何在我的代码中使用它们。

感谢

1 个答案:

答案 0 :(得分:1)

查看响应处理程序的签名:response_id看起来很有希望,对吧?将其与GTK_RESPONSE_OK(或其他值)进行比较,以找出用户决定的内容。