Web lists-archives.com

Re: Set maximum length for text control




Hi, Eric,

On Tue, Jan 3, 2017 at 5:55 PM,  <cecashon@xxxxxxx> wrote:
>
> This turns out to be trickier than expected. In GTK3 I kept getting an
> invalid iter warning. Found a previous discussion about it at
>
> https://mail.gnome.org/archives/gtk-app-devel-list/2015-October/msg00015.html
>
> Stefan Salewski figured it out. Thankfully so because I tried quite a few
> things to try to get rid of the iter warning.
>
> Test the following out. See if it helps. There is a gtk_text_iter_assign()
> in there for GTK3. You can remove that for GTK2. GTK2 doesn't seem to be
> cranky about the invalid iters. You should be able to set a max length for
> the textview buffer in both GTK2 and GTK3 though.

I tried to modify the condition to prevent inserting the text at any
location if the
resulting text is bigger than maximum, but it didn't even compiled:

static void maxlen_handler(GtkTextBuffer *buffer, GtkTextIter
*location, gchar *text, gint WXUNUSED(len), gpointer *user_data)
{
    gint count = gtk_text_buffer_get_char_count( buffer );
    if( count > 5 )
    {
       GtkTextIter end;
        gtk_text_buffer_get_end_iter( text, &end );
        gtk_text_buffer_delete( buffer, location, &end );
        gtk_text_iter_assign( location, offset );
    }
}

Any idea?

Thank you.

>
> Eric
>
>
> //gcc -Wall textview1.c -o textview1 `pkg-config --cflags --libs gtk+-3.0`
>
> #include <gtk/gtk.h>
>
> static void insert_text(GtkTextBuffer *buffer, GtkTextIter *location, gchar
> *text, gint len, gpointer user_data)
>   {
>     static int i=1;
>     gint count=gtk_text_buffer_get_char_count(buffer);
>     g_print("%i Chars %i\n", i++, count);
>     if(count>10)
>       {
>         GtkTextIter offset, end;
>         gtk_text_buffer_get_iter_at_offset(buffer, &offset, 10);
>         gtk_text_buffer_get_end_iter(buffer, &end);
>         g_print("Remove Range %i %i\n", gtk_text_iter_get_offset(&offset),
> gtk_text_iter_get_offset(&end));
>         gtk_text_buffer_delete(buffer, &offset, &end);
>         gtk_text_iter_assign(location, &offset);
>       }
>   }
> int main (int argc, char *argv[])
>   {
>     gtk_init(&argc, &argv);
>
>     GtkWidget *window=gtk_window_new(GTK_WINDOW_TOPLEVEL);
>     gtk_window_set_title(GTK_WINDOW(window), "Textview");
>     gtk_window_set_default_size(GTK_WINDOW(window), 400, 400);
>     gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
>     gtk_container_set_border_width(GTK_CONTAINER(window), 20);
>     g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL);
>
>     GtkWidget *scroll=gtk_scrolled_window_new(NULL, NULL);
>
>     GtkWidget *textview=gtk_text_view_new();
>     GtkTextBuffer *buffer=gtk_text_view_get_buffer(GTK_TEXT_VIEW(textview));
>     g_signal_connect_after(buffer, "insert-text", G_CALLBACK(insert_text),
> NULL);
>
>     gtk_container_add(GTK_CONTAINER(scroll), textview);
>
>     gtk_container_add(GTK_CONTAINER(window), scroll);
>
>     gtk_widget_show_all(window);
>
>     gtk_main();
>
>     return 0;
>   }
>
>
>
>
> -----Original Message-----
> From: Igor Korot <ikorot01@xxxxxxxxx>
> To: gtk-list <gtk-list@xxxxxxxxx>
> Sent: Sat, Dec 31, 2016 4:33 pm
> Subject: Set maximum length for text control
>
> Hi,
> In the GtkEntry there is a function "gtk_entry_set_max_length()".
> However, it is for a single line text entry.
>
> Is there a way to set maximum length for multi-line text control?
>
> Thank you.
>
> Happy New Year!!
> _______________________________________________
> gtk-list mailing list
> gtk-list@xxxxxxxxx
> https://mail.gnome.org/mailman/listinfo/gtk-list
_______________________________________________
gtk-list mailing list
gtk-list@xxxxxxxxx
https://mail.gnome.org/mailman/listinfo/gtk-list