// File: eiskalteschatten[P]developersnotebook/src/windows/MenuBar.cpp
// Function: MenuBar::setup_file_menu()
void MenuBar::setup_file_menu() {
    GtkWidget *file_menu      = gtk_menu_new();
    GtkWidget *file_mi        = gtk_menu_item_new_with_label("File");
    GtkWidget *new_menu       = gtk_menu_new();
    GtkWidget *new_mi         = gtk_menu_item_new_with_label("New");
    GtkWidget *new_project_mi = gtk_menu_item_new_with_label("New Project");
    GtkWidget *separator_mi_1 = gtk_separator_menu_item_new();
    GtkWidget *close_mi       = gtk_menu_item_new_with_label("Close");
    GtkWidget *separator_mi_2 = gtk_separator_menu_item_new();
    file_quit_mi              = gtk_menu_item_new_with_label("Quit");

    // Setup submenus
    {
        gtk_menu_item_set_submenu(GTK_MENU_ITEM(file_mi), file_menu);
        gtk_menu_item_set_submenu(GTK_MENU_ITEM(new_mi), new_menu);
    }

    // Setup New submenu
    {
        gtk_menu_shell_append(GTK_MENU_SHELL(new_menu), new_project_mi);
        g_signal_connect(G_OBJECT(new_project_mi), "activate", G_CALLBACK(new_project), this);
    }

    // Setup menu items

    // New
    {
        gtk_menu_shell_append(GTK_MENU_SHELL(file_menu), new_mi);
        gtk_menu_shell_append(GTK_MENU_SHELL(file_menu), separator_mi_1);
    }

    // Close
    {
        gtk_menu_shell_append(GTK_MENU_SHELL(file_menu), close_mi);
        gtk_menu_shell_append(GTK_MENU_SHELL(file_menu), separator_mi_2);
        g_signal_connect(G_OBJECT(close_mi), "activate", G_CALLBACK(close_window), this);
        gtk_widget_add_accelerator(close_mi, "activate", accel_group, GDK_KEY_w, primary_mask_key, GTK_ACCEL_VISIBLE);
    }

    // Quit
    {
        gtk_menu_shell_append(GTK_MENU_SHELL(file_menu), file_quit_mi);
        g_signal_connect(G_OBJECT(file_quit_mi), "activate", G_CALLBACK(quit_app), this);
        gtk_widget_add_accelerator(file_quit_mi, "activate", accel_group, GDK_KEY_q, primary_mask_key, GTK_ACCEL_VISIBLE);
    }

    // Add the menu to the menu shell
    gtk_menu_shell_append(GTK_MENU_SHELL(menubar), file_mi);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xa0, %rsp
movq %rdi, -0x8(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x58(%rbp)
callq 0xa9f0
movq %rax, -0x10(%rbp)
leaq 0x32ba6(%rip), %rdi     # 0x538ed
callq 0xb090
movq %rax, -0x18(%rbp)
callq 0xa9f0
movq %rax, -0x20(%rbp)
leaq 0x32b92(%rip), %rdi     # 0x538f2
callq 0xb090
movq %rax, -0x28(%rbp)
leaq 0x32793(%rip), %rdi     # 0x53503
callq 0xb090
movq %rax, -0x30(%rbp)
callq 0xac40
movq %rax, -0x38(%rbp)
leaq 0x32b6d(%rip), %rdi     # 0x538f6
callq 0xb090
movq %rax, -0x40(%rbp)
callq 0xac40
movq %rax, -0x48(%rbp)
leaq 0x32b5a(%rip), %rdi     # 0x538fc
callq 0xb090
movq %rax, %rcx
movq -0x58(%rbp), %rax
movq %rcx, 0x28(%rax)
movq -0x18(%rbp), %rax
movq %rax, -0x98(%rbp)
callq 0xa4a0
movq -0x98(%rbp), %rdi
movq %rax, %rsi
callq 0xa190
movq %rax, %rdi
movq -0x10(%rbp), %rsi
callq 0xace0
movq -0x28(%rbp), %rax
movq %rax, -0x90(%rbp)
callq 0xa4a0
movq -0x90(%rbp), %rdi
movq %rax, %rsi
callq 0xa190
movq %rax, %rdi
movq -0x20(%rbp), %rsi
callq 0xace0
movq -0x20(%rbp), %rax
movq %rax, -0x88(%rbp)
callq 0xa350
movq -0x88(%rbp), %rdi
movq %rax, %rsi
callq 0xa190
movq %rax, %rdi
movq -0x30(%rbp), %rsi
callq 0xaa90
movq -0x30(%rbp), %rdi
movl $0x50, %esi
callq 0xa190
movq -0x58(%rbp), %rcx
movq %rax, %rdi
leaq 0x322c7(%rip), %rsi     # 0x53116
leaq -0x2f6(%rip), %rdx      # 0x20b60
xorl %eax, %eax
movl %eax, %r8d
xorl %r9d, %r9d
callq 0xa380
movq -0x10(%rbp), %rax
movq %rax, -0x80(%rbp)
callq 0xa350
movq -0x80(%rbp), %rdi
movq %rax, %rsi
callq 0xa190
movq %rax, %rdi
movq -0x28(%rbp), %rsi
callq 0xaa90
movq -0x10(%rbp), %rax
movq %rax, -0x78(%rbp)
callq 0xa350
movq -0x78(%rbp), %rdi
movq %rax, %rsi
callq 0xa190
movq %rax, %rdi
movq -0x38(%rbp), %rsi
callq 0xaa90
movq -0x10(%rbp), %rax
movq %rax, -0x70(%rbp)
callq 0xa350
movq -0x70(%rbp), %rdi
movq %rax, %rsi
callq 0xa190
movq %rax, %rdi
movq -0x40(%rbp), %rsi
callq 0xaa90
movq -0x10(%rbp), %rax
movq %rax, -0x68(%rbp)
callq 0xa350
movq -0x68(%rbp), %rdi
movq %rax, %rsi
callq 0xa190
movq %rax, %rdi
movq -0x48(%rbp), %rsi
callq 0xaa90
movq -0x40(%rbp), %rdi
movl $0x50, %esi
callq 0xa190
movq -0x58(%rbp), %rcx
movq %rax, %rdi
leaq 0x32203(%rip), %rsi     # 0x53116
leaq -0x36a(%rip), %rdx      # 0x20bb0
xorl %eax, %eax
movl %eax, %r8d
xorl %r9d, %r9d
callq 0xa380
movq -0x58(%rbp), %rax
movq -0x40(%rbp), %rdi
movq 0x18(%rax), %rdx
movl 0x10(%rax), %r8d
leaq 0x321d8(%rip), %rsi     # 0x53116
movl $0x77, %ecx
movl $0x1, %r9d
callq 0xabd0
movq -0x10(%rbp), %rax
movq %rax, -0x60(%rbp)
callq 0xa350
movq -0x60(%rbp), %rdi
movq %rax, %rsi
callq 0xa190
movq %rax, %rdi
movq -0x58(%rbp), %rax
movq 0x28(%rax), %rsi
callq 0xaa90
movq -0x58(%rbp), %rax
movq 0x28(%rax), %rdi
movl $0x50, %esi
callq 0xa190
movq -0x58(%rbp), %rcx
movq %rax, %rdi
leaq 0x3217f(%rip), %rsi     # 0x53116
leaq -0x3be(%rip), %rdx      # 0x20be0
xorl %eax, %eax
movl %eax, %r8d
xorl %r9d, %r9d
callq 0xa380
movq -0x58(%rbp), %rax
movq 0x28(%rax), %rdi
movq 0x18(%rax), %rdx
movl 0x10(%rax), %r8d
leaq 0x32154(%rip), %rsi     # 0x53116
movl $0x71, %ecx
movl $0x1, %r9d
callq 0xabd0
movq -0x58(%rbp), %rax
movq 0x20(%rax), %rax
movq %rax, -0x50(%rbp)
callq 0xa350
movq -0x50(%rbp), %rdi
movq %rax, %rsi
callq 0xa190
movq %rax, %rdi
movq -0x18(%rbp), %rsi
callq 0xaa90
addq $0xa0, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)