Commit 0f4fd014473dc7374b0129efdfc1b980496b3118
1 parent
f5c3e838
Exists in
master
and in
3 other branches
Adding events for cursor state.
Showing
7 changed files
with
30 additions
and
25 deletions
Show diff stats
src/core/actions/table.c
@@ -260,8 +260,8 @@ | @@ -260,8 +260,8 @@ | ||
260 | .summary = N_( "Paste file." ), | 260 | .summary = N_( "Paste file." ), |
261 | .activate = paste_file, | 261 | .activate = paste_file, |
262 | 262 | ||
263 | - .group = LIB3270_ACTION_GROUP_ONLINE, | ||
264 | - .activatable = lib3270_is_connected | 263 | + .group = LIB3270_ACTION_GROUP_LOCK_STATE, |
264 | + .activatable = lib3270_is_unlocked | ||
265 | }, | 265 | }, |
266 | 266 | ||
267 | // | 267 | // |
@@ -397,8 +397,8 @@ | @@ -397,8 +397,8 @@ | ||
397 | .summary = N_( "Backspaces the cursor until it hits the front of a word." ), | 397 | .summary = N_( "Backspaces the cursor until it hits the front of a word." ), |
398 | .activate = lib3270_deleteword, | 398 | .activate = lib3270_deleteword, |
399 | 399 | ||
400 | - .group = LIB3270_ACTION_GROUP_ONLINE, | ||
401 | - .activatable = lib3270_is_connected | 400 | + .group = LIB3270_ACTION_GROUP_LOCK_STATE, |
401 | + .activatable = lib3270_is_unlocked | ||
402 | }, | 402 | }, |
403 | 403 | ||
404 | { | 404 | { |
@@ -411,8 +411,8 @@ | @@ -411,8 +411,8 @@ | ||
411 | .summary = N_( "Delete field" ), | 411 | .summary = N_( "Delete field" ), |
412 | .activate = lib3270_deletefield, | 412 | .activate = lib3270_deletefield, |
413 | 413 | ||
414 | - .group = LIB3270_ACTION_GROUP_ONLINE, | ||
415 | - .activatable = lib3270_is_formatted | 414 | + .group = LIB3270_ACTION_GROUP_LOCK_STATE, |
415 | + .activatable = lib3270_is_unlocked | ||
416 | }, | 416 | }, |
417 | 417 | ||
418 | 418 | ||
@@ -613,8 +613,8 @@ | @@ -613,8 +613,8 @@ | ||
613 | .summary = NULL, | 613 | .summary = NULL, |
614 | .activate = lib3270_paste_next, | 614 | .activate = lib3270_paste_next, |
615 | 615 | ||
616 | - .group = LIB3270_ACTION_GROUP_ONLINE, | ||
617 | - .activatable = lib3270_is_connected | 616 | + .group = LIB3270_ACTION_GROUP_LOCK_STATE, |
617 | + .activatable = lib3270_is_unlocked | ||
618 | }, | 618 | }, |
619 | 619 | ||
620 | { | 620 | { |
src/core/keyboard/kybd.c
@@ -325,7 +325,7 @@ static void kybdlock_set(H3270 *hSession, unsigned int bits) | @@ -325,7 +325,7 @@ static void kybdlock_set(H3270 *hSession, unsigned int bits) | ||
325 | #endif | 325 | #endif |
326 | if ((hSession->kybdlock ^ bits) & KL_DEFERRED_UNLOCK) | 326 | if ((hSession->kybdlock ^ bits) & KL_DEFERRED_UNLOCK) |
327 | { | 327 | { |
328 | - /* Turned on deferred unlock. */ | 328 | + // Turned on deferred unlock. |
329 | hSession->unlock_delay_time = time(NULL); | 329 | hSession->unlock_delay_time = time(NULL); |
330 | } | 330 | } |
331 | hSession->kybdlock = n; | 331 | hSession->kybdlock = n; |
@@ -498,7 +498,7 @@ static void key_AID(H3270 *hSession, unsigned char aid_code) | @@ -498,7 +498,7 @@ static void key_AID(H3270 *hSession, unsigned char aid_code) | ||
498 | if (!IN_SSCP || aid_code != AID_CLEAR) | 498 | if (!IN_SSCP || aid_code != AID_CLEAR) |
499 | { | 499 | { |
500 | status_twait(hSession); | 500 | status_twait(hSession); |
501 | - mcursor_waiting(hSession); | 501 | + mcursor_set(hSession,LIB3270_POINTER_WAITING); |
502 | lib3270_set_toggle(hSession,LIB3270_TOGGLE_INSERT,0); | 502 | lib3270_set_toggle(hSession,LIB3270_TOGGLE_INSERT,0); |
503 | kybdlock_set(hSession,KL_OIA_TWAIT | KL_OIA_LOCKED); | 503 | kybdlock_set(hSession,KL_OIA_TWAIT | KL_OIA_LOCKED); |
504 | } | 504 | } |
@@ -1073,7 +1073,7 @@ void do_reset(H3270 *hSession, Boolean explicit) | @@ -1073,7 +1073,7 @@ void do_reset(H3270 *hSession, Boolean explicit) | ||
1073 | 1073 | ||
1074 | /* Clean up other modes. */ | 1074 | /* Clean up other modes. */ |
1075 | status_reset(hSession); | 1075 | status_reset(hSession); |
1076 | - mcursor_normal(hSession); | 1076 | + mcursor_set(hSession,LIB3270_POINTER_UNLOCKED); |
1077 | 1077 | ||
1078 | } | 1078 | } |
1079 | 1079 |
src/core/screen.c
@@ -830,15 +830,16 @@ void popup_system_error(H3270 *session, const char *title, const char *message, | @@ -830,15 +830,16 @@ void popup_system_error(H3270 *session, const char *title, const char *message, | ||
830 | va_end(args); | 830 | va_end(args); |
831 | } | 831 | } |
832 | 832 | ||
833 | -void mcursor_set(H3270 *session,LIB3270_POINTER m) | 833 | +void mcursor_set(H3270 *hSession,LIB3270_POINTER m) |
834 | { | 834 | { |
835 | - CHECK_SESSION_HANDLE(session); | ||
836 | - | ||
837 | - if(session->pointer != ((unsigned short) m)) { | 835 | + if(hSession->pointer != ((unsigned short) m)) { |
838 | 836 | ||
839 | // Pointer changed | 837 | // Pointer changed |
840 | - session->pointer = (unsigned short) m; | ||
841 | - session->cbk.cursor(session,m & 0x03); | 838 | + hSession->pointer = (unsigned short) m; |
839 | + hSession->cbk.cursor(hSession,m & 0x03); | ||
840 | + | ||
841 | + // Notify lock state change. | ||
842 | + lib3270_notify_actions(hSession, LIB3270_ACTION_GROUP_LOCK_STATE); | ||
842 | 843 | ||
843 | } | 844 | } |
844 | } | 845 | } |
src/core/state.c
@@ -86,4 +86,9 @@ LIB3270_EXPORT int lib3270_in_e(const H3270 *h) | @@ -86,4 +86,9 @@ LIB3270_EXPORT int lib3270_in_e(const H3270 *h) | ||
86 | return (h->connection.state >= LIB3270_CONNECTED_INITIAL_E); | 86 | return (h->connection.state >= LIB3270_CONNECTED_INITIAL_E); |
87 | } | 87 | } |
88 | 88 | ||
89 | +LIB3270_EXPORT int lib3270_is_unlocked(const H3270 *h) | ||
90 | +{ | ||
91 | + return h->pointer == LIB3270_POINTER_UNLOCKED; | ||
92 | +} | ||
93 | + | ||
89 | 94 |
src/include/lib3270.h
@@ -51,7 +51,7 @@ | @@ -51,7 +51,7 @@ | ||
51 | 51 | ||
52 | #define LIB3270_AUTOPTR_FUNC_NAME(TypeName) lib3270_autoptr_cleanup_##TypeName | 52 | #define LIB3270_AUTOPTR_FUNC_NAME(TypeName) lib3270_autoptr_cleanup_##TypeName |
53 | #define lib3270_autoptr(TypeName) TypeName * __attribute__ ((__cleanup__(LIB3270_AUTOPTR_FUNC_NAME(TypeName)))) | 53 | #define lib3270_autoptr(TypeName) TypeName * __attribute__ ((__cleanup__(LIB3270_AUTOPTR_FUNC_NAME(TypeName)))) |
54 | - | 54 | + |
55 | #endif // __GNUC__ | 55 | #endif // __GNUC__ |
56 | 56 | ||
57 | #if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1) || defined (__clang__) | 57 | #if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1) || defined (__clang__) |
@@ -218,9 +218,9 @@ | @@ -218,9 +218,9 @@ | ||
218 | */ | 218 | */ |
219 | typedef enum _LIB3270_POINTER | 219 | typedef enum _LIB3270_POINTER |
220 | { | 220 | { |
221 | - LIB3270_POINTER_UNLOCKED, /**< @brief Ready for user actions */ | ||
222 | - LIB3270_POINTER_WAITING, /**< @brief Waiting for host */ | ||
223 | - LIB3270_POINTER_LOCKED, /**< @brief Locked, can't receive user actions */ | 221 | + LIB3270_POINTER_UNLOCKED, ///< @brief Ready for user actions |
222 | + LIB3270_POINTER_WAITING, ///< @brief Waiting for host | ||
223 | + LIB3270_POINTER_LOCKED, ///< @brief Locked, can't receive user actions | ||
224 | 224 | ||
225 | LIB3270_POINTER_PROTECTED, | 225 | LIB3270_POINTER_PROTECTED, |
226 | LIB3270_POINTER_MOVE_SELECTION, | 226 | LIB3270_POINTER_MOVE_SELECTION, |
@@ -993,6 +993,8 @@ | @@ -993,6 +993,8 @@ | ||
993 | LIB3270_EXPORT int lib3270_is_connected(const H3270 *h); | 993 | LIB3270_EXPORT int lib3270_is_connected(const H3270 *h); |
994 | LIB3270_EXPORT int lib3270_is_disconnected(const H3270 *h); | 994 | LIB3270_EXPORT int lib3270_is_disconnected(const H3270 *h); |
995 | 995 | ||
996 | + LIB3270_EXPORT int lib3270_is_unlocked(const H3270 *h); | ||
997 | + | ||
996 | LIB3270_EXPORT int lib3270_has_active_script(const H3270 *h); | 998 | LIB3270_EXPORT int lib3270_has_active_script(const H3270 *h); |
997 | LIB3270_EXPORT int lib3270_get_typeahead(const H3270 *h); | 999 | LIB3270_EXPORT int lib3270_get_typeahead(const H3270 *h); |
998 | LIB3270_EXPORT int lib3270_get_undera(const H3270 *h); | 1000 | LIB3270_EXPORT int lib3270_get_undera(const H3270 *h); |
src/include/lib3270/actions.h
@@ -39,6 +39,7 @@ | @@ -39,6 +39,7 @@ | ||
39 | LIB3270_ACTION_GROUP_ONLINE, ///< @brief Action requires online state. | 39 | LIB3270_ACTION_GROUP_ONLINE, ///< @brief Action requires online state. |
40 | LIB3270_ACTION_GROUP_OFFLINE, ///< @brief Action requires offline state. | 40 | LIB3270_ACTION_GROUP_OFFLINE, ///< @brief Action requires offline state. |
41 | LIB3270_ACTION_GROUP_SELECTION, ///< @brief Action depends on selection. | 41 | LIB3270_ACTION_GROUP_SELECTION, ///< @brief Action depends on selection. |
42 | + LIB3270_ACTION_GROUP_LOCK_STATE, ///< @brief Action depends on keyboard lock state. | ||
42 | 43 | ||
43 | LIB3270_ACTION_GROUP_CUSTOM ///< @brief Custom group/Number of groups. | 44 | LIB3270_ACTION_GROUP_CUSTOM ///< @brief Custom group/Number of groups. |
44 | } LIB3270_ACTION_GROUP; | 45 | } LIB3270_ACTION_GROUP; |
src/include/screenc.h
@@ -43,10 +43,6 @@ | @@ -43,10 +43,6 @@ | ||
43 | LIB3270_INTERNAL int screen_init(H3270 *session); | 43 | LIB3270_INTERNAL int screen_init(H3270 *session); |
44 | LIB3270_INTERNAL void mcursor_set(H3270 *session,LIB3270_POINTER m); | 44 | LIB3270_INTERNAL void mcursor_set(H3270 *session,LIB3270_POINTER m); |
45 | 45 | ||
46 | -#define mcursor_locked(x) mcursor_set(x,LIB3270_POINTER_LOCKED) | ||
47 | -#define mcursor_normal(x) mcursor_set(x,LIB3270_POINTER_UNLOCKED) | ||
48 | -#define mcursor_waiting(x) mcursor_set(x,LIB3270_POINTER_WAITING) | ||
49 | - | ||
50 | LIB3270_INTERNAL void notify_toggle_changed(H3270 *session, LIB3270_TOGGLE_ID ix, unsigned char value, LIB3270_TOGGLE_TYPE reason); | 46 | LIB3270_INTERNAL void notify_toggle_changed(H3270 *session, LIB3270_TOGGLE_ID ix, unsigned char value, LIB3270_TOGGLE_TYPE reason); |
51 | LIB3270_INTERNAL void set_viewsize(H3270 *session, unsigned int rows, unsigned int cols); | 47 | LIB3270_INTERNAL void set_viewsize(H3270 *session, unsigned int rows, unsigned int cols); |
52 | 48 |