Commit 367599abedee4ad93fc1eb3c44895d0f4fd689a6
1 parent
79a02067
Exists in
master
and in
4 other branches
Implementing keypad view/hide menus.
Showing
9 changed files
with
243 additions
and
167 deletions
Show diff stats
src/include/pw3270.h
| @@ -52,7 +52,7 @@ | @@ -52,7 +52,7 @@ | ||
| 52 | #define I_(string) g_intern_static_string (string) | 52 | #define I_(string) g_intern_static_string (string) |
| 53 | 53 | ||
| 54 | 54 | ||
| 55 | - void pw3270_load_placeholders(GtkBuilder * builder); | 55 | + void pw3270_load_placeholders(GApplication *application, GtkBuilder * builder); |
| 56 | // GtkWidget * pw3270_frame_new(GtkWidget * child, const gchar *title); | 56 | // GtkWidget * pw3270_frame_new(GtkWidget * child, const gchar *title); |
| 57 | 57 | ||
| 58 | // Application settings widget | 58 | // Application settings widget |
src/include/pw3270/application.h
| @@ -77,6 +77,7 @@ | @@ -77,6 +77,7 @@ | ||
| 77 | 77 | ||
| 78 | // Tools | 78 | // Tools |
| 79 | GtkBuilder * pw3270_application_get_builder(const gchar *name); | 79 | GtkBuilder * pw3270_application_get_builder(const gchar *name); |
| 80 | + | ||
| 80 | void gtk_container_remove_all(GtkContainer *container); | 81 | void gtk_container_remove_all(GtkContainer *container); |
| 81 | 82 | ||
| 82 | // Actions | 83 | // Actions |
src/include/pw3270/keypad.h
| @@ -54,7 +54,7 @@ | @@ -54,7 +54,7 @@ | ||
| 54 | 54 | ||
| 55 | GList * pw3270_keypad_model_new_from_xml(GList *keypads, const gchar *filename); | 55 | GList * pw3270_keypad_model_new_from_xml(GList *keypads, const gchar *filename); |
| 56 | GtkWidget * pw3270_keypad_get_from_model(GObject *model); | 56 | GtkWidget * pw3270_keypad_get_from_model(GObject *model); |
| 57 | - const gchar * pw3270_keypad_model_get_action_name(GObject *model); | 57 | + const gchar * pw3270_keypad_model_get_name(GObject *model); |
| 58 | const gchar * pw3270_keypad_model_get_label(GObject *model); | 58 | const gchar * pw3270_keypad_model_get_label(GObject *model); |
| 59 | 59 | ||
| 60 | typedef enum _keypad_position { | 60 | typedef enum _keypad_position { |
src/main/placeholders.c
| @@ -35,14 +35,42 @@ | @@ -35,14 +35,42 @@ | ||
| 35 | 35 | ||
| 36 | #include "private.h" | 36 | #include "private.h" |
| 37 | #include <pw3270/application.h> | 37 | #include <pw3270/application.h> |
| 38 | + #include <pw3270/keypad.h> | ||
| 38 | #include <lib3270.h> | 39 | #include <lib3270.h> |
| 39 | #include <lib3270/log.h> | 40 | #include <lib3270/log.h> |
| 40 | 41 | ||
| 41 | /*---[ Implement ]----------------------------------------------------------------------------------*/ | 42 | /*---[ Implement ]----------------------------------------------------------------------------------*/ |
| 42 | 43 | ||
| 43 | - void pw3270_load_placeholders(GtkBuilder * builder) { | 44 | + static GMenu * get_keypad_menu(GApplication *application) { |
| 44 | 45 | ||
| 45 | - GObject * placeholder = gtk_builder_get_object(builder, "font-select-placeholder"); | 46 | + GList * keypads = pw3270_application_get_keypad_models(application); |
| 47 | + | ||
| 48 | + if(!keypads) | ||
| 49 | + return NULL; | ||
| 50 | + | ||
| 51 | + GMenu * menu = g_menu_new(); | ||
| 52 | + | ||
| 53 | + // Create keypad items. | ||
| 54 | + GList *item; | ||
| 55 | + for(item = keypads;item;item = g_list_next(item)) { | ||
| 56 | + GObject * model = G_OBJECT(item->data); | ||
| 57 | + g_autofree gchar * action_name = g_strconcat("win.keypad.",pw3270_keypad_model_get_name(model),NULL); | ||
| 58 | + g_menu_append(menu,pw3270_keypad_model_get_label(model),action_name); | ||
| 59 | + } | ||
| 60 | + | ||
| 61 | + return menu; | ||
| 62 | + | ||
| 63 | + } | ||
| 64 | + | ||
| 65 | + void pw3270_load_placeholders(GApplication *application, GtkBuilder * builder) { | ||
| 66 | + | ||
| 67 | + GObject * placeholder; | ||
| 68 | + size_t ix; | ||
| 69 | + | ||
| 70 | + // | ||
| 71 | + // Load fonts | ||
| 72 | + // | ||
| 73 | + placeholder = gtk_builder_get_object(builder, "font-select-placeholder"); | ||
| 46 | 74 | ||
| 47 | if(placeholder && G_IS_MENU(placeholder)) { | 75 | if(placeholder && G_IS_MENU(placeholder)) { |
| 48 | 76 | ||
| @@ -52,7 +80,6 @@ | @@ -52,7 +80,6 @@ | ||
| 52 | PangoFontFamily **families; | 80 | PangoFontFamily **families; |
| 53 | pango_context_list_families(gdk_pango_context_get_for_screen(gdk_screen_get_default()),&families, &n_families); | 81 | pango_context_list_families(gdk_pango_context_get_for_screen(gdk_screen_get_default()),&families, &n_families); |
| 54 | 82 | ||
| 55 | - size_t ix; | ||
| 56 | for(ix=0; ix < (size_t) n_families; ix++) | 83 | for(ix=0; ix < (size_t) n_families; ix++) |
| 57 | { | 84 | { |
| 58 | if(!pango_font_family_is_monospace(families[ix])) | 85 | if(!pango_font_family_is_monospace(families[ix])) |
| @@ -66,5 +93,30 @@ | @@ -66,5 +93,30 @@ | ||
| 66 | 93 | ||
| 67 | } | 94 | } |
| 68 | 95 | ||
| 96 | + // | ||
| 97 | + // View options | ||
| 98 | + // | ||
| 99 | + GMenu * keypad_menu = get_keypad_menu(application); | ||
| 100 | + | ||
| 101 | + if(keypad_menu) { | ||
| 102 | + | ||
| 103 | + static const gchar * placeholders[] = { | ||
| 104 | + "view-menu-placeholder", | ||
| 105 | + "view-when-offline-placeholder", | ||
| 106 | + "view-when-online-placeholder" | ||
| 107 | + }; | ||
| 108 | + | ||
| 109 | + for(ix = 0; ix < G_N_ELEMENTS(placeholders); ix++) { | ||
| 110 | + | ||
| 111 | + placeholder = gtk_builder_get_object(builder, placeholders[ix]); | ||
| 112 | + | ||
| 113 | + if(placeholder) { | ||
| 114 | + g_menu_append_item(G_MENU(placeholder), g_menu_item_new_submenu(_("Keypads"),G_MENU_MODEL(keypad_menu))); | ||
| 115 | + } | ||
| 116 | + | ||
| 117 | + } | ||
| 118 | + | ||
| 119 | + g_object_unref(keypad_menu); | ||
| 120 | + } | ||
| 69 | 121 | ||
| 70 | } | 122 | } |
src/objects/application/application.c
| @@ -415,7 +415,7 @@ | @@ -415,7 +415,7 @@ | ||
| 415 | 415 | ||
| 416 | gtk_application_set_menubar(GTK_APPLICATION (application), G_MENU_MODEL(gtk_builder_get_object (builder, "menubar"))); | 416 | gtk_application_set_menubar(GTK_APPLICATION (application), G_MENU_MODEL(gtk_builder_get_object (builder, "menubar"))); |
| 417 | 417 | ||
| 418 | - pw3270_load_placeholders(builder); | 418 | + pw3270_load_placeholders(application, builder); |
| 419 | 419 | ||
| 420 | g_object_unref(builder); | 420 | g_object_unref(builder); |
| 421 | 421 |
src/objects/keypad/model.c
| @@ -351,7 +351,7 @@ | @@ -351,7 +351,7 @@ | ||
| 351 | return (KEYPAD_POSITION) PW_KEYPAD_MODEL(model)->position; | 351 | return (KEYPAD_POSITION) PW_KEYPAD_MODEL(model)->position; |
| 352 | } | 352 | } |
| 353 | 353 | ||
| 354 | - const gchar * pw3270_keypad_model_get_action_name(GObject *model) { | 354 | + const gchar * pw3270_keypad_model_get_name(GObject *model) { |
| 355 | g_return_val_if_fail(PW_IS_KEYPAD_MODEL(model), NULL); | 355 | g_return_val_if_fail(PW_IS_KEYPAD_MODEL(model), NULL); |
| 356 | return PW_KEYPAD_MODEL(model)->name; | 356 | return PW_KEYPAD_MODEL(model)->name; |
| 357 | } | 357 | } |
src/objects/window/window.c
| @@ -194,9 +194,11 @@ | @@ -194,9 +194,11 @@ | ||
| 194 | g_signal_connect(widget,"hide",G_CALLBACK(keypad_hide),model); | 194 | g_signal_connect(widget,"hide",G_CALLBACK(keypad_hide),model); |
| 195 | g_signal_connect(widget,"show",G_CALLBACK(keypad_show),model); | 195 | g_signal_connect(widget,"show",G_CALLBACK(keypad_show),model); |
| 196 | 196 | ||
| 197 | + g_autofree gchar * action_name = g_strconcat("keypad.",pw3270_keypad_model_get_name(model),NULL); | ||
| 198 | + | ||
| 197 | GPropertyAction * action = | 199 | GPropertyAction * action = |
| 198 | g_property_action_new( | 200 | g_property_action_new( |
| 199 | - pw3270_keypad_model_get_action_name(model), | 201 | + action_name, |
| 200 | widget, | 202 | widget, |
| 201 | "visible" | 203 | "visible" |
| 202 | ); | 204 | ); |
| @@ -243,7 +245,7 @@ | @@ -243,7 +245,7 @@ | ||
| 243 | gtk_notebook_set_action_widget(widget->notebook,new_tab,GTK_PACK_START); | 245 | gtk_notebook_set_action_widget(widget->notebook,new_tab,GTK_PACK_START); |
| 244 | } | 246 | } |
| 245 | 247 | ||
| 246 | - widget->toolbar = GTK_TOOLBAR(pw3270_toolbar_new()); | 248 | + widget->toolbar = GTK_TOOLBAR(pw3270_toolbar_new()); |
| 247 | gtk_box_pack_start(container,GTK_WIDGET(widget->toolbar),FALSE,TRUE,0); | 249 | gtk_box_pack_start(container,GTK_WIDGET(widget->toolbar),FALSE,TRUE,0); |
| 248 | 250 | ||
| 249 | // | 251 | // |
| @@ -447,6 +449,7 @@ | @@ -447,6 +449,7 @@ | ||
| 447 | // Get builder | 449 | // Get builder |
| 448 | // | 450 | // |
| 449 | g_autoptr(GtkBuilder) builder = pw3270_application_get_builder("window.xml"); | 451 | g_autoptr(GtkBuilder) builder = pw3270_application_get_builder("window.xml"); |
| 452 | + pw3270_load_placeholders(G_APPLICATION(application), builder); | ||
| 450 | 453 | ||
| 451 | // Load popup menus. | 454 | // Load popup menus. |
| 452 | const gchar * popup_menus[PW3270_APP_WINDOW_POPUP_COUNT] = { | 455 | const gchar * popup_menus[PW3270_APP_WINDOW_POPUP_COUNT] = { |
ui/application.xml
| @@ -79,7 +79,6 @@ | @@ -79,7 +79,6 @@ | ||
| 79 | 79 | ||
| 80 | </submenu> | 80 | </submenu> |
| 81 | 81 | ||
| 82 | - | ||
| 83 | <item> | 82 | <item> |
| 84 | <attribute name="label" translatable="yes">Application preferences</attribute> | 83 | <attribute name="label" translatable="yes">Application preferences</attribute> |
| 85 | <attribute name="action">app.preferences</attribute> | 84 | <attribute name="action">app.preferences</attribute> |
ui/window.xml
| @@ -274,181 +274,191 @@ | @@ -274,181 +274,191 @@ | ||
| 274 | 274 | ||
| 275 | <menu id="popup-over-unselected-area"> | 275 | <menu id="popup-over-unselected-area"> |
| 276 | 276 | ||
| 277 | - <submenu> | ||
| 278 | - | ||
| 279 | - <attribute name='label' translatable='yes'>_Edit</attribute> | ||
| 280 | - | ||
| 281 | - <section> | ||
| 282 | - | ||
| 283 | - <item> | ||
| 284 | - <attribute name="label" translatable="yes">Paste from clipboard</attribute> | ||
| 285 | - <attribute name="action">win.paste</attribute> | ||
| 286 | - </item> | ||
| 287 | - | ||
| 288 | - <item> | ||
| 289 | - <attribute name="label" translatable="yes">Paste next</attribute> | ||
| 290 | - <attribute name="action">win.paste-next</attribute> | ||
| 291 | - </item> | ||
| 292 | - | ||
| 293 | - <item> | ||
| 294 | - <attribute name="label" translatable="yes">Paste from text file</attribute> | ||
| 295 | - <attribute name="action">win.paste-file</attribute> | ||
| 296 | - </item> | ||
| 297 | - | ||
| 298 | - </section> | ||
| 299 | - | ||
| 300 | - <section> | ||
| 301 | - | ||
| 302 | - <item> | ||
| 303 | - <attribute name="label" translatable="yes">Select all</attribute> | ||
| 304 | - <attribute name="action">win.select-all</attribute> | ||
| 305 | - </item> | ||
| 306 | - | ||
| 307 | - <item> | ||
| 308 | - <attribute name="label" translatable="yes">Select Field</attribute> | ||
| 309 | - <attribute name="action">win.select-field</attribute> | ||
| 310 | - </item> | ||
| 311 | - | ||
| 312 | - <item> | ||
| 313 | - <attribute name="label" translatable="yes">Reselect</attribute> | ||
| 314 | - <attribute name="action">win.reselect</attribute> | ||
| 315 | - </item> | ||
| 316 | - | ||
| 317 | - </section> | ||
| 318 | - | ||
| 319 | - <section> | 277 | + <submenu> |
| 320 | 278 | ||
| 321 | - <item> | ||
| 322 | - <attribute name="label" translatable="yes">Clear</attribute> | ||
| 323 | - <attribute name="action">win.clear</attribute> | ||
| 324 | - </item> | 279 | + <attribute name='label' translatable='yes'>_Edit</attribute> |
| 325 | 280 | ||
| 326 | - <item> | ||
| 327 | - <attribute name="label" translatable="yes">Erase input</attribute> | ||
| 328 | - <attribute name="action">win.erase_input</attribute> | ||
| 329 | - </item> | 281 | + <section> |
| 330 | 282 | ||
| 331 | <item> | 283 | <item> |
| 332 | - <attribute name="label" translatable="yes">Delete Field</attribute> | ||
| 333 | - <attribute name="action">win.delete_field</attribute> | 284 | + <attribute name="label" translatable="yes">Paste from clipboard</attribute> |
| 285 | + <attribute name="action">win.paste</attribute> | ||
| 334 | </item> | 286 | </item> |
| 335 | 287 | ||
| 336 | <item> | 288 | <item> |
| 337 | - <attribute name="label" translatable="yes">Erase to end of field</attribute> | ||
| 338 | - <attribute name="action">win.erase_eof</attribute> | 289 | + <attribute name="label" translatable="yes">Paste next</attribute> |
| 290 | + <attribute name="action">win.paste-next</attribute> | ||
| 339 | </item> | 291 | </item> |
| 340 | 292 | ||
| 341 | <item> | 293 | <item> |
| 342 | - <attribute name="label" translatable="yes">Erase to end of line</attribute> | ||
| 343 | - <attribute name="action">win.erase_eol</attribute> | 294 | + <attribute name="label" translatable="yes">Paste from text file</attribute> |
| 295 | + <attribute name="action">win.paste-file</attribute> | ||
| 344 | </item> | 296 | </item> |
| 345 | 297 | ||
| 346 | - </section> | ||
| 347 | - | ||
| 348 | - </submenu> | 298 | + </section> |
| 349 | 299 | ||
| 350 | - <item> | ||
| 351 | - <attribute name="label" translatable="yes">Save screen</attribute> | ||
| 352 | - <attribute name="action">win.save.screen</attribute> | ||
| 353 | - </item> | 300 | + <section> |
| 354 | 301 | ||
| 355 | - <item> | ||
| 356 | - <attribute name="label" translatable="yes">Print screen</attribute> | ||
| 357 | - <attribute name="action">win.print.screen</attribute> | ||
| 358 | - </item> | 302 | + <item> |
| 303 | + <attribute name="label" translatable="yes">Select all</attribute> | ||
| 304 | + <attribute name="action">win.select-all</attribute> | ||
| 305 | + </item> | ||
| 359 | 306 | ||
| 360 | - <item> | ||
| 361 | - <attribute name="label" translatable="yes">Send/Receive files</attribute> | ||
| 362 | - <attribute name="action">win.file.transfer</attribute> | ||
| 363 | - </item> | 307 | + <item> |
| 308 | + <attribute name="label" translatable="yes">Select Field</attribute> | ||
| 309 | + <attribute name="action">win.select-field</attribute> | ||
| 310 | + </item> | ||
| 364 | 311 | ||
| 365 | - <submenu> | 312 | + <item> |
| 313 | + <attribute name="label" translatable="yes">Reselect</attribute> | ||
| 314 | + <attribute name="action">win.reselect</attribute> | ||
| 315 | + </item> | ||
| 366 | 316 | ||
| 367 | - <attribute name='label' translatable='yes'>Options</attribute> | 317 | + </section> |
| 368 | 318 | ||
| 369 | - <section> | 319 | + <section> |
| 370 | 320 | ||
| 371 | <item> | 321 | <item> |
| 372 | - <attribute name="label" translatable="yes">Cross hair cursor</attribute> | ||
| 373 | - <attribute name="action">win.crosshair</attribute> | 322 | + <attribute name="label" translatable="yes">Clear</attribute> |
| 323 | + <attribute name="action">win.clear</attribute> | ||
| 374 | </item> | 324 | </item> |
| 375 | 325 | ||
| 376 | <item> | 326 | <item> |
| 377 | - <attribute name="label" translatable="yes">Resize on alternate screen</attribute> | ||
| 378 | - <attribute name="action">win.altscreen</attribute> | 327 | + <attribute name="label" translatable="yes">Erase input</attribute> |
| 328 | + <attribute name="action">win.erase_input</attribute> | ||
| 379 | </item> | 329 | </item> |
| 380 | 330 | ||
| 381 | <item> | 331 | <item> |
| 382 | - <attribute name="label" translatable="yes">Alert sound</attribute> | ||
| 383 | - <attribute name="action">win.beep</attribute> | 332 | + <attribute name="label" translatable="yes">Delete Field</attribute> |
| 333 | + <attribute name="action">win.delete_field</attribute> | ||
| 384 | </item> | 334 | </item> |
| 385 | 335 | ||
| 386 | - </section> | ||
| 387 | - | ||
| 388 | <item> | 336 | <item> |
| 389 | - <attribute name="label" translatable="yes">Monocase</attribute> | ||
| 390 | - <attribute name="action">win.monocase</attribute> | 337 | + <attribute name="label" translatable="yes">Erase to end of field</attribute> |
| 338 | + <attribute name="action">win.erase_eof</attribute> | ||
| 391 | </item> | 339 | </item> |
| 392 | 340 | ||
| 393 | <item> | 341 | <item> |
| 394 | - <attribute name="label" translatable="yes">Dynamic font spacing</attribute> | ||
| 395 | - <attribute name="action">win.dynamic-font-spacing</attribute> | 342 | + <attribute name="label" translatable="yes">Erase to end of line</attribute> |
| 343 | + <attribute name="action">win.erase_eol</attribute> | ||
| 396 | </item> | 344 | </item> |
| 345 | + | ||
| 346 | + </section> | ||
| 347 | + | ||
| 348 | + </submenu> | ||
| 349 | + | ||
| 350 | + <submenu> | ||
| 351 | + | ||
| 352 | + <attribute name='label' translatable='yes'>Options</attribute> | ||
| 353 | + | ||
| 354 | + <section> | ||
| 355 | + | ||
| 356 | + <item> | ||
| 357 | + <attribute name="label" translatable="yes">Cross hair cursor</attribute> | ||
| 358 | + <attribute name="action">win.crosshair</attribute> | ||
| 359 | + </item> | ||
| 360 | + | ||
| 361 | + <item> | ||
| 362 | + <attribute name="label" translatable="yes">Resize on alternate screen</attribute> | ||
| 363 | + <attribute name="action">win.altscreen</attribute> | ||
| 364 | + </item> | ||
| 365 | + | ||
| 366 | + <item> | ||
| 367 | + <attribute name="label" translatable="yes">Alert sound</attribute> | ||
| 368 | + <attribute name="action">win.beep</attribute> | ||
| 369 | + </item> | ||
| 370 | + | ||
| 371 | + </section> | ||
| 372 | + | ||
| 373 | + <item> | ||
| 374 | + <attribute name="label" translatable="yes">Monocase</attribute> | ||
| 375 | + <attribute name="action">win.monocase</attribute> | ||
| 376 | + </item> | ||
| 377 | + | ||
| 378 | + <item> | ||
| 379 | + <attribute name="label" translatable="yes">Dynamic font spacing</attribute> | ||
| 380 | + <attribute name="action">win.dynamic-font-spacing</attribute> | ||
| 381 | + </item> | ||
| 397 | 382 | ||
| 398 | - <section> | 383 | + <section> |
| 399 | 384 | ||
| 400 | - </section> | 385 | + <item> |
| 386 | + <attribute name="label" translatable="yes">Smart paste</attribute> | ||
| 387 | + <attribute name="action">win.smartpaste</attribute> | ||
| 388 | + </item> | ||
| 401 | 389 | ||
| 402 | - <section> | 390 | + <item> |
| 391 | + <attribute name="label" translatable="yes">Paste with left margin</attribute> | ||
| 392 | + <attribute name="action">win.marginedpaste</attribute> | ||
| 393 | + </item> | ||
| 403 | 394 | ||
| 404 | - <item> | ||
| 405 | - <attribute name="label" translatable="yes">Smart paste</attribute> | ||
| 406 | - <attribute name="action">win.smartpaste</attribute> | ||
| 407 | - </item> | 395 | + <item> |
| 396 | + <attribute name="label" translatable="yes">Blank Fill</attribute> | ||
| 397 | + <attribute name="action">win.blankfill</attribute> | ||
| 398 | + </item> | ||
| 408 | 399 | ||
| 409 | - <item> | ||
| 410 | - <attribute name="label" translatable="yes">Paste with left margin</attribute> | ||
| 411 | - <attribute name="action">win.marginedpaste</attribute> | ||
| 412 | - </item> | 400 | + </section> |
| 401 | + | ||
| 402 | + <section> | ||
| 413 | 403 | ||
| 414 | <item> | 404 | <item> |
| 415 | - <attribute name="label" translatable="yes">Blank Fill</attribute> | ||
| 416 | - <attribute name="action">win.blankfill</attribute> | 405 | + <attribute name="label" translatable="yes">Full screen</attribute> |
| 406 | + <attribute name="action">win.fullscreen</attribute> | ||
| 417 | </item> | 407 | </item> |
| 418 | 408 | ||
| 419 | - </section> | 409 | + </section> |
| 420 | 410 | ||
| 421 | - <section> | 411 | + </submenu> |
| 412 | + | ||
| 413 | + <submenu id="view-when-online-placeholder"> | ||
| 414 | + | ||
| 415 | + <attribute name='label' translatable='yes'>View</attribute> | ||
| 422 | 416 | ||
| 423 | <item> | 417 | <item> |
| 424 | - <attribute name="label" translatable="yes">Show toolbar</attribute> | 418 | + <attribute name="label" translatable="yes">Toolbar</attribute> |
| 425 | <attribute name="action">win.toolbar</attribute> | 419 | <attribute name="action">win.toolbar</attribute> |
| 426 | </item> | 420 | </item> |
| 427 | 421 | ||
| 428 | <item> | 422 | <item> |
| 429 | - <attribute name="label" translatable="yes">Show menu</attribute> | 423 | + <attribute name="label" translatable="yes">Top menu</attribute> |
| 430 | <attribute name="action">win.menubar</attribute> | 424 | <attribute name="action">win.menubar</attribute> |
| 431 | </item> | 425 | </item> |
| 432 | 426 | ||
| 427 | + </submenu> | ||
| 428 | + | ||
| 429 | + <section> | ||
| 430 | + | ||
| 433 | <item> | 431 | <item> |
| 434 | - <attribute name="label" translatable="yes">Full screen</attribute> | ||
| 435 | - <attribute name="action">win.fullscreen</attribute> | 432 | + <attribute name="label" translatable="yes">Save screen</attribute> |
| 433 | + <attribute name="action">win.save.screen</attribute> | ||
| 434 | + </item> | ||
| 435 | + | ||
| 436 | + <item> | ||
| 437 | + <attribute name="label" translatable="yes">Print screen</attribute> | ||
| 438 | + <attribute name="action">win.print.screen</attribute> | ||
| 439 | + </item> | ||
| 440 | + | ||
| 441 | + <item> | ||
| 442 | + <attribute name="label" translatable="yes">Send/Receive files</attribute> | ||
| 443 | + <attribute name="action">win.file.transfer</attribute> | ||
| 436 | </item> | 444 | </item> |
| 437 | 445 | ||
| 438 | </section> | 446 | </section> |
| 439 | 447 | ||
| 440 | - </submenu> | 448 | + <section> |
| 441 | 449 | ||
| 442 | - <item> | ||
| 443 | - <attribute name="label" translatable="yes">Disconnect</attribute> | ||
| 444 | - <attribute name="action">win.disconnect</attribute> | ||
| 445 | - </item> | 450 | + <item> |
| 451 | + <attribute name="label" translatable="yes">Disconnect</attribute> | ||
| 452 | + <attribute name="action">win.disconnect</attribute> | ||
| 453 | + </item> | ||
| 446 | 454 | ||
| 447 | - <item> | ||
| 448 | - <attribute name="label" translatable="yes">Close window</attribute> | ||
| 449 | - <attribute name="action">win.close</attribute> | ||
| 450 | - </item> | 455 | + <item> |
| 456 | + <attribute name="label" translatable="yes">Close window</attribute> | ||
| 457 | + <attribute name="action">win.close</attribute> | ||
| 458 | + </item> | ||
| 451 | 459 | ||
| 460 | + </section> | ||
| 461 | + | ||
| 452 | </menu> | 462 | </menu> |
| 453 | 463 | ||
| 454 | <menu id="popup-over-oia"> | 464 | <menu id="popup-over-oia"> |
| @@ -472,73 +482,84 @@ | @@ -472,73 +482,84 @@ | ||
| 472 | 482 | ||
| 473 | <menu id="popup-when-offline"> | 483 | <menu id="popup-when-offline"> |
| 474 | 484 | ||
| 475 | - <item> | ||
| 476 | - <attribute name="label" translatable="yes">_Connect</attribute> | ||
| 477 | - <attribute name="action">win.connect</attribute> | ||
| 478 | - </item> | ||
| 479 | - | ||
| 480 | - <item> | ||
| 481 | - <attribute name="label" translatable="yes">Session properties</attribute> | ||
| 482 | - <attribute name="action">win.session.properties</attribute> | ||
| 483 | - </item> | ||
| 484 | - | ||
| 485 | <submenu> | 485 | <submenu> |
| 486 | 486 | ||
| 487 | - <attribute name="label" translatable="yes">Screen size</attribute> | 487 | + <attribute name='label' translatable='yes'>Options</attribute> |
| 488 | 488 | ||
| 489 | <item> | 489 | <item> |
| 490 | - <attribute name="label" translatable="yes">Model 2 - 80x24</attribute> | ||
| 491 | - <attribute name="action">win.model-number</attribute> | ||
| 492 | - <attribute name="target">2</attribute> | ||
| 493 | - </item> | ||
| 494 | - <item> | ||
| 495 | - <attribute name="label" translatable="yes">Model 3 - 80x32</attribute> | ||
| 496 | - <attribute name="action">win.model-number</attribute> | ||
| 497 | - <attribute name="target">3</attribute> | ||
| 498 | - </item> | ||
| 499 | - <item> | ||
| 500 | - <attribute name="label" translatable="yes">Model 4 - 80x43</attribute> | ||
| 501 | - <attribute name="action">win.model-number</attribute> | ||
| 502 | - <attribute name="target">4</attribute> | 490 | + <attribute name="label" translatable="yes">Dynamic font spacing</attribute> |
| 491 | + <attribute name="action">win.dynamic-font-spacing</attribute> | ||
| 503 | </item> | 492 | </item> |
| 493 | + | ||
| 504 | <item> | 494 | <item> |
| 505 | - <attribute name="label" translatable="yes">Model 5 - 132x27</attribute> | ||
| 506 | - <attribute name="action">win.model-number</attribute> | ||
| 507 | - <attribute name="target">5</attribute> | 495 | + <attribute name="label" translatable="yes">Full screen</attribute> |
| 496 | + <attribute name="action">win.fullscreen</attribute> | ||
| 508 | </item> | 497 | </item> |
| 509 | 498 | ||
| 499 | + <submenu> | ||
| 500 | + | ||
| 501 | + <attribute name="label" translatable="yes">Screen size</attribute> | ||
| 502 | + | ||
| 503 | + <item> | ||
| 504 | + <attribute name="label" translatable="yes">Model 2 - 80x24</attribute> | ||
| 505 | + <attribute name="action">win.model-number</attribute> | ||
| 506 | + <attribute name="target">2</attribute> | ||
| 507 | + </item> | ||
| 508 | + <item> | ||
| 509 | + <attribute name="label" translatable="yes">Model 3 - 80x32</attribute> | ||
| 510 | + <attribute name="action">win.model-number</attribute> | ||
| 511 | + <attribute name="target">3</attribute> | ||
| 512 | + </item> | ||
| 513 | + <item> | ||
| 514 | + <attribute name="label" translatable="yes">Model 4 - 80x43</attribute> | ||
| 515 | + <attribute name="action">win.model-number</attribute> | ||
| 516 | + <attribute name="target">4</attribute> | ||
| 517 | + </item> | ||
| 518 | + <item> | ||
| 519 | + <attribute name="label" translatable="yes">Model 5 - 132x27</attribute> | ||
| 520 | + <attribute name="action">win.model-number</attribute> | ||
| 521 | + <attribute name="target">5</attribute> | ||
| 522 | + </item> | ||
| 523 | + | ||
| 524 | + </submenu> | ||
| 525 | + | ||
| 510 | </submenu> | 526 | </submenu> |
| 511 | 527 | ||
| 512 | - <submenu> | 528 | + <submenu id="view-when-offline-placeholder"> |
| 513 | 529 | ||
| 514 | - <attribute name='label' translatable='yes'>Options</attribute> | 530 | + <attribute name='label' translatable='yes'>View</attribute> |
| 515 | 531 | ||
| 516 | <item> | 532 | <item> |
| 517 | - <attribute name="label" translatable="yes">Dynamic font spacing</attribute> | ||
| 518 | - <attribute name="action">win.dynamic-font-spacing</attribute> | 533 | + <attribute name="label" translatable="yes">Toolbar</attribute> |
| 534 | + <attribute name="action">win.toolbar</attribute> | ||
| 519 | </item> | 535 | </item> |
| 520 | 536 | ||
| 521 | <item> | 537 | <item> |
| 522 | - <attribute name="label" translatable="yes">Show toolbar</attribute> | ||
| 523 | - <attribute name="action">win.toolbar</attribute> | 538 | + <attribute name="label" translatable="yes">Main menu</attribute> |
| 539 | + <attribute name="action">win.menubar</attribute> | ||
| 524 | </item> | 540 | </item> |
| 525 | 541 | ||
| 542 | + </submenu> | ||
| 543 | + | ||
| 544 | + <section> | ||
| 545 | + | ||
| 526 | <item> | 546 | <item> |
| 527 | - <attribute name="label" translatable="yes">Show menu</attribute> | ||
| 528 | - <attribute name="action">win.menubar</attribute> | 547 | + <attribute name="label" translatable="yes">_Connect</attribute> |
| 548 | + <attribute name="action">win.connect</attribute> | ||
| 529 | </item> | 549 | </item> |
| 530 | 550 | ||
| 531 | <item> | 551 | <item> |
| 532 | - <attribute name="label" translatable="yes">Full screen</attribute> | ||
| 533 | - <attribute name="action">win.fullscreen</attribute> | 552 | + <attribute name="label" translatable="yes">Session properties</attribute> |
| 553 | + <attribute name="action">win.session.properties</attribute> | ||
| 534 | </item> | 554 | </item> |
| 535 | 555 | ||
| 536 | - </submenu> | ||
| 537 | 556 | ||
| 538 | - <item> | ||
| 539 | - <attribute name="label" translatable="yes">Close window</attribute> | ||
| 540 | - <attribute name="action">win.close</attribute> | ||
| 541 | - </item> | 557 | + <item> |
| 558 | + <attribute name="label" translatable="yes">Close window</attribute> | ||
| 559 | + <attribute name="action">win.close</attribute> | ||
| 560 | + </item> | ||
| 561 | + | ||
| 562 | + </section> | ||
| 542 | 563 | ||
| 543 | </menu> | 564 | </menu> |
| 544 | 565 |