diff --git a/src/include/internals.h b/src/include/internals.h index 87d3be7..d765079 100644 --- a/src/include/internals.h +++ b/src/include/internals.h @@ -137,6 +137,9 @@ /// @brief Emit the "save-settings" signal. G_GNUC_INTERNAL void v3270_emit_save_settings(GtkWidget *widget); + /// @brief Emit "has-text" signal. + G_GNUC_INTERNAL void v3270_emit_copy_state(GtkWidget *widget); + G_GNUC_INTERNAL gchar * v3270_convert_to_3270_charset(GtkWidget *widget, const gchar *text, const gchar *encoding, GError **error); /// @brief Add current lib3270 selection to a list diff --git a/src/include/v3270.h b/src/include/v3270.h index c0006f1..2d78f16 100644 --- a/src/include/v3270.h +++ b/src/include/v3270.h @@ -211,13 +211,15 @@ LIB3270_EXPORT void v3270_clipboard_set(GtkWidget *widget, V3270_COPY_MODE mode, gboolean cut); LIB3270_EXPORT void v3270_clipboard_get_from_url(GtkWidget *widget, const gchar *url); + /// @brief Check if the widget has saved text. + LIB3270_EXPORT gboolean v3270_has_copy(GtkWidget *widget); + LIB3270_EXPORT void v3270_paste(GtkWidget *widget) G_GNUC_DEPRECATED; LIB3270_EXPORT void v3270_paste_text(GtkWidget *widget) G_GNUC_DEPRECATED; LIB3270_EXPORT void v3270_paste_from_file(GtkWidget *widget) G_GNUC_DEPRECATED; LIB3270_EXPORT void v3270_copy_selection(GtkWidget *widget, V3270_COPY_MODE mode, gboolean cut) G_GNUC_DEPRECATED; LIB3270_EXPORT void v3270_append_selection(GtkWidget *widget, gboolean cut) G_GNUC_DEPRECATED; - // Selections LIB3270_EXPORT gchar * v3270_get_selected(GtkWidget *widget, gboolean cut); diff --git a/src/selection/linux/copy.c b/src/selection/linux/copy.c index eee65c7..31d75fb 100644 --- a/src/selection/linux/copy.c +++ b/src/selection/linux/copy.c @@ -116,8 +116,7 @@ void v3270_update_system_clipboard(GtkWidget *widget) if(!terminal->selection.blocks) { // No clipboard data, return. - g_signal_emit(widget,v3270_widget_signal[V3270_SIGNAL_CLIPBOARD], 0, FALSE); - lib3270_action_group_notify(terminal->host,LIB3270_ACTION_GROUP_COPY); + v3270_emit_copy_state(widget); return; } @@ -171,8 +170,7 @@ void v3270_update_system_clipboard(GtkWidget *widget) gtk_target_table_free(targets, n_targets); gtk_target_list_unref(list); - g_signal_emit(widget,v3270_widget_signal[V3270_SIGNAL_CLIPBOARD], 0, TRUE); - lib3270_action_group_notify(terminal->host,LIB3270_ACTION_GROUP_COPY); + v3270_emit_copy_state(widget); } diff --git a/src/selection/selection.c b/src/selection/selection.c index e39d4e9..e785b6d 100644 --- a/src/selection/selection.c +++ b/src/selection/selection.c @@ -61,6 +61,17 @@ const GList * v3270_get_selection_blocks(GtkWidget *widget) return GTK_V3270(widget)->selection.blocks; } +gboolean v3270_has_copy(GtkWidget *widget) +{ + g_return_val_if_fail(GTK_IS_V3270(widget),FALSE); + return GTK_V3270(widget)->selection.blocks != NULL; +} + +void v3270_emit_copy_state(GtkWidget *widget) +{ + g_signal_emit(widget,v3270_widget_signal[V3270_SIGNAL_CLIPBOARD], 0, GTK_V3270(widget)->selection.blocks != NULL); + lib3270_action_group_notify(GTK_V3270(widget)->host,LIB3270_ACTION_GROUP_COPY); +} /** * Get lib3270 selection as a g_malloc buffer. diff --git a/src/selection/windows/copy.c b/src/selection/windows/copy.c index 603f0a2..79fc9fa 100644 --- a/src/selection/windows/copy.c +++ b/src/selection/windows/copy.c @@ -116,8 +116,7 @@ void v3270_update_system_clipboard(GtkWidget *widget) if(!terminal->selection.blocks) { // No clipboard data, return. - g_signal_emit(widget,v3270_widget_signal[V3270_SIGNAL_CLIPBOARD], 0, FALSE); - lib3270_action_group_notify(terminal->host,LIB3270_ACTION_GROUP_COPY); + v3270_emit_copy_state(widget); return; } @@ -166,8 +165,7 @@ void v3270_update_system_clipboard(GtkWidget *widget) gtk_target_table_free(targets, n_targets); gtk_target_list_unref(list); - g_signal_emit(widget,v3270_widget_signal[V3270_SIGNAL_CLIPBOARD], 0, TRUE); - lib3270_action_group_notify(terminal->host,LIB3270_ACTION_GROUP_COPY); + v3270_emit_copy_state(widget); } -- libgit2 0.21.2