Gtk_window_present doesn't do anything on wayland

Hi There,

while testing Horizon EDA on wayland using weston and sway, I found out that calls to gtk_window_present appear to have no effect. Looking at the code, it seems like this depends on the gtk_surface1 interface. Putting that into debian codesearch didn’t yield any meaningful results other than gtk itself and mutter.

Does this mean that gtk_window_present only works on GNOME/mutter and no other wayland compositors right now?

Lukas

Here’s a small example based on one from Gtk that shows this problem:

//compile with gcc `pkg-config --cflags gtk+-3.0` -o example-1 present.c `pkg-config --libs gtk+-3.0`
#include <gtk/gtk.h>

GtkWidget *other_window = NULL;

static void
print_hello (GtkWidget *widget,
             gpointer   data)
{
  g_print ("Hello World\n");
  gtk_window_present_with_time(GTK_WINDOW(other_window), gtk_get_current_event_time());
}

static void
activate (GtkApplication *app,
          gpointer        user_data)
{
  GtkWidget *window;
  GtkWidget *button;
  GtkWidget *button_box;

  other_window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
  window = gtk_application_window_new (app);
  gtk_window_set_title (GTK_WINDOW (window), "Window");
  gtk_window_set_default_size (GTK_WINDOW (window), 200, 200);

  button_box = gtk_button_box_new (GTK_ORIENTATION_HORIZONTAL);
  gtk_container_add (GTK_CONTAINER (window), button_box);

  button = gtk_button_new_with_label ("Hello World");
  g_signal_connect (button, "clicked", G_CALLBACK (print_hello), NULL);
  gtk_container_add (GTK_CONTAINER (button_box), button);

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

GTK4 has added support for the xdg_activation protocol which should be supported by other wayland implementations: https://gitlab.gnome.org/GNOME/gtk/-/blob/940248598e5bcef264aff7c18ac5e4bf5ffd2b75/gdk/wayland/gdksurface-wayland.c#L3481

There is an open issue to backport this to GTK3: https://gitlab.gnome.org/GNOME/gtk/-/issues/4335

Good to know that things are moving in the right direction. I guess I’ll just have to wait until this lands in Gtk3. One thing that I need to try though is how well this patch will work for presenting windows across processes.

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.