diff --git a/src/dialogs/togglebutton.c b/src/dialogs/togglebutton.c index d1c7c1c..d69806a 100644 --- a/src/dialogs/togglebutton.c +++ b/src/dialogs/togglebutton.c @@ -29,6 +29,7 @@ #include #include + #include /*--[ Widget definition ]----------------------------------------------------------------------------*/ @@ -44,6 +45,7 @@ H3270 * hSession; LIB3270_TOGGLE id; + const void * hListener; }; @@ -57,6 +59,12 @@ V3270ToggleButton * widget = GTK_V3270_TOGGLE_BUTTON(object); + if(widget->hListener) + { + lib3270_unregister_toggle_listener(widget->hSession,widget->id,widget->hListener); + widget->hListener = NULL; + } + G_OBJECT_CLASS(V3270ToggleButton_parent_class)->dispose(object); } @@ -86,10 +94,16 @@ } - static void V3270ToggleButton_init(V3270ToggleButton *widget) + static void V3270ToggleButton_init(V3270ToggleButton G_GNUC_UNUSED(*widget)) { } + static void toggle_listener(H3270 G_GNUC_UNUSED(*hSession), LIB3270_TOGGLE toggle, char state, void *button) + { + g_message("%s is %s\n", lib3270_get_toggle_name(toggle),(state ? "ON" : "OFF")); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button),(state == 0 ? FALSE : TRUE)); + } + GtkWidget * v3270_toggle_button_new(GtkWidget *terminal, LIB3270_TOGGLE toggle) { g_return_val_if_fail(GTK_IS_V3270(terminal),NULL); @@ -99,6 +113,8 @@ widget->hSession = v3270_get_session(terminal); widget->id = toggle; + widget->hListener = lib3270_register_toggle_listener(widget->hSession, widget->id,toggle_listener,widget); + gtk_widget_set_name(GTK_WIDGET(widget),lib3270_get_toggle_name(toggle)); gtk_button_set_label(GTK_BUTTON(widget),gettext(lib3270_get_toggle_label(toggle))); gtk_widget_set_tooltip_text(GTK_WIDGET(widget),gettext(lib3270_get_toggle_description(toggle))); diff --git a/src/include/internals.h b/src/include/internals.h index 9cccfb7..48af392 100644 --- a/src/include/internals.h +++ b/src/include/internals.h @@ -117,6 +117,19 @@ G_GNUC_INTERNAL GtkWidget * v3270_dialog_button_new(GtkWidget *dialog, const gchar *mnemonic, GCallback callback); #endif // ! GTK 3.12 + // Toggle button widget + #define GTK_TYPE_V3270_TOGGLE_BUTTON (V3270ToggleButton_get_type ()) + #define GTK_V3270_TOGGLE_BUTTON(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_V3270_TOGGLE_BUTTON, V3270ToggleButton)) + #define GTK_V3270_TOGGLE_BUTTON_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_V3270_TOGGLE_BUTTON, V3270ToggleButtonClass)) + #define GTK_IS_V3270_TOGGLE_BUTTON(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_V3270_TOGGLE_BUTTON)) + #define GTK_IS_V3270_TOGGLE_BUTTON_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_V3270_TOGGLE_BUTTON)) + #define GTK_V3270_TOGGLE_BUTTON_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_V3270_TOGGLE_BUTTON, V3270ToggleButtonClass)) + + typedef struct _V3270ToggleButton V3270ToggleButton; + typedef struct _V3270ToggleButtonClass V3270ToggleButtonClass; + + G_GNUC_INTERNAL GtkWidget * v3270_toggle_button_new(GtkWidget *widget, LIB3270_TOGGLE toggle); + // Activity list widget. #define GTK_TYPE_V3270_FT_ACTIVITY_LIST (V3270FTActivityList_get_type ()) #define GTK_V3270_FT_ACTIVITY_LIST(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_V3270_FT_ACTIVITY_LIST, V3270FTActivityList)) diff --git a/src/selection/datablock.c b/src/selection/datablock.c index ba28bb3..8e148af 100644 --- a/src/selection/datablock.c +++ b/src/selection/datablock.c @@ -189,7 +189,7 @@ gboolean v3270_set_from_data_block(v3270 * terminal, const struct SelectionHeade raw_pos += (sizeof(struct SelectionFieldHeader) + field->length); for(column = 0; column < field->length; column++) { - if(lib3270_is_protected(terminal->host,field->baddr+column)) + if(lib3270_get_is_protected(terminal->host,field->baddr+column)) { debug("Column %d is protected",column); found = FALSE; diff --git a/src/selection/linux/copy.c b/src/selection/linux/copy.c index c1ee344..56648a6 100644 --- a/src/selection/linux/copy.c +++ b/src/selection/linux/copy.c @@ -29,6 +29,7 @@ #include #include + #include /*--[ Implement ]------------------------------------------------------------------------------------*/ diff --git a/src/terminal/accessible.c b/src/terminal/accessible.c index b40d2b9..0574ddd 100644 --- a/src/terminal/accessible.c +++ b/src/terminal/accessible.c @@ -626,7 +626,7 @@ static AtkAttributeSet * v3270_accessible_get_run_attributes(AtkText *text, gint // Either "true" or "false" indicating whether text is editable or not attributes = add_attribute( attributes, ATK_TEXT_ATTR_EDITABLE, - lib3270_is_protected(host,offset) ? "false" : "true" ); + lib3270_get_is_protected(host,offset) ? "false" : "true" ); // The background color. The value is an RGB value of the format "u,u,u" // ATK_TEXT_ATTR_BG_COLOR diff --git a/src/terminal/draw.c b/src/terminal/draw.c index f6fb052..0e3bc30 100644 --- a/src/terminal/draw.c +++ b/src/terminal/draw.c @@ -39,6 +39,7 @@ #include #include #include + #include #include #include diff --git a/src/terminal/font.c b/src/terminal/font.c index 98f7042..28851d6 100644 --- a/src/terminal/font.c +++ b/src/terminal/font.c @@ -31,7 +31,7 @@ #include #include #include - + #include #define VIEW_HEIGTH_FROM_FONT(font_height) (( ((unsigned int) font_height) * (rows+1)) + OIA_TOP_MARGIN + 2) #define VIEW_WIDTH_FROM_FONT(max_x_advance) ( ((unsigned int) max_x_advance) * cols) diff --git a/src/terminal/oia.c b/src/terminal/oia.c index cd12927..0cfd84a 100644 --- a/src/terminal/oia.c +++ b/src/terminal/oia.c @@ -45,6 +45,7 @@ #include #include #include + #include #include #include #include diff --git a/src/terminal/properties.c b/src/terminal/properties.c index 4047a40..8a08faf 100644 --- a/src/terminal/properties.c +++ b/src/terminal/properties.c @@ -40,6 +40,7 @@ #include #include #include + #include #include #include #include diff --git a/src/terminal/widget.c b/src/terminal/widget.c index b6228a4..c40503d 100644 --- a/src/terminal/widget.c +++ b/src/terminal/widget.c @@ -33,6 +33,7 @@ #include #include + #include #include #include diff --git a/src/trace/widget.c b/src/trace/widget.c index 2a25a47..e13622c 100644 --- a/src/trace/widget.c +++ b/src/trace/widget.c @@ -76,6 +76,7 @@ GtkTextView * view; ///< @brief Text view; GtkTextBuffer * text; ///< @brief Trace window contents. GtkEntry * entry; ///< @brief Command line entry. + GtkWidget * buttons; ///< @brief Button bar. gchar * filename; ///< @brief Selected file name. @@ -245,82 +246,19 @@ } - static void toggle_ds_trace(GtkToggleButton *button, V3270Trace *trace) { - v3270_set_toggle(trace->terminal,LIB3270_TOGGLE_DS_TRACE,gtk_toggle_button_get_active(button)); - } - - static void toggle_event_trace(GtkToggleButton *button, V3270Trace *trace) { - v3270_set_toggle(trace->terminal,LIB3270_TOGGLE_EVENT_TRACE,gtk_toggle_button_get_active(button)); - } - - static void toggle_ssl_trace(GtkToggleButton *button, V3270Trace *trace) { - v3270_set_toggle(trace->terminal,LIB3270_TOGGLE_SSL_TRACE,gtk_toggle_button_get_active(button)); - } - - static void toggle_screen_trace(GtkToggleButton *button, V3270Trace *trace) { - v3270_set_toggle(trace->terminal,LIB3270_TOGGLE_SCREEN_TRACE,gtk_toggle_button_get_active(button)); - } - static void V3270Trace_init(V3270Trace *widget) { gtk_orientable_set_orientation(GTK_ORIENTABLE(widget),GTK_ORIENTATION_VERTICAL); // Create toolbar { - size_t ix; - - GtkWidget * toolbar = gtk_button_box_new(GTK_ORIENTATION_HORIZONTAL); - gtk_button_box_set_layout(GTK_BUTTON_BOX(toolbar), GTK_BUTTONBOX_START); - gtk_box_set_spacing(GTK_BOX(toolbar),8); - - static const struct _toggles - { - const gchar * label; - const gchar * tooltip; - GCallback callback; - } - toggles[] = - { - { - N_("DS Trace"), - N_("Toggle DS Trace"), - G_CALLBACK(toggle_ds_trace) - }, - { - N_("Event Trace"), - N_("Toggle Event Trace"), - G_CALLBACK(toggle_event_trace) - }, - { - N_("Screen Trace"), - N_("Toggle Screen Trace"), - G_CALLBACK(toggle_screen_trace) - }, - { - N_("SSL Trace"), - N_("Toggle SSL Trace"), - G_CALLBACK(toggle_ssl_trace) - } - - }; - - for(ix = 0; ix < G_N_ELEMENTS(toggles); ix++) - { - GtkWidget * item = gtk_toggle_button_new_with_label(toggles[ix].label); - - gtk_widget_set_can_focus(item,FALSE); - gtk_widget_set_can_default(item,FALSE); - gtk_widget_set_focus_on_click(item,FALSE); + widget->buttons = gtk_button_box_new(GTK_ORIENTATION_HORIZONTAL); - g_signal_connect(item, "toggled", G_CALLBACK(toggles[ix].callback), widget); + gtk_button_box_set_layout(GTK_BUTTON_BOX(widget->buttons), GTK_BUTTONBOX_START); + gtk_box_set_spacing(GTK_BOX(widget->buttons),8); - gtk_widget_set_tooltip_text(item,toggles[ix].tooltip); - gtk_box_pack_start(GTK_BOX(toolbar),item,FALSE,FALSE,4); - - } - - gtk_widget_set_valign(toolbar,GTK_ALIGN_START); - gtk_box_pack_start(GTK_BOX(widget),toolbar,FALSE,FALSE,4); + gtk_widget_set_valign(widget->buttons,GTK_ALIGN_START); + gtk_box_pack_start(GTK_BOX(widget),widget->buttons,FALSE,FALSE,4); } @@ -374,34 +312,39 @@ } - LIB3270_EXPORT void v3270_trace_set_terminal(GtkWidget *widget, GtkWidget *terminal) - { - V3270Trace * trace = GTK_V3270_TRACE(widget); - if(trace->terminal == terminal) - return; + LIB3270_EXPORT GtkWidget * v3270_trace_new(GtkWidget *terminal) + { + g_return_val_if_fail(GTK_IS_V3270(terminal),NULL); - g_clear_object(&trace->terminal); + V3270Trace * widget = GTK_V3270_TRACE(g_object_new(GTK_TYPE_V3270_TRACE, NULL)); - if(terminal) + // Set terminal widget { - trace->terminal = terminal; + widget->terminal = terminal; g_object_ref_sink(G_OBJECT(terminal)); + set_session(widget, v3270_get_session(widget->terminal)); } - set_session(trace, v3270_get_session(trace->terminal)); + // Create toggle buttons + { + size_t ix; + + static const LIB3270_TOGGLE toggles[] = { LIB3270_TOGGLE_DS_TRACE, LIB3270_TOGGLE_EVENT_TRACE, LIB3270_TOGGLE_SSL_TRACE, LIB3270_TOGGLE_SCREEN_TRACE}; - gtk_widget_set_sensitive(GTK_WIDGET(trace->entry),trace->terminal != NULL); + for(ix = 0; ix < G_N_ELEMENTS(toggles); ix++) + { + GtkWidget * item = v3270_toggle_button_new(widget->terminal,toggles[ix]); - } + gtk_widget_set_can_focus(item,FALSE); + gtk_widget_set_can_default(item,FALSE); + gtk_widget_set_focus_on_click(item,FALSE); - LIB3270_EXPORT GtkWidget * v3270_trace_new(GtkWidget *terminal) - { - g_return_val_if_fail(GTK_IS_V3270(terminal),NULL); + gtk_box_pack_start(GTK_BOX(widget->buttons),item,FALSE,FALSE,4); - V3270Trace * widget = GTK_V3270_TRACE(g_object_new(GTK_TYPE_V3270_TRACE, NULL)); + } + } - v3270_trace_set_terminal(GTK_WIDGET(widget),terminal); return GTK_WIDGET(widget); } diff --git a/v3270.cbp b/v3270.cbp index 11db7c4..420f4f5 100644 --- a/v3270.cbp +++ b/v3270.cbp @@ -93,6 +93,9 @@ + + -- libgit2 0.21.2