Commit 8803e9e53bfe6d9095f3ef90e8f09f5cef94686b
1 parent
d16909b3
Exists in
master
and in
4 other branches
Implement toplevel window & application objects.
Showing
4 changed files
with
104 additions
and
6 deletions
Show diff stats
src/objects/window/application.c
| ... | ... | @@ -101,13 +101,31 @@ |
| 101 | 101 | NULL, |
| 102 | 102 | NULL |
| 103 | 103 | }, |
| 104 | + | |
| 104 | 105 | { |
| 105 | 106 | "app.quit", |
| 106 | 107 | action_activated, |
| 107 | 108 | NULL, |
| 108 | 109 | NULL, |
| 109 | 110 | NULL |
| 111 | + }, | |
| 112 | + | |
| 113 | + { | |
| 114 | + "app.new_tab", | |
| 115 | + action_activated, | |
| 116 | + NULL, | |
| 117 | + NULL, | |
| 118 | + NULL | |
| 119 | + }, | |
| 120 | + | |
| 121 | + { | |
| 122 | + "app.new_window", | |
| 123 | + action_activated, | |
| 124 | + NULL, | |
| 125 | + NULL, | |
| 126 | + NULL | |
| 110 | 127 | } |
| 128 | + | |
| 111 | 129 | }; |
| 112 | 130 | |
| 113 | 131 | g_action_map_add_action_entries( | ... | ... |
src/objects/window/terminal.c
| ... | ... | @@ -75,8 +75,11 @@ |
| 75 | 75 | gtk_widget_show_all(terminal); |
| 76 | 76 | gtk_widget_show_all(label); |
| 77 | 77 | |
| 78 | - gtk_notebook_append_page(GTK_NOTEBOOK(window->notebook),terminal,label); | |
| 79 | - gtk_notebook_set_show_tabs(GTK_NOTEBOOK(window->notebook),gtk_notebook_get_n_pages(GTK_NOTEBOOK(window->notebook)) > 1); | |
| 78 | + gtk_notebook_append_page(window->notebook,terminal,label); | |
| 79 | + gtk_notebook_set_show_tabs(window->notebook,gtk_notebook_get_n_pages(GTK_NOTEBOOK(window->notebook)) > 1); | |
| 80 | + | |
| 81 | + gtk_notebook_set_tab_detachable(window->notebook,terminal,TRUE); | |
| 82 | + gtk_notebook_set_tab_reorderable(window->notebook,terminal,TRUE); | |
| 80 | 83 | |
| 81 | 84 | return terminal; |
| 82 | 85 | ... | ... |
| ... | ... | @@ -0,0 +1,20 @@ |
| 1 | +<?xml version="1.0" encoding="UTF-8"?> | |
| 2 | +<interface> | |
| 3 | + <requires lib="gtk+" version="3.0"/> | |
| 4 | + <menu id="gear-menu"> | |
| 5 | + <section> | |
| 6 | + <item> | |
| 7 | + <attribute name="label" translatable="yes">About PW3270</attribute> | |
| 8 | + <attribute name="action">app.about</attribute> | |
| 9 | + </item> | |
| 10 | + <item> | |
| 11 | + <attribute name="label" translatable="yes">Preferences</attribute> | |
| 12 | + <attribute name="action">app.help</attribute> | |
| 13 | + </item> | |
| 14 | + <item> | |
| 15 | + <attribute name="label" translatable="yes">Quit</attribute> | |
| 16 | + <attribute name="action">app.quit</attribute> | |
| 17 | + </item> | |
| 18 | + </section> | |
| 19 | + </menu> | |
| 20 | +</interface> | ... | ... |
src/objects/window/window.c
| ... | ... | @@ -29,6 +29,7 @@ |
| 29 | 29 | |
| 30 | 30 | #include "private.h" |
| 31 | 31 | #include <pw3270/toolbar.h> |
| 32 | + #include <pw3270/application.h> | |
| 32 | 33 | |
| 33 | 34 | G_DEFINE_TYPE(pw3270ApplicationWindow, pw3270ApplicationWindow, GTK_TYPE_APPLICATION_WINDOW); |
| 34 | 35 | |
| ... | ... | @@ -60,6 +61,7 @@ |
| 60 | 61 | |
| 61 | 62 | gtk_notebook_set_show_tabs(widget->notebook,FALSE); |
| 62 | 63 | gtk_notebook_set_show_border(widget->notebook, FALSE); |
| 64 | + gtk_notebook_set_group_name(widget->notebook,PACKAGE_NAME ":Terminals"); | |
| 63 | 65 | |
| 64 | 66 | gtk_box_pack_start(vBox,GTK_WIDGET(widget->toolbar),FALSE,TRUE,0); |
| 65 | 67 | gtk_box_pack_start(vBox,GTK_WIDGET(widget->notebook),TRUE,TRUE,0); |
| ... | ... | @@ -71,12 +73,67 @@ |
| 71 | 73 | |
| 72 | 74 | GtkWidget * pw3270_application_window_new(GtkApplication * application) { |
| 73 | 75 | |
| 76 | + const gchar * title = _( "IBM 3270 Terminal emulator" ); | |
| 77 | + | |
| 74 | 78 | g_return_val_if_fail(GTK_IS_APPLICATION(application), NULL); |
| 75 | - return g_object_new( | |
| 76 | - PW3270_TYPE_APPLICATION_WINDOW, | |
| 77 | - "application", application, | |
| 78 | - NULL); | |
| 79 | + pw3270ApplicationWindow * window = | |
| 80 | + g_object_new( | |
| 81 | + PW3270_TYPE_APPLICATION_WINDOW, | |
| 82 | + "application", application, | |
| 83 | + NULL); | |
| 84 | + | |
| 85 | + if(PW3270_IS_APPLICATION(gtk_window_get_application(GTK_WINDOW(window)))) { | |
| 86 | + | |
| 87 | + GtkBuilder * builder = gtk_builder_new_from_file("ui/window.xml"); | |
| 88 | + | |
| 89 | + switch(pw3270_application_get_ui_type(G_APPLICATION(application))) { | |
| 90 | + case PW3270_UI_STYLE_CLASSICAL: | |
| 91 | + { | |
| 92 | + gtk_window_set_title(GTK_WINDOW(window), title); | |
| 93 | + | |
| 94 | + } | |
| 95 | + break; | |
| 96 | + | |
| 97 | + case PW3270_UI_STYLE_GNOME: | |
| 98 | + { | |
| 99 | + // Create header bar | |
| 100 | + GtkHeaderBar * header = GTK_HEADER_BAR(gtk_header_bar_new()); | |
| 101 | + gtk_window_set_titlebar(GTK_WINDOW(window), GTK_WIDGET(header)); | |
| 102 | + gtk_header_bar_set_show_close_button(header,TRUE); | |
| 103 | + | |
| 104 | + gtk_header_bar_set_title(header,title); | |
| 105 | + gtk_header_bar_set_subtitle(header,_("Disconnected from host")); | |
| 106 | + | |
| 107 | + // Create gear button | |
| 108 | + // https://wiki.gnome.org/Initiatives/GnomeGoals/GearIcons | |
| 109 | + GtkWidget * gear_menu = gtk_menu_button_new(); | |
| 110 | + gtk_button_set_image(GTK_BUTTON(gear_menu),gtk_image_new_from_icon_name("open-menu-symbolic",GTK_ICON_SIZE_MENU)); | |
| 111 | + | |
| 112 | + gtk_menu_button_set_menu_model(GTK_MENU_BUTTON(gear_menu), G_MENU_MODEL(gtk_builder_get_object (builder, "gear-menu"))); | |
| 113 | + | |
| 114 | + gtk_header_bar_pack_end(header, gear_menu); | |
| 115 | + | |
| 116 | + // Create "new tab" bar | |
| 117 | + GtkWidget * new_tab_button = gtk_button_new_from_icon_name("tab-new-symbolic",GTK_ICON_SIZE_MENU); | |
| 118 | + gtk_actionable_set_action_name(GTK_ACTIONABLE(new_tab_button),"app.new_tab"); | |
| 119 | + | |
| 120 | + gtk_header_bar_pack_start(header, new_tab_button); | |
| 121 | + | |
| 122 | + // Show the new header | |
| 123 | + gtk_widget_show_all(GTK_WIDGET(header)); | |
| 124 | + } | |
| 125 | + break; | |
| 126 | + | |
| 127 | + default: | |
| 128 | + g_warning("Unexpected UI"); | |
| 129 | + | |
| 130 | + } | |
| 131 | + | |
| 132 | + g_object_unref(builder); | |
| 133 | + | |
| 134 | + } | |
| 79 | 135 | |
| 136 | + return GTK_WIDGET(window); | |
| 80 | 137 | |
| 81 | 138 | } |
| 82 | 139 | ... | ... |