I would like to know what difference is if I use activate_02 callback instead of activate callback.
I am asking strictly to this example code, more over why should I not use activate_2.
The difference is that activate() will give you a GtkApplicationWindow, while activate_2() will give you a GtkWindow
GtkApplicationWindow is basically a subclass of GtkWindow with some added functionality to integrate better with GtkApplication. You can read read the rest of those differences in the GtkApplicationWindow documentation.
I do not really have a reason, sorry about that.
I just created that activate_02 callback where I used instead of gtk_application_window_new() the gtk_application_add_window() function and noticed that worked fine.
I was not sure why it did, but I think everything is clear now.
You can achieve the same result through different ways, though the idiomatic way to write GTK applications is to use a GtkApplication instance and create GtkApplicationWindow instances for the top-level application windows—especially because gtk_main() and gtk_main_quit() have been removed from GTK4.