Commit 597257dd833c9cfb98411dee943679e5a2a6302d
1 parent
03564892
Exists in
master
and in
3 other branches
Adjustments in selection data.
Showing
2 changed files
with
25 additions
and
15 deletions
Show diff stats
src/include/lib3270/selection.h
| @@ -42,31 +42,40 @@ | @@ -42,31 +42,40 @@ | ||
| 42 | * @brief Selection element | 42 | * @brief Selection element |
| 43 | * | 43 | * |
| 44 | */ | 44 | */ |
| 45 | - typedef struct _lib3270_selection_element { | ||
| 46 | - unsigned char chr; ///< @brief Element character. | ||
| 47 | - unsigned short flags; ///< @brief Element colors & visual state. @see LIB3270_ATTR | ||
| 48 | - unsigned char field_attributes; ///< @brief Field attribute. @see LIB3270_FIELD_ATTRIBUTE | 45 | + typedef struct _lib3270_selection_element |
| 46 | + { | ||
| 47 | + unsigned char chr; ///< @brief Element character. | ||
| 48 | + | ||
| 49 | + struct | ||
| 50 | + { | ||
| 51 | + unsigned short visual; ///< @brief Element colors & visual state. @see LIB3270_ATTR | ||
| 52 | + unsigned char field; ///< @brief Field attribute. @see LIB3270_FIELD_ATTRIBUTE | ||
| 53 | + } attribute; | ||
| 54 | + | ||
| 49 | } lib3270_selection_element; | 55 | } lib3270_selection_element; |
| 50 | 56 | ||
| 51 | /** | 57 | /** |
| 52 | - * @brief A rectangle containing the selected area. | 58 | + * @brief A rectangle with informations about the selected area. |
| 53 | * | 59 | * |
| 54 | */ | 60 | */ |
| 55 | typedef struct _lib3270_selection | 61 | typedef struct _lib3270_selection |
| 56 | { | 62 | { |
| 63 | + /// @brief Cursor address. | ||
| 64 | + unsigned int cursor_address; | ||
| 65 | + | ||
| 66 | + /// @brief Clipboard rectangle. | ||
| 57 | struct { | 67 | struct { |
| 58 | unsigned int row; | 68 | unsigned int row; |
| 59 | unsigned int col; | 69 | unsigned int col; |
| 60 | unsigned int width; | 70 | unsigned int width; |
| 61 | unsigned int height; | 71 | unsigned int height; |
| 72 | + } bounds; | ||
| 62 | 73 | ||
| 63 | - } bounds; ///< @brief Clipboard rectangle. | ||
| 64 | - | 74 | + /// @brief Selection contents. |
| 65 | lib3270_selection_element contents[1]; | 75 | lib3270_selection_element contents[1]; |
| 66 | 76 | ||
| 67 | } lib3270_selection; | 77 | } lib3270_selection; |
| 68 | 78 | ||
| 69 | - | ||
| 70 | LIB3270_EXPORT int lib3270_unselect(H3270 *session); | 79 | LIB3270_EXPORT int lib3270_unselect(H3270 *session); |
| 71 | LIB3270_EXPORT void lib3270_select_to(H3270 *session, int baddr); | 80 | LIB3270_EXPORT void lib3270_select_to(H3270 *session, int baddr); |
| 72 | LIB3270_EXPORT int lib3270_select_word_at(H3270 *session, int baddr); | 81 | LIB3270_EXPORT int lib3270_select_word_at(H3270 *session, int baddr); |
| @@ -84,7 +93,7 @@ | @@ -84,7 +93,7 @@ | ||
| 84 | 93 | ||
| 85 | LIB3270_SELECTION_CUT = 0x0001, ///< @brief Cut selected data (if available). | 94 | LIB3270_SELECTION_CUT = 0x0001, ///< @brief Cut selected data (if available). |
| 86 | LIB3270_SELECTION_ALL = 0x0002, ///< @brief Get all data (the default is get only selected data). | 95 | LIB3270_SELECTION_ALL = 0x0002, ///< @brief Get all data (the default is get only selected data). |
| 87 | - LIB3270_SELECTION_UNPROTECTED_ONLY = 0x0004, ///< @brief Get only unprotected contents. | 96 | +// LIB3270_SELECTION_UNPROTECTED_ONLY = 0x0004, ///< @brief Get only unprotected contents. |
| 88 | 97 | ||
| 89 | } LIB3270_SELECTION_OPTIONS; | 98 | } LIB3270_SELECTION_OPTIONS; |
| 90 | 99 |
src/lib3270/selection/get.c
| @@ -156,10 +156,11 @@ LIB3270_EXPORT lib3270_selection * lib3270_get_selection(H3270 *hSession, int cu | @@ -156,10 +156,11 @@ LIB3270_EXPORT lib3270_selection * lib3270_get_selection(H3270 *hSession, int cu | ||
| 156 | // Get output buffer. | 156 | // Get output buffer. |
| 157 | lib3270_selection * selection = lib3270_malloc(sizeof(lib3270_selection) + (sizeof(lib3270_selection_element) * (width*height))); | 157 | lib3270_selection * selection = lib3270_malloc(sizeof(lib3270_selection) + (sizeof(lib3270_selection_element) * (width*height))); |
| 158 | 158 | ||
| 159 | - selection->bounds.col = col; | ||
| 160 | - selection->bounds.row = row; | ||
| 161 | - selection->bounds.height = height; | ||
| 162 | - selection->bounds.width = width; | 159 | + selection->bounds.col = col; |
| 160 | + selection->bounds.row = row; | ||
| 161 | + selection->bounds.height = height; | ||
| 162 | + selection->bounds.width = width; | ||
| 163 | + selection->cursor_address = lib3270_get_cursor_address(hSession); | ||
| 163 | 164 | ||
| 164 | unsigned int dstaddr = 0; | 165 | unsigned int dstaddr = 0; |
| 165 | 166 | ||
| @@ -183,8 +184,8 @@ LIB3270_EXPORT lib3270_selection * lib3270_get_selection(H3270 *hSession, int cu | @@ -183,8 +184,8 @@ LIB3270_EXPORT lib3270_selection * lib3270_get_selection(H3270 *hSession, int cu | ||
| 183 | } | 184 | } |
| 184 | 185 | ||
| 185 | selection->contents[dstaddr].chr = (hSession->text[baddr].chr ? hSession->text[baddr].chr : ' '); | 186 | selection->contents[dstaddr].chr = (hSession->text[baddr].chr ? hSession->text[baddr].chr : ' '); |
| 186 | - selection->contents[dstaddr].flags = hSession->text[baddr].attr; | ||
| 187 | - selection->contents[dstaddr].field_attributes = fa; | 187 | + selection->contents[dstaddr].attribute.visual = hSession->text[baddr].attr; |
| 188 | + selection->contents[dstaddr].attribute.field = fa; | ||
| 188 | 189 | ||
| 189 | if(cut && !FA_IS_PROTECTED(fa)) { | 190 | if(cut && !FA_IS_PROTECTED(fa)) { |
| 190 | clear_chr(hSession,baddr); | 191 | clear_chr(hSession,baddr); |