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

Reply via email to