[gnome-desktop/wip/gtk4] Initial GTK4 / 4.0 port.
- From: Evan Welsh <ewlsh src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-desktop/wip/gtk4] Initial GTK4 / 4.0 port.
- Date: Wed, 30 Dec 2020 16:34:21 +0000 (UTC)
commit ea723ec0d28ec2c5d8788c88f17f3b70503c5e40
Author: Evan Welsh <contact evanwelsh com>
Date: Wed Dec 30 10:34:16 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]