Memory Issue



Hi,

I am attaching a small piece of sample code that explains my problem.

int
main (int argc, char *argv[])
{
 GtkWidget *window1;

#ifdef ENABLE_NLS
 bindtextdomain (PACKAGE, PACKAGE_LOCALE_DIR);
 textdomain (PACKAGE);
#endif

 gnome_init ("try", VERSION, argc, argv);

 window1 = create_window1 ();
 gtk_widget_show (window1);

 gtk_main ();
 return 0;
}

void
on_message_box_ok_clicked(GtkButton *button, gpointer *data);

void
on_button1_clicked                     (GtkButton       *button,
                                       gpointer         user_data)
{
GtkWidget *window =lookup_widget (button, "window1");
GtkWidget *small_window =create_window ();
gtk_widget_show (small_window);
//gtk_widget_destroy (window);
}


GtkWidget *create_window ()
{
 GtkWidget *message_box;
 GtkWidget *dialog_vbox1;
 GtkWidget *message_box_ok;
 GtkWidget *dialog_action_area1;
 message_box = gnome_message_box_new (_("A test message box"),
GNOME_MESSAGE_BOX_INFO,
GNOME_STOCK_BUTTON_OK, NULL);
 gtk_container_remove (GTK_CONTAINER (GNOME_DIALOG
(message_box)->action_area), GNOME_DIALOG (message_box)->buttons->data);
 GNOME_DIALOG (message_box)->buttons = NULL;
 gtk_object_set_data (GTK_OBJECT (message_box), "message_box",
message_box);
 //gtk_widget_set_usize (message_box, 400, 175);
 gtk_window_set_modal((GtkWindow *)message_box,TRUE);

 gtk_window_set_title (GTK_WINDOW (message_box), _("Test"));
 gtk_window_set_policy (GTK_WINDOW (message_box), FALSE, FALSE, FALSE);
 dialog_vbox1 = GNOME_DIALOG (message_box)->vbox;
 gtk_object_set_data (GTK_OBJECT (message_box), "dialog_vbox1",
dialog_vbox1);
 gtk_widget_show (dialog_vbox1);

 gnome_dialog_append_button (GNOME_DIALOG (message_box),
GNOME_STOCK_BUTTON_OK);
 message_box_ok = GTK_WIDGET (g_list_last (GNOME_DIALOG
(message_box)->buttons)->data);
 gtk_widget_ref (message_box_ok);
 gtk_object_set_data_full (GTK_OBJECT (message_box), "message_box_ok",
message_box_ok,
                           (GtkDestroyNotify) gtk_widget_unref);
 gtk_widget_show (message_box_ok);   GTK_WIDGET_SET_FLAGS (message_box_ok,
GTK_CAN_DEFAULT);

 dialog_action_area1 = GNOME_DIALOG (message_box)->action_area;
 gtk_widget_ref (dialog_action_area1);
 gtk_object_set_data_full (GTK_OBJECT (message_box), "dialog_action_area1",
dialog_action_area1,
                          (GtkDestroyNotify) gtk_widget_unref);

 gtk_signal_connect (GTK_OBJECT (message_box_ok), "clicked",
                     GTK_SIGNAL_FUNC (on_message_box_ok_clicked),
                     message_box);
 return message_box;
}


void
on_message_box_ok_clicked(GtkButton *button, gpointer *data)
{
GtkWidget *box=(GtkWidget *)data;
gtk_widget_destroy(box);
}

void
on_window1_destroy                     (GtkObject       *object,
                                       gpointer         user_data)
{
printf ("\nhi1\n");
}


gboolean
on_window1_delete_event                (GtkWidget       *widget,
                                       GdkEvent        *event,
                                       gpointer         user_data)
{
printf ("\nhi2\n");

 return FALSE;
}



The above code creates a main window and from button1 click creates a
message box . On closing this message box , memory allocated to message box
should have been freed. However gnome-system-monitor shows the following
stats:
when main window is displayed: 3.5 MB
when message box is also displayed: 3.9 MB
message box closed: 3.9 MB
main window closed through 'X' button: 3.9 MB


Please give your comments.

Regards,
Preeti



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]