[gnome-desktop/wip/gtk4] Initial GTK4 / 4.0 port.




commit fde84d904370bc8d9ae0cf51294f957a2a6354ba
Author: Evan Welsh <2943271+ewlsh users noreply github com>
Date:   Wed Dec 30 10:32:38 2020 -0600

    Initial GTK4 / 4.0 port.
    
    This is quite rough, but it compiles. bg-crossfade is dropped.

 .../gnome-desktop4-docs.sgml}                      |   0
 .../gnome-desktop4-sections.txt}                   |  23 -
 .../gnome-desktop4.types}                          |   1 -
 .../{gnome-desktop3 => gnome-desktop4}/meson.build |   4 +-
 libgnome-desktop/gnome-bg-crossfade.c              | 543 ---------------------
 libgnome-desktop/gnome-bg-crossfade.h              |  76 ---
 libgnome-desktop/gnome-bg.c                        |  63 ++-
 libgnome-desktop/gnome-bg.h                        |   7 +-
 ...d.pc.in => gnome-desktop-4.0-uninstalled.pc.in} |   4 +-
 ...e-desktop-3.0.pc.in => gnome-desktop-4.0.pc.in} |   6 +-
 libgnome-desktop/gnome-idle-monitor.c              |   3 -
 libgnome-desktop/gnome-rr-debug.c                  |   7 +-
 libgnome-desktop/gnome-rr-private.h                |  19 +-
 libgnome-desktop/gnome-rr.c                        |  44 +-
 libgnome-desktop/gnome-rr.h                        |   4 +-
 libgnome-desktop/meson.build                       |  18 +-
 libgnome-desktop/test-idle-monitor.c               |   5 +-
 meson.build                                        |  14 +-
 po/Makevars                                        |   2 +-
 po/meson.build                                     |   2 +-
 tests/wallclock-reftest.c                          | 106 ++--
 21 files changed, 166 insertions(+), 785 deletions(-)
---
diff --git a/docs/reference/gnome-desktop3/gnome-desktop3-docs.sgml 
b/docs/reference/gnome-desktop4/gnome-desktop4-docs.sgml
similarity index 100%
rename from docs/reference/gnome-desktop3/gnome-desktop3-docs.sgml
rename to docs/reference/gnome-desktop4/gnome-desktop4-docs.sgml
diff --git a/docs/reference/gnome-desktop3/gnome-desktop3-sections.txt 
b/docs/reference/gnome-desktop4/gnome-desktop4-sections.txt
similarity index 93%
rename from docs/reference/gnome-desktop3/gnome-desktop3-sections.txt
rename to docs/reference/gnome-desktop4/gnome-desktop4-sections.txt
index 4f189fcd..af423bcd 100644
--- a/docs/reference/gnome-desktop3/gnome-desktop3-sections.txt
+++ b/docs/reference/gnome-desktop4/gnome-desktop4-sections.txt
@@ -18,7 +18,6 @@ gnome_bg_has_multiple_sizes
 gnome_bg_changes_with_time
 gnome_bg_create_frame_thumbnail
 gnome_bg_set_surface_as_root
-gnome_bg_set_surface_as_root_with_crossfade
 gnome_bg_get_surface_from_root
 GnomeBG
 GnomeBGClass
@@ -60,28 +59,6 @@ GNOME_DESKTOP_THUMBNAIL_FACTORY_CLASS
 GNOME_DESKTOP_IS_THUMBNAIL_FACTORY_CLASS
 </SECTION>
 
-<SECTION>
-<FILE>gnome-bg-crossfade</FILE>
-<TITLE>GnomeBGCrossfade</TITLE>
-GnomeBGCrossfade
-GnomeBGCrossfadeClass
-gnome_bg_crossfade_new
-gnome_bg_crossfade_set_start_surface
-gnome_bg_crossfade_set_end_surface
-gnome_bg_crossfade_start
-gnome_bg_crossfade_is_started
-gnome_bg_crossfade_stop
-GnomeBGCrossfadePrivate
-<SUBSECTION Standard>
-GNOME_BG_CROSSFADE
-GNOME_IS_BG_CROSSFADE
-GNOME_TYPE_BG_CROSSFADE
-gnome_bg_crossfade_get_type
-GNOME_BG_CROSSFADE_CLASS
-GNOME_IS_BG_CROSSFADE_CLASS
-GNOME_BG_CROSSFADE_GET_CLASS
-</SECTION>
-
 <SECTION>
 <FILE>gnome-bg-slide-show</FILE>
 <TITLE>GnomeBGSlideShow</TITLE>
diff --git a/docs/reference/gnome-desktop3/gnome-desktop3.types 
b/docs/reference/gnome-desktop4/gnome-desktop4.types
similarity index 85%
rename from docs/reference/gnome-desktop3/gnome-desktop3.types
rename to docs/reference/gnome-desktop4/gnome-desktop4.types
index dad5c940..056b1a3f 100644
--- a/docs/reference/gnome-desktop3/gnome-desktop3.types
+++ b/docs/reference/gnome-desktop4/gnome-desktop4.types
@@ -1,4 +1,3 @@
-gnome_bg_crossfade_get_type
 gnome_bg_get_type
 gnome_desktop_thumbnail_factory_get_type
 gnome_idle_monitor_get_type
diff --git a/docs/reference/gnome-desktop3/meson.build b/docs/reference/gnome-desktop4/meson.build
similarity index 83%
rename from docs/reference/gnome-desktop3/meson.build
rename to docs/reference/gnome-desktop4/meson.build
index cd89ae7c..16618660 100644
--- a/docs/reference/gnome-desktop3/meson.build
+++ b/docs/reference/gnome-desktop4/meson.build
@@ -6,8 +6,8 @@ ignored_headers = [
   'meta-xrandr-shared.h'
 ]
 
-gnome.gtkdoc('gnome-desktop3',
-  main_sgml: 'gnome-desktop3-docs.sgml',
+gnome.gtkdoc('gnome-desktop4',
+  main_sgml: 'gnome-desktop4-docs.sgml',
   ignore_headers: ignored_headers,
   scan_args: '--deprecated-guards="GNOME_DISABLE_DEPRECATED"',
   mkdb_args: ['--sgml-mode', '--output-format=xml'],
diff --git a/libgnome-desktop/gnome-bg.c b/libgnome-desktop/gnome-bg.c
index 6a453b63..96f5cb78 100644
--- a/libgnome-desktop/gnome-bg.c
+++ b/libgnome-desktop/gnome-bg.c
@@ -40,7 +40,6 @@ Author: Soren Sandmann <sandmann redhat com>
 #define GNOME_DESKTOP_USE_UNSTABLE_API
 #include "gnome-bg.h"
 #include "gnome-bg-slide-show.h"
-#include "gnome-bg-crossfade.h"
 
 #define BG_KEY_PRIMARY_COLOR      "primary-color"
 #define BG_KEY_SECONDARY_COLOR    "secondary-color"
@@ -148,7 +147,7 @@ static gboolean   is_different         (GnomeBG               *bg,
 static time_t     get_mtime            (const char            *filename);
 static GdkPixbuf *create_img_thumbnail (GnomeBG               *bg,
                                        GnomeDesktopThumbnailFactory *factory,
-                                       GdkScreen             *screen,
+                                       GdkDisplay             *display,
                                        int                    dest_width,
                                        int                    dest_height,
                                        int                    frame_num);
@@ -879,7 +878,7 @@ draw_once (GnomeBG   *bg,
        GdkPixbuf   *pixbuf;
        gint         num_monitor;
 
-       /* we just draw on the whole screen */
+       /* we just draw on the whole display */
        num_monitor = 0;
 
        rect.x = 0;
@@ -972,17 +971,17 @@ gnome_bg_get_pixmap_size (GnomeBG   *bg,
 /**
  * gnome_bg_create_surface:
  * @bg: GnomeBG 
- * @window: 
+ * @surface: 
  * @width: 
  * @height:
  *
- * Create a surface that can be set as background for @window.
+ * Create a surface that can be set as background for @surface.
  *
  * Returns: %NULL on error (e.g. out of X connections)
  **/
 cairo_surface_t *
 gnome_bg_create_surface (GnomeBG           *bg,
-                        GdkWindow   *window,
+                        GdkSurface   *gdk_surface,
                         int         width,
                         int         height)
 {
@@ -992,9 +991,9 @@ gnome_bg_create_surface (GnomeBG        *bg,
        cairo_t *cr;
        
        g_return_val_if_fail (bg != NULL, NULL);
-       g_return_val_if_fail (window != NULL, NULL);
+       g_return_val_if_fail (surface != NULL, NULL);
 
-       scale = gdk_window_get_scale_factor (window);
+       scale = gdk_monitor_get_scale_factor (gdk_surface);
 
         if (bg->pixbuf_cache &&
             gdk_pixbuf_get_width (bg->pixbuf_cache) != width &&
@@ -1005,7 +1004,7 @@ gnome_bg_create_surface (GnomeBG      *bg,
 
        /* has the side effect of loading and caching pixbuf only when in tile mode */
        gnome_bg_get_pixmap_size (bg, width, height, &pm_width, &pm_height);
-       surface = gdk_window_create_similar_surface (window,
+       surface = gdk_surface_create_similar_surface (gdk_surface,
                                                      CAIRO_CONTENT_COLOR,
                                                      pm_width, pm_height);
 
@@ -1018,16 +1017,16 @@ gnome_bg_create_surface (GnomeBG            *bg,
        }
        else {
                GdkPixbuf *pixbuf;
-               cairo_surface_t *pixbuf_surface;
+               // cairo_surface_t *pixbuf_surface;
                
                pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB, FALSE, 8,
                                         scale * width, scale * height);
                gnome_bg_draw (bg, pixbuf);
 
-               pixbuf_surface = gdk_cairo_surface_create_from_pixbuf (pixbuf, 0, window);
-               cairo_set_source_surface (cr, pixbuf_surface, 0, 0);
+           // pixbuf_surface = gdk_cairo_region_create_from_surface (surface);
+               gdk_cairo_set_source_pixbuf (cr, pixbuf, 0, 0);
 
-               cairo_surface_destroy (pixbuf_surface);
+           // cairo_surface_destroy (pixbuf_surface);
                g_object_unref (pixbuf);
        }
 
@@ -1164,7 +1163,7 @@ fit_factor (int from_width, int from_height,
 GdkPixbuf *
 gnome_bg_create_thumbnail (GnomeBG               *bg,
                           GnomeDesktopThumbnailFactory *factory,
-                          GdkScreen             *screen,
+                          GdkDisplay             *display,
                           int                    dest_width,
                           int                    dest_height)
 {
@@ -1178,7 +1177,7 @@ gnome_bg_create_thumbnail (GnomeBG               *bg,
        draw_color (bg, result);
        
        if (bg->placement != G_DESKTOP_BACKGROUND_STYLE_NONE) {
-               thumb = create_img_thumbnail (bg, factory, screen, dest_width, dest_height, -1);
+               thumb = create_img_thumbnail (bg, factory, display, dest_width, dest_height, -1);
                
                if (thumb) {
                        draw_image_for_thumb (bg, thumb, result);
@@ -1566,7 +1565,7 @@ static GdkPixbuf *
 scale_thumbnail (GDesktopBackgroundStyle placement,
                 const char *filename,
                 GdkPixbuf *thumb,
-                GdkScreen *screen,
+                GdkDisplay *display,
                 int        dest_width,
                 int        dest_height)
 {
@@ -1584,9 +1583,21 @@ scale_thumbnail (GDesktopBackgroundStyle placement,
        
        if (get_thumb_annotations (thumb, &o_width, &o_height)          ||
            (filename && get_original_size (filename, &o_width, &o_height))) {
-               
-               int scr_height = gdk_screen_get_height (screen);
-               int scr_width = gdk_screen_get_width (screen);
+
+               GListModel* monitors = gdk_display_get_monitors (display);
+               GdkMonitor *monitor;
+               GdkRectangle scr_rect = { 0, };
+               int i = 0;
+               for (i = 1; i < g_list_model_get_n_items (monitors); i++) {
+               GdkRectangle rect;
+               monitor = g_list_model_get_item (monitors, i);
+               gdk_monitor_get_geometry (monitor, &rect);
+               gdk_rectangle_union (&scr_rect, &rect, &scr_rect);
+               g_object_unref (monitor);
+               }
+               int scr_height = scr_rect.height;
+               int scr_width = scr_rect.width;
+
                int thumb_width = gdk_pixbuf_get_width (thumb);
                int thumb_height = gdk_pixbuf_get_height (thumb);
                double screen_to_dest = fit_factor (scr_width, scr_height,
@@ -1630,7 +1641,7 @@ scale_thumbnail (GDesktopBackgroundStyle placement,
 static GdkPixbuf *
 create_img_thumbnail (GnomeBG                      *bg,
                      GnomeDesktopThumbnailFactory *factory,
-                     GdkScreen                    *screen,
+                     GdkDisplay                    *display,
                      int                           dest_width,
                      int                           dest_height,
                      int                           frame_num)
@@ -1645,7 +1656,7 @@ create_img_thumbnail (GnomeBG                      *bg,
                        result = scale_thumbnail (bg->placement,
                                                  bg->filename,
                                                  thumb,
-                                                 screen,
+                                                 display,
                                                  dest_width,
                                                  dest_height);
                        g_object_unref (thumb);
@@ -1688,7 +1699,7 @@ create_img_thumbnail (GnomeBG                      *bg,
                                                thumb = scale_thumbnail (bg->placement,
                                                                         file1,
                                                                         tmp,
-                                                                        screen,
+                                                                        display,
                                                                         dest_width,
                                                                         dest_height);
                                                g_object_unref (tmp);
@@ -1705,14 +1716,14 @@ create_img_thumbnail (GnomeBG                      *bg,
                                                thumb1 = scale_thumbnail (bg->placement,
                                                                          file1,
                                                                          p1,
-                                                                         screen,
+                                                                         display,
                                                                          dest_width,
                                                                          dest_height);
 
                                                thumb2 = scale_thumbnail (bg->placement,
                                                                          file2,
                                                                          p2,
-                                                                         screen,
+                                                                         display,
                                                                          dest_width,
                                                                          dest_height);
 
@@ -2268,7 +2279,7 @@ gnome_bg_changes_with_time (GnomeBG *bg)
 GdkPixbuf *
 gnome_bg_create_frame_thumbnail (GnomeBG                       *bg,
                                 GnomeDesktopThumbnailFactory   *factory,
-                                GdkScreen                      *screen,
+                                GdkDisplay                     *display,
                                 int                             dest_width,
                                 int                             dest_height,
                                 int                             frame_num)
@@ -2304,7 +2315,7 @@ gnome_bg_create_frame_thumbnail (GnomeBG                  *bg,
        draw_color (bg, result);
 
        if (bg->placement != G_DESKTOP_BACKGROUND_STYLE_NONE) {
-               thumb = create_img_thumbnail (bg, factory, screen, dest_width, dest_height, frame_num + 
skipped);
+               thumb = create_img_thumbnail (bg, factory, display, dest_width, dest_height, frame_num + 
skipped);
 
                if (thumb) {
                        draw_image_for_thumb (bg, thumb, result);
diff --git a/libgnome-desktop/gnome-bg.h b/libgnome-desktop/gnome-bg.h
index a51ccbee..fd6d18c9 100644
--- a/libgnome-desktop/gnome-bg.h
+++ b/libgnome-desktop/gnome-bg.h
@@ -33,7 +33,6 @@
 #include <gio/gio.h>
 #include <gdesktop-enums.h>
 #include <libgnome-desktop/gnome-desktop-thumbnail.h>
-#include <libgnome-desktop/gnome-bg-crossfade.h>
 #include <gdesktop-enums.h>
 
 G_BEGIN_DECLS
@@ -78,7 +77,7 @@ const gchar *    gnome_bg_get_filename          (GnomeBG               *bg);
 void             gnome_bg_draw                  (GnomeBG               *bg,
                                                 GdkPixbuf             *dest);
 cairo_surface_t *gnome_bg_create_surface        (GnomeBG               *bg,
-                                                GdkWindow             *window,
+                                                GdkSurface             *surface,
                                                 int                    width,
                                                 int                    height);
 gboolean         gnome_bg_get_image_size        (GnomeBG               *bg,
@@ -89,7 +88,7 @@ gboolean         gnome_bg_get_image_size        (GnomeBG               *bg,
                                                 int                   *height);
 GdkPixbuf *      gnome_bg_create_thumbnail      (GnomeBG               *bg,
                                                 GnomeDesktopThumbnailFactory *factory,
-                                                GdkScreen             *screen,
+                                                GdkDisplay             *screen,
                                                 int                    dest_width,
                                                 int                    dest_height);
 gboolean         gnome_bg_is_dark               (GnomeBG               *bg,
@@ -99,7 +98,7 @@ gboolean         gnome_bg_has_multiple_sizes    (GnomeBG               *bg);
 gboolean         gnome_bg_changes_with_time     (GnomeBG               *bg);
 GdkPixbuf *      gnome_bg_create_frame_thumbnail (GnomeBG              *bg,
                                                 GnomeDesktopThumbnailFactory *factory,
-                                                GdkScreen             *screen,
+                                                GdkDisplay             *screen,
                                                 int                    dest_width,
                                                 int                    dest_height,
                                                 int                    frame_num);
diff --git a/libgnome-desktop/gnome-desktop-3.0-uninstalled.pc.in 
b/libgnome-desktop/gnome-desktop-4.0-uninstalled.pc.in
similarity index 79%
rename from libgnome-desktop/gnome-desktop-3.0-uninstalled.pc.in
rename to libgnome-desktop/gnome-desktop-4.0-uninstalled.pc.in
index 2f1c6803..9587196d 100644
--- a/libgnome-desktop/gnome-desktop-3.0-uninstalled.pc.in
+++ b/libgnome-desktop/gnome-desktop-4.0-uninstalled.pc.in
@@ -3,9 +3,9 @@ exec_prefix=@exec_prefix@
 libdir=@libdir@
 includedir=@includedir@
 
-Name: gnome-desktop-3.0
+Name: gnome-desktop-4.0
 Description: Utility library for loading .desktop files
-Requires: gtk+-3.0 gsettings-desktop-schemas
+Requires: gtk4 gsettings-desktop-schemas
 Version: @VERSION@
 Libs: ${pc_top_builddir}/${pcfiledir}/libgnome-desktop-3.la
 Cflags: -I${pc_top_builddir}/${pcfiledir}/..
diff --git a/libgnome-desktop/gnome-desktop-3.0.pc.in b/libgnome-desktop/gnome-desktop-4.0.pc.in
similarity index 63%
rename from libgnome-desktop/gnome-desktop-3.0.pc.in
rename to libgnome-desktop/gnome-desktop-4.0.pc.in
index a9cef937..eb947128 100644
--- a/libgnome-desktop/gnome-desktop-3.0.pc.in
+++ b/libgnome-desktop/gnome-desktop-4.0.pc.in
@@ -3,9 +3,9 @@ exec_prefix=@exec_prefix@
 libdir=@libdir@
 includedir=@includedir@
 
-Name: gnome-desktop-3.0
+Name: gnome-desktop-4.0
 Description: Utility library for loading .desktop files
-Requires: gtk+-3.0 gsettings-desktop-schemas
+Requires: gtk4 gsettings-desktop-schemas
 Version: @VERSION@
 Libs: -L${libdir} -lgnome-desktop-3
-Cflags: -I${includedir}/gnome-desktop-3.0
+Cflags: -I${includedir}/gnome-desktop-4.0
diff --git a/libgnome-desktop/gnome-idle-monitor.c b/libgnome-desktop/gnome-idle-monitor.c
index b481c670..f9d8e71f 100644
--- a/libgnome-desktop/gnome-idle-monitor.c
+++ b/libgnome-desktop/gnome-idle-monitor.c
@@ -26,9 +26,6 @@
 #include <glib.h>
 #include <glib/gi18n-lib.h>
 #include <gdk/gdk.h>
-#if defined(GDK_WINDOWING_WAYLAND)
-#include <gdk/gdkwayland.h>
-#endif
 
 #define GNOME_DESKTOP_USE_UNSTABLE_API
 #include "gnome-idle-monitor.h"
diff --git a/libgnome-desktop/gnome-rr-debug.c b/libgnome-desktop/gnome-rr-debug.c
index af578829..86226434 100644
--- a/libgnome-desktop/gnome-rr-debug.c
+++ b/libgnome-desktop/gnome-rr-debug.c
@@ -148,8 +148,8 @@ main (int argc, char *argv[])
        GnomeRRScreen *screen;
        guint i;
 
-       gtk_init (&argc, &argv);
-       screen = gnome_rr_screen_new (gdk_screen_get_default (), &error);
+       gtk_init ();
+       screen = gnome_rr_screen_new (gdk_display_get_default (), &error);
        if (screen == NULL) {
                g_warning ("failed to get screen: %s", error->message);
                g_error_free (error);
@@ -164,7 +164,8 @@ main (int argc, char *argv[])
        g_signal_connect (screen, "output-connected", G_CALLBACK (output_connected), NULL);
        g_signal_connect (screen, "notify::dpms-mode", G_CALLBACK (dpms_mode_changed), NULL);
 
-       gtk_main ();
+       GMainLoop *loop = g_main_loop_new (NULL, FALSE);
+       g_main_loop_run(loop);
 
 out:
        g_object_unref (screen);
diff --git a/libgnome-desktop/gnome-rr-private.h b/libgnome-desktop/gnome-rr-private.h
index 36ad7767..bd5a8dcd 100644
--- a/libgnome-desktop/gnome-rr-private.h
+++ b/libgnome-desktop/gnome-rr-private.h
@@ -1,20 +1,7 @@
 #ifndef GNOME_RR_PRIVATE_H
 #define GNOME_RR_PRIVATE_H
 
-#ifdef GDK_WINDOWING_WAYLAND
-#include <gdk/gdkwayland.h>
-#else
-enum wl_output_transform {
-  WL_OUTPUT_TRANSFORM_NORMAL,
-  WL_OUTPUT_TRANSFORM_90,
-  WL_OUTPUT_TRANSFORM_180,
-  WL_OUTPUT_TRANSFORM_270,
-  WL_OUTPUT_TRANSFORM_FLIPPED,
-  WL_OUTPUT_TRANSFORM_FLIPPED_90,
-  WL_OUTPUT_TRANSFORM_FLIPPED_180,
-  WL_OUTPUT_TRANSFORM_FLIPPED_270
-};
-#endif
+#include <gdk/wayland/gdkwayland.h>
 
 #include "meta-xrandr-shared.h"
 #include "meta-dbus-xrandr.h"
@@ -43,8 +30,8 @@ struct ScreenInfo
 
 struct GnomeRRScreenPrivate
 {
-    GdkScreen *                        gdk_screen;
-    GdkWindow *                        gdk_root;
+    GdkDisplay *                       gdk_screen;
+    GdkSurface *                       gdk_root;
     ScreenInfo *               info;
 
     int                         init_name_watch_id;
diff --git a/libgnome-desktop/gnome-rr.c b/libgnome-desktop/gnome-rr.c
index 692dafaa..e4373989 100644
--- a/libgnome-desktop/gnome-rr.c
+++ b/libgnome-desktop/gnome-rr.c
@@ -42,7 +42,7 @@
 
 enum {
     SCREEN_PROP_0,
-    SCREEN_PROP_GDK_SCREEN,
+    SCREEN_PROP_GDK_DISPLAY,
     SCREEN_PROP_DPMS_MODE,
     SCREEN_PROP_LAST,
 };
@@ -834,7 +834,7 @@ gnome_rr_screen_set_property (GObject *gobject, guint property_id, const GValue
 
     switch (property_id)
     {
-    case SCREEN_PROP_GDK_SCREEN:
+    case SCREEN_PROP_GDK_DISPLAY:
         priv->gdk_screen = g_value_get_object (value);
         return;
     case SCREEN_PROP_DPMS_MODE:
@@ -854,7 +854,7 @@ gnome_rr_screen_get_property (GObject *gobject, guint property_id, GValue *value
 
     switch (property_id)
     {
-    case SCREEN_PROP_GDK_SCREEN:
+    case SCREEN_PROP_GDK_DISPLAY:
         g_value_set_object (value, priv->gdk_screen);
         return;
     case SCREEN_PROP_DPMS_MODE: {
@@ -885,12 +885,12 @@ gnome_rr_screen_class_init (GnomeRRScreenClass *klass)
 
     g_object_class_install_property(
             gobject_class,
-            SCREEN_PROP_GDK_SCREEN,
+            SCREEN_PROP_GDK_DISPLAY,
             g_param_spec_object (
-                    "gdk-screen",
-                    "GDK Screen",
-                    "The GDK Screen represented by this GnomeRRScreen",
-                    GDK_TYPE_SCREEN,
+                    "gdk-display",
+                    "GDK Display",
+                    "The GDK Display represented by this GnomeRRScreen",
+                    GDK_TYPE_DISPLAY,
                     G_PARAM_READWRITE |
                    G_PARAM_CONSTRUCT_ONLY |
                    G_PARAM_STATIC_STRINGS)
@@ -983,43 +983,43 @@ gnome_rr_screen_init (GnomeRRScreen *self)
     self->priv = gnome_rr_screen_get_instance_private (self);
 }
 
-/* Weak reference callback set in gnome_rr_screen_new(); we remove the GObject data from the GdkScreen. */
+/* Weak reference callback set in gnome_rr_screen_new(); we remove the GObject data from the GdkDisplay. */
 static void
 rr_screen_weak_notify_cb (gpointer data, GObject *where_the_object_was)
 {
-    GdkScreen *screen = GDK_SCREEN (data);
+    GdkDisplay *display = GDK_DISPLAY (data);
 
-    g_object_set_data (G_OBJECT (screen), "GnomeRRScreen", NULL);
+    g_object_set_data (G_OBJECT (display), "GnomeRRScreen", NULL);
 }
 
 /**
  * gnome_rr_screen_new:
- * @screen: the #GdkScreen on which to operate
+ * @screen: the #GdkDisplay on which to operate
  * @error: will be set if XRandR is not supported
  *
  * Creates a unique #GnomeRRScreen instance for the specified @screen.
  *
  * Returns: a unique #GnomeRRScreen instance, specific to the @screen, or NULL
  * if this could not be created, for instance if the driver does not support
- * Xrandr 1.2.  Each #GdkScreen thus has a single instance of #GnomeRRScreen.
+ * Xrandr 1.2.  Each #GdkDisplay thus has a single instance of #GnomeRRScreen.
  */
 GnomeRRScreen *
-gnome_rr_screen_new (GdkScreen *screen,
+gnome_rr_screen_new (GdkDisplay *display,
                     GError **error)
 {
     GnomeRRScreen *rr_screen;
 
-    g_return_val_if_fail (GDK_IS_SCREEN (screen), NULL);
+    g_return_val_if_fail (GDK_IS_DISPLAY (display), NULL);
     g_return_val_if_fail (error == NULL || *error == NULL, NULL);
 
-    rr_screen = g_object_get_data (G_OBJECT (screen), "GnomeRRScreen");
+    rr_screen = g_object_get_data (G_OBJECT (display), "GnomeRRScreen");
     if (rr_screen)
        g_object_ref (rr_screen);
     else {
-       rr_screen = g_initable_new (GNOME_TYPE_RR_SCREEN, NULL, error, "gdk-screen", screen, NULL);
+       rr_screen = g_initable_new (GNOME_TYPE_RR_SCREEN, NULL, error, "gdk-display", display, NULL);
        if (rr_screen) {
-           g_object_set_data (G_OBJECT (screen), "GnomeRRScreen", rr_screen);
-           g_object_weak_ref (G_OBJECT (rr_screen), rr_screen_weak_notify_cb, screen);
+           g_object_set_data (G_OBJECT (display), "GnomeRRScreen", rr_screen);
+           g_object_weak_ref (G_OBJECT (rr_screen), rr_screen_weak_notify_cb, display);
        }
     }
 
@@ -1027,15 +1027,15 @@ gnome_rr_screen_new (GdkScreen *screen,
 }
 
 void
-gnome_rr_screen_new_async (GdkScreen           *screen,
+gnome_rr_screen_new_async (GdkDisplay           *display,
                            GAsyncReadyCallback  callback,
                            gpointer             user_data)
 {
-    g_return_if_fail (GDK_IS_SCREEN (screen));
+    g_return_if_fail (GDK_IS_DISPLAY (display));
 
     g_async_initable_new_async (GNOME_TYPE_RR_SCREEN, G_PRIORITY_DEFAULT,
                                 NULL, callback, user_data,
-                                "gdk-screen", screen, NULL);
+                                "gdk-display", display, NULL);
 }
 
 GnomeRRScreen *
diff --git a/libgnome-desktop/gnome-rr.h b/libgnome-desktop/gnome-rr.h
index 7b5c92d4..206f7bc2 100644
--- a/libgnome-desktop/gnome-rr.h
+++ b/libgnome-desktop/gnome-rr.h
@@ -117,9 +117,9 @@ GType gnome_rr_mode_get_type (void);
 GType gnome_rr_dpms_mode_get_type (void);
 
 /* GnomeRRScreen */
-GnomeRRScreen * gnome_rr_screen_new                (GdkScreen             *screen,
+GnomeRRScreen * gnome_rr_screen_new                (GdkDisplay             *screen,
                                                    GError               **error);
-void            gnome_rr_screen_new_async          (GdkScreen             *screen,
+void            gnome_rr_screen_new_async          (GdkDisplay             *screen,
                                                     GAsyncReadyCallback    callback,
                                                     gpointer               user_data);
 GnomeRRScreen * gnome_rr_screen_new_finish         (GAsyncResult          *result,
diff --git a/libgnome-desktop/meson.build b/libgnome-desktop/meson.build
index 483f1ff6..86c9497c 100644
--- a/libgnome-desktop/meson.build
+++ b/libgnome-desktop/meson.build
@@ -13,7 +13,6 @@ introspection_sources = [
   'gnome-desktop-thumbnail.c',
   'gnome-bg.c',
   'gnome-bg-slide-show.c',
-  'gnome-bg-crossfade.c',
   'gnome-rr.c',
   'gnome-rr-config.c',
   'gnome-rr-output-info.c',
@@ -53,7 +52,6 @@ libgnome_desktop_sources = [
 
 libgnome_desktop_headers = [
   'gnome-bg.h',
-  'gnome-bg-crossfade.h',
   'gnome-bg-slide-show.h',
   'gnome-desktop-thumbnail.h',
   'gnome-rr.h',
@@ -67,7 +65,7 @@ libgnome_desktop_headers = [
 ]
 
 install_headers(libgnome_desktop_headers,
-  subdir: 'gnome-desktop-3.0/libgnome-desktop'
+  subdir: 'gnome-desktop-4.0/libgnome-desktop'
 )
 
 gnome_desktop_deps = [
@@ -109,10 +107,10 @@ libgnome_desktop_dep = declare_dependency(
 
 gnome.generate_gir(libgnome_desktop,
   sources: introspection_sources + libgnome_desktop_headers,
-  export_packages: 'gnome-desktop-3.0',
+  export_packages: 'gnome-desktop-4.0',
   namespace: 'GnomeDesktop',
-  nsversion: '3.0',
-  includes: ['GObject-2.0', 'Gtk-3.0', 'GDesktopEnums-3.0'],
+  nsversion: '4.0',
+  includes: ['GObject-2.0', 'Gtk-4.0', 'GDesktopEnums-3.0'],
   extra_args: '-DGNOME_DESKTOP_USE_UNSTABLE_API',
   identifier_prefix: 'Gnome',
   symbol_prefix: 'gnome',
@@ -121,12 +119,12 @@ gnome.generate_gir(libgnome_desktop,
 
 desktop_pc = pkg.generate(
   libraries: libgnome_desktop,
-  requires: ['gtk+-3.0', 'gsettings-desktop-schemas'],
+  requires: ['gtk4', 'gsettings-desktop-schemas'],
   version: meson.project_version(),
-  name: 'gnome-desktop-3.0',
-  filebase: 'gnome-desktop-3.0',
+  name: 'gnome-desktop-4.0',
+  filebase: 'gnome-desktop-4.0',
   description: 'Utility library for loading .desktop files',
-  subdirs: 'gnome-desktop-3.0'
+  subdirs: 'gnome-desktop-4.0'
 )
 
 test_programs = [
diff --git a/libgnome-desktop/test-idle-monitor.c b/libgnome-desktop/test-idle-monitor.c
index 713f12cf..b366364f 100644
--- a/libgnome-desktop/test-idle-monitor.c
+++ b/libgnome-desktop/test-idle-monitor.c
@@ -38,7 +38,7 @@ int main (int argc, char **argv)
        GnomeIdleMonitor *monitor;
        guint watch_id;
 
-       gtk_init (&argc, &argv);
+       gtk_init ();
 
        monitor = gnome_idle_monitor_new ();
        watch_id = gnome_idle_monitor_add_idle_watch (monitor,
@@ -51,7 +51,8 @@ int main (int argc, char **argv)
 
        ensure_active_watch (monitor);
 
-       gtk_main ();
+       GMainLoop *loop = g_main_loop_new (NULL, FALSE);
+       g_main_loop_run(loop);
 
        return 0;
 }
diff --git a/meson.build b/meson.build
index 2ec66471..220c1858 100644
--- a/meson.build
+++ b/meson.build
@@ -1,6 +1,6 @@
 project('gnome-desktop', 'c',
   meson_version: '>= 0.49.0',
-  version: '3.38.0',
+  version: '40.alpha',
   license: ['GPL2+', 'LGPL2+']
 )
 
@@ -14,11 +14,11 @@ project('gnome-desktop', 'c',
 # to 0. When bumping the second version, set the third one to zero.
 #
 # A lot easier than libtool, right?
-libversion = '19.0.8'
+libversion = '20.0.0'
 soversion = libversion.split('.')[0]
 
 gdk_pixbuf_req = '>= 2.36.5'
-gtk_req = '>= 3.3.6'
+gtk_req = '>= 4.0.0'
 glib_req = '>= 2.53.0'
 xrandr_req = '>= 1.3'
 schemas_req = '>= 3.27.0'
@@ -40,7 +40,7 @@ test_execdir = join_paths(libexecdir, 'installed-tests', meson.project_name())
 versiondir = join_paths(datadir, 'gnome')
 
 gdk_pixbuf_dep = dependency('gdk-pixbuf-2.0', version: gdk_pixbuf_req)
-gtk_dep = dependency('gtk+-3.0', version: gtk_req)
+gtk_dep = dependency('gtk4', version: gtk_req)
 glib_dep = dependency('glib-2.0', version: glib_req)
 gio_dep = dependency('gio-2.0', version: glib_req)
 gio_unix_dep = dependency('gio-unix-2.0', version: glib_req)
@@ -81,7 +81,7 @@ endif
 
 conf = configuration_data()
 
-conf.set_quoted('GETTEXT_PACKAGE', '@0@-3.0'.format(meson.project_name()))
+conf.set_quoted('GETTEXT_PACKAGE', '@0@-4.0'.format(meson.project_name()))
 conf.set_quoted('INSTALL_PREFIX', prefix)
 
 conf.set('ENABLE_SECCOMP', seccomp_dep.found())
@@ -109,7 +109,7 @@ version_conf = configuration_data()
 
 version_conf.set('GNOME_PLATFORM', version_array[0])
 version_conf.set('GNOME_MINOR', version_array[1])
-version_conf.set('GNOME_MICRO', version_array[2])
+version_conf.set('GNOME_MICRO', 0)
 version_conf.set('GNOME_DISTRIBUTOR', get_option('gnome_distributor'))
 
 if get_option('date_in_gnome_version')
@@ -141,5 +141,5 @@ if get_option('desktop_docs')
 endif
 
 if get_option('gtk_doc')
-  subdir('docs/reference/gnome-desktop3')
+  subdir('docs/reference/gnome-desktop4')
 endif
diff --git a/po/Makevars b/po/Makevars
index aeb45289..ef11e1ba 100644
--- a/po/Makevars
+++ b/po/Makevars
@@ -1,7 +1,7 @@
 # Makefile variables for PO directory in any package using GNU gettext.
 
 # Usually the message domain is the same as the package name.
-DOMAIN = gnome-desktop-3.0
+DOMAIN = gnome-desktop-4.0
 
 # These two variables depend on the location of this directory.
 subdir = po
diff --git a/po/meson.build b/po/meson.build
index d1fa7c6f..a9e15ce8 100644
--- a/po/meson.build
+++ b/po/meson.build
@@ -1 +1 @@
-i18n.gettext('gnome-desktop-3.0', preset: 'glib')
+i18n.gettext('gnome-desktop-4.0', preset: 'glib')
diff --git a/tests/wallclock-reftest.c b/tests/wallclock-reftest.c
index 1238ea89..99a19b06 100644
--- a/tests/wallclock-reftest.c
+++ b/tests/wallclock-reftest.c
@@ -93,9 +93,8 @@ add_extra_css (const char *testname,
 
   provider = GTK_STYLE_PROVIDER (gtk_css_provider_new ());
   gtk_css_provider_load_from_path (GTK_CSS_PROVIDER (provider),
-                                   css_file,
-                                   NULL);
-  gtk_style_context_add_provider_for_screen (gdk_screen_get_default (),
+                                   css_file);
+  gtk_style_context_add_provider_for_display (gdk_display_get_default (),
                                              provider,
                                              GTK_STYLE_PROVIDER_PRIORITY_FORCE);
 
@@ -110,7 +109,7 @@ remove_extra_css (GtkStyleProvider *provider)
   if (provider == NULL)
     return;
 
-  gtk_style_context_remove_provider_for_screen (gdk_screen_get_default (),
+  gtk_style_context_remove_provider_for_display (gdk_display_get_default (),
                                                 provider);
 }
 
@@ -144,30 +143,26 @@ quit_when_idle (gpointer loop)
   return G_SOURCE_REMOVE;
 }
 
-static void
-event_handler_func (GdkEvent *event,
-                    gpointer  data)
+static gboolean
+check_for_draw (GdkSurface  *surface,
+               cairo_region_t *region,
+               gpointer    user_data)
 {
-    gtk_main_do_event (event);
-}
+  GdkEvent *event = (GdkEvent*)event;
+  GMainLoop *loop = (GMainLoop*)user_data;
 
-static void
-check_for_draw (GdkEvent *event, gpointer loop)
-{
-  if (event->type == GDK_EXPOSE)
-    {
-      g_idle_add (quit_when_idle, loop);
-      gdk_event_handler_set ((GdkEventFunc) event_handler_func, NULL, NULL);
-    }
+  g_idle_add (quit_when_idle, loop);
+  
+  g_object_disconnect(surface, "render", check_for_draw, loop, NULL);
 
-  gtk_main_do_event (event);
+  return FALSE;
 }
 
 static cairo_surface_t *
 snapshot_widget (GtkWidget *widget, SnapshotMode mode)
 {
   cairo_surface_t *surface;
-  cairo_pattern_t *bg;
+  // cairo_pattern_t *bg;
   GMainLoop *loop;
   cairo_t *cr;
 
@@ -179,43 +174,50 @@ snapshot_widget (GtkWidget *widget, SnapshotMode mode)
    * happen if the window is fully obscured by windowed child widgets.
    * Alternatively, we could wait for an expose event on widget's window.
    * Both of these are rather hairy, not sure what's best. */
-  gdk_event_handler_set (check_for_draw, loop, NULL);
-  g_main_loop_run (loop);
-
-  surface = gdk_window_create_similar_surface (gtk_widget_get_window (widget),
+  
+  GtkNative* native = gtk_widget_get_native(widget);
+  GdkSurface* gdk_surface = gtk_native_get_surface(native);
+  surface = gdk_surface_create_similar_surface (gdk_surface,
                                                CAIRO_CONTENT_COLOR,
                                                gtk_widget_get_allocated_width (widget),
                                                gtk_widget_get_allocated_height (widget));
 
+  g_object_connect(surface, "render", check_for_draw, loop, NULL);
+  g_main_loop_run (loop);
+  
   cr = cairo_create (surface);
 
   switch (mode)
     {
     case SNAPSHOT_WINDOW:
       {
-        GdkWindow *window = gtk_widget_get_window (widget);
-        if (gdk_window_get_window_type (window) == GDK_WINDOW_TOPLEVEL ||
-            gdk_window_get_window_type (window) == GDK_WINDOW_FOREIGN)
+        GtkNative *native = gtk_widget_get_native (widget);
+        // TODO: native can be NULL?
+        GdkSurface *surface= gtk_native_get_surface (native);
+        cairo_surface_t* cairo_surface = gdk_surface_create_similar_surface(surface, CAIRO_CONTENT_COLOR, 
gtk_widget_get_allocated_width(widget), gtk_widget_get_allocated_height(widget));
+        if (GTK_IS_ROOT(surface) || GTK_IS_NATIVE(surface))
           {
             /* give the WM/server some time to sync. They need it.
              * Also, do use popups instead of toplevls in your tests
              * whenever you can. */
-            gdk_display_sync (gdk_window_get_display (window));
+            gdk_display_sync (gdk_surface_get_display (surface));
             g_timeout_add (500, quit_when_idle, loop);
             g_main_loop_run (loop);
           }
-        gdk_cairo_set_source_window (cr, window, 0, 0);
+        GdkPixbuf* pixbuf = gdk_pixbuf_get_from_surface(cairo_surface, 0, 0, 
gtk_widget_get_allocated_width(widget), gtk_widget_get_allocated_height(widget));
+        gdk_cairo_set_source_pixbuf (cr, pixbuf, 0, 0);
         cairo_paint (cr);
       }
       break;
     case SNAPSHOT_DRAW:
-      bg = gdk_window_get_background_pattern (gtk_widget_get_window (widget));
-      if (bg)
-        {
-          cairo_set_source (cr, bg);
-          cairo_paint (cr);
-        }
-      gtk_widget_draw (widget, cr);
+      // TODO:
+      // bg = gdk_window_get_background_pattern (gtk_widget_get_window (widget));
+      // if (bg)
+      //   {
+      //     cairo_set_source (cr, bg);
+      //     cairo_paint (cr);
+      //   }
+      // gtk_widget_draw (widget, cr);
       break;
     default:
       g_assert_not_reached();
@@ -224,7 +226,7 @@ snapshot_widget (GtkWidget *widget, SnapshotMode mode)
 
   cairo_destroy (cr);
   g_main_loop_unref (loop);
-  gtk_widget_destroy (widget);
+  g_object_unref (widget);
 
   return surface;
 }
@@ -269,6 +271,34 @@ save_image (cairo_surface_t *surface,
   g_free (filename);
 }
 
+// TODO: Removed from GDK
+gboolean
+__gdk_cairo_get_clip_rectangle (cairo_t      *cr,
+                              GdkRectangle *rect)
+{
+  double x1, y1, x2, y2;
+  gboolean clip_exists;
+
+  cairo_clip_extents (cr, &x1, &y1, &x2, &y2);
+
+  clip_exists = x1 < x2 && y1 < y2;
+
+  if (rect)
+    {
+      x1 = floor (x1);
+      y1 = floor (y1);
+      x2 = ceil (x2);
+      y2 = ceil (y2);
+
+      rect->x      = CLAMP (x1,      G_MININT, G_MAXINT);
+      rect->y      = CLAMP (y1,      G_MININT, G_MAXINT);
+      rect->width  = CLAMP (x2 - x1, G_MININT, G_MAXINT);
+      rect->height = CLAMP (y2 - y1, G_MININT, G_MAXINT);
+    }
+
+  return clip_exists;
+}
+
 static void
 get_surface_size (cairo_surface_t *surface,
                   int             *width,
@@ -278,7 +308,7 @@ get_surface_size (cairo_surface_t *surface,
   cairo_t *cr;
 
   cr = cairo_create (surface);
-  if (!gdk_cairo_get_clip_rectangle (cr, &area))
+  if (!__gdk_cairo_get_clip_rectangle (cr, &area))
     {
       g_assert_not_reached ();
     }
@@ -597,7 +627,7 @@ main (int argc, char **argv)
   g_setenv ("GDK_RENDERING", "image", FALSE);
 
   g_test_init (&argc, &argv, NULL);
-  gtk_init (&argc, &argv);
+  gtk_init ();
 
   basedir = g_getenv ("G_TEST_SRCDIR");
   if (basedir == NULL)


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]