GTK4 gtk.org hello-world, missing GtkButtonBox

I just tried the Nim GTK4 version of

The C one is still GTK3, I was not able to find a GTK4 variant, so I did the small fixes myself:

// https://www.gtk.org/docs/getting-started/hello-world/
// gcc -Wall hello-world-gtk.c -o hello-world-gtk `pkg-config --cflags --libs gtk4`

#include <gtk/gtk.h>

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

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

  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_box_new (GTK_ORIENTATION_HORIZONTAL, 10);
  gtk_window_set_child (GTK_WINDOW (window), button_box);

  button = gtk_button_new_with_label ("Hello World");
  g_signal_connect (button, "clicked", G_CALLBACK (print_hello), NULL);
  g_signal_connect_swapped (button, "clicked", G_CALLBACK (gtk_window_destroy), window);
  gtk_box_append (GTK_BOX (button_box), button);

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

Well works, but the box layout looks not that nice centered. I wonder what happened with

https://developer.gnome.org/gtk3/stable/GtkButtonBox.html

in GTK4.

Another question: For top level GTK3 windows we can resize them generally by grabbing the borders, and when mouse hovers over border the mouse pointer is changed to indicate that we can do resize.

For above code I can grab the window border only on left or top border and do resize. No chance on right side or bottom. And even on left side and top mouse pointer does not change when hovering over window border, but only when I press left mouse button. Is that intended? It is for Gnome wayland.

[EDIT]

Oh, I finally found the GTK4 version:

https://gitlab.gnome.org/GNOME/gtk/blob/51207489813ebef7f143dcded70fab4a3edff612/examples/hello-world.c

But above questions remain…

GtkButtonBox is gone, as it can be easily replaced using GtkBox. At least, it worked perfectly in my code bases.

I continue to have sometimes, randomly, some bad behavior regarding moving and resizing Gtk4 windows. If you have a reproducible issue, you probably should open an issue in GNOME Gitlab instance at Gtk product; this can surely interest Gtk developers (don’t forget to say which window manager you’re using, it might help).

1 Like

Hi, no problem with a similar example in my gtk-4-fortran code and GTK 3.98.4 (Fedora 32).
In my code I have no:
gtk_window_set_default_size (GTK_WINDOW (window), 200, 200);
Have you tried to remove it ?

But I have another weird behavior: sometimes when I move the window on screen, it goes back to its initial position… Sometimes not…

Yes, that kind of bad behavior. :smile:

1 Like

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