Commit 9e71aed818c72fe2ab0f80153865af3aa72c184f
1 parent
67274bb2
Exists in
master
and in
1 other branch
Adding property and setting option for the LU names list.
Showing
10 changed files
with
93 additions
and
14 deletions
Show diff stats
src/dialogs/hostselect.c
| ... | ... | @@ -69,6 +69,7 @@ |
| 69 | 69 | ENTRY_SRVCNAME, |
| 70 | 70 | ENTRY_OVERSIZE, |
| 71 | 71 | ENTRY_REMAP_FILE, |
| 72 | + ENTRY_LU_NAMES, | |
| 72 | 73 | |
| 73 | 74 | ENTRY_COUNT |
| 74 | 75 | }; |
| ... | ... | @@ -228,7 +229,20 @@ |
| 228 | 229 | .tooltip = N_("Path to XML file with custom charset mapping."), |
| 229 | 230 | .max_length = 0xFF, |
| 230 | 231 | .width_chars = 50, |
| 231 | - } | |
| 232 | + }, | |
| 233 | + | |
| 234 | + { | |
| 235 | + .left = 0, | |
| 236 | + .top = 2, | |
| 237 | + .width = 4, | |
| 238 | + .height = 1, | |
| 239 | + | |
| 240 | + .label = N_( "L_U Names" ), | |
| 241 | + .tooltip = N_("Comma separated list of LU names."), | |
| 242 | + .max_length = 0xFF, | |
| 243 | + .width_chars = 50, | |
| 244 | + }, | |
| 245 | + | |
| 232 | 246 | |
| 233 | 247 | }; |
| 234 | 248 | |
| ... | ... | @@ -439,6 +453,11 @@ static void V3270HostSelectWidget_init(V3270HostSelectWidget *widget) |
| 439 | 453 | GTK_WIDGET(widget->input.entry[3]) |
| 440 | 454 | ); |
| 441 | 455 | |
| 456 | + v3270_grid_attach( | |
| 457 | + GTK_GRID(connection), | |
| 458 | + (struct v3270_entry_field *) & entryfields[4], | |
| 459 | + GTK_WIDGET(widget->input.entry[4]) | |
| 460 | + ); | |
| 442 | 461 | |
| 443 | 462 | } |
| 444 | 463 | |
| ... | ... | @@ -626,6 +645,9 @@ static void apply(GtkWidget *w, GtkWidget *terminal) |
| 626 | 645 | |
| 627 | 646 | } |
| 628 | 647 | |
| 648 | + // Apply LU names | |
| 649 | + v3270_set_lunames(terminal,gtk_entry_get_text(widget->input.entry[ENTRY_LU_NAMES])); | |
| 650 | + | |
| 629 | 651 | // Apply combos. |
| 630 | 652 | size_t combo; |
| 631 | 653 | for(combo = 0; combo < G_N_ELEMENTS(combos); combo++) |
| ... | ... | @@ -718,6 +740,10 @@ static void load(GtkWidget *w, GtkWidget *terminal) |
| 718 | 740 | |
| 719 | 741 | } |
| 720 | 742 | |
| 743 | + // Load LU names | |
| 744 | + g_autofree gchar * lunames = v3270_get_lunames(terminal); | |
| 745 | + gtk_entry_set_text(widget->input.entry[ENTRY_LU_NAMES],lunames ? lunames : ""); | |
| 746 | + | |
| 721 | 747 | // Load unsigned int combos |
| 722 | 748 | size_t combo; |
| 723 | 749 | for(combo = 0; combo < G_N_ELEMENTS(combos); combo++) | ... | ... |
src/include/internals.h
| ... | ... | @@ -329,7 +329,7 @@ G_GNUC_INTERNAL void v3270_draw_element(cairo_t *cr, unsigned char chr, unsigned |
| 329 | 329 | G_GNUC_INTERNAL gchar * v3270_translate_rgba_to_text(GdkRGBA *clr); |
| 330 | 330 | |
| 331 | 331 | // Properties |
| 332 | - G_GNUC_INTERNAL gboolean v3270_update_luname(v3270 *terminal); | |
| 332 | + G_GNUC_INTERNAL gboolean v3270_update_associated_lu(v3270 *terminal); | |
| 333 | 333 | G_GNUC_INTERNAL void v3270_update_toggle(GtkWidget *widget, LIB3270_TOGGLE_ID id, unsigned char value, const char *name); |
| 334 | 334 | |
| 335 | 335 | G_END_DECLS | ... | ... |
src/include/terminal.h
| ... | ... | @@ -47,13 +47,14 @@ G_BEGIN_DECLS |
| 47 | 47 | // Signal related properties |
| 48 | 48 | GParamSpec * online; |
| 49 | 49 | GParamSpec * url; |
| 50 | - GParamSpec * luname; | |
| 50 | + GParamSpec * associated_lu; | |
| 51 | 51 | GParamSpec * model; |
| 52 | 52 | GParamSpec * selection; |
| 53 | 53 | GParamSpec * session_name; |
| 54 | 54 | GParamSpec * auto_disconnect; |
| 55 | 55 | GParamSpec * remap_file; |
| 56 | 56 | GParamSpec * dynamic_spacing; |
| 57 | + GParamSpec * lu_names; | |
| 57 | 58 | |
| 58 | 59 | struct |
| 59 | 60 | { | ... | ... |
src/include/v3270.h
| ... | ... | @@ -186,12 +186,16 @@ |
| 186 | 186 | LIB3270_EXPORT int v3270_reconnect(GtkWidget *widget); |
| 187 | 187 | LIB3270_EXPORT void v3270_disconnect(GtkWidget *widget); |
| 188 | 188 | LIB3270_EXPORT int v3270_set_host_charset(GtkWidget *widget, const gchar *name); |
| 189 | + | |
| 189 | 190 | LIB3270_EXPORT void v3270_set_auto_disconnect(GtkWidget *widget, guint minutes); |
| 190 | 191 | LIB3270_EXPORT guint v3270_get_auto_disconnect(GtkWidget *widget); |
| 191 | 192 | |
| 192 | 193 | LIB3270_EXPORT void v3270_set_dynamic_font_spacing(GtkWidget *widget, gboolean state); |
| 193 | 194 | LIB3270_EXPORT gboolean v3270_get_dynamic_font_spacing(GtkWidget *widget); |
| 194 | 195 | |
| 196 | + LIB3270_EXPORT void v3270_set_lunames(GtkWidget *widget, const gchar *lunames); | |
| 197 | + LIB3270_EXPORT gchar * v3270_get_lunames(GtkWidget *widget); | |
| 198 | + | |
| 195 | 199 | // Clipboard |
| 196 | 200 | typedef enum _v3270_select_format |
| 197 | 201 | { | ... | ... |
src/terminal/callbacks.c
| ... | ... | @@ -99,7 +99,7 @@ static void update_message(H3270 *session, G_GNUC_UNUSED LIB3270_MESSAGE id) |
| 99 | 99 | |
| 100 | 100 | static void update_luname(H3270 *session, const char G_GNUC_UNUSED(*name)) |
| 101 | 101 | { |
| 102 | - g_idle_add((GSourceFunc) v3270_update_luname, lib3270_get_user_data(session)); | |
| 102 | + g_idle_add((GSourceFunc) v3270_update_associated_lu, lib3270_get_user_data(session)); | |
| 103 | 103 | } |
| 104 | 104 | |
| 105 | 105 | static gboolean v3270_update_url(v3270 *terminal) |
| ... | ... | @@ -171,6 +171,7 @@ static void update_connect(H3270 *session, unsigned char connected) |
| 171 | 171 | g_signal_emit(GTK_WIDGET(widget), v3270_widget_signal[V3270_SIGNAL_DISCONNECTED], 0); |
| 172 | 172 | } |
| 173 | 173 | |
| 174 | + debug("%s(%p)",__FUNCTION__,GTK_V3270_GET_CLASS(widget)->properties.online); | |
| 174 | 175 | g_object_notify_by_pspec(G_OBJECT(widget), GTK_V3270_GET_CLASS(widget)->properties.online); |
| 175 | 176 | |
| 176 | 177 | widget->activity.timestamp = time(0); |
| ... | ... | @@ -191,7 +192,10 @@ static void update_screen_size(H3270 *session, G_GNUC_UNUSED unsigned short rows |
| 191 | 192 | static void update_model(H3270 *session, const char *name, int model, G_GNUC_UNUSED int rows, G_GNUC_UNUSED int cols) |
| 192 | 193 | { |
| 193 | 194 | GtkWidget * widget = GTK_WIDGET(lib3270_get_user_data(session)); |
| 195 | + | |
| 196 | + debug("%s(%p)",__FUNCTION__,GTK_V3270_GET_CLASS(widget)->properties.model); | |
| 194 | 197 | g_object_notify_by_pspec(G_OBJECT(lib3270_get_user_data(session)), GTK_V3270_GET_CLASS(widget)->properties.model); |
| 198 | + | |
| 195 | 199 | g_signal_emit(widget,v3270_widget_signal[V3270_SIGNAL_MODEL_CHANGED], 0, (guint) model, name); |
| 196 | 200 | } |
| 197 | 201 | |
| ... | ... | @@ -246,7 +250,9 @@ static void set_selection(H3270 *session, unsigned char status) |
| 246 | 250 | { |
| 247 | 251 | GtkWidget * widget = GTK_WIDGET(lib3270_get_user_data(session)); |
| 248 | 252 | |
| 253 | + debug("%s(%p)",__FUNCTION__,GTK_V3270_GET_CLASS(widget)->properties.selection); | |
| 249 | 254 | g_object_notify_by_pspec(G_OBJECT(widget), GTK_V3270_GET_CLASS(widget)->properties.selection); |
| 255 | + | |
| 250 | 256 | g_signal_emit(widget,v3270_widget_signal[V3270_SIGNAL_SELECTING], 0, status ? TRUE : FALSE); |
| 251 | 257 | |
| 252 | 258 | } | ... | ... |
src/terminal/drawing/oia.c
| ... | ... | @@ -694,7 +694,7 @@ cairo_t * v3270_oia_set_update_region(v3270 * terminal, GdkRectangle **r, V3270_ |
| 694 | 694 | return cr; |
| 695 | 695 | } |
| 696 | 696 | |
| 697 | -gboolean v3270_update_luname(v3270 *terminal) | |
| 697 | +gboolean v3270_update_associated_lu(v3270 *terminal) | |
| 698 | 698 | { |
| 699 | 699 | if(terminal->surface) |
| 700 | 700 | { |
| ... | ... | @@ -713,7 +713,8 @@ gboolean v3270_update_luname(v3270 *terminal) |
| 713 | 713 | v3270_queue_draw_area(GTK_WIDGET(terminal),rect->x,rect->y,rect->width,rect->height); |
| 714 | 714 | } |
| 715 | 715 | |
| 716 | - g_object_notify_by_pspec(G_OBJECT(terminal), GTK_V3270_GET_CLASS(terminal)->properties.luname); | |
| 716 | + debug("%s(%p)",__FUNCTION__,GTK_V3270_GET_CLASS(terminal)->properties.associated_lu); | |
| 717 | + g_object_notify_by_pspec(G_OBJECT(terminal), GTK_V3270_GET_CLASS(terminal)->properties.associated_lu); | |
| 717 | 718 | |
| 718 | 719 | return FALSE; |
| 719 | 720 | } | ... | ... |
src/terminal/properties/get.c
| ... | ... | @@ -108,6 +108,10 @@ |
| 108 | 108 | g_value_set_boolean(value,v3270_get_dynamic_font_spacing(GTK_WIDGET(object))); |
| 109 | 109 | break; |
| 110 | 110 | |
| 111 | + case V3270_PROPERTY_LU_NAMES: | |
| 112 | + g_value_take_string(value,v3270_get_lunames(GTK_WIDGET(object))); | |
| 113 | + break; | |
| 114 | + | |
| 111 | 115 | default: |
| 112 | 116 | G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); |
| 113 | 117 | |
| ... | ... | @@ -182,5 +186,15 @@ LIB3270_EXPORT guint v3270_get_auto_disconnect(GtkWidget *widget) |
| 182 | 186 | return GTK_V3270(widget)->activity.disconnect; |
| 183 | 187 | } |
| 184 | 188 | |
| 189 | +LIB3270_EXPORT gchar * v3270_get_lunames(GtkWidget *widget) | |
| 190 | +{ | |
| 191 | + g_return_val_if_fail(GTK_IS_V3270(widget),NULL); | |
| 185 | 192 | |
| 193 | + const char ** lunames = lib3270_get_lunames(GTK_V3270(widget)->host); | |
| 194 | + | |
| 195 | + if(!lunames) | |
| 196 | + return NULL; | |
| 197 | + | |
| 198 | + return g_strjoinv(",",(gchar **) lunames); | |
| 199 | +} | |
| 186 | 200 | ... | ... |
src/terminal/properties/init.c
| ... | ... | @@ -40,16 +40,16 @@ |
| 40 | 40 | const char *name; |
| 41 | 41 | GParamSpec **prop; |
| 42 | 42 | } properties[] = { |
| 43 | - { "connected", &klass->properties.online }, | |
| 44 | - { "luname", &klass->properties.luname }, | |
| 45 | - { "url", &klass->properties.url }, | |
| 46 | - { "model", &klass->properties.model }, | |
| 47 | - { "has-selection", &klass->properties.selection }, | |
| 43 | + { "connected", &klass->properties.online }, | |
| 44 | + { "associated_lu", &klass->properties.associated_lu }, | |
| 45 | + { "url", &klass->properties.url }, | |
| 46 | + { "model", &klass->properties.model }, | |
| 47 | + { "has_selection", &klass->properties.selection }, | |
| 48 | 48 | }; |
| 49 | 49 | |
| 50 | 50 | size_t ix; |
| 51 | 51 | |
| 52 | -// debug("Property %s=%u",g_param_spec_get_name(pspec),(unsigned int) property_id); | |
| 52 | + debug("Property %s=%u",g_param_spec_get_name(pspec),(unsigned int) property_id); | |
| 53 | 53 | g_object_class_install_property(oclass, property_id, pspec); |
| 54 | 54 | |
| 55 | 55 | for(ix = 0; ix < G_N_ELEMENTS(properties); ix++) |
| ... | ... | @@ -166,6 +166,21 @@ |
| 166 | 166 | klass->properties.dynamic_spacing |
| 167 | 167 | ); |
| 168 | 168 | |
| 169 | + // Lu names | |
| 170 | + klass->properties.lu_names = g_param_spec_string( | |
| 171 | + "lu_names", | |
| 172 | + "lu_names", | |
| 173 | + _("Comma separated list of LU names"), | |
| 174 | + FALSE, | |
| 175 | + G_PARAM_READABLE|G_PARAM_WRITABLE | |
| 176 | + ); | |
| 177 | + | |
| 178 | + g_object_class_install_property( | |
| 179 | + gobject_class, | |
| 180 | + V3270_PROPERTY_LU_NAMES, | |
| 181 | + klass->properties.lu_names | |
| 182 | + ); | |
| 183 | + | |
| 169 | 184 | |
| 170 | 185 | // |
| 171 | 186 | // Create dynamic properties | ... | ... |
src/terminal/properties/private.h
| ... | ... | @@ -54,9 +54,10 @@ |
| 54 | 54 | V3270_PROPERTY_AUTO_DISCONNECT = 5, ///< @brief Auto disconnect. |
| 55 | 55 | V3270_PROPERTY_REMAP_FILE = 6, ///< @brief Path of the remap file. |
| 56 | 56 | V3270_PROPERTY_DYNAMIC_SPACING = 7, ///< @brief Toggle dynamic font spacing. |
| 57 | + V3270_PROPERTY_LU_NAMES = 8, ///< @brief The LU names list. | |
| 57 | 58 | |
| 58 | 59 | |
| 59 | - V3270_PROPERTY_DYNAMIC = 8 ///< @brief Id of the first LIB3270 internal property. | |
| 60 | + V3270_PROPERTY_DYNAMIC = 9 ///< @brief Id of the first LIB3270 internal property. | |
| 60 | 61 | }; |
| 61 | 62 | |
| 62 | 63 | G_GNUC_INTERNAL void v3270_get_property(GObject *object,guint prop_id, GValue *value, GParamSpec *pspec); | ... | ... |
src/terminal/properties/set.c
| ... | ... | @@ -126,6 +126,10 @@ |
| 126 | 126 | v3270_set_dynamic_font_spacing(GTK_WIDGET(object), g_value_get_boolean(value)); |
| 127 | 127 | break; |
| 128 | 128 | |
| 129 | + case V3270_PROPERTY_LU_NAMES: | |
| 130 | + v3270_set_lunames(GTK_WIDGET(object),g_value_get_string(value)); | |
| 131 | + break; | |
| 132 | + | |
| 129 | 133 | default: |
| 130 | 134 | G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); |
| 131 | 135 | |
| ... | ... | @@ -215,7 +219,8 @@ LIB3270_EXPORT void v3270_set_auto_disconnect(GtkWidget *widget, guint minutes) |
| 215 | 219 | |
| 216 | 220 | } |
| 217 | 221 | |
| 218 | -LIB3270_EXPORT void v3270_set_dynamic_font_spacing(GtkWidget *widget, gboolean state) { | |
| 222 | +LIB3270_EXPORT void v3270_set_dynamic_font_spacing(GtkWidget *widget, gboolean state) | |
| 223 | +{ | |
| 219 | 224 | |
| 220 | 225 | g_return_if_fail(GTK_IS_V3270(widget)); |
| 221 | 226 | |
| ... | ... | @@ -231,4 +236,10 @@ LIB3270_EXPORT void v3270_set_dynamic_font_spacing(GtkWidget *widget, gboolean s |
| 231 | 236 | |
| 232 | 237 | } |
| 233 | 238 | |
| 239 | +LIB3270_EXPORT void v3270_set_lunames(GtkWidget *widget, const gchar *lunames) | |
| 240 | +{ | |
| 241 | + g_return_if_fail(GTK_IS_V3270(widget)); | |
| 242 | + lib3270_set_lunames(GTK_V3270(widget)->host,(lunames && *lunames ? lunames : NULL)); | |
| 243 | + g_object_notify_by_pspec(G_OBJECT(widget), GTK_V3270_GET_CLASS(widget)->properties.lu_names); | |
| 244 | +} | |
| 234 | 245 | ... | ... |