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,6 +762,9 @@ void v3270_update_cursor(H3270 *session, unsigned short row, unsigned short col, | ||
762 | if(!terminal->surface) | 762 | if(!terminal->surface) |
763 | return; | 763 | return; |
764 | 764 | ||
765 | + // Reset input context | ||
766 | + gtk_im_context_reset(terminal->input_method); | ||
767 | + | ||
765 | // Update cursor rectangle | 768 | // Update cursor rectangle |
766 | saved = terminal->cursor.rect; | 769 | saved = terminal->cursor.rect; |
767 | 770 |
src/terminal/keyboard.c
@@ -90,7 +90,7 @@ | @@ -90,7 +90,7 @@ | ||
90 | #ifdef DEBUG | 90 | #ifdef DEBUG |
91 | { | 91 | { |
92 | g_autofree gchar * keyname = gtk_accelerator_name(event->keyval,event->state); | 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 | __FUNCTION__, | 94 | __FUNCTION__, |
95 | event->keyval, | 95 | event->keyval, |
96 | gdk_keyval_name(event->keyval), | 96 | gdk_keyval_name(event->keyval), |
@@ -109,19 +109,32 @@ | @@ -109,19 +109,32 @@ | ||
109 | event->state & GDK_BUTTON4_MASK ? " GDK_BUTTON4_MASK" : "", | 109 | event->state & GDK_BUTTON4_MASK ? " GDK_BUTTON4_MASK" : "", |
110 | event->state & GDK_BUTTON5_MASK ? " GDK_BUTTON5_MASK" : "", | 110 | event->state & GDK_BUTTON5_MASK ? " GDK_BUTTON5_MASK" : "", |
111 | event->state & GDK_RELEASE_MASK ? " GDK_RELEASE_MASK" : "", | 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 | #endif // DEBUG | 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 | // Signal to the application. | 139 | // Signal to the application. |
127 | gboolean handled = FALSE; | 140 | gboolean handled = FALSE; |
@@ -140,41 +153,22 @@ | @@ -140,41 +153,22 @@ | ||
140 | } | 153 | } |
141 | #endif // DEBUG | 154 | #endif // DEBUG |
142 | 155 | ||
143 | - if(handled) | 156 | + if(handled) { |
157 | + gtk_im_context_reset(terminal->input_method); | ||
144 | return TRUE; | 158 | return TRUE; |
145 | - | 159 | + } |
146 | 160 | ||
147 | // Check for acelerator | 161 | // Check for acelerator |
148 | const V3270Accelerator * accelerator = v3270_accelerator_map_lookup_entry(widget, event->keyval, event->state); | 162 | const V3270Accelerator * accelerator = v3270_accelerator_map_lookup_entry(widget, event->keyval, event->state); |
149 | if(accelerator) | 163 | if(accelerator) |
150 | { | 164 | { |
151 | debug("Found accelerator %s",v3270_accelerator_get_name(accelerator)); | 165 | debug("Found accelerator %s",v3270_accelerator_get_name(accelerator)); |
166 | + gtk_im_context_reset(terminal->input_method); | ||
152 | v3270_accelerator_activate(accelerator,widget); | 167 | v3270_accelerator_activate(accelerator,widget); |
153 | return TRUE; | 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,6 +816,9 @@ gboolean v3270_focus_out_event(GtkWidget *widget, GdkEventFocus *event) | ||
816 | 816 | ||
817 | gtk_im_context_focus_out(terminal->input_method); | 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 | return notify_focus(widget,event); | 822 | return notify_focus(widget,event); |
820 | } | 823 | } |
821 | 824 |