1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
|
/* SCCS Id: @(#)gnaskstr.c 3.4 2000/07/16 */
/* Copyright (C) 1998 by Erik Andersen <andersee@debian.org> */
/* NetHack may be freely redistributed. See license for details. */
#include "gnaskstr.h"
#include "gnmain.h"
#include <gnome.h>
static
void ghack_ask_string_callback(gchar * string, gpointer data)
{
char **user_text = (char **) data;
g_assert(user_text != NULL);
*user_text = string; /* note - value must be g_free'd */
}
int ghack_ask_string_dialog(const char *szMessageStr,
const char *szDefaultStr, const char *szTitleStr,
char *buffer)
{
int i;
GtkWidget* dialog;
gchar *user_text = NULL;
dialog = gnome_request_dialog(FALSE, szMessageStr,
szDefaultStr, 0,
ghack_ask_string_callback,
&user_text, NULL);
g_assert(dialog != NULL);
gtk_window_set_title(GTK_WINDOW(dialog), szTitleStr);
gnome_dialog_set_default( GNOME_DIALOG(dialog), 0);
gtk_window_set_modal( GTK_WINDOW(dialog), TRUE);
gnome_dialog_set_parent (GNOME_DIALOG (dialog),
GTK_WINDOW (ghack_get_main_window ()) );
i = gnome_dialog_run_and_close (GNOME_DIALOG (dialog));
/* Quit */
if ( i != 0 || user_text == NULL ) {
if (user_text)
g_free(user_text);
return -1;
}
if ( *user_text == 0 ) {
g_free(user_text);
return -1;
}
g_assert(strlen(user_text) > 0);
strcpy (buffer, user_text);
g_free(user_text);
return 0;
}
|