Sync from SUSE:ALP:Source:Standard:1.0 gtk4 revision 8779794edd9d57f59e9475c0ecca645c

This commit is contained in:
Adrian Schröter 2023-06-07 07:56:05 +02:00
commit 547975da59
10 changed files with 3177 additions and 0 deletions

23
.gitattributes vendored Normal file
View File

@ -0,0 +1,23 @@
## Default LFS
*.7z filter=lfs diff=lfs merge=lfs -text
*.bsp filter=lfs diff=lfs merge=lfs -text
*.bz2 filter=lfs diff=lfs merge=lfs -text
*.gem filter=lfs diff=lfs merge=lfs -text
*.gz filter=lfs diff=lfs merge=lfs -text
*.jar filter=lfs diff=lfs merge=lfs -text
*.lz filter=lfs diff=lfs merge=lfs -text
*.lzma filter=lfs diff=lfs merge=lfs -text
*.obscpio filter=lfs diff=lfs merge=lfs -text
*.oxt filter=lfs diff=lfs merge=lfs -text
*.pdf filter=lfs diff=lfs merge=lfs -text
*.png filter=lfs diff=lfs merge=lfs -text
*.rpm filter=lfs diff=lfs merge=lfs -text
*.tbz filter=lfs diff=lfs merge=lfs -text
*.tbz2 filter=lfs diff=lfs merge=lfs -text
*.tgz filter=lfs diff=lfs merge=lfs -text
*.ttf filter=lfs diff=lfs merge=lfs -text
*.txz filter=lfs diff=lfs merge=lfs -text
*.whl filter=lfs diff=lfs merge=lfs -text
*.xz filter=lfs diff=lfs merge=lfs -text
*.zip filter=lfs diff=lfs merge=lfs -text
*.zst filter=lfs diff=lfs merge=lfs -text

View File

@ -0,0 +1,117 @@
From 5f5fd77f096174c45f8335afe6efd6745796d9a5 Mon Sep 17 00:00:00 2001
From: Kalev Lember <klember@redhat.com>
Date: Mon, 25 Jul 2022 16:21:50 +0200
Subject: [PATCH] Revert "Meson: Simplify pkgconfig file generator"
Temporarily revert this until we figure out how to best restore
private requires that are needed for rpm automatic dep extraction.
https://gitlab.gnome.org/GNOME/gtk/-/merge_requests/4756
This reverts commit 802bf4199911c811938b0454a876089bafa97dba.
---
meson.build | 47 +++++++++++++++++++++++++++++++++--------------
1 file changed, 33 insertions(+), 14 deletions(-)
Index: gtk-4.10.1/meson.build
===================================================================
--- gtk-4.10.1.orig/meson.build
+++ gtk-4.10.1/meson.build
@@ -438,6 +438,9 @@ if not os_win32
endif
endif
+
+pc_gdk_extra_libs = []
+
cairo_backends = []
foreach backend: [ ['cairo-xlib', cairo_req, x11_enabled],
['cairo-win32', cairo_req, win32_enabled],
@@ -566,14 +569,26 @@ if x11_enabled
cdata.set('HAVE_RANDR15', xrandr15_dep.found())
endif
+if broadway_enabled
+ pc_gdk_extra_libs += ['-lz']
+endif
+
+if macos_enabled
+ pc_gdk_extra_libs += ['-framework Cocoa', '-framework Carbon']
+endif
+
extra_demo_ldflags = []
if win32_enabled
+ pc_gdk_extra_libs += ['-lgdi32', '-limm32', '-lshell32', '-lole32']
if cc.get_id() == 'msvc'
# Since the demo programs are now built as pure GUI programs, we
# need to pass in /entry:mainCRTStartup so that they will properly
# link on Visual Studio builds
extra_demo_ldflags = ['/entry:mainCRTStartup']
+ else
+ pc_gdk_extra_libs += ['-Wl,-luuid']
endif
+ pc_gdk_extra_libs += ['-lwinmm', '-ldwmapi', '-lsetupapi', '-lcfgmgr32', '-lhid']
# Check whether libepoxy is built with EGL support on Windows
endif
@@ -803,7 +818,16 @@ gsk_private_packages = [] # all already
pangoft2_pkgs = (wayland_enabled or x11_enabled) ? ['pangoft2'] : []
gtk_private_packages = pangoft2_pkgs
-pkgs = []
+gdk_extra_libs = pc_gdk_extra_libs
+gsk_extra_libs = []
+gtk_extra_libs = []
+
+gdk_extra_cflags = []
+gsk_extra_cflags = []
+gtk_extra_cflags = []
+
+pkgs = [ 'gtk4' ]
+
pkg_targets = []
display_backends = []
foreach backend: [ 'broadway', 'macos', 'wayland', 'win32', 'x11', ]
@@ -820,23 +844,18 @@ common_pc_variables = [
'gtk_host=@0@-@1@'.format(host_machine.cpu_family(), host_machine.system()), # FIXME
]
-pkg_config.generate(libgtk,
- filebase: 'gtk4',
- unescaped_variables: common_pc_variables,
- name: 'GTK',
- description: 'GTK Graphical UI Library',
- requires: gdk_packages + gsk_packages + gtk_packages,
- subdirs: ['gtk-@0@'.format(gtk_api_version)],
-)
-meson.override_dependency('gtk4', libgtk_dep)
-
foreach pkg: pkgs
pkg_config.generate(
filebase: pkg,
unescaped_variables: common_pc_variables,
name: 'GTK',
description: 'GTK Graphical UI Library',
- requires: 'gtk4',
+ requires: gdk_packages + gsk_packages + gtk_packages,
+ requires_private: gdk_private_packages + gsk_private_packages + gtk_private_packages,
+ libraries: ['-L${libdir}', '-lgtk-4'],
+ libraries_private: gdk_extra_libs + gsk_extra_libs + gtk_extra_libs,
+ subdirs: ['gtk-@0@'.format(gtk_api_version)],
+ extra_cflags: gdk_extra_cflags + gsk_extra_cflags + gtk_extra_cflags,
)
meson.override_dependency(pkg, libgtk_dep)
endforeach
@@ -847,10 +866,10 @@ if os_unix
unescaped_variables: common_pc_variables,
name: 'GTK',
description: 'GTK Unix print support',
- requires: 'gtk4',
+ requires: ['gtk4'] + gtk_packages,
+ libraries: [],
subdirs: ['gtk-@0@/unix-print'.format(gtk_api_version)],
)
- meson.override_dependency('gtk4-unix-print', libgtk_dep)
endif
subdir('po')

118
966a2350.patch Normal file
View File

@ -0,0 +1,118 @@
From 966a23503a2e8bbb948270e06f3eb13ca4c06632 Mon Sep 17 00:00:00 2001
From: Benjamin Otte <otte@redhat.com>
Date: Tue, 2 May 2023 19:48:54 +0200
Subject: [PATCH] css: Don't transition to currentColor
Transition to the color that is in use instead.
Fixes crashes because currentColor is not an RGBA color and
therefor could not be queried later.
Fixes #5798
---
gtk/gtkcssfiltervalue.c | 16 ++++++++--------
gtk/gtkcssshadowvalue.c | 4 ++--
gtk/gtkcssshadowvalueprivate.h | 2 +-
3 files changed, 11 insertions(+), 11 deletions(-)
diff --git a/gtk/gtkcssfiltervalue.c b/gtk/gtkcssfiltervalue.c
index ed334979cb6..84f581121c5 100644
--- a/gtk/gtkcssfiltervalue.c
+++ b/gtk/gtkcssfiltervalue.c
@@ -102,10 +102,10 @@ gtk_css_filter_clear (GtkCssFilter *filter)
}
static void
-gtk_css_filter_init_identity (GtkCssFilter *filter,
- GtkCssFilterType type)
+gtk_css_filter_init_identity (GtkCssFilter *filter,
+ const GtkCssFilter *other)
{
- switch (type)
+ switch (other->type)
{
case GTK_CSS_FILTER_BRIGHTNESS:
filter->brightness.value = _gtk_css_number_value_new (1, GTK_CSS_NUMBER);
@@ -135,7 +135,7 @@ gtk_css_filter_init_identity (GtkCssFilter *filter,
filter->blur.value = _gtk_css_number_value_new (0, GTK_CSS_PX);
break;
case GTK_CSS_FILTER_DROP_SHADOW:
- filter->drop_shadow.value = gtk_css_shadow_value_new_filter ();
+ filter->drop_shadow.value = gtk_css_shadow_value_new_filter (other->drop_shadow.value);
break;
case GTK_CSS_FILTER_NONE:
default:
@@ -143,7 +143,7 @@ gtk_css_filter_init_identity (GtkCssFilter *filter,
break;
}
- filter->type = type;
+ filter->type = other->type;
}
#define R 0.2126
@@ -466,7 +466,7 @@ gtk_css_value_filter_equal (const GtkCssValue *value1,
{
GtkCssFilter filter;
- gtk_css_filter_init_identity (&filter, larger->filters[i].type);
+ gtk_css_filter_init_identity (&filter, &larger->filters[i]);
if (!gtk_css_filter_equal (&larger->filters[i], &filter))
{
@@ -590,7 +590,7 @@ gtk_css_value_filter_transition (GtkCssValue *start,
{
GtkCssFilter filter;
- gtk_css_filter_init_identity (&filter, start->filters[i].type);
+ gtk_css_filter_init_identity (&filter, &start->filters[i]);
gtk_css_filter_transition (&result->filters[i],
&start->filters[i],
&filter,
@@ -602,7 +602,7 @@ gtk_css_value_filter_transition (GtkCssValue *start,
{
GtkCssFilter filter;
- gtk_css_filter_init_identity (&filter, end->filters[i].type);
+ gtk_css_filter_init_identity (&filter, &end->filters[i]);
gtk_css_filter_transition (&result->filters[i],
&filter,
&end->filters[i],
diff --git a/gtk/gtkcssshadowvalue.c b/gtk/gtkcssshadowvalue.c
index 66029dbff44..fead476c00a 100644
--- a/gtk/gtkcssshadowvalue.c
+++ b/gtk/gtkcssshadowvalue.c
@@ -331,7 +331,7 @@ gtk_css_shadow_value_new (ShadowValue *shadows,
}
GtkCssValue *
-gtk_css_shadow_value_new_filter (void)
+gtk_css_shadow_value_new_filter (const GtkCssValue *other)
{
ShadowValue value;
@@ -340,7 +340,7 @@ gtk_css_shadow_value_new_filter (void)
value.voffset = _gtk_css_number_value_new (0, GTK_CSS_NUMBER);
value.radius = _gtk_css_number_value_new (0, GTK_CSS_NUMBER);
value.spread = _gtk_css_number_value_new (0, GTK_CSS_NUMBER);
- value.color = _gtk_css_color_value_new_current_color ();
+ value.color = gtk_css_value_ref (other->shadows[0].color);
return gtk_css_shadow_value_new (&value, 1, TRUE);
}
diff --git a/gtk/gtkcssshadowvalueprivate.h b/gtk/gtkcssshadowvalueprivate.h
index 21efac19080..a2cf97688b0 100644
--- a/gtk/gtkcssshadowvalueprivate.h
+++ b/gtk/gtkcssshadowvalueprivate.h
@@ -35,7 +35,7 @@
G_BEGIN_DECLS
GtkCssValue * gtk_css_shadow_value_new_none (void);
-GtkCssValue * gtk_css_shadow_value_new_filter (void);
+GtkCssValue * gtk_css_shadow_value_new_filter (const GtkCssValue *other);
GtkCssValue * gtk_css_shadow_value_parse (GtkCssParser *parser,
gboolean box_shadow_mode);
--
GitLab

BIN
gtk-4.10.3.tar.xz (Stored with Git LFS) Normal file

Binary file not shown.

View File

@ -0,0 +1,100 @@
From 4f47683710bbb4b56c286c6ee6a5c394fcf2b755 Mon Sep 17 00:00:00 2001
From: Matthias Clasen <mclasen@redhat.com>
Date: Wed, 29 Mar 2023 02:23:46 +0000
Subject: [PATCH] Merge branch 'wip/otte/trelistmodel-fixage' into 'main'
treelistmodel: Don't add items in reverse
Closes #5707
See merge request GNOME/gtk!5744
(cherry picked from commit c5a53f235a2ed1b0acd0a8c29153e62377262d04)
1718db14 treelistmodel: Don't add items in reverse
cd860beb Add a test for splicing treelistmodel
---
gtk/gtktreelistmodel.c | 2 +-
testsuite/gtk/treelistmodel.c | 46 +++++++++++++++++++++++++++++++++++
2 files changed, 47 insertions(+), 1 deletion(-)
diff --git a/gtk/gtktreelistmodel.c b/gtk/gtktreelistmodel.c
index dd3b3009ccc..1e55323c0a4 100644
--- a/gtk/gtktreelistmodel.c
+++ b/gtk/gtktreelistmodel.c
@@ -357,7 +357,7 @@ gtk_tree_list_model_items_changed_cb (GListModel *model,
}
tree_added = added;
- for (i = 0; i < added; i++)
+ for (i = added; i-- > 0;)
{
child = gtk_rb_tree_insert_before (node->children, child);
child->parent = node;
diff --git a/testsuite/gtk/treelistmodel.c b/testsuite/gtk/treelistmodel.c
index 941ac3d306b..98493a3ba56 100644
--- a/testsuite/gtk/treelistmodel.c
+++ b/testsuite/gtk/treelistmodel.c
@@ -261,6 +261,51 @@ test_remove_some (void)
g_object_unref (tree);
}
+static void
+splice (GListStore *store,
+ guint pos,
+ guint removed,
+ guint *numbers,
+ guint added)
+{
+ GObject **objects = g_newa (GObject *, added);
+ guint i;
+
+ for (i = 0; i < added; i++)
+ {
+ /* 0 cannot be differentiated from NULL, so don't use it */
+ g_assert_cmpint (numbers[i], !=, 0);
+ objects[i] = g_object_new (G_TYPE_OBJECT, NULL);
+ g_object_set_qdata (objects[i], number_quark, GUINT_TO_POINTER (numbers[i]));
+ }
+
+ g_list_store_splice (store, pos, removed, (gpointer *) objects, added);
+
+ for (i = 0; i < added; i++)
+ g_object_unref (objects[i]);
+}
+
+static void
+test_splice (void)
+{
+ GtkTreeListModel *tree = new_model (100, TRUE);
+ gpointer item;
+
+ assert_model (tree, "100 100 100 99 98 97 96 95 94 93 92 91 90 90 89 88 87 86 85 84 83 82 81 80 80 79 78 77 76 75 74 73 72 71 70 70 69 68 67 66 65 64 63 62 61 60 60 59 58 57 56 55 54 53 52 51 50 50 49 48 47 46 45 44 43 42 41 40 40 39 38 37 36 35 34 33 32 31 30 30 29 28 27 26 25 24 23 22 21 20 20 19 18 17 16 15 14 13 12 11 10 10 9 8 7 6 5 4 3 2 1");
+ assert_changes (tree, "");
+
+ item = g_list_model_get_item (G_LIST_MODEL (tree), 1);
+ g_assert_true (G_IS_LIST_MODEL (item));
+ splice (item, 0, 5, (guint[5]) { 300, 301, 302, 303, 304 }, 5);
+ /* expected */
+ assert_model (tree, "100 100 300 301 302 303 304 95 94 93 92 91 90 90 89 88 87 86 85 84 83 82 81 80 80 79 78 77 76 75 74 73 72 71 70 70 69 68 67 66 65 64 63 62 61 60 60 59 58 57 56 55 54 53 52 51 50 50 49 48 47 46 45 44 43 42 41 40 40 39 38 37 36 35 34 33 32 31 30 30 29 28 27 26 25 24 23 22 21 20 20 19 18 17 16 15 14 13 12 11 10 10 9 8 7 6 5 4 3 2 1");
+ /* real outcome */
+ // assert_model (tree, "100 100 304 303 302 301 300 95 94 93 92 91 90 90 89 88 87 86 85 84 83 82 81 80 80 79 78 77 76 75 74 73 72 71 70 70 69 68 67 66 65 64 63 62 61 60 60 59 58 57 56 55 54 53 52 51 50 50 49 48 47 46 45 44 43 42 41 40 40 39 38 37 36 35 34 33 32 31 30 30 29 28 27 26 25 24 23 22 21 20 20 19 18 17 16 15 14 13 12 11 10 10 9 8 7 6 5 4 3 2 1");
+ assert_changes (tree, "2-5+5");
+
+ g_object_unref (tree);
+}
+
/* Test for https://gitlab.gnome.org/GNOME/gtk/-/issues/4595 */
typedef struct _DemoNode DemoNode;
@@ -391,6 +436,7 @@ main (int argc, char *argv[])
g_test_add_func ("/treelistmodel/expand", test_expand);
g_test_add_func ("/treelistmodel/remove_some", test_remove_some);
+ g_test_add_func ("/treelistmodel/remove_splice", test_splice);
g_test_add_func ("/treelistmodel/collapse-change", test_collapse_change);
return g_test_run ();
--
GitLab

4
gtk4-rpmlintrc Normal file
View File

@ -0,0 +1,4 @@
# We're keeping English locales in the tools sub-packages instead of lang.
# English should be offered to everybody by default, without installing lang
# packages.
addFilter("file-not-in-%lang");

2306
gtk4.changes Normal file

File diff suppressed because it is too large Load Diff

457
gtk4.spec Normal file
View File

@ -0,0 +1,457 @@
#
# spec file for package gtk4
#
# Copyright (c) 2023 SUSE LLC
# Copyright (c) 2010 Dominique Leuenebrger, Amsterdam, Netherlands
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
# upon. The license for this file, and modifications and additions to the
# file, is the same license as for the pristine package itself (unless the
# license for the pristine package is not an Open Source License, in which
# case the license is the MIT License). An "Open Source License" is a
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.
# Please submit bugfixes or comments via https://bugs.opensuse.org/
#
# When updating the binary version, do not forget to also update baselibs.conf
%define gtk_binary_version 4.0.0
%define _name gtk
%bcond_without gst
# disable gstreamer media player when bootstrapping on workbench
%if 0%{?workbench_version} > 0
%bcond_with gst
%endif
Name: gtk4
Version: 4.10.3
Release: 0
Summary: The GTK+ toolkit library (version 4)
License: LGPL-2.1-or-later
Group: Development/Libraries/X11
URL: https://www.gtk.org/
Source: https://download.gnome.org/sources/gtk/4.10/%{_name}-%{version}.tar.xz
Source2: settings.ini
Source3: macros.gtk4
Source99: gtk4-rpmlintrc
# Temporarily revert this until we figure out how to best restore
# private requires that are needed for rpm automatic dep extraction.
# https://gitlab.gnome.org/GNOME/gtk/-/merge_requests/4756
# PATCH-FIX-OPENSUSE 0001-Revert-Meson-Simplify-pkgconfig-file-generator.patch -- Revert "Meson: Simplify pkgconfig file generator"
Patch0: 0001-Revert-Meson-Simplify-pkgconfig-file-generator.patch
# PATCH-FIX-UPSTREAM gtk4-correctly-refresh-after-delete.patch glgo#GNOME/nautilus#2941 badshah400@gmail.com -- Deleting files causes folders in the directory to disappear and reappear after a refresh
Patch1: https://gitlab.gnome.org/GNOME/gtk/-/merge_requests/5873.patch#/gtk4-correctly-refresh-after-delete.patch
# PATCH-FIX-UPSTREAM 966a2350.patch glgo#GNOME/gtk#5798 -- css: Don't transition to currentColor
Patch2: https://gitlab.gnome.org/GNOME/gtk/-/commit/966a2350.patch
BuildRequires: cups-devel >= 2.0
# We do not support building against cups 2.3 betas
BuildConflicts: (cups-devel > 2.3 with cups-devel < 2.3.0)
%if 0%{?sle_version} && 0%{?sle_version} <= 150400
BuildRequires: Mesa-libGLESv2-devel
%endif
BuildRequires: Mesa-libGLESv3-devel
BuildRequires: docbook-xsl-stylesheets
BuildRequires: docutils
BuildRequires: fdupes
BuildRequires: gcc-c++
BuildRequires: gettext-tools >= 0.19.7
BuildRequires: hicolor-icon-theme
BuildRequires: meson >= 0.50.1
BuildRequires: pkgconfig
# sassc is ONLY needed when building gitcheckouts, and not when using tarball releases
#BuildRequires: sassc
# Disabled until upstream enables vulkan support by default
# BuildRequires: vulkan-devel
BuildRequires: xsltproc
BuildRequires: pkgconfig(atk) >= 2.15.1
BuildRequires: pkgconfig(atk-bridge-2.0)
BuildRequires: pkgconfig(cairo) >= 1.14.0
BuildRequires: pkgconfig(cairo-gobject) >= 1.14.0
BuildRequires: pkgconfig(cloudproviders) >= 0.3.1
BuildRequires: pkgconfig(colord)
BuildRequires: pkgconfig(epoxy) >= 1.4
BuildRequires: pkgconfig(fontconfig)
BuildRequires: pkgconfig(gdk-pixbuf-2.0) >= 2.30.0
BuildRequires: pkgconfig(gi-docgen)
BuildRequires: pkgconfig(glib-2.0) >= 2.72.0
BuildRequires: pkgconfig(gmodule-2.0)
BuildRequires: pkgconfig(gobject-2.0) >= 2.53.7
BuildRequires: pkgconfig(gobject-introspection-1.0) >= 1.72.0
BuildRequires: pkgconfig(graphene-1.0) >= 1.10.0
BuildRequires: pkgconfig(graphene-gobject-1.0) >= 1.10.0
%if %{with gst}
BuildRequires: pkgconfig(gstreamer-gl-1.0)
BuildRequires: pkgconfig(gstreamer-player-1.0)
%endif
BuildRequires: pkgconfig(harfbuzz) >= 2.6.0
BuildRequires: pkgconfig(iso-codes)
# Disabled until upstream enables ffmpeg support by default
# BuildRequires: pkgconfig(libavfilter)
BuildRequires: pkgconfig(libjpeg)
BuildRequires: pkgconfig(libpng)
BuildRequires: pkgconfig(libtiff-4)
BuildRequires: pkgconfig(pango) >= 1.50.0
BuildRequires: pkgconfig(pangocairo) >= 1.14.0
BuildRequires: pkgconfig(pangoft2)
BuildRequires: pkgconfig(tracker-sparql-3.0)
BuildRequires: pkgconfig(wayland-client) >= 1.21.0
BuildRequires: pkgconfig(wayland-cursor) >= 1.9.91
BuildRequires: pkgconfig(wayland-egl)
BuildRequires: pkgconfig(wayland-protocols) >= 1.25
BuildRequires: pkgconfig(x11)
BuildRequires: pkgconfig(xcomposite)
BuildRequires: pkgconfig(xcursor)
BuildRequires: pkgconfig(xdamage)
BuildRequires: pkgconfig(xext)
BuildRequires: pkgconfig(xfixes)
BuildRequires: pkgconfig(xi)
BuildRequires: pkgconfig(xinerama)
BuildRequires: pkgconfig(xkbcommon)
BuildRequires: pkgconfig(xrandr) >= 1.2.99
%description
GTK+ is a multi-platform toolkit for creating graphical user interfaces.
Offering a complete set of widgets, GTK+ is suitable for projects
ranging from small one-off projects to complete application suites.
%package -n libgtk-4-1
Summary: The GTK+ toolkit library (version 4)
# gtk4-data is currently not being built, might be an upstream oversight though
Group: System/Libraries
Requires: %{name}-schema >= %{version}
# Require Adwaita Icon Theme: It's GTKs icon set, that's guaranteed to be there
Requires: adwaita-icon-theme
# While hicolor is not a Requires strictly speaking, we put it as
# such instead of as a Recommends because many applications just
# assume it's there and we need to have a low-level package to
# bring it in.
Requires: hicolor-icon-theme
# gtk+ can work without branding/translations. Built in defaults will be used then.
Recommends: %{name}-branding
Recommends: gvfs
Obsoletes: %{name}-data
# IM modules have been dropped in 3.94.0
Obsoletes: %{name}-immodule-amharic
Obsoletes: %{name}-immodule-broadway
Obsoletes: %{name}-immodule-inuktitut
Obsoletes: %{name}-immodule-multipress
Obsoletes: %{name}-immodule-thai
Obsoletes: %{name}-immodule-tigrigna
Obsoletes: %{name}-immodule-vietnamese
Obsoletes: %{name}-immodule-xim
# with version 4.0.0, the soname was actually changed to libgtk-4.so.1
# but the package was nor correctly renamed
Obsoletes: libgtk-4-0 >= 4
# Provide main package to make the lang subpackage installable
Provides: %{name} = %{version}
%description -n libgtk-4-1
GTK+ is a multi-platform toolkit for creating graphical user interfaces.
Offering a complete set of widgets, GTK+ is suitable for projects
ranging from small one-off projects to complete application suites.
%package -n typelib-1_0-Gtk-4_0
Summary: Introspection bindings for the GTK+ toolkit library v4
Group: System/Libraries
Requires: (python3-gobject-Gdk if python3-gobject)
Requires: (python310-gobject-Gdk if python310-gobject)
Requires: (python38-gobject-Gdk if python38-gobject)
Requires: (python39-gobject-Gdk if python39-gobject)
%description -n typelib-1_0-Gtk-4_0
GTK+ is a multi-platform toolkit for creating graphical user interfaces.
Offering a complete set of widgets, GTK+ is suitable for projects
ranging from small one-off projects to complete application suites.
This package provides the GObject Introspection bindings for GTK+.
%package tools
Summary: Auxiliary utilities for the GTK+ toolkit library v4
Group: System/Libraries
%description tools
GTK+ is a multi-platform toolkit for creating graphical user interfaces.
Offering a complete set of widgets, GTK+ is suitable for projects
ranging from small one-off projects to complete application suites.
%package devel-tools
Summary: Auxiliary utilities for the GTK+ toolkit library v4
Group: System/Libraries
%description devel-tools
GTK+ is a multi-platform toolkit for creating graphical user interfaces.
Offering a complete set of widgets, GTK+ is suitable for projects
ranging from small one-off projects to complete application suites.
%package schema
Summary: Config schema for the GTK+ toolkit library v4
# The schema is shared between gtk3 and gtk4 - gtk4 wins
Group: System/Libraries
BuildArch: noarch
%description schema
GTK+ is a multi-platform toolkit for creating graphical user interfaces.
Offering a complete set of widgets, GTK+ is suitable for projects
ranging from small one-off projects to complete application suites.
%package branding-upstream
Summary: Upstream theme configuration for the GTK+ toolkit library v4
Group: System/Libraries
Requires: libgtk-4-1 = %{version}
Supplements: (libgtk-4-1 and branding-upstream)
Conflicts: %{name}-branding
Provides: %{name}-branding = %{version}
BuildArch: noarch
#BRAND: Provides /usr/share/gtk-4.0/settings.ini, to define default theme and icon
#BRAND: theme.
#BRAND: Do not forget to add proper Requires in branding package if changing
#BRAND: those.
%description branding-upstream
GTK+ is a multi-platform toolkit for creating graphical user interfaces.
Offering a complete set of widgets, GTK+ is suitable for projects
ranging from small one-off projects to complete application suites.
This package provides the upstream theme configuration for widgets and
icon themes.
%package docs
Summary: Developer documentation for GTK
BuildArch: noarch
%description docs
This package contains developer documentation for version 4 of the GTK
widget toolkit.
%package devel
Summary: Development files for the GTK+ toolkit library v4
Group: Development/Libraries/X11
Requires: %{name}-devel-tools = %{version}
Requires: %{name}-tools = %{version}
Requires: gettext-its-%{name} >= %{version}
Requires: libgtk-4-1 = %{version}
Requires: typelib-1_0-Gtk-4_0 = %{version}
# # Disabled until upstream enables vulkan support by default
# Requires: vulkan-devel
%description devel
GTK+ is a multi-platform toolkit for creating graphical user interfaces.
Offering a complete set of widgets, GTK+ is suitable for projects
ranging from small one-off projects to complete application suites.
This package contains the development files for GTK+ 4.x.
%package -n gettext-its-%{name}
Summary: International Tag Set for GTK+ 4
# The ITS is compatible between GTK3 and GTK4
Group: Development/Libraries/X11
Provides: gettext-its-gtk3 = %{version}
Obsoletes: gettext-its-gtk3 < %{version}
%description -n gettext-its-%{name}
This package enhances gettext with an International Tag Set for GTK+ 4
%lang_package
%prep
%autosetup -p1 -n %{_name}-%{version}
%build
%meson \
-Dgtk_doc=true \
-Dbroadway-backend=true \
-Dcloudproviders=enabled \
-Dcolord=enabled \
-Dprint-cups=enabled \
-Dwayland-backend=true \
-Dx11-backend=true \
-Dintrospection=enabled \
-Dman-pages=true \
-Dtracker=enabled \
%if %{with gst}
-Dmedia-gstreamer=enabled \
%else
-Dmedia-gstreamer=disabled \
%endif
-Dbuild-testsuite=false \
-Dbuild-tests=false \
-Dbuild-examples=false \
%{nil}
%meson_build
%install
%meson_install
%find_lang gtk40 %{?no_lang_C}
install -m 644 -D %{SOURCE2} %{buildroot}%{_datadir}/gtk-4.0/settings.ini
# create modules directory that should have been created during the build
if test ! -d %{buildroot}%{_libdir}/gtk-4.0/modules; then
mkdir %{buildroot}%{_libdir}/gtk-4.0/modules
else
echo 'Remove this no-longer-needed modulesdir hack.'
fi
# create theming-engines directory that should have been created during the build
if test ! -d %{buildroot}%{_libdir}/gtk-4.0/%{gtk_binary_version}/theming-engines; then
mkdir %{buildroot}%{_libdir}/gtk-4.0/%{gtk_binary_version}/theming-engines
else
echo 'Remove this no-longer-needed themingdir hack.'
fi
# Install rpm macros
mkdir -p %{buildroot}%{_rpmmacrodir}
cp %{SOURCE3} %{buildroot}%{_rpmmacrodir}
%fdupes %{buildroot}%{_datadir}
%fdupes %{buildroot}%{_libdir}
%ldconfig_scriptlets -n libgtk-4-1
%files -n libgtk-4-1
%license COPYING
%doc AUTHORS NEWS
%dir %{_libdir}/gtk-4.0
%dir %{_libdir}/gtk-4.0/%{gtk_binary_version}
%dir %{_libdir}/gtk-4.0/%{gtk_binary_version}/printbackends/
%{_libdir}/gtk-4.0/%{gtk_binary_version}/printbackends/libprintbackend-cups.so
%{_libdir}/gtk-4.0/%{gtk_binary_version}/printbackends/libprintbackend-file.so
%if %{with gst}
%dir %{_libdir}/gtk-4.0/%{gtk_binary_version}/media/
#%%{_libdir}/gtk-4.0/%%{gtk_binary_version}/media/libmedia-ffmpeg.so
%{_libdir}/gtk-4.0/%{gtk_binary_version}/media/libmedia-gstreamer.so
%endif
%dir %{_libdir}/gtk-4.0/%{gtk_binary_version}/theming-engines/
%dir %{_libdir}/gtk-4.0/modules
%{_libdir}/libgtk-4.so.*
%files -n typelib-1_0-Gtk-4_0
%{_libdir}/girepository-1.0/Gdk-4.0.typelib
%{_libdir}/girepository-1.0/GdkWayland-4.0.typelib
%{_libdir}/girepository-1.0/GdkX11-4.0.typelib
%{_libdir}/girepository-1.0/Gsk-4.0.typelib
%{_libdir}/girepository-1.0/Gtk-4.0.typelib
%files tools
%{_bindir}/gtk4-broadwayd
%{_bindir}/gtk4-launch
%{_bindir}/gtk4-query-settings
%{_bindir}/gtk4-update-icon-cache
%dir %{_datadir}/gtk-4.0/emoji
%{_datadir}/gtk-4.0/emoji/da.gresource
%{_datadir}/gtk-4.0/emoji/de.gresource
%{_datadir}/gtk-4.0/emoji/es.gresource
%{_datadir}/gtk-4.0/emoji/fr.gresource
%{_datadir}/gtk-4.0/emoji/hu.gresource
%{_datadir}/gtk-4.0/emoji/it.gresource
%{_datadir}/gtk-4.0/emoji/ko.gresource
%{_datadir}/gtk-4.0/emoji/lt.gresource
%{_datadir}/gtk-4.0/emoji/ms.gresource
%{_datadir}/gtk-4.0/emoji/nl.gresource
%{_datadir}/gtk-4.0/emoji/pl.gresource
%{_datadir}/gtk-4.0/emoji/pt.gresource
%{_datadir}/gtk-4.0/emoji/ru.gresource
%{_datadir}/gtk-4.0/emoji/sv.gresource
%{_datadir}/gtk-4.0/emoji/uk.gresource
%{_datadir}/gtk-4.0/emoji/zh.gresource
%{_mandir}/man1/gtk4-broadwayd.1%{?ext_man}
%{_mandir}/man1/gtk4-launch.1%{?ext_man}
%{_mandir}/man1/gtk4-query-settings.1%{?ext_man}
%{_mandir}/man1/gtk4-update-icon-cache.1%{?ext_man}
# English should be offered to every installation by default.
%{_datadir}/locale/en/
%{_datadir}/locale/en_GB/
%{_datadir}/locale/en@shaw/
%{_datadir}/locale/en_CA/
%files devel-tools
%{_bindir}/gtk4-builder-tool
%{_bindir}/gtk4-demo
%{_bindir}/gtk4-demo-application
%{_bindir}/gtk4-encode-symbolic-svg
%{_bindir}/gtk4-icon-browser
%{_bindir}/gtk4-node-editor
%{_bindir}/gtk4-print-editor
%{_bindir}/gtk4-widget-factory
%{_datadir}/applications/org.gtk.Demo4.desktop
%{_datadir}/applications/org.gtk.IconBrowser4.desktop
%{_datadir}/applications/org.gtk.gtk4.NodeEditor.desktop
%{_datadir}/applications/org.gtk.PrintEditor4.desktop
%{_datadir}/applications/org.gtk.WidgetFactory4.desktop
%dir %{_datadir}/gtk-4.0
%{_datadir}/gtk-4.0/gtk4builder.rng
%{_datadir}/icons/hicolor/scalable/apps/org.gtk.Demo4.svg
%{_datadir}/icons/hicolor/scalable/apps/org.gtk.IconBrowser4.svg
%{_datadir}/icons/hicolor/scalable/apps/org.gtk.gtk4.NodeEditor.Devel.svg
%{_datadir}/icons/hicolor/scalable/apps/org.gtk.gtk4.NodeEditor.svg
%{_datadir}/icons/hicolor/symbolic/apps/org.gtk.gtk4.NodeEditor-symbolic.svg
%{_datadir}/icons/hicolor/scalable/apps/org.gtk.PrintEditor4.Devel.svg
%{_datadir}/icons/hicolor/scalable/apps/org.gtk.PrintEditor4.svg
%{_datadir}/icons/hicolor/scalable/apps/org.gtk.WidgetFactory4.svg
%{_datadir}/icons/hicolor/symbolic/apps/org.gtk.Demo4-symbolic.svg
%{_datadir}/icons/hicolor/symbolic/apps/org.gtk.IconBrowser4-symbolic.svg
%{_datadir}/icons/hicolor/symbolic/apps/org.gtk.PrintEditor4-symbolic.svg
%{_datadir}/icons/hicolor/symbolic/apps/org.gtk.WidgetFactory4-symbolic.svg
# This schemas file stays here and not in the schemas package
%{_datadir}/glib-2.0/schemas/org.gtk.Demo4.gschema.xml
%{_datadir}/metainfo/org.gtk.Demo4.appdata.xml
%{_datadir}/metainfo/org.gtk.IconBrowser4.appdata.xml
%{_datadir}/metainfo/org.gtk.gtk4.NodeEditor.appdata.xml
%{_datadir}/metainfo/org.gtk.PrintEditor4.appdata.xml
%{_datadir}/metainfo/org.gtk.WidgetFactory4.appdata.xml
%{_mandir}/man1/gtk4-builder-tool.1%{?ext_man}
%{_mandir}/man1/gtk4-demo.1%{?ext_man}
%{_mandir}/man1/gtk4-demo-application.1%{?ext_man}
%{_mandir}/man1/gtk4-encode-symbolic-svg.1%{?ext_man}
%{_mandir}/man1/gtk4-icon-browser.1%{?ext_man}
%{_mandir}/man1/gtk4-node-editor.1%{?ext_man}
%{_mandir}/man1/gtk4-widget-factory.1%{?ext_man}
%files schema
%{_datadir}/glib-2.0/schemas/org.gtk.gtk4.Settings.ColorChooser.gschema.xml
%{_datadir}/glib-2.0/schemas/org.gtk.gtk4.Settings.Debug.gschema.xml
%{_datadir}/glib-2.0/schemas/org.gtk.gtk4.Settings.EmojiChooser.gschema.xml
%{_datadir}/glib-2.0/schemas/org.gtk.gtk4.Settings.FileChooser.gschema.xml
%files branding-upstream
%{_datadir}/gtk-4.0/settings.ini
%files docs
%{_datadir}/doc/gdk4/
%{_datadir}/doc/gdk4-wayland/
%{_datadir}/doc/gdk4-x11/
%{_datadir}/doc/gsk4/
%{_datadir}/doc/gtk4/
%files devel
%doc CONTRIBUTING.md
%{_datadir}/gir-1.0/*.gir
%{_includedir}/gtk-4.0/
%{_libdir}/pkgconfig/gtk4.pc
%{_libdir}/pkgconfig/gtk4-broadway.pc
%{_libdir}/pkgconfig/gtk4-wayland.pc
%{_libdir}/pkgconfig/gtk4-unix-print.pc
%{_libdir}/pkgconfig/gtk4-x11.pc
%{_libdir}/libgtk-4.so
%{_rpmmacrodir}/macros.gtk4
%dir %{_datadir}/gtk-4.0/valgrind
%{_datadir}/gtk-4.0/valgrind/gtk.supp
%files -n gettext-its-%{name}
%dir %{_datadir}/gettext/
%dir %{_datadir}/gettext/its/
%{_datadir}/gettext/its/gtk4builder.its
%{_datadir}/gettext/its/gtk4builder.loc
%files lang -f gtk40.lang
# Those shouldn't be here in the first place.
%exclude %{_datadir}/locale/en/
%exclude %{_datadir}/locale/en_GB/
%exclude %{_datadir}/locale/en@shaw/
%exclude %{_datadir}/locale/en_CA/
%changelog

35
macros.gtk4 Normal file
View File

@ -0,0 +1,35 @@
# RPM macros for packages installing a GTK+ IM module
#
###
#
# When a package installs a GTK+ IM module, it should use all
# three macros:
#
# - %gtk4_immodule_requires in the preamble
# - %gtk4_immodule_post in %post
# - %gtk4_immodule_postun in %postun
#
###
%gtk4_immodule_requires \
Requires(post): glib2-tools \
Requires(postun): glib2-tools
# On install, update the cache
%gtk4_immodule_post \
if [[ -x %{_bindir}/gio-querymodules-64 ]]; then \
%{_bindir}/gio-querymodules-64 %{_libdir}/gtk-4.0/4.0.0/immodules \
else \
%{_bindir}/gio-querymodules %{_libdir}/gtk-4.0/4.0.0/immodules \
fi
# On uninstall, update the cache. Note: we ignore upgrades (already
# handled in %post of the new package).
%gtk4_immodule_postun \
if [ $1 -eq 0 ]; then \
if [[ -x %{_bindir}/gio-querymodules-64 ]]; then \
%{_bindir}/gio-querymodules-64 %{_libdir}/gtk-4.0/4.0.0/immodules \
else \
%{_bindir}/gio-querymodules %{_libdir}/gtk-4.0/4.0.0/immodules \
fi \
fi

14
settings.ini Normal file
View File

@ -0,0 +1,14 @@
#
# settings.ini file allows you to define system wide defaults for
# all GTK+ applications. This file is branding specific.
#
# For complete list of available settings see the Settings chapter
# in the GTK+ documentation.
#
# You most probably want to change the following settings.
[Settings]
#gtk-theme-name =
#gtk-icon-theme-name =
#gtk-fallback-icon-theme = Adwaita
#gtk-entry-password-hint-timeout = 600