Commit 4fc113f7e687c1433f8155bff74d7835877d29eb
1 parent
14bc5874
Exists in
master
and in
4 other branches
Loading keypad models on application startup.
Showing
2 changed files
with
49 additions
and
3 deletions
Show diff stats
pw3270.cbp
| ... | ... | @@ -46,6 +46,7 @@ |
| 46 | 46 | <Unit filename="src/include/pw3270.h" /> |
| 47 | 47 | <Unit filename="src/include/pw3270/actions.h" /> |
| 48 | 48 | <Unit filename="src/include/pw3270/application.h" /> |
| 49 | + <Unit filename="src/include/pw3270/keypad.h" /> | |
| 49 | 50 | <Unit filename="src/include/pw3270/settings.h" /> |
| 50 | 51 | <Unit filename="src/include/pw3270/toolbar.h" /> |
| 51 | 52 | <Unit filename="src/include/pw3270/window.h" /> |
| ... | ... | @@ -109,6 +110,22 @@ |
| 109 | 110 | <Option compilerVar="CC" /> |
| 110 | 111 | </Unit> |
| 111 | 112 | <Unit filename="src/objects/application/private.h" /> |
| 113 | + <Unit filename="src/objects/keypad/attribute.c"> | |
| 114 | + <Option compilerVar="CC" /> | |
| 115 | + </Unit> | |
| 116 | + <Unit filename="src/objects/keypad/element.c"> | |
| 117 | + <Option compilerVar="CC" /> | |
| 118 | + </Unit> | |
| 119 | + <Unit filename="src/objects/keypad/keypad.c"> | |
| 120 | + <Option compilerVar="CC" /> | |
| 121 | + </Unit> | |
| 122 | + <Unit filename="src/objects/keypad/load.c"> | |
| 123 | + <Option compilerVar="CC" /> | |
| 124 | + </Unit> | |
| 125 | + <Unit filename="src/objects/keypad/private.h" /> | |
| 126 | + <Unit filename="src/objects/keypad/widget.c"> | |
| 127 | + <Option compilerVar="CC" /> | |
| 128 | + </Unit> | |
| 112 | 129 | <Unit filename="src/objects/linux/savedesktopicon.c"> |
| 113 | 130 | <Option compilerVar="CC" /> |
| 114 | 131 | </Unit> |
| ... | ... | @@ -168,9 +185,6 @@ |
| 168 | 185 | <Unit filename="ui/application.xml" /> |
| 169 | 186 | <Unit filename="ui/window.xml" /> |
| 170 | 187 | <Extensions> |
| 171 | - <code_completion /> | |
| 172 | - <debugger /> | |
| 173 | - <envvars set="default" /> | |
| 174 | 188 | <DoxyBlocks> |
| 175 | 189 | <comment_style block="0" line="0" /> |
| 176 | 190 | <doxyfile_project /> |
| ... | ... | @@ -180,6 +194,7 @@ |
| 180 | 194 | <doxyfile_dot /> |
| 181 | 195 | <general /> |
| 182 | 196 | </DoxyBlocks> |
| 197 | + <envvars set="default" /> | |
| 183 | 198 | </Extensions> |
| 184 | 199 | </Project> |
| 185 | 200 | </CodeBlocks_project_file> | ... | ... |
src/objects/application/application.c
| ... | ... | @@ -35,6 +35,7 @@ |
| 35 | 35 | #include <pw3270.h> |
| 36 | 36 | #include <pw3270/application.h> |
| 37 | 37 | #include <pw3270/actions.h> |
| 38 | + #include <pw3270/keypad.h> | |
| 38 | 39 | #include <stdlib.h> |
| 39 | 40 | |
| 40 | 41 | enum { |
| ... | ... | @@ -54,6 +55,7 @@ |
| 54 | 55 | GtkApplication parent; |
| 55 | 56 | |
| 56 | 57 | GSettings * settings; |
| 58 | + GList * keypads; | |
| 57 | 59 | |
| 58 | 60 | GSList * plugins; ///< @brief Handlers of the loaded plugins. |
| 59 | 61 | |
| ... | ... | @@ -331,6 +333,7 @@ |
| 331 | 333 | application->settings = NULL; |
| 332 | 334 | } |
| 333 | 335 | |
| 336 | + g_list_free_full(application->keypads,g_object_unref); | |
| 334 | 337 | |
| 335 | 338 | G_OBJECT_CLASS(pw3270Application_parent_class)->finalize(object); |
| 336 | 339 | |
| ... | ... | @@ -350,6 +353,8 @@ |
| 350 | 353 | |
| 351 | 354 | size_t ix; |
| 352 | 355 | |
| 356 | + pw3270Application * app = PW3270_APPLICATION(application); | |
| 357 | + | |
| 353 | 358 | G_APPLICATION_CLASS(pw3270Application_parent_class)->startup(application); |
| 354 | 359 | |
| 355 | 360 | GAction * actions[] = { |
| ... | ... | @@ -379,6 +384,32 @@ |
| 379 | 384 | } |
| 380 | 385 | #endif // DEBUG |
| 381 | 386 | |
| 387 | + | |
| 388 | + // | |
| 389 | + // Load keypad models | |
| 390 | + // | |
| 391 | + { | |
| 392 | +#ifdef DEBUG | |
| 393 | + const gchar * keypad_path = "keypad"; | |
| 394 | +#else | |
| 395 | + lib3270_autoptr(char) keypad_path = lib3270_build_data_filename("keypad",NULL); | |
| 396 | +#endif // DEBUG | |
| 397 | + | |
| 398 | + g_autoptr(GError) error = NULL; | |
| 399 | + g_autoptr(GDir) dir = g_dir_open(keypad_path,0,&error); | |
| 400 | + | |
| 401 | + const gchar *name = g_dir_read_name(dir); | |
| 402 | + while(!error && name) { | |
| 403 | + g_autofree gchar * path = g_build_filename(keypad_path,name,NULL); | |
| 404 | + app->keypads = pw3270_keypad_model_new_from_xml(app->keypads,path); | |
| 405 | + name = g_dir_read_name(dir); | |
| 406 | + } | |
| 407 | + | |
| 408 | + if(error) { | |
| 409 | + g_message("Can't read %s: %s",keypad_path,error->message); | |
| 410 | + } | |
| 411 | + } | |
| 412 | + | |
| 382 | 413 | if(gtk_application_prefers_app_menu(GTK_APPLICATION(application))) |
| 383 | 414 | gtk_application_set_app_menu(GTK_APPLICATION (application), G_MENU_MODEL(gtk_builder_get_object (builder, "app-menu"))); |
| 384 | 415 | ... | ... |