view finch/libgnt/test/keys.c @ 23323:a61bb76597fc

patch from Andrew Gaul that fixes a memleak, we weren't free'ing this when we can't connect to fetch the image, I think: ==2802== 34 (24 direct, 10 indirect) bytes in 1 blocks are definitely lost in loss record 48 of 289 ==2802== at 0x4A05854: calloc (vg_replace_malloc.c:397) ==2802== by 0x331303F849: g_malloc0 (in /lib64/libglib-2.0.so.0.1600.3) ==2802== by 0xE653A86: yahoo_process_picture (yahoo_picture.c:130) ==2802== by 0xE6474C4: yahoo_packet_process (yahoo.c:2448) ==2802== by 0xE648A42: yahoo_pending (yahoo.c:2575) ==2802== by 0x461B9D: pidgin_io_invoke (gtkeventloop.c:78) ==2802== by 0x331303749A: g_main_context_dispatch (in /lib64/libglib-2.0.so.0.1600.3) ==2802== by 0x331303AC7C: (within /lib64/libglib-2.0.so.0.1600.3) ==2802== by 0x331303B1AC: g_main_loop_run (in /lib64/libglib-2.0.so.0.1600.3) ==2802== by 0x3317584887: gtk_main (in /usr/lib64/libgtk-x11-2.0.so.0.1200.9) ==2802== by 0x4788A7: main (gtkmain.c:893)
author Ka-Hing Cheung <khc@hxbc.us>
date Sun, 08 Jun 2008 21:54:56 +0000
parents 0e3a8505ebbe
children
line wrap: on
line source

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

static gboolean
print_keycode(GntEntry *entry, const char *text, gpointer null)
{
	char *s = g_strdup_printf("%s ", text);
	gnt_entry_set_text(entry, s);
	g_free(s);
	if (text[0] == 27)
	{
		if (strncmp(text + 1, "[M ", 3) == 0)
		{
			int x = (unsigned)text[4];
			int y = (unsigned)text[5];
			if (x < 0)	x += 256;
			if (y < 0)	y += 256;
			x -= 33;
			y -= 33;
			s = g_strdup_printf("ldown %d %d", x, y);
			gnt_entry_set_text(entry, s);
			g_free(s);
		}
		else if (strncmp(text + 1, "[M#", 3) == 0)
			gnt_entry_set_text(entry, "up");
		else
			return FALSE;
		return TRUE;
	}
	else
		return TRUE;
}

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

	gnt_init();

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

	window = gnt_hbox_new(FALSE);
	gnt_box_set_toplevel(GNT_BOX(window), TRUE);

	gnt_box_add_widget(GNT_BOX(window), gnt_label_new("Press any key: "));

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

	gnt_widget_set_position(window, getmaxx(stdscr) / 2 - 12, getmaxy(stdscr) / 2 - 3);
	gnt_widget_show(window);

	gnt_main();
	gnt_quit();
	return 0;
}