Commit 092f28fb6e0ab3ec65f40d4a2e15bd8291d70d59
1 parent
7f9b2993
Exists in
master
and in
1 other branch
Fixing 'kpalternative' option.
Showing
3 changed files
with
32 additions
and
32 deletions
Show diff stats
src/terminal/drawing/oia.c
... | ... | @@ -762,6 +762,9 @@ void v3270_update_cursor(H3270 *session, unsigned short row, unsigned short col, |
762 | 762 | if(!terminal->surface) |
763 | 763 | return; |
764 | 764 | |
765 | + // Reset input context | |
766 | + gtk_im_context_reset(terminal->input_method); | |
767 | + | |
765 | 768 | // Update cursor rectangle |
766 | 769 | saved = terminal->cursor.rect; |
767 | 770 | ... | ... |
src/terminal/keyboard.c
... | ... | @@ -90,7 +90,7 @@ |
90 | 90 | #ifdef DEBUG |
91 | 91 | { |
92 | 92 | g_autofree gchar * keyname = gtk_accelerator_name(event->keyval,event->state); |
93 | - debug("%s Keyval: %d (%s) State: %04x %s%s%s%s%s%s%s%s%s%s%s%s%s%s%s", | |
93 | + debug("%s Keyval: %d (%s) State: %04x %s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s", | |
94 | 94 | __FUNCTION__, |
95 | 95 | event->keyval, |
96 | 96 | gdk_keyval_name(event->keyval), |
... | ... | @@ -109,19 +109,32 @@ |
109 | 109 | event->state & GDK_BUTTON4_MASK ? " GDK_BUTTON4_MASK" : "", |
110 | 110 | event->state & GDK_BUTTON5_MASK ? " GDK_BUTTON5_MASK" : "", |
111 | 111 | event->state & GDK_RELEASE_MASK ? " GDK_RELEASE_MASK" : "", |
112 | - event->state & GDK_MODIFIER_MASK ? " GDK_MODIFIER_MASK" : "" | |
112 | + event->state & GDK_MODIFIER_MASK ? " GDK_MODIFIER_MASK" : "", | |
113 | + event->state & GDK_NUMLOCK_MASK ? " GDK_NUMLOCK_MASK" : "" | |
113 | 114 | ); |
114 | 115 | |
115 | 116 | } |
116 | 117 | #endif // DEBUG |
117 | 118 | |
118 | - if(gtk_im_context_filter_keypress(terminal->input_method,event)) | |
119 | - return TRUE; | |
119 | + // Check +/- keyboard redirection | |
120 | + if(lib3270_get_toggle(terminal->host,LIB3270_TOGGLE_KP_ALTERNATIVE) && (event->state & GDK_NUMLOCK_MASK)) { | |
121 | + | |
122 | + switch(event->keyval) { | |
123 | + case GDK_KP_Add: | |
124 | + debug("%s: Calling lib3270_nextfield",__FUNCTION__); | |
125 | + gtk_im_context_reset(terminal->input_method); | |
126 | + lib3270_nextfield(terminal->host); | |
127 | + return TRUE; | |
120 | 128 | |
121 | - /* | |
122 | - if(!gtk_accelerator_valid(event->keyval,event->state)) | |
123 | - return FALSE; | |
124 | - */ | |
129 | + case GDK_KP_Subtract: | |
130 | + debug("%s: Calling lib3270_previousfield",__FUNCTION__); | |
131 | + gtk_im_context_reset(terminal->input_method); | |
132 | + lib3270_previousfield(terminal->host); | |
133 | + return TRUE; | |
134 | + | |
135 | + } | |
136 | + | |
137 | + } | |
125 | 138 | |
126 | 139 | // Signal to the application. |
127 | 140 | gboolean handled = FALSE; |
... | ... | @@ -140,41 +153,22 @@ |
140 | 153 | } |
141 | 154 | #endif // DEBUG |
142 | 155 | |
143 | - if(handled) | |
156 | + if(handled) { | |
157 | + gtk_im_context_reset(terminal->input_method); | |
144 | 158 | return TRUE; |
145 | - | |
159 | + } | |
146 | 160 | |
147 | 161 | // Check for acelerator |
148 | 162 | const V3270Accelerator * accelerator = v3270_accelerator_map_lookup_entry(widget, event->keyval, event->state); |
149 | 163 | if(accelerator) |
150 | 164 | { |
151 | 165 | debug("Found accelerator %s",v3270_accelerator_get_name(accelerator)); |
166 | + gtk_im_context_reset(terminal->input_method); | |
152 | 167 | v3270_accelerator_activate(accelerator,widget); |
153 | 168 | return TRUE; |
154 | 169 | } |
155 | 170 | |
156 | - | |
157 | - // Check +/- keyboard redirection | |
158 | - if(lib3270_get_toggle(terminal->host,LIB3270_TOGGLE_KP_ALTERNATIVE) && (event->state & GDK_NUMLOCK_MASK)) { | |
159 | - | |
160 | - debug("%s: Checking keypad special actions", __FUNCTION__); | |
161 | - | |
162 | - switch(event->keyval) { | |
163 | - case GDK_KP_Add: | |
164 | - debug("%s: Calling lib3270_nextfield",__FUNCTION__); | |
165 | - lib3270_nextfield(terminal->host); | |
166 | - return TRUE; | |
167 | - | |
168 | - case GDK_KP_Subtract: | |
169 | - debug("%s: Calling lib3270_previousfield",__FUNCTION__); | |
170 | - lib3270_previousfield(terminal->host); | |
171 | - return TRUE; | |
172 | - | |
173 | - } | |
174 | - | |
175 | - } | |
176 | - | |
177 | - return FALSE; | |
171 | + return gtk_im_context_filter_keypress(terminal->input_method,event); | |
178 | 172 | |
179 | 173 | } |
180 | 174 | ... | ... |
src/terminal/widget.c
... | ... | @@ -816,6 +816,9 @@ gboolean v3270_focus_out_event(GtkWidget *widget, GdkEventFocus *event) |
816 | 816 | |
817 | 817 | gtk_im_context_focus_out(terminal->input_method); |
818 | 818 | |
819 | + terminal->keyflags &= ~KEY_FLAG_ALT; | |
820 | + v3270_draw_alt_status(terminal); | |
821 | + | |
819 | 822 | return notify_focus(widget,event); |
820 | 823 | } |
821 | 824 | ... | ... |