순수 Wayland 환경에서의 Popover 테스트

이 포스트에서는 순수 Wayland 환경에서 포커스 여부를 확인하기 위해 popover 기능을 테스트하는 C 코드 예제를 공유합니다. 예제에서는 텍스트 뷰에서 백스페이스 키를 누르면 popover가 나타나도록 구현하여, 위젯의 포커스 검증을 수행합니다.

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;
}