patch 8.2.2626: GTK3: error when starting up and -geometry is given
Problem: GTK3: error when starting up and -geometry is given. (Dominique
Pellé)
Solution: Use another function to get the monitor if the window has not been
created yet. (closes #7978)
diff --git a/src/gui_gtk_x11.c b/src/gui_gtk_x11.c
index 3fdff4d..249b208 100644
--- a/src/gui_gtk_x11.c
+++ b/src/gui_gtk_x11.c
@@ -4168,9 +4168,17 @@
GdkRectangle geometry;
GdkWindow *win = gtk_widget_get_window(wid);
#if GTK_CHECK_VERSION(3,22,0)
- GdkDisplay *dpy = gtk_widget_get_display(wid);
- GdkMonitor *monitor = gdk_display_get_monitor_at_window(dpy, win);
+ GdkDisplay *dpy;
+ GdkMonitor *monitor;
+ if (wid != NULL && gtk_widget_get_realized(wid))
+ dpy = gtk_widget_get_display(wid);
+ else
+ dpy = gdk_display_get_default();
+ if (win != NULL)
+ monitor = gdk_display_get_monitor_at_window(dpy, win);
+ else
+ monitor = gdk_display_get_monitor_at_point(dpy, point_x, point_y);
gdk_monitor_get_geometry(monitor, &geometry);
#else
GdkScreen* screen;
@@ -4180,10 +4188,10 @@
screen = gtk_widget_get_screen(wid);
else
screen = gdk_screen_get_default();
- if (win == NULL)
- monitor = gdk_screen_get_monitor_at_point(screen, point_x, point_y);
- else
+ if (win != NULL)
monitor = gdk_screen_get_monitor_at_window(screen, win);
+ else
+ monitor = gdk_screen_get_monitor_at_point(screen, point_x, point_y);
gdk_screen_get_monitor_geometry(screen, monitor, &geometry);
#endif
*screen_x = geometry.x;