diff --git a/src/objects/window/application.c b/src/objects/window/application.c index 982ede4..fb9ea15 100644 --- a/src/objects/window/application.c +++ b/src/objects/window/application.c @@ -101,13 +101,31 @@ NULL, NULL }, + { "app.quit", action_activated, NULL, NULL, NULL + }, + + { + "app.new_tab", + action_activated, + NULL, + NULL, + NULL + }, + + { + "app.new_window", + action_activated, + NULL, + NULL, + NULL } + }; g_action_map_add_action_entries( diff --git a/src/objects/window/terminal.c b/src/objects/window/terminal.c index 8138534..a61b7b2 100644 --- a/src/objects/window/terminal.c +++ b/src/objects/window/terminal.c @@ -75,8 +75,11 @@ gtk_widget_show_all(terminal); gtk_widget_show_all(label); - gtk_notebook_append_page(GTK_NOTEBOOK(window->notebook),terminal,label); - gtk_notebook_set_show_tabs(GTK_NOTEBOOK(window->notebook),gtk_notebook_get_n_pages(GTK_NOTEBOOK(window->notebook)) > 1); + gtk_notebook_append_page(window->notebook,terminal,label); + gtk_notebook_set_show_tabs(window->notebook,gtk_notebook_get_n_pages(GTK_NOTEBOOK(window->notebook)) > 1); + + gtk_notebook_set_tab_detachable(window->notebook,terminal,TRUE); + gtk_notebook_set_tab_reorderable(window->notebook,terminal,TRUE); return terminal; diff --git a/src/objects/window/ui/window.xml b/src/objects/window/ui/window.xml new file mode 100644 index 0000000..80d513d --- /dev/null +++ b/src/objects/window/ui/window.xml @@ -0,0 +1,20 @@ + + + + +
+ + About PW3270 + app.about + + + Preferences + app.help + + + Quit + app.quit + +
+
+
diff --git a/src/objects/window/window.c b/src/objects/window/window.c index a63a891..5bf7c81 100644 --- a/src/objects/window/window.c +++ b/src/objects/window/window.c @@ -29,6 +29,7 @@ #include "private.h" #include + #include G_DEFINE_TYPE(pw3270ApplicationWindow, pw3270ApplicationWindow, GTK_TYPE_APPLICATION_WINDOW); @@ -60,6 +61,7 @@ gtk_notebook_set_show_tabs(widget->notebook,FALSE); gtk_notebook_set_show_border(widget->notebook, FALSE); + gtk_notebook_set_group_name(widget->notebook,PACKAGE_NAME ":Terminals"); gtk_box_pack_start(vBox,GTK_WIDGET(widget->toolbar),FALSE,TRUE,0); gtk_box_pack_start(vBox,GTK_WIDGET(widget->notebook),TRUE,TRUE,0); @@ -71,12 +73,67 @@ GtkWidget * pw3270_application_window_new(GtkApplication * application) { + const gchar * title = _( "IBM 3270 Terminal emulator" ); + g_return_val_if_fail(GTK_IS_APPLICATION(application), NULL); - return g_object_new( - PW3270_TYPE_APPLICATION_WINDOW, - "application", application, - NULL); + pw3270ApplicationWindow * window = + g_object_new( + PW3270_TYPE_APPLICATION_WINDOW, + "application", application, + NULL); + + if(PW3270_IS_APPLICATION(gtk_window_get_application(GTK_WINDOW(window)))) { + + GtkBuilder * builder = gtk_builder_new_from_file("ui/window.xml"); + + switch(pw3270_application_get_ui_type(G_APPLICATION(application))) { + case PW3270_UI_STYLE_CLASSICAL: + { + gtk_window_set_title(GTK_WINDOW(window), title); + + } + break; + + case PW3270_UI_STYLE_GNOME: + { + // Create header bar + GtkHeaderBar * header = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_window_set_titlebar(GTK_WINDOW(window), GTK_WIDGET(header)); + gtk_header_bar_set_show_close_button(header,TRUE); + + gtk_header_bar_set_title(header,title); + gtk_header_bar_set_subtitle(header,_("Disconnected from host")); + + // Create gear button + // https://wiki.gnome.org/Initiatives/GnomeGoals/GearIcons + GtkWidget * gear_menu = gtk_menu_button_new(); + gtk_button_set_image(GTK_BUTTON(gear_menu),gtk_image_new_from_icon_name("open-menu-symbolic",GTK_ICON_SIZE_MENU)); + + gtk_menu_button_set_menu_model(GTK_MENU_BUTTON(gear_menu), G_MENU_MODEL(gtk_builder_get_object (builder, "gear-menu"))); + + gtk_header_bar_pack_end(header, gear_menu); + + // Create "new tab" bar + GtkWidget * new_tab_button = gtk_button_new_from_icon_name("tab-new-symbolic",GTK_ICON_SIZE_MENU); + gtk_actionable_set_action_name(GTK_ACTIONABLE(new_tab_button),"app.new_tab"); + + gtk_header_bar_pack_start(header, new_tab_button); + + // Show the new header + gtk_widget_show_all(GTK_WIDGET(header)); + } + break; + + default: + g_warning("Unexpected UI"); + + } + + g_object_unref(builder); + + } + return GTK_WIDGET(window); } -- libgit2 0.21.2