Commit 0f4fd014473dc7374b0129efdfc1b980496b3118

Authored by Perry Werneck
1 parent f5c3e838

Adding events for cursor state.

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