[GTK] gdk_display_get_device_manager and gdk_screen_get_width/height are deprecated
https://bugs.webkit.org/show_bug.cgi?id=198822

Patch by Ludovico de Nittis <ludovico.denittis@collabora.com> on 2019-06-13
Reviewed by Carlos Garcia Campos.

GdkSeat and GdkRectangle should be used, respectively.

Source/WebCore:

No behaviour changes.

* platform/gtk/GtkVersioning.c:
(getDefaultGDKPointerDevice):
(getScreenWorkArea):

Source/WebKit:

* UIProcess/Automation/gtk/WebAutomationSessionGtk.cpp:
(WebKit::doMouseEvent):
(WebKit::doMotionEvent):
(WebKit::doKeyStrokeEvent):

git-svn-id: http://svn.webkit.org/repository/webkit/trunk@246398 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog
index da8ea14..3b25d88 100644
--- a/Source/WebCore/ChangeLog
+++ b/Source/WebCore/ChangeLog
@@ -1,3 +1,18 @@
+2019-06-13  Ludovico de Nittis  <ludovico.denittis@collabora.com>
+
+        [GTK] gdk_display_get_device_manager and gdk_screen_get_width/height are deprecated
+        https://bugs.webkit.org/show_bug.cgi?id=198822
+
+        Reviewed by Carlos Garcia Campos.
+
+        GdkSeat and GdkRectangle should be used, respectively.
+
+        No behaviour changes.
+
+        * platform/gtk/GtkVersioning.c:
+        (getDefaultGDKPointerDevice):
+        (getScreenWorkArea):
+
 2019-06-12  Antoine Quint  <graouts@apple.com>
 
         [WHLSL] Hook up compute
diff --git a/Source/WebCore/platform/gtk/GtkVersioning.c b/Source/WebCore/platform/gtk/GtkVersioning.c
index 0d51b38..01e5863 100644
--- a/Source/WebCore/platform/gtk/GtkVersioning.c
+++ b/Source/WebCore/platform/gtk/GtkVersioning.c
@@ -30,7 +30,9 @@
 
 GdkDevice *getDefaultGDKPointerDevice(GdkWindow* window)
 {
-#ifndef GTK_API_VERSION_2
+#if GTK_CHECK_VERSION(3, 20, 0)
+    return gdk_seat_get_pointer(gdk_display_get_default_seat(gdk_window_get_display(window)));
+#elif !defined(GTK_API_VERSION_2)
     GdkDeviceManager *manager =  gdk_display_get_device_manager(gdk_window_get_display(window));
     return gdk_device_manager_get_client_pointer(manager);
 #else
@@ -233,10 +235,20 @@
     Atom workArea = XInternAtom(display, "_NET_WORKAREA", True);
 
     /* Defaults in case of error. */
+#if GTK_CHECK_VERSION(3, 22, 0)
+    GdkRectangle geom;
+    GdkMonitor *monitor = gdk_display_get_primary_monitor(display);
+    gdk_monitor_get_geometry(monitor, &geom);
+    area->x = geom.x;
+    area->y = geom.y;
+    area->width = geom.width;
+    area->height = geom.height;
+#else
     area->x = 0;
     area->y = 0;
     area->width = gdk_screen_get_width(screen);
     area->height = gdk_screen_get_height(screen);
+#endif
 
     if (workArea == None)
         return;
diff --git a/Source/WebKit/ChangeLog b/Source/WebKit/ChangeLog
index 0d99009..80a2155 100644
--- a/Source/WebKit/ChangeLog
+++ b/Source/WebKit/ChangeLog
@@ -1,3 +1,17 @@
+2019-06-13  Ludovico de Nittis  <ludovico.denittis@collabora.com>
+
+        [GTK] gdk_display_get_device_manager and gdk_screen_get_width/height are deprecated
+        https://bugs.webkit.org/show_bug.cgi?id=198822
+
+        Reviewed by Carlos Garcia Campos.
+
+        GdkSeat and GdkRectangle should be used, respectively.
+
+        * UIProcess/Automation/gtk/WebAutomationSessionGtk.cpp:
+        (WebKit::doMouseEvent):
+        (WebKit::doMotionEvent):
+        (WebKit::doKeyStrokeEvent):
+
 2019-06-12  Antoine Quint  <graouts@apple.com>
 
         Show the web page URL when sharing an AR model
diff --git a/Source/WebKit/UIProcess/Automation/gtk/WebAutomationSessionGtk.cpp b/Source/WebKit/UIProcess/Automation/gtk/WebAutomationSessionGtk.cpp
index 36f78a8..ce92b07 100644
--- a/Source/WebKit/UIProcess/Automation/gtk/WebAutomationSessionGtk.cpp
+++ b/Source/WebKit/UIProcess/Automation/gtk/WebAutomationSessionGtk.cpp
@@ -75,7 +75,11 @@
     event->button.axes = 0;
     event->button.state = state;
     event->button.button = button;
+#if GTK_CHECK_VERSION(3, 20, 0)
+    event->button.device = gdk_seat_get_pointer(gdk_display_get_default_seat(gtk_widget_get_display(widget)));
+#else
     event->button.device = gdk_device_manager_get_client_pointer(gdk_display_get_device_manager(gtk_widget_get_display(widget)));
+#endif
     int xRoot, yRoot;
     gdk_window_get_root_coords(gtk_widget_get_window(widget), location.x(), location.y(), &xRoot, &yRoot);
     event->button.x_root = xRoot;
@@ -93,7 +97,11 @@
     event->motion.y = location.y();
     event->motion.axes = 0;
     event->motion.state = state;
+#if GTK_CHECK_VERSION(3, 20, 0)
+    event->motion.device = gdk_seat_get_pointer(gdk_display_get_default_seat(gtk_widget_get_display(widget)));
+#else
     event->motion.device = gdk_device_manager_get_client_pointer(gdk_display_get_device_manager(gtk_widget_get_display(widget)));
+#endif
     int xRoot, yRoot;
     gdk_window_get_root_coords(gtk_widget_get_window(widget), location.x(), location.y(), &xRoot, &yRoot);
     event->motion.x_root = xRoot;
@@ -142,7 +150,12 @@
     event->key.time = GDK_CURRENT_TIME;
     event->key.window = gtk_widget_get_window(widget);
     g_object_ref(event->key.window);
+
+#if GTK_CHECK_VERSION(3, 20, 0)
+    gdk_event_set_device(event.get(), gdk_seat_get_pointer(gdk_display_get_default_seat(gtk_widget_get_display(widget))));
+#else
     gdk_event_set_device(event.get(), gdk_device_manager_get_client_pointer(gdk_display_get_device_manager(gtk_widget_get_display(widget))));
+#endif
     event->key.state = state;
 
     // When synthesizing an event, an invalid hardware_keycode value can cause it to be badly processed by GTK+.
@@ -332,4 +345,3 @@
 }
 
 } // namespace WebKit
-