[RESOLVIDO]GTK não permite comandos próprios do C++

Pessoal, tenho uma pequena janela em GTK no C++. A Janela foi feita dentro de uma classe e chamada no arquivo principal do projeto. O problema acontece após a chamada da classe, onde comandos próprios do C++ não são executados. O que fazer?

main.cpp:

#include <iostream>
#include "janela.h"

using namespace std;

int main(int argc, char *argv[]){
    cout << "Janela" << endl; //Isso aparece nno terminal
    Janela janela(argc, argv);
    cout << "Programa" << endl; //Isso não
    return 0;
}

janela.h:

#ifndef JANELA_H
#define JANELA_H

#include <gtk/gtk.h>

class Janela{
    private:
        GtkWidget *window;
    public:
        Janela(int argc, char *argv[]);
};

#endif

janela.cpp:

#include <iostream>
#include "janela.h"

using namespace std;

Janela::Janela(int argc, char *argv[]){
    gtk_init(&argc, &argv);
    Janela::window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_window_set_title(GTK_WINDOW(window), "Janela");
    gtk_window_set_default_size(GTK_WINDOW(window), 800, 600);
    gtk_widget_show(window);
    gtk_main();
}

Quando vc chama gtk_main() o programa inicia o loop interno do GTK e esse loop não termina a menos que vc faça isso explicitamente.

Mesmo que vc clique no botão fechar o loop não encerra, pois o comportamento padrão deste botão é apenas esconder a janela e manter gtk_main() rodando.

O que vc deve fazer é modificar este comportamento. Tente isso:

Janela::Janela(int argc, char *argv[]){
    gtk_init(&argc, &argv);
    Janela::window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_window_set_title(GTK_WINDOW(window), "Janela");
    gtk_window_set_default_size(GTK_WINDOW(window), 800, 600);
    gtk_widget_show(window);
    
    g_signal_connect(G_OBJECT(window), "delete-event", G_CALLBACK(gtk_main_quit), NULL); 

    gtk_main();
}

Achei legal que vc tem total controle do que acontece quando se clica neste botão. Tenta isso:

#include <iostream>
#include "janela.h"
using namespace std;

static int contagem = 0;

void fechar_programa(GtkWidget *widget) {
    contagem++;

    cout << "Clique 5 vezes se quiser encerrar este programa\nVocê já clicou "
         << contagem << " vezes, faltam " << 5 - contagem << " cliques.\n" << endl;

    if (contagem == 5) {
        cout << "Good bye!" << endl;
        gtk_main_quit();
    }
}

Janela::Janela(int argc, char *argv[]){
    gtk_init(&argc, &argv);
    Janela::window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_window_set_title(GTK_WINDOW(window), "Janela");
    gtk_window_set_default_size(GTK_WINDOW(window), 800, 600);
    gtk_widget_show(window);

    g_signal_connect(G_OBJECT(window), "delete-event", G_CALLBACK(fechar_programa), NULL);

    gtk_main();
}

Espero ter ajudado!

Complementando a explicação do camarada acima, utilizando Gtkmm, você pode solucionar o problema utilizando std::cerr ao invés de std::cout. Óbvio que isso só te ajuda, se tua única necessidade for jogar uma saída direto pro terminal. Se você quiser descobrir mais do porque do std::cerr funcionar e o std::cout não, basta ler a documentação de ambos.