something about gtk moz

shaoning <[email protected]>
Newsgroups gmane.comp.mozilla.devel.embedding
Message-ID <[email protected]>
hi all

Now i met a strange thing about gtk and moz.
I wrote a simple test program using gtk and gtkmozembed . The attache
file is my test program . It is very simple and short .
I tested the program in Fedora 14 .

Now , i found , when i open the a new link in the gtk browser window,
the test program's VIRT memory is always raising .After open several
links, the VIRT memory reach 3G , then the program becomes no response .
I think the gtk browser should release the VIRT source when opening a
new link , right ?

Does anybody know this issue? And how to fix it ?


thanks
shaoning

_______________________________________________
dev-embedding mailing list
[email protected]
https://lists.mozilla.org/listinfo/dev-embedding
moz.c (text/plain, 4.2 KB)
#include<gtk/gtk.h>
#include<gtkmozembed.h>
GtkWidget *window;
GtkWidget *moz;
GtkWidget * vbox, *hbox, *button,*entry;

gboolean notify(GtkWidget *widget,GdkEventMotion *event,gpointer user_data)
{
	printf("i got notify \n");
	
	return TRUE;
}

void go()
{
	gtk_moz_embed_load_url((GtkMozEmbed *)moz,gtk_entry_get_text((GtkEntry *)entry));
	gtk_widget_grab_focus (GTK_WIDGET(moz));
}
void new_window_cb (GtkMozEmbed *embed, GtkMozEmbed **retval, guint chromemask, gpointer data)
{
	printf("i got new_window signal\n");
	*retval = GTK_MOZ_EMBED(moz);
}
void destroy_window_cb (GtkMozEmbed *embed, gpointer data)
{
	printf("i got destroy window signal\n");
	gtk_moz_embed_go_back(embed);

}
void link_message_cb (GtkMozEmbed *embed, gpointer data)
{
	printf("i got link message signal\n");
	printf("%s\n",gtk_moz_embed_get_link_message(embed));

}
void js_status_cb (GtkMozEmbed *embed, gpointer data)
{
	printf("i got js status signal\n");
	printf("%s\n",gtk_moz_embed_get_js_status(embed));

}
void progress_cb (GtkMozEmbed *embed, gint cur, gint max, gpointer data)
{
	float tt= (float)cur/(float)max;
	printf("%f\n",tt);
}
gint open_uri_cb(GtkMozEmbed *embed, const char *uri, gpointer data)
{
	printf("i got open_uri_cb\n");
//	gtk_moz_embed_close_stream(embed);
//	gtk_moz_embed_load_url((GtkMozEmbed *)moz,uri);
	return FALSE;
}
void net_start_cb()
{
	printf("net start\n");
}
void net_stop_cb()
{
	printf("net stop \n");
}
void button_press()
{
	printf("button press\n");
}
void title_changed_cb()
{
	printf("title changed\n");
	printf("the title is %s\n",gtk_moz_embed_get_title((GtkMozEmbed *)moz));
	printf("the location is %s\n",gtk_moz_embed_get_location((GtkMozEmbed *)moz));
}
int main(int argc,char *argv[])
{
	gtk_init(&argc,&argv);
	window=gtk_window_new(GTK_WINDOW_TOPLEVEL);
	g_signal_connect(G_OBJECT(window),"destroy",G_CALLBACK(gtk_main_quit),NULL);
	g_signal_connect(G_OBJECT(window),"motion-notify-event",G_CALLBACK(notify),NULL);
	gtk_widget_set_size_request(window, 800, 600);
	setenv("MOZILLA_FIVE_HOME", "/usr/lib/xulrunner-1.9.2", 1);
	moz = gtk_moz_embed_new();
	gtk_moz_embed_set_comp_path("/tmp/dddd");
	gtk_widget_set_events (moz,GDK_BUTTON_PRESS_MASK);
	gtk_widget_set_size_request(GTK_WIDGET(moz), 800, 500);
	g_signal_connect(G_OBJECT(moz), "net_start", G_CALLBACK(net_start_cb), NULL);
	g_signal_connect(G_OBJECT(moz), "net_stop", G_CALLBACK(net_stop_cb),
NULL);
	g_signal_connect(G_OBJECT(moz), "title", G_CALLBACK(title_changed_cb), NULL);
	g_signal_connect(G_OBJECT(moz), "open_uri", G_CALLBACK(open_uri_cb), NULL);
	g_signal_connect(G_OBJECT(moz), "new_window", G_CALLBACK(new_window_cb), NULL);
	g_signal_connect(G_OBJECT(moz), "destroy_browser", G_CALLBACK(destroy_window_cb), NULL);
	g_signal_connect(G_OBJECT(moz), "link_message", G_CALLBACK(link_message_cb), NULL);
	g_signal_connect(G_OBJECT(moz), "js_status", G_CALLBACK(js_status_cb), NULL);
	g_signal_connect(G_OBJECT(moz), "progress", G_CALLBACK(progress_cb), NULL);
	
	g_signal_connect (G_OBJECT (moz), "button-press-event",G_CALLBACK (button_press), NULL);

//	gtk_moz_embed_set_chrome_mask(GTK_MOZ_EMBED(moz),GTK_MOZ_EMBED_FLAG_WINDOWCLOSEON);
	if(argv[1] != NULL)
		gtk_moz_embed_load_url((GtkMozEmbed *)moz,argv[1]);
	else
		gtk_moz_embed_load_url((GtkMozEmbed *)moz,"http://www.baidu.com");
	
	vbox=gtk_vbox_new(FALSE,0);
	gtk_widget_set_size_request(vbox, 800, 600);
	gtk_box_pack_start(GTK_BOX(vbox),GTK_WIDGET(moz),FALSE,FALSE,0);
	hbox=gtk_hbox_new(FALSE,3);
	gtk_widget_set_size_request(hbox, 800, 100);
	gtk_box_pack_start(GTK_BOX(vbox),GTK_WIDGET(hbox),FALSE,FALSE,0);
	entry=gtk_entry_new ();
	gtk_entry_set_activates_default(GTK_ENTRY(entry),TRUE);
	gtk_widget_set_size_request(hbox, 500, 80);
	button=gtk_button_new();
	g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(go), NULL);
	
	gtk_widget_set_size_request(hbox, 100, 50);
	gtk_box_pack_start(GTK_BOX(hbox),entry,FALSE,FALSE,10);
	gtk_box_pack_start(GTK_BOX(hbox),button,FALSE,FALSE,10);

	gtk_container_add(GTK_CONTAINER(window),vbox);

	gtk_widget_show_all(window);
	printf("the title is %s\n",gtk_moz_embed_get_title((GtkMozEmbed *)moz));
	printf("the location is %s\n",gtk_moz_embed_get_location((GtkMozEmbed *)moz));
	
//	gtk_widget_set_receives_default((GtkWidget *)moz,TRUE);
	gtk_main();
	return 0;
}
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.