Hi Eric,

thanks for looking at the problem, in fact it looks like stopping the event
to reach the below text view does the trick:

    textViewNested.signal_button_press_event().connect([](GdkEventButton*
pEvent){ return true; });

Cheers,
Giuseppe.


On Sat, 16 Feb 2019 at 19:59, <cecas...@aol.com> wrote:

> Hi Giuseppe,
>
> It looks like you are going to need to set up a callback and grab the
> focus of that uncooperative nested textview. It should work with GTK3.
>
> Eric
>
>
> //gcc -Wall codebox1.c -o codebox1 `pkg-config --cflags --libs gtk+-3.0`
>
> #include<gtk/gtk.h>
>
> static void get_focus(GtkWidget *button, GtkWidget *text_view_nested)
>   {
>     g_print("Grab Focus Button\n");
>     gtk_widget_grab_focus(text_view_nested);
>   }
> gboolean grab_focus(GtkWidget *widget, GdkEvent *event, gpointer user_data)
>   {
>     g_print("Grab Focus Click\n");
>     gtk_widget_grab_focus(widget);
>     return TRUE;
>   }
> 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), "CodeBox");
>     gtk_window_set_default_size(GTK_WINDOW(window), 450, 450);
>     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 *text_view_base=gtk_text_view_new();
>     gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(text_view_base),
> GTK_WRAP_CHAR);
>     gtk_widget_set_hexpand(text_view_base, TRUE);
>     gtk_widget_set_vexpand(text_view_base, TRUE);
>
>     GtkTextIter iter;
>     GtkTextBuffer
> *r_buffer_base=gtk_text_view_get_buffer(GTK_TEXT_VIEW(text_view_base));
>     gtk_text_buffer_get_end_iter(r_buffer_base, &iter);
>     gtk_text_buffer_insert(r_buffer_base, &iter, "Anchored TextView
> below:\n==>", -1);
>
>     GtkWidget *text_view_nested=gtk_text_view_new();
>     gtk_widget_set_size_request(text_view_nested, 100, 50);
>     gtk_widget_set_name(text_view_nested, "cyan_view");
>     gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(text_view_nested),
> GTK_WRAP_CHAR);
>     gtk_widget_set_hexpand(text_view_nested, TRUE);
>     gtk_widget_set_vexpand(text_view_nested, TRUE);
>     GtkTextBuffer
> *s_buffer_base=gtk_text_view_get_buffer(GTK_TEXT_VIEW(text_view_nested));
>
>     gtk_text_buffer_get_end_iter(s_buffer_base, &iter);
>     gtk_text_buffer_insert(s_buffer_base, &iter, "Nested buffer space.",
> -1);
>     g_signal_connect(text_view_nested, "button-press-event",
> G_CALLBACK(grab_focus), NULL);
>
>     GtkWidget *scroll=gtk_scrolled_window_new(NULL, NULL);
>     gtk_widget_set_hexpand(scroll, TRUE);
>     gtk_widget_set_vexpand(scroll, TRUE);
>     gtk_widget_set_size_request(scroll, 100, 50);
>     gtk_container_add(GTK_CONTAINER(scroll), text_view_nested);
>
>     GtkWidget *entry_nested=gtk_entry_new();
>
>     gtk_text_buffer_get_end_iter(r_buffer_base, &iter);
>     GtkTextChildAnchor
> *r_anchor_text_view=gtk_text_buffer_create_child_anchor(r_buffer_base,
> &iter);
>     gtk_text_buffer_get_end_iter(r_buffer_base, &iter);
>     gtk_text_buffer_insert(r_buffer_base, &iter, "<==\nAnchored TextView
> above^\n\nAnchored Entry below:\n==>", -1);
>     gtk_text_buffer_get_end_iter(r_buffer_base, &iter);
>     GtkTextChildAnchor
> *r_anchor_entry=gtk_text_buffer_create_child_anchor(r_buffer_base, &iter);
>     gtk_text_buffer_get_end_iter(r_buffer_base, &iter);
>     gtk_text_buffer_insert(r_buffer_base, &iter, "<==\nAnchored Entry
> above^\n", -1);
>
>     gtk_text_view_add_child_at_anchor(GTK_TEXT_VIEW(text_view_base),
> scroll, r_anchor_text_view);
>     gtk_text_view_add_child_at_anchor(GTK_TEXT_VIEW(text_view_base),
> entry_nested, r_anchor_entry);
>
>     GtkWidget *button=gtk_button_new_with_label("Get Focus");
>     g_signal_connect(button, "clicked", G_CALLBACK(get_focus),
> text_view_nested);
>
>     GtkWidget *grid=gtk_grid_new();
>     gtk_grid_attach(GTK_GRID(grid), text_view_base, 0, 0, 1, 1);
>     gtk_grid_attach(GTK_GRID(grid), button, 0, 1, 1, 1);
>     gtk_container_add(GTK_CONTAINER(window), grid);
>
>     gtk_widget_show_all(window);
>
>     GError *css_error=NULL;
>     gchar *css_string1=NULL;
>     css_string1=g_strdup("#cyan_view{background: cyan;}");
>     GtkCssProvider *provider=gtk_css_provider_new();
>     GdkDisplay *display=gdk_display_get_default();
>     GdkScreen *screen=gdk_display_get_default_screen(display);
>     gtk_style_context_add_provider_for_screen(screen,
> GTK_STYLE_PROVIDER(provider), GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
>     gtk_css_provider_load_from_data(provider, css_string1, -1, &css_error);
>
>     if(css_error!=NULL)
>       {
>         g_print("CSS loader error %s\n", css_error->message);
>         g_error_free(css_error);
>       }
>     g_object_unref(provider);
>     if(css_string1!=NULL) g_free(css_string1);
>
>     gtk_main();
>
>     return 0;
>   }
>
>
>
>
_______________________________________________
gtk-list mailing list
gtk-list@gnome.org
https://mail.gnome.org/mailman/listinfo/gtk-list

Reply via email to