Popover Test in Pure Wayland
In this post, I share a sample C code that tests focus behavior by triggering a popover in a pure Wayland environment. In the example, pressing the backspace key on a text view causes a popover to appear—a simple yet effective way to verify whether the widget has focus.
Below is the complete code:
void on_backspace (GtkTextView editor, GtkPopover popover)
{
puts ("on_backspace");
/*gtk_widget_show (popover);*/
gtk_popover_popup ((GtkPopover*) popover);
}
static void
activate (GtkApplication* app,
gpointer user_data)
{
GtkWidget* window;
GtkWidget* editor;
GtkWidget* popover;
GtkWidget* label;
GdkRectangle rect = { 0, 40, 10, 10 };
window = gtk_application_window_new (app);
label = gtk_label_new ("Popover");
popover = gtk_popover_new ();
gtk_popover_set_child ((GtkPopover*) popover, label);
gtk_widget_set_parent (popover, window);
gtk_popover_set_pointing_to ((GtkPopover*) popover, &rect);
editor = gtk_text_view_new ();
g_signal_connect (editor, "backspace", (GCallback) on_backspace, popover);
gtk_window_set_title (GTK_WINDOW (window), "Window");
gtk_window_set_default_size (GTK_WINDOW (window), 200, 200);
gtk_window_set_child ((GtkWindow*) window, editor);
gtk_widget_show (window);
}
int
main (int argc,
char **argv)
{
GtkApplication *app;
int status;
app = gtk_application_new ("org.gtk.example", G_APPLICATION_FLAGS_NONE);
g_signal_connect (app, "activate", G_CALLBACK (activate), NULL);
status = g_application_run (G_APPLICATION (app), argc, argv);
g_object_unref (app);
return status;
}