Commit 0f4fd014473dc7374b0129efdfc1b980496b3118

Authored by Perry Werneck
1 parent f5c3e838

Adding events for cursor state.

src/core/actions/table.c
... ... @@ -260,8 +260,8 @@
260 260 .summary = N_( "Paste file." ),
261 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 397 .summary = N_( "Backspaces the cursor until it hits the front of a word." ),
398 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 411 .summary = N_( "Delete field" ),
412 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 613 .summary = NULL,
614 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 325 #endif
326 326 if ((hSession->kybdlock ^ bits) & KL_DEFERRED_UNLOCK)
327 327 {
328   - /* Turned on deferred unlock. */
  328 + // Turned on deferred unlock.
329 329 hSession->unlock_delay_time = time(NULL);
330 330 }
331 331 hSession->kybdlock = n;
... ... @@ -498,7 +498,7 @@ static void key_AID(H3270 *hSession, unsigned char aid_code)
498 498 if (!IN_SSCP || aid_code != AID_CLEAR)
499 499 {
500 500 status_twait(hSession);
501   - mcursor_waiting(hSession);
  501 + mcursor_set(hSession,LIB3270_POINTER_WAITING);
502 502 lib3270_set_toggle(hSession,LIB3270_TOGGLE_INSERT,0);
503 503 kybdlock_set(hSession,KL_OIA_TWAIT | KL_OIA_LOCKED);
504 504 }
... ... @@ -1073,7 +1073,7 @@ void do_reset(H3270 *hSession, Boolean explicit)
1073 1073  
1074 1074 /* Clean up other modes. */
1075 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 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 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 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 51  
52 52 #define LIB3270_AUTOPTR_FUNC_NAME(TypeName) lib3270_autoptr_cleanup_##TypeName
53 53 #define lib3270_autoptr(TypeName) TypeName * __attribute__ ((__cleanup__(LIB3270_AUTOPTR_FUNC_NAME(TypeName))))
54   -
  54 +
55 55 #endif // __GNUC__
56 56  
57 57 #if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1) || defined (__clang__)
... ... @@ -218,9 +218,9 @@
218 218 */
219 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 225 LIB3270_POINTER_PROTECTED,
226 226 LIB3270_POINTER_MOVE_SELECTION,
... ... @@ -993,6 +993,8 @@
993 993 LIB3270_EXPORT int lib3270_is_connected(const H3270 *h);
994 994 LIB3270_EXPORT int lib3270_is_disconnected(const H3270 *h);
995 995  
  996 + LIB3270_EXPORT int lib3270_is_unlocked(const H3270 *h);
  997 +
996 998 LIB3270_EXPORT int lib3270_has_active_script(const H3270 *h);
997 999 LIB3270_EXPORT int lib3270_get_typeahead(const H3270 *h);
998 1000 LIB3270_EXPORT int lib3270_get_undera(const H3270 *h);
... ...
src/include/lib3270/actions.h
... ... @@ -39,6 +39,7 @@
39 39 LIB3270_ACTION_GROUP_ONLINE, ///< @brief Action requires online state.
40 40 LIB3270_ACTION_GROUP_OFFLINE, ///< @brief Action requires offline state.
41 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 44 LIB3270_ACTION_GROUP_CUSTOM ///< @brief Custom group/Number of groups.
44 45 } LIB3270_ACTION_GROUP;
... ...
src/include/screenc.h
... ... @@ -43,10 +43,6 @@
43 43 LIB3270_INTERNAL int screen_init(H3270 *session);
44 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 46 LIB3270_INTERNAL void notify_toggle_changed(H3270 *session, LIB3270_TOGGLE_ID ix, unsigned char value, LIB3270_TOGGLE_TYPE reason);
51 47 LIB3270_INTERNAL void set_viewsize(H3270 *session, unsigned int rows, unsigned int cols);
52 48  
... ...