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 |