Commit c7e72e0e1bd7c1ef4057cf24bb32e70a076ef778
1 parent
06f4b00a
Exists in
master
and in
1 other branch
Adding lib3270's toggle accelerators.
Showing
3 changed files
with
42 additions
and
0 deletions
Show diff stats
src/include/internals.h
| @@ -148,6 +148,7 @@ | @@ -148,6 +148,7 @@ | ||
| 148 | { | 148 | { |
| 149 | V3270_ACCELERATOR_TYPE_INTERNAL, ///< @brief Accelerator is internal. | 149 | V3270_ACCELERATOR_TYPE_INTERNAL, ///< @brief Accelerator is internal. |
| 150 | V3270_ACCELERATOR_TYPE_LIB3270_ACTION, ///< @brief Accelerator is a lib3270 action. | 150 | V3270_ACCELERATOR_TYPE_LIB3270_ACTION, ///< @brief Accelerator is a lib3270 action. |
| 151 | + V3270_ACCELERATOR_TYPE_LIB3270_TOGGLE, ///< @brief Accelerator is a lib3270 toggle. | ||
| 151 | V3270_ACCELERATOR_TYPE_CUSTOM, ///< @brief Custom (application based) accelerator. | 152 | V3270_ACCELERATOR_TYPE_CUSTOM, ///< @brief Custom (application based) accelerator. |
| 152 | }; | 153 | }; |
| 153 | 154 |
src/terminal/keyboard/accelerator.c
| @@ -113,6 +113,9 @@ | @@ -113,6 +113,9 @@ | ||
| 113 | case V3270_ACCELERATOR_TYPE_LIB3270_ACTION: | 113 | case V3270_ACCELERATOR_TYPE_LIB3270_ACTION: |
| 114 | return ((LIB3270_ACTION *) accel->arg)->name; | 114 | return ((LIB3270_ACTION *) accel->arg)->name; |
| 115 | 115 | ||
| 116 | + case V3270_ACCELERATOR_TYPE_LIB3270_TOGGLE: | ||
| 117 | + return ((LIB3270_TOGGLE *) accel->arg)->name; | ||
| 118 | + | ||
| 116 | case V3270_ACCELERATOR_TYPE_INTERNAL: | 119 | case V3270_ACCELERATOR_TYPE_INTERNAL: |
| 117 | return ((struct InternalAction *) accel->arg)->name; | 120 | return ((struct InternalAction *) accel->arg)->name; |
| 118 | 121 |
src/terminal/keyboard/init.c
| @@ -34,6 +34,7 @@ | @@ -34,6 +34,7 @@ | ||
| 34 | #include <lib3270/actions.h> | 34 | #include <lib3270/actions.h> |
| 35 | #include <gdk/gdkkeysyms-compat.h> | 35 | #include <gdk/gdkkeysyms-compat.h> |
| 36 | #include <v3270/actions.h> | 36 | #include <v3270/actions.h> |
| 37 | + #include <lib3270/toggle.h> | ||
| 37 | 38 | ||
| 38 | #ifndef GDK_NUMLOCK_MASK | 39 | #ifndef GDK_NUMLOCK_MASK |
| 39 | #define GDK_NUMLOCK_MASK GDK_MOD2_MASK | 40 | #define GDK_NUMLOCK_MASK GDK_MOD2_MASK |
| @@ -111,6 +112,13 @@ | @@ -111,6 +112,13 @@ | ||
| 111 | .activate = G_CALLBACK(fire_paste_accelerator) | 112 | .activate = G_CALLBACK(fire_paste_accelerator) |
| 112 | }, | 113 | }, |
| 113 | 114 | ||
| 115 | + /* | ||
| 116 | + <accelerator action='zoom' mode='in' key='<ctrl>KP_Add' group='online' /> | ||
| 117 | + <accelerator action='zoom' mode='out' key='<ctrl>KP_Subtract' group='online' /> | ||
| 118 | + <accelerator action='zoom' mode='fit' key='<ctrl>0' group='online' /> | ||
| 119 | + */ | ||
| 120 | + | ||
| 121 | + | ||
| 114 | }; | 122 | }; |
| 115 | 123 | ||
| 116 | /*--[ Implement ]------------------------------------------------------------------------------------*/ | 124 | /*--[ Implement ]------------------------------------------------------------------------------------*/ |
| @@ -131,6 +139,12 @@ | @@ -131,6 +139,12 @@ | ||
| 131 | 139 | ||
| 132 | } | 140 | } |
| 133 | 141 | ||
| 142 | + static int fire_lib3270_toggle(GtkWidget *widget, const LIB3270_TOGGLE * action) | ||
| 143 | + { | ||
| 144 | + debug("%s(%s)",__FUNCTION__,action->name); | ||
| 145 | + return lib3270_toggle(v3270_get_session(widget),action->id); | ||
| 146 | + } | ||
| 147 | + | ||
| 134 | static int fire_keypad_action(GtkWidget *widget, const struct InternalAction * action) | 148 | static int fire_keypad_action(GtkWidget *widget, const struct InternalAction * action) |
| 135 | { | 149 | { |
| 136 | int rc = 0; | 150 | int rc = 0; |
| @@ -193,6 +207,30 @@ | @@ -193,6 +207,30 @@ | ||
| 193 | 207 | ||
| 194 | } | 208 | } |
| 195 | 209 | ||
| 210 | + // Create accelerators for lib3270 toggles. | ||
| 211 | + { | ||
| 212 | + const LIB3270_TOGGLE * toggles = lib3270_get_toggles(); | ||
| 213 | + size_t ix; | ||
| 214 | + | ||
| 215 | + for(ix = 0; toggles[ix].name; ix++) | ||
| 216 | + { | ||
| 217 | + if(toggles[ix].key) | ||
| 218 | + { | ||
| 219 | + V3270Accelerator * accelerator = g_new0(V3270Accelerator,1); | ||
| 220 | + | ||
| 221 | + accelerator->type = V3270_ACCELERATOR_TYPE_LIB3270_TOGGLE; | ||
| 222 | + accelerator->arg = (gconstpointer) &toggles[ix]; | ||
| 223 | + accelerator->activate = G_CALLBACK(fire_lib3270_toggle); | ||
| 224 | + | ||
| 225 | + gtk_accelerator_parse(toggles[ix].key,&accelerator->key,&accelerator->mods); | ||
| 226 | + | ||
| 227 | + widget->accelerators = g_slist_prepend(widget->accelerators,accelerator); | ||
| 228 | + | ||
| 229 | + } | ||
| 230 | + } | ||
| 231 | + | ||
| 232 | + } | ||
| 233 | + | ||
| 196 | // Create accelerators for internal actions. | 234 | // Create accelerators for internal actions. |
| 197 | { | 235 | { |
| 198 | size_t ix; | 236 | size_t ix; |