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 |