From c7e72e0e1bd7c1ef4057cf24bb32e70a076ef778 Mon Sep 17 00:00:00 2001 From: Perry Werneck Date: Thu, 28 Nov 2019 10:25:21 -0300 Subject: [PATCH] Adding lib3270's toggle accelerators. --- src/include/internals.h | 1 + src/terminal/keyboard/accelerator.c | 3 +++ src/terminal/keyboard/init.c | 38 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 42 insertions(+), 0 deletions(-) diff --git a/src/include/internals.h b/src/include/internals.h index 5c4d2b7..6d9e5a3 100644 --- a/src/include/internals.h +++ b/src/include/internals.h @@ -148,6 +148,7 @@ { V3270_ACCELERATOR_TYPE_INTERNAL, ///< @brief Accelerator is internal. V3270_ACCELERATOR_TYPE_LIB3270_ACTION, ///< @brief Accelerator is a lib3270 action. + V3270_ACCELERATOR_TYPE_LIB3270_TOGGLE, ///< @brief Accelerator is a lib3270 toggle. V3270_ACCELERATOR_TYPE_CUSTOM, ///< @brief Custom (application based) accelerator. }; diff --git a/src/terminal/keyboard/accelerator.c b/src/terminal/keyboard/accelerator.c index 66515bf..00c28c6 100644 --- a/src/terminal/keyboard/accelerator.c +++ b/src/terminal/keyboard/accelerator.c @@ -113,6 +113,9 @@ case V3270_ACCELERATOR_TYPE_LIB3270_ACTION: return ((LIB3270_ACTION *) accel->arg)->name; + case V3270_ACCELERATOR_TYPE_LIB3270_TOGGLE: + return ((LIB3270_TOGGLE *) accel->arg)->name; + case V3270_ACCELERATOR_TYPE_INTERNAL: return ((struct InternalAction *) accel->arg)->name; diff --git a/src/terminal/keyboard/init.c b/src/terminal/keyboard/init.c index 3583f23..27a10c0 100644 --- a/src/terminal/keyboard/init.c +++ b/src/terminal/keyboard/init.c @@ -34,6 +34,7 @@ #include #include #include + #include #ifndef GDK_NUMLOCK_MASK #define GDK_NUMLOCK_MASK GDK_MOD2_MASK @@ -111,6 +112,13 @@ .activate = G_CALLBACK(fire_paste_accelerator) }, + /* + + + + */ + + }; /*--[ Implement ]------------------------------------------------------------------------------------*/ @@ -131,6 +139,12 @@ } + static int fire_lib3270_toggle(GtkWidget *widget, const LIB3270_TOGGLE * action) + { + debug("%s(%s)",__FUNCTION__,action->name); + return lib3270_toggle(v3270_get_session(widget),action->id); + } + static int fire_keypad_action(GtkWidget *widget, const struct InternalAction * action) { int rc = 0; @@ -193,6 +207,30 @@ } + // Create accelerators for lib3270 toggles. + { + const LIB3270_TOGGLE * toggles = lib3270_get_toggles(); + size_t ix; + + for(ix = 0; toggles[ix].name; ix++) + { + if(toggles[ix].key) + { + V3270Accelerator * accelerator = g_new0(V3270Accelerator,1); + + accelerator->type = V3270_ACCELERATOR_TYPE_LIB3270_TOGGLE; + accelerator->arg = (gconstpointer) &toggles[ix]; + accelerator->activate = G_CALLBACK(fire_lib3270_toggle); + + gtk_accelerator_parse(toggles[ix].key,&accelerator->key,&accelerator->mods); + + widget->accelerators = g_slist_prepend(widget->accelerators,accelerator); + + } + } + + } + // Create accelerators for internal actions. { size_t ix; -- libgit2 0.21.2