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