From c9fa4eead20cb4da5030864b4e61b3b738f6e0b0 Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Mon, 13 Jan 2025 17:18:34 +0600 Subject: [PATCH] Added new function for input blocking --- source/libublsettings-gtk3-misc.c | 26 ++++++++++++++++++++++++++ source/libublsettings-gtk3.h | 2 ++ 2 files changed, 28 insertions(+) diff --git a/source/libublsettings-gtk3-misc.c b/source/libublsettings-gtk3-misc.c index c21c4a7..5464dda 100644 --- a/source/libublsettings-gtk3-misc.c +++ b/source/libublsettings-gtk3-misc.c @@ -299,4 +299,30 @@ void yon_on_insert_restricted_check(GtkEditable *editable, const gchar *text, gi void yon_gtk_entry_block_restricted_symbols(GtkEntry *target){ g_return_if_fail(GTK_IS_ENTRY(target)); g_signal_connect(G_OBJECT(target),"insert-text",G_CALLBACK(yon_on_insert_restricted_check),NULL); +} + +void yon_on_insert_custom_restricted_check(GtkEditable *editable, const gchar *text, gint length, gint *position, char *symbols){ + gchar *new_text = g_new(gchar, length + 1); + gint i, j = 0; + + for (i = 0; i < length; i++) { + if (!strchr(symbols,text[i])) { + new_text[j] = text[i]; + j++; + } + } + + if (j < length) { + g_signal_handlers_block_by_func(editable, G_CALLBACK(yon_on_insert_restricted_check), NULL); + gtk_editable_insert_text(editable, new_text, j, position); + g_signal_handlers_unblock_by_func(editable, G_CALLBACK(yon_on_insert_restricted_check), NULL); + g_signal_stop_emission_by_name(editable, "insert-text"); + } + + g_free(new_text); +} + +void yon_gtk_entry_block_symbols(GtkEntry *target, char *symbols){ + g_return_if_fail(GTK_IS_ENTRY(target)); + g_signal_connect(G_OBJECT(target),"insert-text",G_CALLBACK(yon_on_insert_custom_restricted_check),yon_char_new(symbols)); } \ No newline at end of file diff --git a/source/libublsettings-gtk3.h b/source/libublsettings-gtk3.h index 18ea3b4..1711023 100644 --- a/source/libublsettings-gtk3.h +++ b/source/libublsettings-gtk3.h @@ -495,6 +495,8 @@ void yon_on_text_insert_only_digits(GtkEditable *editable, const gchar *text, gi void yon_gtk_entry_block_restricted_symbols(GtkEntry *target); +void yon_gtk_entry_block_symbols(GtkEntry *target, char *symbols); + // GtkTreeStore section dictionary *yon_gtk_tree_store_get_children(GtkTreeStore *tree, GtkTreeIter *parent,int column);