Commit c7e72e0e1bd7c1ef4057cf24bb32e70a076ef778

Authored by Perry Werneck
1 parent 06f4b00a
Exists in master and in 1 other branch develop

Adding lib3270's toggle accelerators.

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;