view console/libgnt/test/wm.c @ 14510:1d73e11d8787

[gaim-migrate @ 17230] Evan, see if this fixes the MSN get info crashes for you. Basically canceled DNS requests weren't being removed from the queue, then Gaim would pop them off the queue, but since the request had been canceled the memory was free'd and is now invalid. committer: Tailor Script <tailor@pidgin.im>
author Mark Doliner <mark@kingant.net>
date Sun, 10 Sep 2006 22:33:28 +0000
parents 0a0d2a1fd2bc
children
line wrap: on
line source

#include <gmodule.h>

#include <gnt.h>
#include <gntbox.h>
#include <gntentry.h>
#include <gntlabel.h>

static gboolean
key_pressed(GntEntry *entry, const char *text, gpointer null)
{
	if (*text != '\r')
		return FALSE;

	{
		const char *cmd;
		void *handle;
		void (*func)();

		cmd = gnt_entry_get_text(entry);
		handle = g_module_open(cmd, G_MODULE_BIND_LOCAL);
		if (handle && g_module_symbol(handle, "main", (gpointer)&func))
		{
			char *argv[] = {cmd, NULL};
			gnt_entry_clear(entry);
			func(1, argv);
		}
		else
		{
			GntWidget *widget = gnt_vbox_new(FALSE);
			gnt_box_set_toplevel(GNT_BOX(widget), TRUE);
			gnt_box_set_title(GNT_BOX(widget), "Error");
			gnt_box_add_widget(GNT_BOX(widget), gnt_label_new("Could not execute."));
			gnt_box_add_widget(GNT_BOX(widget), gnt_label_new(g_module_error()));

			gnt_widget_show(widget);
		}
	}
	
	return TRUE;
}

int main()
{
	GntWidget *window, *entry;

	freopen(".error", "w", stderr);

	gnt_init();

	window = gnt_hbox_new(FALSE);

	gnt_box_add_widget(GNT_BOX(window), gnt_label_new("Command"));

	entry = gnt_entry_new(NULL);
	g_signal_connect(G_OBJECT(entry), "key_pressed", G_CALLBACK(key_pressed), NULL);
	gnt_box_add_widget(GNT_BOX(window), entry);

	gnt_widget_set_position(window, 0, getmaxy(stdscr) - 2);
	gnt_widget_show(window);

	gnt_main();

	gnt_quit();
	
	return 0;
}