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
#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; }
_______________________________________________ dev-embedding mailing list dev-embedding@lists.mozilla.org https://lists.mozilla.org/listinfo/dev-embedding