Source/WebCore/ChangeLog

 12020-06-01 Carlos Garcia Campos <cgarcia@igalia.com>
 2
 3 [GTK4] Add printing support
 4 https://bugs.webkit.org/show_bug.cgi?id=212320
 5
 6 Reviewed by NOBODY (OOPS!).
 7
 8 Add gtk_dialog_run() to GTK4.
 9
 10 * platform/gtk/GtkVersioning.h:
 11 (gtk_dialog_run):
 12
1132020-05-30 Carlos Garcia Campos <cgarcia@igalia.com>
214
315 [GTK4] Make inspector work

Source/WebCore/platform/gtk/GtkVersioning.h

@@gtk_native_dialog_run(GtkNativeDialog* dialog)
207207 return context.response;
208208}
209209
 210static inline int
 211gtk_dialog_run(GtkDialog* dialog)
 212{
 213 struct RunDialogContext {
 214 GMainLoop *loop;
 215 int response;
 216 } context = { g_main_loop_new(nullptr, FALSE), 0 };
 217
 218 gtk_widget_show(GTK_WIDGET(dialog));
 219 g_signal_connect(dialog, "response", G_CALLBACK(+[](GtkDialog*, int response, RunDialogContext* context) {
 220 context->response = response;
 221 g_main_loop_quit(context->loop);
 222 }), &context);
 223 g_main_loop_run(context.loop);
 224 g_main_loop_unref(context.loop);
 225
 226 return context.response;
 227}
 228
210229#else // USE(GTK4)
211230
212231static inline void

Source/WebKit/ChangeLog

 12020-06-01 Carlos Garcia Campos <cgarcia@igalia.com>
 2
 3 [GTK4] Add printing support
 4 https://bugs.webkit.org/show_bug.cgi?id=212320
 5
 6 Reviewed by NOBODY (OOPS!).
 7
 8 Printing API hasn't changed, the only problem was that we were using gtk_dialog_run() and gdk threads deprecated API.
 9
 10 * UIProcess/API/gtk/WebKitPrintOperation.cpp:
 11 (webkitPrintOperationRunDialog): Remove GTK4 ifdefs.
 12 * WebProcess/WebPage/gtk/WebPrintOperationGtk.cpp:
 13 (WebKit::WebPrintOperationGtk::print): Use g_idle_add_full() instead of gdk threads deprecated API.
 14
1152020-06-01 Carlos Garcia Campos <cgarcia@igalia.com>
216
317 [GTK4] Wheel events are always handled by the main frame view

Source/WebKit/UIProcess/API/gtk/WebKitPrintOperation.cpp

@@static void notifySelectedPrinterCallback(GtkPrintUnixDialog* dialog, GParamSpec
252252
253253static WebKitPrintOperationResponse webkitPrintOperationRunDialog(WebKitPrintOperation* printOperation, GtkWindow* parent)
254254{
255 #if USE(GTK4)
256  return WEBKIT_PRINT_OPERATION_RESPONSE_CANCEL;
257 #else
258255 GtkPrintUnixDialog* printDialog = GTK_PRINT_UNIX_DIALOG(gtk_print_unix_dialog_new(0, parent));
259256 gtk_print_unix_dialog_set_manual_capabilities(printDialog, static_cast<GtkPrintCapabilities>(GTK_PRINT_CAPABILITY_NUMBER_UP
260257 | GTK_PRINT_CAPABILITY_NUMBER_UP_LAYOUT

@@static WebKitPrintOperationResponse webkitPrintOperationRunDialog(WebKitPrintOpe
299296 gtk_widget_destroy(GTK_WIDGET(printDialog));
300297
301298 return returnValue;
302 #endif
303299}
304300#else
305301// TODO: We need to add an implementation for Windows.

Source/WebKit/WebProcess/WebPage/gtk/WebPrintOperationGtk.cpp

@@void WebPrintOperationGtk::print(cairo_surface_t* surface, double xDPI, double y
737737 m_xDPI = xDPI;
738738 m_yDPI = yDPI;
739739 m_cairoContext = adoptRef(cairo_create(surface));
740 #if !USE(GTK4)
 740
741741 // Make sure the print pages idle has more priority than IPC messages comming from
742742 // the IO thread, so that the EndPrinting message is always handled once the print
743743 // operation has finished. See https://bugs.webkit.org/show_bug.cgi?id=122801.
744744 unsigned idlePriority = m_printMode == PrintInfo::PrintModeSync ? G_PRIORITY_DEFAULT - 10 : G_PRIORITY_DEFAULT_IDLE + 10;
745745 GMainLoop* mainLoop = data->mainLoop.get();
746  m_printPagesIdleId = gdk_threads_add_idle_full(idlePriority, printPagesIdle, data.release(), printPagesIdleDone);
 746 m_printPagesIdleId = g_idle_add_full(idlePriority, printPagesIdle, data.release(), printPagesIdleDone);
747747 if (m_printMode == PrintInfo::PrintModeSync) {
748748 ASSERT(mainLoop);
749749 g_main_loop_run(mainLoop);
750750 }
751 #endif
752751}
753752
754753}