📄 confirmer.c
字号:
#include <sys/types.h>#include <sys/stat.h>#include <unistd.h>#include <string.h>#include <gdk/gdkkeysyms.h>#include <gtk/gtk.h>#include "support.h" /* Language support */extern GtkTooltips *tooltips ;#ifndef _#define _(s) (s)#endifstatic void answer(GtkWidget *w, gpointer rval) ; /* Create an OK/Cancel confirmer. "Message" is the initial * value for the confirmer's text message. "Parent" is the * window for which this confirmer is transient -- may be * specified as NULL. * * The returned widget will have the following properties set: * label label widget containing message * okButton "OK" button widget * cancelButton "Cancel" button widget * result True or False, depending on button pressed. */GtkWidget*create_confirmer (char *message, GtkWidget *parent){ GtkWidget *confirmer; GtkWidget *okBut; GtkWidget *cancelBut; GtkAccelGroup *accel_group; GtkWidget *lbl ; GtkBox *vbox, *actionArea ; accel_group = gtk_accel_group_new (); confirmer = gtk_dialog_new() ; gtk_signal_connect( GTK_OBJECT(confirmer), "delete_event", GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete), NULL) ; if( parent != NULL ) gtk_window_set_transient_for(GTK_WINDOW(confirmer), GTK_WINDOW(parent)) ; gtk_container_set_border_width( GTK_CONTAINER(confirmer), 4) ; GTK_WINDOW (confirmer)->type = GTK_WINDOW_DIALOG; gtk_window_set_position (GTK_WINDOW (confirmer), GTK_WIN_POS_MOUSE);#ifdef COMMENT gtk_window_set_modal (GTK_WINDOW (confirmer), TRUE);#endif /* COMMENT */ gtk_window_set_policy (GTK_WINDOW (confirmer), FALSE, FALSE, TRUE); vbox = GTK_BOX(GTK_DIALOG(confirmer)->vbox) ; actionArea = GTK_BOX(GTK_DIALOG(confirmer)->action_area) ; lbl = gtk_label_new(_(message)) ; gtk_box_pack_start(vbox, lbl, FALSE, FALSE, 0) ; gtk_widget_show( lbl ) ; /* Cache the label so we can find it later */ gtk_object_set_data (GTK_OBJECT (confirmer), "label", lbl); okBut = gtk_button_new_with_label(_("OK")) ; gtk_box_pack_start(actionArea, okBut, FALSE, FALSE, 2) ; gtk_tooltips_set_tip(tooltips, okBut, _("Really quit, connection may be broken"), NULL) ; GTK_WIDGET_SET_FLAGS (okBut, GTK_CAN_DEFAULT | GTK_HAS_DEFAULT); gtk_widget_add_accelerator (okBut, "clicked", accel_group, GDK_Return, 0, GTK_ACCEL_VISIBLE); gtk_widget_show( okBut ) ; gtk_object_set_data (GTK_OBJECT (confirmer), "okButton", okBut); gtk_object_set_data (GTK_OBJECT (okBut), "confirmer", confirmer); cancelBut = gtk_button_new_with_label(_("Cancel")) ; gtk_box_pack_start(actionArea, cancelBut, FALSE, FALSE, 2) ; gtk_tooltips_set_tip(tooltips, cancelBut, _("Don't quit"), NULL) ; GTK_WIDGET_SET_FLAGS (cancelBut, GTK_CAN_DEFAULT); gtk_widget_add_accelerator (cancelBut, "clicked", accel_group, GDK_Escape, 0, GTK_ACCEL_VISIBLE); gtk_widget_show( cancelBut ) ; gtk_object_set_data (GTK_OBJECT (confirmer), "cancelButton", cancelBut); gtk_object_set_data (GTK_OBJECT (cancelBut), "confirmer", confirmer); gtk_signal_connect( GTK_OBJECT(okBut), "clicked", answer, (gpointer) TRUE) ; gtk_signal_connect( GTK_OBJECT(cancelBut), "clicked", answer, (gpointer) FALSE) ;#ifdef COMMENT gtk_widget_grab_default (okBut);#endif /* COMMENT */ gtk_window_add_accel_group (GTK_WINDOW (confirmer), accel_group); return confirmer;} /* Display confirmer widget, wait for user to accept, cancel, * or dismiss the confirmer from the window manager. */gbooleanget_confirmation(GtkWidget *confirmer, gboolean dflt){ gint id ; GtkObject *co = GTK_OBJECT(confirmer) ; gtk_object_set_data(co, "result", (gpointer)dflt) ; gtk_object_set_data(co, "wantQuit", (gpointer)TRUE) ; id = gtk_signal_connect( co, "delete_event", GTK_SIGNAL_FUNC(gtk_main_quit), NULL) ; gtk_widget_show(confirmer) ; gtk_main() ; gtk_signal_disconnect( co, id ) ; gtk_object_set_data(co, "wantQuit", (gpointer)FALSE) ; return (gboolean) gtk_object_get_data(co, "result");} /* Internal; find the confirmer that owns this widget, set * its "result" property. Hide the confirmer window. */static voidanswer(GtkWidget *w, gpointer rval){ GtkWidget *confirmer ; confirmer = gtk_object_get_data( GTK_OBJECT(w), "confirmer") ; gtk_object_set_data(GTK_OBJECT(confirmer), "result", rval) ; gtk_widget_hide(confirmer) ; if( (gboolean)gtk_object_get_data( GTK_OBJECT(confirmer), "wantQuit") ) gtk_main_quit() ;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -