Update upstream source from tag 'upstream/3.24.21'

Update to upstream version '3.24.21'
with Debian dir 642e8dd8e4
This commit is contained in:
Simon McVittie 2020-08-05 15:19:17 +01:00
commit 5ef6fe97cc
176 changed files with 52065 additions and 53202 deletions

View File

@ -4,7 +4,7 @@ Prerequisites
GTK+ requires the following packages:
- The GLib, Pango, GdkPixbuf, ATK and cairo libraries, available at
the same location as GTK+. GTK+ 3.24.20 requires at least
the same location as GTK+. GTK+ 3.24.21 requires at least
GLib 2.57.2, Pango 1.41.0,
GdkPixbuf 2.30.0, ATK 2.15.1
and cairo 1.14.0.
@ -22,8 +22,8 @@ GTK+ requires the following packages:
Simple install procedure
========================
% tar xf gtk+-3.24.20.tar.xz # unpack the sources
% cd gtk+-3.24.20 # change to the toplevel directory
% tar xf gtk+-3.24.21.tar.xz # unpack the sources
% cd gtk+-3.24.21 # change to the toplevel directory
% ./configure # run the `configure' script
% make # build GTK+
[ Become root if necessary ]

View File

@ -16,6 +16,7 @@ EXTRA_DIST += \
NEWS.pre-1-0 \
README.commits \
README.win32 \
check-version.py \
config.h.win32 \
makefile.msc \
gtk-zip.sh.in \

View File

@ -537,8 +537,8 @@ GTESTER_REPORT = gtester-report # in $PATH for non-GLIB packages
# initialize variables for unconditional += appending
EXTRA_DIST = autogen.sh HACKING README README.in INSTALL INSTALL.in \
NEWS.pre-1-0 README.commits README.win32 config.h.win32 \
makefile.msc gtk-zip.sh.in sanitize-la.sh \
NEWS.pre-1-0 README.commits README.win32 check-version.py \
config.h.win32 makefile.msc gtk-zip.sh.in sanitize-la.sh \
po/README.translators po/po2tbl.sed.in make-pot \
meson_options.txt meson.build po/meson.build \
po-properties/meson.build build-aux/meson/post-install.py \

51
NEWS
View File

@ -1,3 +1,54 @@
Overview of Changes in GTK+ 3.24.21
===================================
* Wayland:
- Prevent crashes with offscreen windows
- Handle disorderly tablet/pad disconnects
* GtkFileChooser:
- Translate the type column
- Add a tracker3 search engine
- Rate-limit trash monitoring
- Make get_filter work for native chooser
* GtkGLArea:
- Fix a redraw problem
* GtkScrolledWindow:
- Fix kinetic scrolling
* Add a gtk-cursor-aspect-ratio setting
* GDK:
- Improve frame clock smoothness
- Fix frame clock monotonicity
* OS X:
- Support Pen / Eraser input
- Support openfiles in GtkApplication
* Adwaita:
- Improve notebook tab legibility
* Translation updates:
Basque
Brazilian Portuguese
Catalan
Chinese (Taiwan)
German
Indonesian
Italian
Japanese
Kazakh
Lithuanian
Polish
Romanian
Slovak
Slovenian
Swedish
Ukrainian
Overview of Changes in GTK+ 3.24.20
===================================

2
README
View File

@ -1,7 +1,7 @@
General Information
===================
This is GTK+ version 3.24.20. GTK+ is a multi-platform toolkit for
This is GTK+ version 3.24.21. 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.

24
aclocal.m4 vendored
View File

@ -112,7 +112,7 @@ AC_ARG_ENABLE(glibtest, [ --disable-glibtest do not try to compile and run
CFLAGS="$CFLAGS $GLIB_CFLAGS"
LIBS="$GLIB_LIBS $LIBS"
dnl
dnl Now check if the installed GLIB is sufficiently new. (Also sanity
dnl Now check if the installed GLib is sufficiently new. (Also sanity
dnl checks the results of pkg-config to some extent)
dnl
rm -f conf.glibtest
@ -142,7 +142,7 @@ main (void)
glib_major_version, glib_minor_version, glib_micro_version);
printf ("*** was found! If pkg-config was correct, then it is best\n");
printf ("*** to remove the old version of GLib. You may also be able to fix the error\n");
printf("*** by modifying your LD_LIBRARY_PATH enviroment variable, or by editing\n");
printf("*** by modifying your LD_LIBRARY_PATH environment variable, or by editing\n");
printf("*** /etc/ld.so.conf. Make sure you have run ldconfig if that is\n");
printf("*** required on your system.\n");
printf("*** If pkg-config was wrong, set the environment variable PKG_CONFIG_PATH\n");
@ -152,7 +152,7 @@ main (void)
(glib_minor_version != GLIB_MINOR_VERSION) ||
(glib_micro_version != GLIB_MICRO_VERSION))
{
printf("*** GLIB header files (version %d.%d.%d) do not match\n",
printf("*** GLib header files (version %d.%d.%d) do not match\n",
GLIB_MAJOR_VERSION, GLIB_MINOR_VERSION, GLIB_MICRO_VERSION);
printf("*** library (version %d.%d.%d)\n",
glib_major_version, glib_minor_version, glib_micro_version);
@ -167,18 +167,18 @@ main (void)
}
else
{
printf("\n*** An old version of GLIB (%u.%u.%u) was found.\n",
printf("\n*** An old version of GLib (%u.%u.%u) was found.\n",
glib_major_version, glib_minor_version, glib_micro_version);
printf("*** You need a version of GLIB newer than %u.%u.%u. The latest version of\n",
printf("*** You need a version of GLib newer than %u.%u.%u. The latest version of\n",
major, minor, micro);
printf("*** GLIB is always available from ftp://ftp.gtk.org.\n");
printf("*** GLib is always available from ftp://ftp.gtk.org.\n");
printf("***\n");
printf("*** If you have already installed a sufficiently new version, this error\n");
printf("*** probably means that the wrong copy of the pkg-config shell script is\n");
printf("*** being found. The easiest way to fix this is to remove the old version\n");
printf("*** of GLIB, but you can also set the PKG_CONFIG environment to point to the\n");
printf("*** of GLib, but you can also set the PKG_CONFIG environment to point to the\n");
printf("*** correct copy of pkg-config. (In this case, you will have to\n");
printf("*** modify your LD_LIBRARY_PATH enviroment variable, or edit /etc/ld.so.conf\n");
printf("*** modify your LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf\n");
printf("*** so that the correct libraries are found at run-time))\n");
}
}
@ -201,7 +201,7 @@ main (void)
if test -f conf.glibtest ; then
:
else
echo "*** Could not run GLIB test program, checking why..."
echo "*** Could not run GLib test program, checking why..."
ac_save_CFLAGS="$CFLAGS"
ac_save_LIBS="$LIBS"
CFLAGS="$CFLAGS $GLIB_CFLAGS"
@ -211,8 +211,8 @@ main (void)
#include <stdio.h>
], [ return ((glib_major_version) || (glib_minor_version) || (glib_micro_version)); ],
[ echo "*** The test program compiled, but did not run. This usually means"
echo "*** that the run-time linker is not finding GLIB or finding the wrong"
echo "*** version of GLIB. If it is not finding GLIB, you'll need to set your"
echo "*** that the run-time linker is not finding GLib or finding the wrong"
echo "*** version of GLib. If it is not finding GLib, you'll need to set your"
echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point"
echo "*** to the installed location Also, make sure you have run ldconfig if that"
echo "*** is required on your system"
@ -220,7 +220,7 @@ main (void)
echo "*** If you have an old version installed, it is best to remove it, although"
echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH" ],
[ echo "*** The test program failed to compile or link. See the file config.log for the"
echo "*** exact error that occured. This usually means GLIB is incorrectly installed."])
echo "*** exact error that occurred. This usually means GLib is incorrectly installed."])
CFLAGS="$ac_save_CFLAGS"
LIBS="$ac_save_LIBS"
fi

View File

@ -39,7 +39,7 @@ GDBUS_CODEGEN = $(PREFIX)\bin\gdbus-codegen
!endif
# Please do not change anything beneath this line unless maintaining the NMake Makefiles
GTK_VERSION = 3.24.20
GTK_VERSION = 3.24.21
GDK_PREPROCESSOR_FLAGS = \
/DG_LOG_USE_STRUCTURED=1 \

View File

@ -68,7 +68,7 @@ vs$(VSVER)\$(CFG)\$(PLAT)\bin\Gtk-3.0.gir: Gtk_3_0_gir_list
--include=Atk-1.0 \
--pkg-export=gtk+-3.0 \
--cflags-begin \
-DG_LOG_USE_STRUCTURED=1 -DGTK_VERSION="3.24.20" -DGTK_BINARY_VERSION="3.0.0" -DGTK_COMPILATION -DGTK_PRINT_BACKEND_ENABLE_UNSUPPORTED -DGTK_LIBDIR=\"/dummy/lib\" -DGTK_DATADIR=\"/dummy/share\" -DGTK_DATA_PREFIX=\"/dummy\" -DGTK_SYSCONFDIR=\"/dummy/etc\" -DGTK_HOST=\"$(AT_PLAT)-pc-vs$(VSVER)\" -DGTK_PRINT_BACKENDS=\"file\" -DINCLUDE_IM_am_et -DINCLUDE_IM_cedilla -DINCLUDE_IM_cyrillic_translit -DINCLUDE_IM_ime -DINCLUDE_IM_inuktitu -DINCLUDE_IM_ipa -DINCLUDE_IM_multipress -DINCLUDE_IM_thai -DINCLUDE_IM_ti_er -DINCLUDE_IM_ti_et -DINCLUDE_IM_viqr -DGTK_TEXT_USE_INTERNAL_UNSUPPORTED_API -I../.. -I../../gtk -I../../gdk \
-DG_LOG_USE_STRUCTURED=1 -DGTK_VERSION="3.24.21" -DGTK_BINARY_VERSION="3.0.0" -DGTK_COMPILATION -DGTK_PRINT_BACKEND_ENABLE_UNSUPPORTED -DGTK_LIBDIR=\"/dummy/lib\" -DGTK_DATADIR=\"/dummy/share\" -DGTK_DATA_PREFIX=\"/dummy\" -DGTK_SYSCONFDIR=\"/dummy/etc\" -DGTK_HOST=\"$(AT_PLAT)-pc-vs$(VSVER)\" -DGTK_PRINT_BACKENDS=\"file\" -DINCLUDE_IM_am_et -DINCLUDE_IM_cedilla -DINCLUDE_IM_cyrillic_translit -DINCLUDE_IM_ime -DINCLUDE_IM_inuktitu -DINCLUDE_IM_ipa -DINCLUDE_IM_multipress -DINCLUDE_IM_thai -DINCLUDE_IM_ti_er -DINCLUDE_IM_ti_et -DINCLUDE_IM_viqr -DGTK_TEXT_USE_INTERNAL_UNSUPPORTED_API -I../.. -I../../gtk -I../../gdk \
--cflags-end \
--warn-all --include-uninstalled=./vs$(VSVER)/$(CFG)/$(PLAT)/bin/Gdk-3.0.gir \
--filelist=Gtk_3_0_gir_list \

View File

@ -5,7 +5,7 @@
<GlibEtcInstallRoot>$(SolutionDir)\..\..\..\..\vs$(VSVer)\$(Platform)</GlibEtcInstallRoot>
<CopyDir>..\..\..\..\vs$(VSVer)\$(Platform)</CopyDir>
<ApiVersion>3.0</ApiVersion>
<GtkVersion>3.24.20</GtkVersion>
<GtkVersion>3.24.21</GtkVersion>
<GtkLibtoolCompatibleDllPrefix>lib</GtkLibtoolCompatibleDllPrefix>
<GtkLibtoolCompatibleDllSuffix>.0-0</GtkLibtoolCompatibleDllSuffix>
<GtkSeparateVSDllPrefix />

View File

@ -5,7 +5,7 @@
<GlibEtcInstallRoot>$(SolutionDir)\..\..\..\..\vs$(VSVer)\$(Platform)</GlibEtcInstallRoot>
<CopyDir>..\..\..\..\vs$(VSVer)\$(Platform)</CopyDir>
<ApiVersion>3.0</ApiVersion>
<GtkVersion>3.24.20</GtkVersion>
<GtkVersion>3.24.21</GtkVersion>
<GtkLibtoolCompatibleDllPrefix>lib</GtkLibtoolCompatibleDllPrefix>
<GtkLibtoolCompatibleDllSuffix>.0-0</GtkLibtoolCompatibleDllSuffix>
<GtkSeparateVSDllPrefix />

View File

@ -5,7 +5,7 @@
<GlibEtcInstallRoot>$(SolutionDir)\..\..\..\..\vs$(VSVer)\$(Platform)</GlibEtcInstallRoot>
<CopyDir>..\..\..\..\vs$(VSVer)\$(Platform)</CopyDir>
<ApiVersion>3.0</ApiVersion>
<GtkVersion>3.24.20</GtkVersion>
<GtkVersion>3.24.21</GtkVersion>
<GtkLibtoolCompatibleDllPrefix>lib</GtkLibtoolCompatibleDllPrefix>
<GtkLibtoolCompatibleDllSuffix>.0-0</GtkLibtoolCompatibleDllSuffix>
<GtkSeparateVSDllPrefix />

View File

@ -5,7 +5,7 @@
<GlibEtcInstallRoot>$(SolutionDir)\..\..\..\..\vs$(VSVer)\$(Platform)</GlibEtcInstallRoot>
<CopyDir>..\..\..\..\vs$(VSVer)\$(Platform)</CopyDir>
<ApiVersion>3.0</ApiVersion>
<GtkVersion>3.24.20</GtkVersion>
<GtkVersion>3.24.21</GtkVersion>
<GtkLibtoolCompatibleDllPrefix>lib</GtkLibtoolCompatibleDllPrefix>
<GtkLibtoolCompatibleDllSuffix>.0-0</GtkLibtoolCompatibleDllSuffix>
<GtkSeparateVSDllPrefix />

View File

@ -5,7 +5,7 @@
<GlibEtcInstallRoot>$(SolutionDir)\..\..\..\..\vs$(VSVer)\$(Platform)</GlibEtcInstallRoot>
<CopyDir>..\..\..\..\vs$(VSVer)\$(Platform)</CopyDir>
<ApiVersion>3.0</ApiVersion>
<GtkVersion>3.24.20</GtkVersion>
<GtkVersion>3.24.21</GtkVersion>
<GtkLibtoolCompatibleDllPrefix>lib</GtkLibtoolCompatibleDllPrefix>
<GtkLibtoolCompatibleDllSuffix>.0-0</GtkLibtoolCompatibleDllSuffix>
<GtkSeparateVSDllPrefix />

View File

@ -5,7 +5,7 @@
<GlibEtcInstallRoot>$(SolutionDir)\..\..\..\..\vs$(VSVer)\$(Platform)</GlibEtcInstallRoot>
<CopyDir>..\..\..\..\vs$(VSVer)\$(Platform)</CopyDir>
<ApiVersion>3.0</ApiVersion>
<GtkVersion>3.24.20</GtkVersion>
<GtkVersion>3.24.21</GtkVersion>
<GtkLibtoolCompatibleDllPrefix>lib</GtkLibtoolCompatibleDllPrefix>
<GtkLibtoolCompatibleDllSuffix>.0-0</GtkLibtoolCompatibleDllSuffix>
<GtkSeparateVSDllPrefix />

View File

@ -22,7 +22,7 @@
/>
<UserMacro
Name="GtkVersion"
Value="3.24.20"
Value="3.24.21"
/>
<UserMacro
Name="GtkLibtoolCompatibleDllPrefix"

200
check-version.py Executable file
View File

@ -0,0 +1,200 @@
#!/usr/bin/env python3
import re
import sys
try:
configure_ac = sys.argv[1]
except Exception:
configure_ac = 'configure.ac'
try:
meson_build = sys.argv[2]
except Exception:
meson_build = 'meson.build'
CONFIGURE_MAJOR_VERSION_RE = re.compile(
r'''
^
\s*
m4_define\(
\s*
\[gtk_major_version\]
\s*
,
\s*
\[
(?P<version>[0-9]+)
\]
\s*
\)
$
''',
re.UNICODE | re.VERBOSE
)
CONFIGURE_MINOR_VERSION_RE = re.compile(
r'''
^
\s*
m4_define\(
\s*
\[gtk_minor_version\]
\s*
,
\s*
\[
(?P<version>[0-9]+)
\]
\s*
\)
$
''',
re.UNICODE | re.VERBOSE
)
CONFIGURE_MICRO_VERSION_RE = re.compile(
r'''
^
\s*
m4_define\(
\s*
\[gtk_micro_version\]
\s*
,
\s*
\[
(?P<version>[0-9]+)
\]
\s*
\)
$
''',
re.UNICODE | re.VERBOSE
)
CONFIGURE_INTERFACE_AGE_RE = re.compile(
r'''
^
\s*
m4_define\(
\s*
\[gtk_interface_age\]
\s*
,
\s*
\[
(?P<age>[0-9]+)
\]
\s*
\)
$
''',
re.UNICODE | re.VERBOSE
)
MESON_VERSION_RE = re.compile(
r'''
^
\s*
version
\s*
:{1}
\s*
\'{1}
(?P<major>[0-9]+)
\.{1}
(?P<minor>[0-9]+)
\.{1}
(?P<micro>[0-9]+)
\'{1}
\s*
,?
$
''',
re.UNICODE | re.VERBOSE
)
MESON_INTERFACE_AGE_RE = re.compile(
r'''
^\s*gtk_interface_age\s*={1}\s*(?P<age>[0-9]+)\s*$
''',
re.UNICODE | re.VERBOSE
)
version = {}
with open(configure_ac, 'r') as f:
line = f.readline()
while line:
res = CONFIGURE_MAJOR_VERSION_RE.match(line)
if res:
if 'major' in version:
print(f'Redefinition of major version; version is already set to {version["major"]}')
sys.exit(1)
version['major'] = res.group('version')
line = f.readline()
continue
res = CONFIGURE_MINOR_VERSION_RE.match(line)
if res:
if 'minor' in version:
print(f'Redefinition of minor version; version is already set to {version["minor"]}')
sys.exit(1)
version['minor'] = res.group('version')
line = f.readline()
continue
res = CONFIGURE_MICRO_VERSION_RE.match(line)
if res:
if 'micro' in version:
print(f'Redefinition of micro version; version is already set to {version["micro"]}')
sys.exit(1)
version['micro'] = res.group('version')
line = f.readline()
continue
res = CONFIGURE_INTERFACE_AGE_RE.match(line)
if res:
if 'age' in version:
print(f'Redefinition of interface age; age is already set to {version["age"]}')
sys.exit(1)
version['age'] = res.group('age')
line = f.readline()
continue
if ('major', 'minor', 'micro', 'age') in version:
break
line = f.readline()
print(f'GTK version defined in {configure_ac}: {version["major"]}.{version["minor"]}.{version["micro"]} (age: {version["age"]})')
configure_version = version
version = {}
with open(meson_build, 'r') as f:
line = f.readline()
inside_project = False
while line:
if line.startswith('project('):
inside_project = True
if inside_project:
res = MESON_VERSION_RE.match(line)
if res:
version['major'] = res.group('major')
version['minor'] = res.group('minor')
version['micro'] = res.group('micro')
if inside_project and line.endswith(')'):
inside_project = False
res = MESON_INTERFACE_AGE_RE.match(line)
if res:
version['age'] = res.group('age')
if ('major', 'minor', 'micro', 'age') in version:
break
line = f.readline()
print(f'GTK version defined in {meson_build}: {version["major"]}.{version["minor"]}.{version["micro"]} (age: {version["age"]})')
meson_version = version
if configure_version != meson_version:
print('Version mismatch between Autotools and Meson builds')
sys.exit(1)
sys.exit(0)

View File

@ -281,3 +281,6 @@
#mesondefine GTK_LOCALEDIR
#mesondefine ISO_CODES_PREFIX
/* Define if tracker3 is available */
#mesondefine HAVE_TRACKER3

View File

@ -263,7 +263,7 @@
#define PACKAGE_NAME "gtk+"
/* Define to the full name and version of this package. */
#define PACKAGE_STRING "gtk+ 3.24.20"
#define PACKAGE_STRING "gtk+ 3.24.21"
/* Define to the one symbol short name of this package. */
#define PACKAGE_TARNAME "gtk+"
@ -272,7 +272,7 @@
#define PACKAGE_URL ""
/* Define to the version of this package. */
#define PACKAGE_VERSION "3.24.20"
#define PACKAGE_VERSION "3.24.21"
/* Use NSBundle functions to determine load paths for libraries, translations,
etc. */

54
configure vendored
View File

@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
# Generated by GNU Autoconf 2.69 for gtk+ 3.24.20.
# Generated by GNU Autoconf 2.69 for gtk+ 3.24.21.
#
# Report bugs to <http://bugzilla.gnome.org/enter_bug.cgi?product=gtk%2B>.
#
@ -591,8 +591,8 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='gtk+'
PACKAGE_TARNAME='gtk+'
PACKAGE_VERSION='3.24.20'
PACKAGE_STRING='gtk+ 3.24.20'
PACKAGE_VERSION='3.24.21'
PACKAGE_STRING='gtk+ 3.24.21'
PACKAGE_BUGREPORT='http://bugzilla.gnome.org/enter_bug.cgi?product=gtk%2B'
PACKAGE_URL=''
@ -1670,7 +1670,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
\`configure' configures gtk+ 3.24.20 to adapt to many kinds of systems.
\`configure' configures gtk+ 3.24.21 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@ -1744,7 +1744,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
short | recursive ) echo "Configuration of gtk+ 3.24.20:";;
short | recursive ) echo "Configuration of gtk+ 3.24.21:";;
esac
cat <<\_ACEOF
@ -1988,7 +1988,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
gtk+ configure 3.24.20
gtk+ configure 3.24.21
generated by GNU Autoconf 2.69
Copyright (C) 2012 Free Software Foundation, Inc.
@ -2818,7 +2818,7 @@ cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
It was created by gtk+ $as_me 3.24.20, which was
It was created by gtk+ $as_me 3.24.21, which was
generated by GNU Autoconf 2.69. Invocation command line was
$ $0 $@
@ -3811,7 +3811,7 @@ fi
# Define the identity of the package.
PACKAGE='gtk+'
VERSION='3.24.20'
VERSION='3.24.21'
# Some tools Automake needs.
@ -4091,10 +4091,10 @@ AM_BACKSLASH='\'
GTK_MAJOR_VERSION=3
GTK_MINOR_VERSION=24
GTK_MICRO_VERSION=20
GTK_INTERFACE_AGE=16
GTK_BINARY_AGE=2420
GTK_VERSION=3.24.20
GTK_MICRO_VERSION=21
GTK_INTERFACE_AGE=17
GTK_BINARY_AGE=2421
GTK_VERSION=3.24.21
GTK_API_VERSION=3.0
GTK_BINARY_VERSION=3.0.0
@ -4116,7 +4116,7 @@ GTK_BINARY_VERSION=3.0.0
LT_VERSION_INFO="2404:16:2404"
LT_VERSION_INFO="2404:17:2404"
LT_CURRENT_MINUS_AGE=0
@ -21047,7 +21047,7 @@ Usage: $0 [OPTIONS]
Report bugs to <bug-libtool@gnu.org>."
lt_cl_version="\
gtk+ config.lt 3.24.20
gtk+ config.lt 3.24.21
configured by $0, generated by GNU Autoconf 2.69.
Copyright (C) 2011 Free Software Foundation, Inc.
@ -24762,7 +24762,7 @@ main (void)
glib_major_version, glib_minor_version, glib_micro_version);
printf ("*** was found! If pkg-config was correct, then it is best\n");
printf ("*** to remove the old version of GLib. You may also be able to fix the error\n");
printf("*** by modifying your LD_LIBRARY_PATH enviroment variable, or by editing\n");
printf("*** by modifying your LD_LIBRARY_PATH environment variable, or by editing\n");
printf("*** /etc/ld.so.conf. Make sure you have run ldconfig if that is\n");
printf("*** required on your system.\n");
printf("*** If pkg-config was wrong, set the environment variable PKG_CONFIG_PATH\n");
@ -24772,7 +24772,7 @@ main (void)
(glib_minor_version != GLIB_MINOR_VERSION) ||
(glib_micro_version != GLIB_MICRO_VERSION))
{
printf("*** GLIB header files (version %d.%d.%d) do not match\n",
printf("*** GLib header files (version %d.%d.%d) do not match\n",
GLIB_MAJOR_VERSION, GLIB_MINOR_VERSION, GLIB_MICRO_VERSION);
printf("*** library (version %d.%d.%d)\n",
glib_major_version, glib_minor_version, glib_micro_version);
@ -24787,18 +24787,18 @@ main (void)
}
else
{
printf("\n*** An old version of GLIB (%u.%u.%u) was found.\n",
printf("\n*** An old version of GLib (%u.%u.%u) was found.\n",
glib_major_version, glib_minor_version, glib_micro_version);
printf("*** You need a version of GLIB newer than %u.%u.%u. The latest version of\n",
printf("*** You need a version of GLib newer than %u.%u.%u. The latest version of\n",
major, minor, micro);
printf("*** GLIB is always available from ftp://ftp.gtk.org.\n");
printf("*** GLib is always available from ftp://ftp.gtk.org.\n");
printf("***\n");
printf("*** If you have already installed a sufficiently new version, this error\n");
printf("*** probably means that the wrong copy of the pkg-config shell script is\n");
printf("*** being found. The easiest way to fix this is to remove the old version\n");
printf("*** of GLIB, but you can also set the PKG_CONFIG environment to point to the\n");
printf("*** of GLib, but you can also set the PKG_CONFIG environment to point to the\n");
printf("*** correct copy of pkg-config. (In this case, you will have to\n");
printf("*** modify your LD_LIBRARY_PATH enviroment variable, or edit /etc/ld.so.conf\n");
printf("*** modify your LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf\n");
printf("*** so that the correct libraries are found at run-time))\n");
}
}
@ -24833,7 +24833,7 @@ $as_echo "no" >&6; }
if test -f conf.glibtest ; then
:
else
echo "*** Could not run GLIB test program, checking why..."
echo "*** Could not run GLib test program, checking why..."
ac_save_CFLAGS="$CFLAGS"
ac_save_LIBS="$LIBS"
CFLAGS="$CFLAGS $GLIB_CFLAGS"
@ -24854,8 +24854,8 @@ main ()
_ACEOF
if ac_fn_c_try_link "$LINENO"; then :
echo "*** The test program compiled, but did not run. This usually means"
echo "*** that the run-time linker is not finding GLIB or finding the wrong"
echo "*** version of GLIB. If it is not finding GLIB, you'll need to set your"
echo "*** that the run-time linker is not finding GLib or finding the wrong"
echo "*** version of GLib. If it is not finding GLib, you'll need to set your"
echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point"
echo "*** to the installed location Also, make sure you have run ldconfig if that"
echo "*** is required on your system"
@ -24864,7 +24864,7 @@ if ac_fn_c_try_link "$LINENO"; then :
echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH"
else
echo "*** The test program failed to compile or link. See the file config.log for the"
echo "*** exact error that occured. This usually means GLIB is incorrectly installed."
echo "*** exact error that occurred. This usually means GLib is incorrectly installed."
fi
rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
@ -30094,7 +30094,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
This file was extended by gtk+ $as_me 3.24.20, which was
This file was extended by gtk+ $as_me 3.24.21, which was
generated by GNU Autoconf 2.69. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@ -30160,7 +30160,7 @@ _ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\
gtk+ config.status 3.24.20
gtk+ config.status 3.24.21
configured by $0, generated by GNU Autoconf 2.69,
with options \\"\$ac_cs_config\\"

View File

@ -10,8 +10,8 @@
m4_define([gtk_major_version], [3])
m4_define([gtk_minor_version], [24])
m4_define([gtk_micro_version], [20])
m4_define([gtk_interface_age], [16])
m4_define([gtk_micro_version], [21])
m4_define([gtk_interface_age], [17])
m4_define([gtk_binary_age],
[m4_eval(100 * gtk_minor_version + gtk_micro_version)])
m4_define([gtk_version],

View File

@ -189404,14 +189404,16 @@ static const SECTION union { const guint8 data[1515119]; const double alignment;
#endif /* !_MSC_VER */
static GStaticResource static_resource = { demo_resource_data.data, sizeof (demo_resource_data.data) - 1 /* nul terminator */, NULL, NULL, NULL };
extern GResource *demo_get_resource (void);
G_MODULE_EXPORT
GResource *demo_get_resource (void);
GResource *demo_get_resource (void)
{
return g_static_resource_get_resource (&static_resource);
}
/*
If G_HAS_CONSTRUCTORS is true then the compiler support *both* constructors and
destructors, in a sane way, including e.g. on library unload. If not you're on
destructors, in a usable way, including e.g. on library unload. If not you're on
your own.
Some compilers need #pragma to handle this, which does not work with macros,

View File

@ -5052,14 +5052,16 @@ static const SECTION union { const guint8 data[40292]; const double alignment; v
#endif /* !_MSC_VER */
static GStaticResource static_resource = { iconbrowser_resource_data.data, sizeof (iconbrowser_resource_data.data) - 1 /* nul terminator */, NULL, NULL, NULL };
extern GResource *iconbrowser_get_resource (void);
G_MODULE_EXPORT
GResource *iconbrowser_get_resource (void);
GResource *iconbrowser_get_resource (void)
{
return g_static_resource_get_resource (&static_resource);
}
/*
If G_HAS_CONSTRUCTORS is true then the compiler support *both* constructors and
destructors, in a sane way, including e.g. on library unload. If not you're on
destructors, in a usable way, including e.g. on library unload. If not you're on
your own.
Some compilers need #pragma to handle this, which does not work with macros,

View File

@ -14298,14 +14298,16 @@ static const SECTION union { const guint8 data[114260]; const double alignment;
#endif /* !_MSC_VER */
static GStaticResource static_resource = { widget_factory_resource_data.data, sizeof (widget_factory_resource_data.data) - 1 /* nul terminator */, NULL, NULL, NULL };
extern GResource *widget_factory_get_resource (void);
G_MODULE_EXPORT
GResource *widget_factory_get_resource (void);
GResource *widget_factory_get_resource (void)
{
return g_static_resource_get_resource (&static_resource);
}
/*
If G_HAS_CONSTRUCTORS is true then the compiler support *both* constructors and
destructors, in a sane way, including e.g. on library unload. If not you're on
destructors, in a usable way, including e.g. on library unload. If not you're on
your own.
Some compilers need #pragma to handle this, which does not work with macros,

View File

@ -400,7 +400,7 @@
</tr>
<tr>
<td class="property_type">
<span class="type">GdkDeviceTool</span> *</td>
<a href="https://developer.gnome.org/gdk4/GdkDevice.html#GdkDeviceTool-struct"><span class="type">GdkDeviceTool</span></a> *</td>
<td class="property_name"><a class="link" href="GdkDevice.html#GdkDevice--tool" title="The “tool” property">tool</a></td>
<td class="property_flags">Read</td>
</tr>
@ -1898,7 +1898,7 @@ application's windows.</p>
<div class="refsect2">
<a name="gdk-device-tool-get-serial"></a><h3>gdk_device_tool_get_serial ()</h3>
<pre class="programlisting"><span class="returnvalue">guint64</span>
gdk_device_tool_get_serial (<em class="parameter"><code><span class="type">GdkDeviceTool</span> *tool</code></em>);</pre>
gdk_device_tool_get_serial (<em class="parameter"><code><a href="https://developer.gnome.org/gdk4/GdkDevice.html#GdkDeviceTool-struct"><span class="type">GdkDeviceTool</span></a> *tool</code></em>);</pre>
<p>Gets the serial of this tool, this value can be used to identify a
physical tool (eg. a tablet pen) across program executions.</p>
<div class="refsect3">
@ -1911,7 +1911,7 @@ physical tool (eg. a tablet pen) across program executions.</p>
</colgroup>
<tbody><tr>
<td class="parameter_name"><p>tool</p></td>
<td class="parameter_description"><p>a <span class="type">GdkDeviceTool</span></p></td>
<td class="parameter_description"><p>a <a href="https://developer.gnome.org/gdk4/GdkDevice.html#GdkDeviceTool-struct"><span class="type">GdkDeviceTool</span></a></p></td>
<td class="parameter_annotations"> </td>
</tr></tbody>
</table></div>
@ -1926,7 +1926,7 @@ physical tool (eg. a tablet pen) across program executions.</p>
<div class="refsect2">
<a name="gdk-device-tool-get-tool-type"></a><h3>gdk_device_tool_get_tool_type ()</h3>
<pre class="programlisting"><a class="link" href="GdkDevice.html#GdkDeviceToolType" title="enum GdkDeviceToolType"><span class="returnvalue">GdkDeviceToolType</span></a>
gdk_device_tool_get_tool_type (<em class="parameter"><code><span class="type">GdkDeviceTool</span> *tool</code></em>);</pre>
gdk_device_tool_get_tool_type (<em class="parameter"><code><a href="https://developer.gnome.org/gdk4/GdkDevice.html#GdkDeviceTool-struct"><span class="type">GdkDeviceTool</span></a> *tool</code></em>);</pre>
<p>Gets the <a class="link" href="GdkDevice.html#GdkDeviceToolType" title="enum GdkDeviceToolType"><span class="type">GdkDeviceToolType</span></a> of the tool.</p>
<div class="refsect3">
<a name="gdk-device-tool-get-tool-type.parameters"></a><h4>Parameters</h4>
@ -1938,7 +1938,7 @@ gdk_device_tool_get_tool_type (<em class="parameter"><code><span class="type">Gd
</colgroup>
<tbody><tr>
<td class="parameter_name"><p>tool</p></td>
<td class="parameter_description"><p>a <span class="type">GdkDeviceTool</span></p></td>
<td class="parameter_description"><p>a <a href="https://developer.gnome.org/gdk4/GdkDevice.html#GdkDeviceTool-struct"><span class="type">GdkDeviceTool</span></a></p></td>
<td class="parameter_annotations"> </td>
</tr></tbody>
</table></div>
@ -2575,7 +2575,7 @@ of touches is unknown.</p>
<hr>
<div class="refsect2">
<a name="GdkDevice--tool"></a><h3>The <code class="literal">“tool”</code> property</h3>
<pre class="programlisting"> “tool” <span class="type">GdkDeviceTool</span> *</pre>
<pre class="programlisting"> “tool” <a href="https://developer.gnome.org/gdk4/GdkDevice.html#GdkDeviceTool-struct"><span class="type">GdkDeviceTool</span></a> *</pre>
<p>The tool that is currently used with this device.</p>
<p>Owner: GdkDevice</p>
<p>Flags: Read</p>
@ -2644,7 +2644,7 @@ axes and keys.</p>
<a name="GdkDevice-tool-changed"></a><h3>The <code class="literal">“tool-changed”</code> signal</h3>
<pre class="programlisting"><span class="returnvalue">void</span>
user_function (<a class="link" href="GdkDevice.html" title="GdkDevice"><span class="type">GdkDevice</span></a> *device,
<span class="type">GdkDeviceTool</span> *tool,
<a href="https://developer.gnome.org/gdk4/GdkDevice.html#GdkDeviceTool-struct"><span class="type">GdkDeviceTool</span></a> *tool,
<span class="type">gpointer</span> user_data)</pre>
<p>The ::tool-changed signal is emitted on pen/eraser
<span class="type">GdkDevices</span> whenever tools enter or leave proximity.</p>

View File

@ -689,7 +689,7 @@ input device is removed (e.g. unplugged).</p>
<a name="GdkSeat-tool-added"></a><h3>The <code class="literal">“tool-added”</code> signal</h3>
<pre class="programlisting"><span class="returnvalue">void</span>
user_function (<a class="link" href="GdkSeat.html" title="GdkSeat"><span class="type">GdkSeat</span></a> *seat,
<span class="type">GdkDeviceTool</span> *tool,
<a href="https://developer.gnome.org/gdk4/GdkDevice.html#GdkDeviceTool-struct"><span class="type">GdkDeviceTool</span></a> *tool,
<span class="type">gpointer</span> user_data)</pre>
<p>The ::tool-added signal is emitted whenever a new tool
is made known to the seat. The tool may later be assigned
@ -712,7 +712,7 @@ will emit the <a class="link" href="GdkDevice.html#GdkDevice-tool-changed" title
</tr>
<tr>
<td class="parameter_name"><p>tool</p></td>
<td class="parameter_description"><p>the new <span class="type">GdkDeviceTool</span> known to the seat</p></td>
<td class="parameter_description"><p>the new <a href="https://developer.gnome.org/gdk4/GdkDevice.html#GdkDeviceTool-struct"><span class="type">GdkDeviceTool</span></a> known to the seat</p></td>
<td class="parameter_annotations"> </td>
</tr>
<tr>
@ -731,7 +731,7 @@ will emit the <a class="link" href="GdkDevice.html#GdkDevice-tool-changed" title
<a name="GdkSeat-tool-removed"></a><h3>The <code class="literal">“tool-removed”</code> signal</h3>
<pre class="programlisting"><span class="returnvalue">void</span>
user_function (<a class="link" href="GdkSeat.html" title="GdkSeat"><span class="type">GdkSeat</span></a> *seat,
<span class="type">GdkDeviceTool</span> *tool,
<a href="https://developer.gnome.org/gdk4/GdkDevice.html#GdkDeviceTool-struct"><span class="type">GdkDeviceTool</span></a> *tool,
<span class="type">gpointer</span> user_data)</pre>
<p>This signal is emitted whenever a tool is no longer known
to this <em class="parameter"><code>seat</code></em>
@ -752,7 +752,7 @@ to this <em class="parameter"><code>seat</code></em>
</tr>
<tr>
<td class="parameter_name"><p>tool</p></td>
<td class="parameter_description"><p>the just removed <span class="type">GdkDeviceTool</span></p></td>
<td class="parameter_description"><p>the just removed <a href="https://developer.gnome.org/gdk4/GdkDevice.html#GdkDeviceTool-struct"><span class="type">GdkDeviceTool</span></a></p></td>
<td class="parameter_annotations"> </td>
</tr>
<tr>

View File

@ -2021,7 +2021,7 @@ denote counter-clockwise movements</p></td>
<tr>
<td class="struct_member_name"><p><span class="type">gdouble</span> <em class="structfield"><code><a name="GdkEventTouchpadPinch.scale"></a>scale</code></em>;</p></td>
<td class="struct_member_description"><p>The current scale, relative to that at the time of
the corresponding <code class="literal">GDK_TOUCHPAD_GESTURE_PHASE_BEGIN</code> event</p></td>
the corresponding <a href="https://developer.gnome.org/gdk4/gdk4-Events.html#GDK-TOUCHPAD-GESTURE-PHASE-BEGIN:CAPS"><code class="literal">GDK_TOUCHPAD_GESTURE_PHASE_BEGIN</code></a> event</p></td>
<td class="struct_member_annotations"> </td>
</tr>
<tr>

View File

@ -361,7 +361,7 @@
</tr>
<tr>
<td class="function_type">
<span class="returnvalue">GdkDeviceTool</span> *
<a href="https://developer.gnome.org/gdk4/GdkDevice.html#GdkDeviceTool-struct"><span class="returnvalue">GdkDeviceTool</span></a> *
</td>
<td class="function_name">
<a class="link" href="gdk3-Events.html#gdk-event-get-device-tool" title="gdk_event_get_device_tool ()">gdk_event_get_device_tool</a> <span class="c_punctuation">()</span>
@ -1817,13 +1817,13 @@ for instance by <a class="link" href="gdk3-Events.html#gdk-event-copy" title="gd
<hr>
<div class="refsect2">
<a name="gdk-event-get-device-tool"></a><h3>gdk_event_get_device_tool ()</h3>
<pre class="programlisting"><span class="returnvalue">GdkDeviceTool</span> *
<pre class="programlisting"><a href="https://developer.gnome.org/gdk4/GdkDevice.html#GdkDeviceTool-struct"><span class="returnvalue">GdkDeviceTool</span></a> *
gdk_event_get_device_tool (<em class="parameter"><code>const <a class="link" href="gdk3-Event-Structures.html#GdkEvent" title="union GdkEvent"><span class="type">GdkEvent</span></a> *event</code></em>);</pre>
<p>If the event was generated by a device that supports
different tools (eg. a tablet), this function will
return a <span class="type">GdkDeviceTool</span> representing the tool that
return a <a href="https://developer.gnome.org/gdk4/GdkDevice.html#GdkDeviceTool-struct"><span class="type">GdkDeviceTool</span></a> representing the tool that
caused the event. Otherwise, <code class="literal">NULL</code> will be returned.</p>
<p>Note: the <span class="type">GdkDeviceTool</span>&lt;!-- --&gt;s will be constant during
<p>Note: the <a href="https://developer.gnome.org/gdk4/GdkDevice.html#GdkDeviceTool-struct"><span class="type">GdkDeviceTool</span></a>&lt;!-- --&gt;s will be constant during
the application lifetime, if settings must be stored
persistently across runs, see <a class="link" href="GdkDevice.html#gdk-device-tool-get-serial" title="gdk_device_tool_get_serial ()"><code class="function">gdk_device_tool_get_serial()</code></a></p>
<div class="refsect3">
@ -1853,7 +1853,7 @@ persistently across runs, see <a class="link" href="GdkDevice.html#gdk-device-to
<a name="gdk-event-set-device-tool"></a><h3>gdk_event_set_device_tool ()</h3>
<pre class="programlisting"><span class="returnvalue">void</span>
gdk_event_set_device_tool (<em class="parameter"><code><a class="link" href="gdk3-Event-Structures.html#GdkEvent" title="union GdkEvent"><span class="type">GdkEvent</span></a> *event</code></em>,
<em class="parameter"><code><span class="type">GdkDeviceTool</span> *tool</code></em>);</pre>
<em class="parameter"><code><a href="https://developer.gnome.org/gdk4/GdkDevice.html#GdkDeviceTool-struct"><span class="type">GdkDeviceTool</span></a> *tool</code></em>);</pre>
<p>Sets the device tool for this event, should be rarely used.</p>
<div class="refsect3">
<a name="gdk-event-set-device-tool.parameters"></a><h4>Parameters</h4>
@ -2334,7 +2334,7 @@ added in 3.22.</p>
Most of these masks map onto one or more of the <a class="link" href="gdk3-Events.html#GdkEventType" title="enum GdkEventType"><span class="type">GdkEventType</span></a> event types
above.</p>
<p>See the input handling overview for details of
event masks and event propagation.</p>
event masks and <a href="https://developer.gnome.org/gtk4/input-overview.html#event-propagation">event propagation</a>.</p>
<p><a class="link" href="gdk3-Events.html#GDK-POINTER-MOTION-HINT-MASK:CAPS"><code class="literal">GDK_POINTER_MOTION_HINT_MASK</code></a> is deprecated. It is a special mask
to reduce the number of <a class="link" href="gdk3-Events.html#GDK-MOTION-NOTIFY:CAPS"><code class="literal">GDK_MOTION_NOTIFY</code></a> events received. When using
<a class="link" href="gdk3-Events.html#GDK-POINTER-MOTION-HINT-MASK:CAPS"><code class="literal">GDK_POINTER_MOTION_HINT_MASK</code></a>, fewer <a class="link" href="gdk3-Events.html#GDK-MOTION-NOTIFY:CAPS"><code class="literal">GDK_MOTION_NOTIFY</code></a> events will

View File

@ -15,7 +15,7 @@
<div>
<div><table class="navigation" id="top" width="100%" cellpadding="2" cellspacing="0"><tr><th valign="middle"><p class="title">GDK 3 Reference Manual</p></th></tr></table></div>
<div><p class="releaseinfo">
This document is for the GDK 3 library, version 3.24.20
This document is for the GDK 3 library, version 3.24.21
The latest versions can be found online at
<a class="ulink" href="https://developer.gnome.org/gdk3/" target="_top">https://developer.gnome.org/gdk3/</a>.

View File

@ -61,18 +61,6 @@ a:hover
color: #729fcf;
}
div.informaltable table
{
border-collapse: separate;
border-spacing: 1em 0.3em;
border: none;
}
div.informaltable table td, div.informaltable table th
{
vertical-align: top;
}
.function_type,
.variable_type,
.property_type,
@ -127,6 +115,7 @@ td p
margin: 0.25em;
}
div.informaltable table[border="1"],
div.table table
{
border-collapse: collapse;
@ -135,6 +124,7 @@ div.table table
border: solid 1px #babdb6;
}
div.informaltable table[border="1"] td, div.informaltable table th,
div.table table td, div.table table th
{
/* tango:aluminium 3 */
@ -143,13 +133,7 @@ div.table table td, div.table table th
vertical-align: top;
}
div.table table tr.subhead
{
/* tango:aluminium 2 */
background-color: #d3d7cf;
font-weight: bold;
}
div.informaltable table[border="1"] th,
div.table table th
{
/* tango:aluminium 2 */

View File

@ -1 +1 @@
3.24.20
3.24.21

View File

@ -2,7 +2,7 @@
.\" Title: broadwayd
.\" Author: Alexander Larsson
.\" Generator: DocBook XSL Stylesheets vsnapshot <http://docbook.sf.net/>
.\" Date: 04/27/2020
.\" Date: 06/28/2020
.\" Manual: User Commands
.\" Source: GTK+
.\" Language: English

View File

@ -2,7 +2,7 @@
.\" Title: gtk-builder-tool
.\" Author: Matthias Clasen
.\" Generator: DocBook XSL Stylesheets vsnapshot <http://docbook.sf.net/>
.\" Date: 04/27/2020
.\" Date: 06/28/2020
.\" Manual: User Commands
.\" Source: GTK+
.\" Language: English

View File

@ -2,7 +2,7 @@
.\" Title: gtk-encode-symbolic-svg
.\" Author: Alexander Larsson
.\" Generator: DocBook XSL Stylesheets vsnapshot <http://docbook.sf.net/>
.\" Date: 04/27/2020
.\" Date: 06/28/2020
.\" Manual: User Commands
.\" Source: GTK+
.\" Language: English

View File

@ -2,7 +2,7 @@
.\" Title: gtk-launch
.\" Author: Tomáš Bžatek <tbzatek@redhat.com>
.\" Generator: DocBook XSL Stylesheets vsnapshot <http://docbook.sf.net/>
.\" Date: 04/27/2020
.\" Date: 06/28/2020
.\" Manual: User Commands
.\" Source: GTK+
.\" Language: English

View File

@ -2,7 +2,7 @@
.\" Title: gtk-query-immodules-3.0
.\" Author: Matthias Clasen
.\" Generator: DocBook XSL Stylesheets vsnapshot <http://docbook.sf.net/>
.\" Date: 04/27/2020
.\" Date: 06/28/2020
.\" Manual: User Commands
.\" Source: GTK+
.\" Language: English

View File

@ -2,7 +2,7 @@
.\" Title: gtk-query-settings
.\" Author: Timm Bäder
.\" Generator: DocBook XSL Stylesheets vsnapshot <http://docbook.sf.net/>
.\" Date: 04/27/2020
.\" Date: 06/28/2020
.\" Manual: User Commands
.\" Source: GTK+
.\" Language: English

View File

@ -2,7 +2,7 @@
.\" Title: gtk-update-icon-cache
.\" Author: Matthias Clasen
.\" Generator: DocBook XSL Stylesheets vsnapshot <http://docbook.sf.net/>
.\" Date: 04/27/2020
.\" Date: 06/28/2020
.\" Manual: User Commands
.\" Source: GTK+
.\" Language: English

View File

@ -2,7 +2,7 @@
.\" Title: gtk3-demo-application
.\" Author: Matthias Clasen
.\" Generator: DocBook XSL Stylesheets vsnapshot <http://docbook.sf.net/>
.\" Date: 04/27/2020
.\" Date: 06/28/2020
.\" Manual: User Commands
.\" Source: GTK+
.\" Language: English

View File

@ -2,7 +2,7 @@
.\" Title: gtk3-demo
.\" Author: Matthias Clasen
.\" Generator: DocBook XSL Stylesheets vsnapshot <http://docbook.sf.net/>
.\" Date: 04/27/2020
.\" Date: 06/28/2020
.\" Manual: User Commands
.\" Source: GTK+
.\" Language: English

View File

@ -2,7 +2,7 @@
.\" Title: gtk3-icon-browser
.\" Author: Matthias Clasen
.\" Generator: DocBook XSL Stylesheets vsnapshot <http://docbook.sf.net/>
.\" Date: 04/27/2020
.\" Date: 06/28/2020
.\" Manual: User Commands
.\" Source: GTK+
.\" Language: English

View File

@ -2,7 +2,7 @@
.\" Title: gtk3-widget-factory
.\" Author: Matthias Clasen
.\" Generator: DocBook XSL Stylesheets vsnapshot <http://docbook.sf.net/>
.\" Date: 04/27/2020
.\" Date: 06/28/2020
.\" Manual: User Commands
.\" Source: GTK+
.\" Language: English

View File

@ -1665,18 +1665,24 @@ developer</p>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GTK-LICENSE-BSD-3:CAPS"></a>GTK_LICENSE_BSD_3</p></td>
<td> </td>
<td> </td>
<td class="enum_member_description">
<p>The 3-clause BSD licence. Since: 3.24.20.</p>
</td>
<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GTK-LICENSE-APACHE-2-0:CAPS"></a>GTK_LICENSE_APACHE_2_0</p></td>
<td> </td>
<td> </td>
<td class="enum_member_description">
<p>The Apache License, version 2.0. Since: 3.24.20.</p>
</td>
<td class="enum_member_annotations"> </td>
</tr>
<tr>
<td class="enum_member_name"><p><a name="GTK-LICENSE-MPL-2-0:CAPS"></a>GTK_LICENSE_MPL_2_0</p></td>
<td> </td>
<td> </td>
<td class="enum_member_description">
<p>The Mozilla Public License, version 2.0. Since: 3.24.20.</p>
</td>
<td class="enum_member_annotations"> </td>
</tr>
</tbody>
</table></div>

View File

@ -355,7 +355,7 @@ Do not confuse GtkBuilder UI Definitions with
<a class="link" href="GtkUIManager.html#XML-UI" title="UI Definitions">GtkUIManager UI Definitions</a>, which are more limited in scope.
It is common to use <code class="literal">.ui</code> as the filename extension for files containing
GtkBuilder UI definitions.</p>
<p><a class="ulink" href="https://git.gnome.org/browse/gtk+/tree/gtk/gtkbuilder.rnc" target="_top">RELAX NG Compact Syntax</a></p>
<p><a class="ulink" href="https://gitlab.gnome.org/GNOME/gtk/-/blob/gtk-3-24/gtk/gtkbuilder.rnc" target="_top">RELAX NG Compact Syntax</a></p>
<p>The toplevel element is &lt;interface&gt;. It optionally takes a “domain”
attribute, which will make the builder look for translated strings
using <code class="function">dgettext()</code> in the domain specified. This can also be done by

View File

@ -1311,7 +1311,7 @@ Please see the documentation for those functions for an example of using
<tr>
<td class="parameter_name"><p>name</p></td>
<td class="parameter_description"><p>the filename to use, as a UTF-8 string. </p></td>
<td class="parameter_annotations"><span class="annotation">[<acronym title="Override the parsed C type with given type."><span class="acronym">type</span></acronym> filename]</span></td>
<td class="parameter_annotations"><span class="annotation">[<acronym title="Override the parsed C type with given type."><span class="acronym">type</span></acronym> utf8]</span></td>
</tr>
</tbody>
</table></div>

View File

@ -98,7 +98,7 @@ those for <a class="link" href="GtkDialog.html" title="GtkDialog"><span class="t
own. Instead, you should use the functions that work on a
<a class="link" href="GtkFileChooser.html" title="GtkFileChooser"><span class="type">GtkFileChooser</span></a>.</p>
<p>If you want to integrate well with the platform you should use the
<span class="type">GtkFileChooserNative</span> API, which will use a platform-specific
<a href="https://developer.gnome.org/gtk4/gtk4-GtkFileChooserNative.html#GtkFileChooserNative"><span class="type">GtkFileChooserNative</span></a> API, which will use a platform-specific
dialog if available and fall back to GtkFileChooserDialog
otherwise.</p>
<div class="refsect3">

View File

@ -370,7 +370,7 @@ to know about the possible lifetimes of a <a href="https://developer.gnome.org/g
touchpad gesture events. The only precautions users of <a class="link" href="GtkGesture.html" title="GtkGesture"><span class="type">GtkGesture</span></a> should do
to enable this support are:</p>
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
<li class="listitem"><p>Enabling <a href="https://developer.gnome.org/gdk4/gdk4-Events.html#GDK-TOUCHPAD-GESTURE-MASK:CAPS"><code class="literal">GDK_TOUCHPAD_GESTURE_MASK</code></a> on their <span class="type">GdkWindows</span></p></li>
<li class="listitem"><p>Enabling <code class="literal">GDK_TOUCHPAD_GESTURE_MASK</code> on their <span class="type">GdkWindows</span></p></li>
<li class="listitem"><p>If the gesture has <a class="link" href="GtkEventController.html#GTK-PHASE-NONE:CAPS"><code class="literal">GTK_PHASE_NONE</code></a>, ensuring events of type
<a href="https://developer.gnome.org/gdk4/gdk4-Events.html#GDK-TOUCHPAD-SWIPE:CAPS"><code class="literal">GDK_TOUCHPAD_SWIPE</code></a> and <a href="https://developer.gnome.org/gdk4/gdk4-Events.html#GDK-TOUCHPAD-PINCH:CAPS"><code class="literal">GDK_TOUCHPAD_PINCH</code></a> are handled by the <a class="link" href="GtkGesture.html" title="GtkGesture"><span class="type">GtkGesture</span></a></p></li>
</ul></div>

View File

@ -67,7 +67,7 @@
</tr>
<tr>
<td class="function_type">
<span class="returnvalue">GdkDeviceTool</span> *
<a href="https://developer.gnome.org/gdk4/GdkDevice.html#GdkDeviceTool-struct"><span class="returnvalue">GdkDeviceTool</span></a> *
</td>
<td class="function_name">
<a class="link" href="GtkGestureStylus.html#gtk-gesture-stylus-get-device-tool" title="gtk_gesture_stylus_get_device_tool ()">gtk_gesture_stylus_get_device_tool</a> <span class="c_punctuation">()</span>
@ -261,9 +261,9 @@ signals.</p>
<hr>
<div class="refsect2">
<a name="gtk-gesture-stylus-get-device-tool"></a><h3>gtk_gesture_stylus_get_device_tool ()</h3>
<pre class="programlisting"><span class="returnvalue">GdkDeviceTool</span> *
<pre class="programlisting"><a href="https://developer.gnome.org/gdk4/GdkDevice.html#GdkDeviceTool-struct"><span class="returnvalue">GdkDeviceTool</span></a> *
gtk_gesture_stylus_get_device_tool (<em class="parameter"><code><a class="link" href="GtkGestureStylus.html" title="GtkGestureStylus"><span class="type">GtkGestureStylus</span></a> *gesture</code></em>);</pre>
<p>Returns the <span class="type">GdkDeviceTool</span> currently driving input through this gesture.
<p>Returns the <a href="https://developer.gnome.org/gdk4/GdkDevice.html#GdkDeviceTool-struct"><span class="type">GdkDeviceTool</span></a> currently driving input through this gesture.
This function must be called from either the <a class="link" href="GtkGestureStylus.html#GtkGestureStylus-down" title="The “down” signal"><span class="type">“down”</span></a>,
<a class="link" href="GtkGestureStylus.html#GtkGestureStylus-motion" title="The “motion” signal"><span class="type">“motion”</span></a>, <a class="link" href="GtkGestureStylus.html#GtkGestureStylus-up" title="The “up” signal"><span class="type">“up”</span></a> or <a class="link" href="GtkGestureStylus.html#GtkGestureStylus-proximity" title="The “proximity” signal"><span class="type">“proximity”</span></a>
signal handlers.</p>

View File

@ -165,7 +165,7 @@ preference dialogs to allow users to obtain and revoke authorizations
needed to operate the controls. The required authorization is represented
by a <span class="type">GPermission</span> object. Concrete implementations of <span class="type">GPermission</span> may use
PolicyKit or some other authorization framework. To obtain a PolicyKit-based
<span class="type">GPermission</span>, use <code class="function">polkit_permission_new()</code>.</p>
<span class="type">GPermission</span>, use <a href="http://www.freedesktop.org/software/polkit/docs/latest/PolkitPermission.html#polkit-permission-new"><code class="function">polkit_permission_new()</code></a>.</p>
<p>If the user is not currently allowed to perform the action, but can obtain
the permission, the widget looks like this:</p>
<p><span class="inlinemediaobject"><img src="lockbutton-locked.png"></span></p>

View File

@ -215,6 +215,11 @@
<td class="property_flags">Read / Write</td>
</tr>
<tr>
<td class="property_type"><span class="type">gfloat</span></td>
<td class="property_name"><a class="link" href="GtkSettings.html#GtkSettings--gtk-cursor-aspect-ratio" title="The “gtk-cursor-aspect-ratio” property">gtk-cursor-aspect-ratio</a></td>
<td class="property_flags">Read / Write</td>
</tr>
<tr>
<td class="property_type"><span class="type">gboolean</span></td>
<td class="property_name"><a class="link" href="GtkSettings.html#GtkSettings--gtk-cursor-blink" title="The “gtk-cursor-blink” property">gtk-cursor-blink</a></td>
<td class="property_flags">Read / Write</td>
@ -1398,6 +1403,16 @@ by ';' instead of newlines:</p>
</div>
<hr>
<div class="refsect2">
<a name="GtkSettings--gtk-cursor-aspect-ratio"></a><h3>The <code class="literal">“gtk-cursor-aspect-ratio”</code> property</h3>
<pre class="programlisting"> “gtk-cursor-aspect-ratio” <span class="type">gfloat</span></pre>
<p>The aspect ratio of the text caret.</p>
<p>Owner: GtkSettings</p>
<p>Flags: Read / Write</p>
<p>Allowed values: [0,1]</p>
<p>Default value: 0.04</p>
</div>
<hr>
<div class="refsect2">
<a name="GtkSettings--gtk-cursor-blink"></a><h3>The <code class="literal">“gtk-cursor-blink”</code> property</h3>
<pre class="programlisting"> “gtk-cursor-blink” <span class="type">gboolean</span></pre>
<p>Whether the cursor should blink.</p>

View File

@ -317,7 +317,7 @@ GtkToolPalette implements
<p>A <a class="link" href="GtkToolPalette.html" title="GtkToolPalette"><span class="type">GtkToolPalette</span></a> allows you to add <a href="GtkToolItem.html#GtkToolItem-struct"><span class="type">GtkToolItems</span></a> to a palette-like
container with different categories and drag and drop support.</p>
<p>A <a class="link" href="GtkToolPalette.html" title="GtkToolPalette"><span class="type">GtkToolPalette</span></a> is created with a call to <a class="link" href="GtkToolPalette.html#gtk-tool-palette-new" title="gtk_tool_palette_new ()"><code class="function">gtk_tool_palette_new()</code></a>.</p>
<p><a href="GtkToolItem.html#GtkToolItem-struct"><span class="type">GtkToolItems</span></a> cannot be added directly to a <a class="link" href="GtkToolPalette.html" title="GtkToolPalette"><span class="type">GtkToolPalette</span></a> -
<p><a href="GtkToolItem.html#GtkToolItem-struct"><span class="type">GtkToolItems</span></a> cannot be added directly to a <a class="link" href="GtkToolPalette.html" title="GtkToolPalette"><span class="type">GtkToolPalette</span></a> -
instead they are added to a <a class="link" href="GtkToolItemGroup.html" title="GtkToolItemGroup"><span class="type">GtkToolItemGroup</span></a> which can than be added
to a <a class="link" href="GtkToolPalette.html" title="GtkToolPalette"><span class="type">GtkToolPalette</span></a>. To add a <a class="link" href="GtkToolItemGroup.html" title="GtkToolItemGroup"><span class="type">GtkToolItemGroup</span></a> to a <a class="link" href="GtkToolPalette.html" title="GtkToolPalette"><span class="type">GtkToolPalette</span></a>,
use <a class="link" href="GtkContainer.html#gtk-container-add" title="gtk_container_add ()"><code class="function">gtk_container_add()</code></a>.</p>

View File

@ -454,7 +454,7 @@
</tr>
<tr>
<td class="function_type">
<a href="https://developer.gnome.org/gdk4/gdk4-Events.html#GdkEventMask"><span class="returnvalue">GdkEventMask</span></a>
<span class="returnvalue">GdkEventMask</span>
</td>
<td class="function_name">
<a class="link" href="GtkWidget.html#gtk-widget-get-device-events" title="gtk_widget_get_device_events ()">gtk_widget_get_device_events</a> <span class="c_punctuation">()</span>
@ -2189,7 +2189,7 @@
<td class="property_flags">Read / Write</td>
</tr>
<tr>
<td class="property_type"><a href="https://developer.gnome.org/gdk4/gdk4-Events.html#GdkEventMask"><span class="type">GdkEventMask</span></a></td>
<td class="property_type"><span class="type">GdkEventMask</span></td>
<td class="property_name"><a class="link" href="GtkWidget.html#GtkWidget--events" title="The “events” property">events</a></td>
<td class="property_flags">Read / Write</td>
</tr>
@ -5239,7 +5239,7 @@ if it does not have a parent window. </p>
<pre class="programlisting"><span class="returnvalue">void</span>
gtk_widget_set_events (<em class="parameter"><code><a class="link" href="GtkWidget.html" title="GtkWidget"><span class="type">GtkWidget</span></a> *widget</code></em>,
<em class="parameter"><code><span class="type">gint</span> events</code></em>);</pre>
<p>Sets the event mask (see <a href="https://developer.gnome.org/gdk4/gdk4-Events.html#GdkEventMask"><span class="type">GdkEventMask</span></a>) for a widget. The event
<p>Sets the event mask (see <span class="type">GdkEventMask</span>) for a widget. The event
mask determines which events a widget will receive. Keep in mind
that different widgets have different default event masks, and by
changing the event mask you may disrupt a widgets functionality,
@ -5278,7 +5278,7 @@ box.</p>
<a name="gtk-widget-get-events"></a><h3>gtk_widget_get_events ()</h3>
<pre class="programlisting"><span class="returnvalue">gint</span>
gtk_widget_get_events (<em class="parameter"><code><a class="link" href="GtkWidget.html" title="GtkWidget"><span class="type">GtkWidget</span></a> *widget</code></em>);</pre>
<p>Returns the event mask (see <a href="https://developer.gnome.org/gdk4/gdk4-Events.html#GdkEventMask"><span class="type">GdkEventMask</span></a>) for the widget. These are the
<p>Returns the event mask (see <span class="type">GdkEventMask</span>) for the widget. These are the
events that the widget will receive.</p>
<p>Note: Internally, the widget event mask will be the logical OR of the event
mask set through <a class="link" href="GtkWidget.html#gtk-widget-set-events" title="gtk_widget_set_events ()"><code class="function">gtk_widget_set_events()</code></a> or <a class="link" href="GtkWidget.html#gtk-widget-add-events" title="gtk_widget_add_events ()"><code class="function">gtk_widget_add_events()</code></a>, and the
@ -5332,7 +5332,7 @@ gtk_widget_add_events (<em class="parameter"><code><a class="link" href="GtkWidg
</tr>
<tr>
<td class="parameter_name"><p>events</p></td>
<td class="parameter_description"><p>an event mask, see <a href="https://developer.gnome.org/gdk4/gdk4-Events.html#GdkEventMask"><span class="type">GdkEventMask</span></a></p></td>
<td class="parameter_description"><p>an event mask, see <span class="type">GdkEventMask</span></p></td>
<td class="parameter_annotations"> </td>
</tr>
</tbody>
@ -5345,8 +5345,8 @@ gtk_widget_add_events (<em class="parameter"><code><a class="link" href="GtkWidg
<pre class="programlisting"><span class="returnvalue">void</span>
gtk_widget_set_device_events (<em class="parameter"><code><a class="link" href="GtkWidget.html" title="GtkWidget"><span class="type">GtkWidget</span></a> *widget</code></em>,
<em class="parameter"><code><a href="https://developer.gnome.org/gdk4/GdkDevice.html#GdkDevice-struct"><span class="type">GdkDevice</span></a> *device</code></em>,
<em class="parameter"><code><a href="https://developer.gnome.org/gdk4/gdk4-Events.html#GdkEventMask"><span class="type">GdkEventMask</span></a> events</code></em>);</pre>
<p>Sets the device event mask (see <a href="https://developer.gnome.org/gdk4/gdk4-Events.html#GdkEventMask"><span class="type">GdkEventMask</span></a>) for a widget. The event
<em class="parameter"><code><span class="type">GdkEventMask</span> events</code></em>);</pre>
<p>Sets the device event mask (see <span class="type">GdkEventMask</span>) for a widget. The event
mask determines which events a widget will receive from <em class="parameter"><code>device</code></em>
. Keep
in mind that different widgets have different default event masks, and by
@ -5390,7 +5390,7 @@ and receive events on the event box.</p>
<hr>
<div class="refsect2">
<a name="gtk-widget-get-device-events"></a><h3>gtk_widget_get_device_events ()</h3>
<pre class="programlisting"><a href="https://developer.gnome.org/gdk4/gdk4-Events.html#GdkEventMask"><span class="returnvalue">GdkEventMask</span></a>
<pre class="programlisting"><span class="returnvalue">GdkEventMask</span>
gtk_widget_get_device_events (<em class="parameter"><code><a class="link" href="GtkWidget.html" title="GtkWidget"><span class="type">GtkWidget</span></a> *widget</code></em>,
<em class="parameter"><code><a href="https://developer.gnome.org/gdk4/GdkDevice.html#GdkDevice-struct"><span class="type">GdkDevice</span></a> *device</code></em>);</pre>
<p>Returns the events mask for the widget corresponding to an specific device. These
@ -5431,7 +5431,7 @@ are the events that the widget will receive when <em class="parameter"><code>dev
<pre class="programlisting"><span class="returnvalue">void</span>
gtk_widget_add_device_events (<em class="parameter"><code><a class="link" href="GtkWidget.html" title="GtkWidget"><span class="type">GtkWidget</span></a> *widget</code></em>,
<em class="parameter"><code><a href="https://developer.gnome.org/gdk4/GdkDevice.html#GdkDevice-struct"><span class="type">GdkDevice</span></a> *device</code></em>,
<em class="parameter"><code><a href="https://developer.gnome.org/gdk4/gdk4-Events.html#GdkEventMask"><span class="type">GdkEventMask</span></a> events</code></em>);</pre>
<em class="parameter"><code><span class="type">GdkEventMask</span> events</code></em>);</pre>
<p>Adds the device events in the bitfield <em class="parameter"><code>events</code></em>
to the event mask for
<em class="parameter"><code>widget</code></em>
@ -5457,7 +5457,7 @@ gtk_widget_add_device_events (<em class="parameter"><code><a class="link" href="
</tr>
<tr>
<td class="parameter_name"><p>events</p></td>
<td class="parameter_description"><p>an event mask, see <a href="https://developer.gnome.org/gdk4/gdk4-Events.html#GdkEventMask"><span class="type">GdkEventMask</span></a></p></td>
<td class="parameter_description"><p>an event mask, see <span class="type">GdkEventMask</span></p></td>
<td class="parameter_annotations"> </td>
</tr>
</tbody>
@ -14664,7 +14664,7 @@ allocation</p>
<hr>
<div class="refsect2">
<a name="GtkWidget--events"></a><h3>The <code class="literal">“events”</code> property</h3>
<pre class="programlisting"> “events” <a href="https://developer.gnome.org/gdk4/gdk4-Events.html#GdkEventMask"><span class="type">GdkEventMask</span></a></pre>
<pre class="programlisting"> “events” <span class="type">GdkEventMask</span></pre>
<p>The event mask that decides what kind of GdkEvents this widget gets.</p>
<p>Owner: GtkWidget</p>
<p>Flags: Read / Write</p>
@ -15328,7 +15328,7 @@ user_function (<a class="link" href="GtkWidget.html" title="GtkWidget"><span cla
<p>The ::button-press-event signal will be emitted when a button
(typically from a mouse) is pressed.</p>
<p>To receive this signal, the <span class="type">GdkWindow</span> associated to the
widget needs to enable the <a href="https://developer.gnome.org/gdk4/gdk4-Events.html#GDK-BUTTON-PRESS-MASK:CAPS"><span class="type">GDK_BUTTON_PRESS_MASK</span></a> mask.</p>
widget needs to enable the <span class="type">GDK_BUTTON_PRESS_MASK</span> mask.</p>
<p>This signal will be sent to the grab widget if there is one.</p>
<div class="refsect3">
<a name="GtkWidget-button-press-event.parameters"></a><h4>Parameters</h4>
@ -15375,7 +15375,7 @@ user_function (<a class="link" href="GtkWidget.html" title="GtkWidget"><span cla
<p>The ::button-release-event signal will be emitted when a button
(typically from a mouse) is released.</p>
<p>To receive this signal, the <span class="type">GdkWindow</span> associated to the
widget needs to enable the <a href="https://developer.gnome.org/gdk4/gdk4-Events.html#GDK-BUTTON-RELEASE-MASK:CAPS"><span class="type">GDK_BUTTON_RELEASE_MASK</span></a> mask.</p>
widget needs to enable the <span class="type">GDK_BUTTON_RELEASE_MASK</span> mask.</p>
<p>This signal will be sent to the grab widget if there is one.</p>
<div class="refsect3">
<a name="GtkWidget-button-release-event.parameters"></a><h4>Parameters</h4>
@ -15547,7 +15547,7 @@ user_function (<a class="link" href="GtkWidget.html" title="GtkWidget"><span cla
stacking of the <em class="parameter"><code>widget</code></em>
's window has changed.</p>
<p>To receive this signal, the <span class="type">GdkWindow</span> associated to the widget needs
to enable the <a href="https://developer.gnome.org/gdk4/gdk4-Events.html#GDK-STRUCTURE-MASK:CAPS"><span class="type">GDK_STRUCTURE_MASK</span></a> mask. GDK will enable this mask
to enable the <span class="type">GDK_STRUCTURE_MASK</span> mask. GDK will enable this mask
automatically for all new windows.</p>
<div class="refsect3">
<a name="GtkWidget-configure-event.parameters"></a><h4>Parameters</h4>
@ -15722,7 +15722,7 @@ You rarely get this signal, because most widgets disconnect themselves
from their window before they destroy it, so no widget owns the
window at destroy time.</p>
<p>To receive this signal, the <span class="type">GdkWindow</span> associated to the widget needs
to enable the <a href="https://developer.gnome.org/gdk4/gdk4-Events.html#GDK-STRUCTURE-MASK:CAPS"><span class="type">GDK_STRUCTURE_MASK</span></a> mask. GDK will enable this mask
to enable the <span class="type">GDK_STRUCTURE_MASK</span> mask. GDK will enable this mask
automatically for all new windows.</p>
<div class="refsect3">
<a name="GtkWidget-destroy-event.parameters"></a><h4>Parameters</h4>
@ -16611,7 +16611,7 @@ user_function (<a class="link" href="GtkWidget.html" title="GtkWidget"><span cla
the <em class="parameter"><code>widget</code></em>
's window.</p>
<p>To receive this signal, the <span class="type">GdkWindow</span> associated to the widget needs
to enable the <a href="https://developer.gnome.org/gdk4/gdk4-Events.html#GDK-ENTER-NOTIFY-MASK:CAPS"><span class="type">GDK_ENTER_NOTIFY_MASK</span></a> mask.</p>
to enable the <span class="type">GDK_ENTER_NOTIFY_MASK</span> mask.</p>
<p>This signal will be sent to the grab widget if there is one.</p>
<div class="refsect3">
<a name="GtkWidget-enter-notify-event.parameters"></a><h4>Parameters</h4>
@ -16781,7 +16781,7 @@ user_function (<a class="link" href="GtkWidget.html" title="GtkWidget"><span cla
enters the <em class="parameter"><code>widget</code></em>
's window.</p>
<p>To receive this signal, the <span class="type">GdkWindow</span> associated to the widget needs
to enable the <a href="https://developer.gnome.org/gdk4/gdk4-Events.html#GDK-FOCUS-CHANGE-MASK:CAPS"><span class="type">GDK_FOCUS_CHANGE_MASK</span></a> mask.</p>
to enable the <span class="type">GDK_FOCUS_CHANGE_MASK</span> mask.</p>
<div class="refsect3">
<a name="GtkWidget-focus-in-event.parameters"></a><h4>Parameters</h4>
<div class="informaltable"><table class="informaltable" width="100%" border="0">
@ -16828,7 +16828,7 @@ user_function (<a class="link" href="GtkWidget.html" title="GtkWidget"><span cla
leaves the <em class="parameter"><code>widget</code></em>
's window.</p>
<p>To receive this signal, the <span class="type">GdkWindow</span> associated to the widget needs
to enable the <a href="https://developer.gnome.org/gdk4/gdk4-Events.html#GDK-FOCUS-CHANGE-MASK:CAPS"><span class="type">GDK_FOCUS_CHANGE_MASK</span></a> mask.</p>
to enable the <span class="type">GDK_FOCUS_CHANGE_MASK</span> mask.</p>
<div class="refsect3">
<a name="GtkWidget-focus-out-event.parameters"></a><h4>Parameters</h4>
<div class="informaltable"><table class="informaltable" width="100%" border="0">
@ -17071,7 +17071,7 @@ user_function (<a class="link" href="GtkWidget.html" title="GtkWidget"><span cla
<p>The ::key-press-event signal is emitted when a key is pressed. The signal
emission will reoccur at the key-repeat rate when the key is kept pressed.</p>
<p>To receive this signal, the <span class="type">GdkWindow</span> associated to the widget needs
to enable the <a href="https://developer.gnome.org/gdk4/gdk4-Events.html#GDK-KEY-PRESS-MASK:CAPS"><span class="type">GDK_KEY_PRESS_MASK</span></a> mask.</p>
to enable the <span class="type">GDK_KEY_PRESS_MASK</span> mask.</p>
<p>This signal will be sent to the grab widget if there is one.</p>
<div class="refsect3">
<a name="GtkWidget-key-press-event.parameters"></a><h4>Parameters</h4>
@ -17116,7 +17116,7 @@ user_function (<a class="link" href="GtkWidget.html" title="GtkWidget"><span cla
<span class="type">gpointer</span> user_data)</pre>
<p>The ::key-release-event signal is emitted when a key is released.</p>
<p>To receive this signal, the <span class="type">GdkWindow</span> associated to the widget needs
to enable the <a href="https://developer.gnome.org/gdk4/gdk4-Events.html#GDK-KEY-RELEASE-MASK:CAPS"><span class="type">GDK_KEY_RELEASE_MASK</span></a> mask.</p>
to enable the <span class="type">GDK_KEY_RELEASE_MASK</span> mask.</p>
<p>This signal will be sent to the grab widget if there is one.</p>
<div class="refsect3">
<a name="GtkWidget-key-release-event.parameters"></a><h4>Parameters</h4>
@ -17208,7 +17208,7 @@ user_function (<a class="link" href="GtkWidget.html" title="GtkWidget"><span cla
the <em class="parameter"><code>widget</code></em>
's window.</p>
<p>To receive this signal, the <span class="type">GdkWindow</span> associated to the widget needs
to enable the <a href="https://developer.gnome.org/gdk4/gdk4-Events.html#GDK-LEAVE-NOTIFY-MASK:CAPS"><span class="type">GDK_LEAVE_NOTIFY_MASK</span></a> mask.</p>
to enable the <span class="type">GDK_LEAVE_NOTIFY_MASK</span> mask.</p>
<p>This signal will be sent to the grab widget if there is one.</p>
<div class="refsect3">
<a name="GtkWidget-leave-notify-event.parameters"></a><h4>Parameters</h4>
@ -17295,7 +17295,7 @@ user_function (<a class="link" href="GtkWidget.html" title="GtkWidget"><span cla
's window is
mapped. A window is mapped when it becomes visible on the screen.</p>
<p>To receive this signal, the <span class="type">GdkWindow</span> associated to the widget needs
to enable the <a href="https://developer.gnome.org/gdk4/gdk4-Events.html#GDK-STRUCTURE-MASK:CAPS"><span class="type">GDK_STRUCTURE_MASK</span></a> mask. GDK will enable this mask
to enable the <span class="type">GDK_STRUCTURE_MASK</span> mask. GDK will enable this mask
automatically for all new windows.</p>
<div class="refsect3">
<a name="GtkWidget-map-event.parameters"></a><h4>Parameters</h4>
@ -17388,7 +17388,7 @@ user_function (<a class="link" href="GtkWidget.html" title="GtkWidget"><span cla
<p>The ::motion-notify-event signal is emitted when the pointer moves
over the widget's <span class="type">GdkWindow</span>.</p>
<p>To receive this signal, the <span class="type">GdkWindow</span> associated to the widget
needs to enable the <a href="https://developer.gnome.org/gdk4/gdk4-Events.html#GDK-POINTER-MOTION-MASK:CAPS"><span class="type">GDK_POINTER_MOTION_MASK</span></a> mask.</p>
needs to enable the <span class="type">GDK_POINTER_MOTION_MASK</span> mask.</p>
<p>This signal will be sent to the grab widget if there is one.</p>
<div class="refsect3">
<a name="GtkWidget-motion-notify-event.parameters"></a><h4>Parameters</h4>
@ -17547,7 +17547,7 @@ user_function (<a class="link" href="GtkWidget.html" title="GtkWidget"><span cla
the <em class="parameter"><code>widget</code></em>
's window has been changed or deleted.</p>
<p>To receive this signal, the <span class="type">GdkWindow</span> associated to the widget needs
to enable the <a href="https://developer.gnome.org/gdk4/gdk4-Events.html#GDK-PROPERTY-CHANGE-MASK:CAPS"><span class="type">GDK_PROPERTY_CHANGE_MASK</span></a> mask.</p>
to enable the <span class="type">GDK_PROPERTY_CHANGE_MASK</span> mask.</p>
<div class="refsect3">
<a name="GtkWidget-property-notify-event.parameters"></a><h4>Parameters</h4>
<div class="informaltable"><table class="informaltable" width="100%" border="0">
@ -17591,7 +17591,7 @@ user_function (<a class="link" href="GtkWidget.html" title="GtkWidget"><span cla
<a href="https://developer.gnome.org/gdk4/gdk4-Events.html#GdkEvent-struct"><span class="type">GdkEvent</span></a> *event,
<span class="type">gpointer</span> user_data)</pre>
<p>To receive this signal the <span class="type">GdkWindow</span> associated to the widget needs
to enable the <a href="https://developer.gnome.org/gdk4/gdk4-Events.html#GDK-PROXIMITY-IN-MASK:CAPS"><span class="type">GDK_PROXIMITY_IN_MASK</span></a> mask.</p>
to enable the <span class="type">GDK_PROXIMITY_IN_MASK</span> mask.</p>
<p>This signal will be sent to the grab widget if there is one.</p>
<div class="refsect3">
<a name="GtkWidget-proximity-in-event.parameters"></a><h4>Parameters</h4>
@ -17636,7 +17636,7 @@ user_function (<a class="link" href="GtkWidget.html" title="GtkWidget"><span cla
<a href="https://developer.gnome.org/gdk4/gdk4-Events.html#GdkEvent-struct"><span class="type">GdkEvent</span></a> *event,
<span class="type">gpointer</span> user_data)</pre>
<p>To receive this signal the <span class="type">GdkWindow</span> associated to the widget needs
to enable the <a href="https://developer.gnome.org/gdk4/gdk4-Events.html#GDK-PROXIMITY-OUT-MASK:CAPS"><span class="type">GDK_PROXIMITY_OUT_MASK</span></a> mask.</p>
to enable the <span class="type">GDK_PROXIMITY_OUT_MASK</span> mask.</p>
<p>This signal will be sent to the grab widget if there is one.</p>
<div class="refsect3">
<a name="GtkWidget-proximity-out-event.parameters"></a><h4>Parameters</h4>
@ -17838,7 +17838,7 @@ user_function (<a class="link" href="GtkWidget.html" title="GtkWidget"><span cla
range is pressed. Wheel mice are usually configured to generate
button press events for buttons 4 and 5 when the wheel is turned.</p>
<p>To receive this signal, the <span class="type">GdkWindow</span> associated to the widget needs
to enable the <a href="https://developer.gnome.org/gdk4/gdk4-Events.html#GDK-SCROLL-MASK:CAPS"><span class="type">GDK_SCROLL_MASK</span></a> mask.</p>
to enable the <span class="type">GDK_SCROLL_MASK</span> mask.</p>
<p>This signal will be sent to the grab widget if there is one.</p>
<div class="refsect3">
<a name="GtkWidget-scroll-event.parameters"></a><h4>Parameters</h4>
@ -18398,7 +18398,7 @@ user_function (<a class="link" href="GtkWidget.html" title="GtkWidget"><span cla
's window is
unmapped. A window is unmapped when it becomes invisible on the screen.</p>
<p>To receive this signal, the <span class="type">GdkWindow</span> associated to the widget needs
to enable the <a href="https://developer.gnome.org/gdk4/gdk4-Events.html#GDK-STRUCTURE-MASK:CAPS"><span class="type">GDK_STRUCTURE_MASK</span></a> mask. GDK will enable this mask
to enable the <span class="type">GDK_STRUCTURE_MASK</span> mask. GDK will enable this mask
automatically for all new windows.</p>
<div class="refsect3">
<a name="GtkWidget-unmap-event.parameters"></a><h4>Parameters</h4>
@ -18534,7 +18534,7 @@ user_function (<a class="link" href="GtkWidget.html" title="GtkWidget"><span cla
toplevel window associated to the <em class="parameter"><code>widget</code></em>
changes.</p>
<p>To receive this signal the <span class="type">GdkWindow</span> associated to the widget
needs to enable the <a href="https://developer.gnome.org/gdk4/gdk4-Events.html#GDK-STRUCTURE-MASK:CAPS"><span class="type">GDK_STRUCTURE_MASK</span></a> mask. GDK will enable
needs to enable the <span class="type">GDK_STRUCTURE_MASK</span> mask. GDK will enable
this mask automatically for all new windows.</p>
<div class="refsect3">
<a name="GtkWidget-window-state-event.parameters"></a><h4>Parameters</h4>

View File

@ -16551,6 +16551,10 @@
</dt>
<dd></dd>
<dt>
<a class="link" href="GtkSettings.html#GtkSettings--gtk-cursor-aspect-ratio" title="The “gtk-cursor-aspect-ratio” property">GtkSettings:gtk-cursor-aspect-ratio</a>, object property in <a class="link" href="GtkSettings.html" title="Settings">GtkSettings</a>
</dt>
<dd></dd>
<dt>
<a class="link" href="GtkSettings.html#GtkSettings--gtk-cursor-blink" title="The “gtk-cursor-blink” property">GtkSettings:gtk-cursor-blink</a>, object property in <a class="link" href="GtkSettings.html" title="Settings">GtkSettings</a>
</dt>
<dd></dd>

View File

@ -229,15 +229,15 @@
On some windowing platforms, multitouch devices perform pointer emulation, this works
by granting a “pointer emulating” hint to one of the currently interacting touch
sequences, which will be reported on every <span class="type">GdkEventTouch</span> event from that sequence. By
default, if a widget didn't request touch events by setting <a href="https://developer.gnome.org/gdk4/gdk4-Events.html#GDK-TOUCH-MASK:CAPS"><code class="literal">GDK_TOUCH_MASK</code></a> on its
default, if a widget didn't request touch events by setting <code class="literal">GDK_TOUCH_MASK</code> on its
event mask and didn't override <a class="link" href="GtkWidget.html#GtkWidget-touch-event" title="The “touch-event” signal"><span class="type">“touch-event”</span></a>, GTK+ will transform these
“pointer emulating” events into semantically similar <span class="type">GdkEventButton</span> and <span class="type">GdkEventMotion</span>
events. Depending on <a href="https://developer.gnome.org/gdk4/gdk4-Events.html#GDK-TOUCH-MASK:CAPS"><code class="literal">GDK_TOUCH_MASK</code></a> being in the event mask or not, non-pointer-emulating
events. Depending on <code class="literal">GDK_TOUCH_MASK</code> being in the event mask or not, non-pointer-emulating
sequences could still trigger gestures or just get filtered out, regardless of the widget
not handling those directly.
</p>
<p>
If the widget sets <a href="https://developer.gnome.org/gdk4/gdk4-Events.html#GDK-TOUCH-MASK:CAPS"><code class="literal">GDK_TOUCH_MASK</code></a> on its event mask and doesn't chain up on
If the widget sets <code class="literal">GDK_TOUCH_MASK</code> on its event mask and doesn't chain up on
<a class="link" href="GtkWidget.html#GtkWidget-touch-event" title="The “touch-event” signal"><span class="type">“touch-event”</span></a>, only touch events will be received, and no pointer emulation
will be performed.
</p>

View File

@ -397,7 +397,7 @@ against at application run time.</p>
<hr>
<div class="refsect2">
<a name="GTK-MICRO-VERSION:CAPS"></a><h3>GTK_MICRO_VERSION</h3>
<pre class="programlisting">#define GTK_MICRO_VERSION (20)
<pre class="programlisting">#define GTK_MICRO_VERSION (21)
</pre>
<p>Like <a class="link" href="gtk3-Feature-Test-Macros.html#gtk-get-micro-version" title="gtk_get_micro_version ()"><code class="function">gtk_get_micro_version()</code></a>, but from the headers used at
application compile time, rather than from the library linked
@ -406,7 +406,7 @@ against at application run time.</p>
<hr>
<div class="refsect2">
<a name="GTK-BINARY-AGE:CAPS"></a><h3>GTK_BINARY_AGE</h3>
<pre class="programlisting">#define GTK_BINARY_AGE (2420)
<pre class="programlisting">#define GTK_BINARY_AGE (2421)
</pre>
<p>Like <a class="link" href="gtk3-Feature-Test-Macros.html#gtk-get-binary-age" title="gtk_get_binary_age ()"><code class="function">gtk_get_binary_age()</code></a>, but from the headers used at
application compile time, rather than from the library linked
@ -415,7 +415,7 @@ against at application run time.</p>
<hr>
<div class="refsect2">
<a name="GTK-INTERFACE-AGE:CAPS"></a><h3>GTK_INTERFACE_AGE</h3>
<pre class="programlisting">#define GTK_INTERFACE_AGE (16)
<pre class="programlisting">#define GTK_INTERFACE_AGE (17)
</pre>
<p>Like <a class="link" href="gtk3-Feature-Test-Macros.html#gtk-get-interface-age" title="gtk_get_interface_age ()"><code class="function">gtk_get_interface_age()</code></a>, but from the headers used at
application compile time, rather than from the library linked

View File

@ -41,7 +41,7 @@
<tbody>
<tr>
<td class="function_type">
<span class="returnvalue">GtkFileChooserNative</span> *
<a href="https://developer.gnome.org/gtk4/gtk4-GtkFileChooserNative.html#GtkFileChooserNative"><span class="returnvalue">GtkFileChooserNative</span></a> *
</td>
<td class="function_name">
<a class="link" href="gtk3-GtkFileChooserNative.html#gtk-file-chooser-native-new" title="gtk_file_chooser_native_new ()">gtk_file_chooser_native_new</a> <span class="c_punctuation">()</span>
@ -87,15 +87,15 @@
</div>
<div class="refsect1">
<a name="gtk3-GtkFileChooserNative.description"></a><h2>Description</h2>
<p><span class="type">GtkFileChooserNative</span> is an abstraction of a dialog box suitable
<p><a href="https://developer.gnome.org/gtk4/gtk4-GtkFileChooserNative.html#GtkFileChooserNative"><span class="type">GtkFileChooserNative</span></a> is an abstraction of a dialog box suitable
for use with “File/Open” or “File/Save as” commands. By default, this
just uses a <a class="link" href="GtkFileChooserDialog.html" title="GtkFileChooserDialog"><span class="type">GtkFileChooserDialog</span></a> to implement the actual dialog.
However, on certain platforms, such as Windows and macOS, the native platform
file chooser is used instead. When the application is running in a
sandboxed environment without direct filesystem access (such as Flatpak),
<span class="type">GtkFileChooserNative</span> may call the proper APIs (portals) to let the user
<a href="https://developer.gnome.org/gtk4/gtk4-GtkFileChooserNative.html#GtkFileChooserNative"><span class="type">GtkFileChooserNative</span></a> may call the proper APIs (portals) to let the user
choose a file and make it available to the application.</p>
<p>While the API of <span class="type">GtkFileChooserNative</span> closely mirrors <a class="link" href="GtkFileChooserDialog.html" title="GtkFileChooserDialog"><span class="type">GtkFileChooserDialog</span></a>, the main
<p>While the API of <a href="https://developer.gnome.org/gtk4/gtk4-GtkFileChooserNative.html#GtkFileChooserNative"><span class="type">GtkFileChooserNative</span></a> closely mirrors <a class="link" href="GtkFileChooserDialog.html" title="GtkFileChooserDialog"><span class="type">GtkFileChooserDialog</span></a>, the main
difference is that there is no access to any <a class="link" href="GtkWindow.html" title="GtkWindow"><span class="type">GtkWindow</span></a> or <a class="link" href="GtkWidget.html" title="GtkWidget"><span class="type">GtkWidget</span></a> for the dialog.
This is required, as there may not be one in the case of a platform native dialog.
Showing, hiding and running the dialog is handled by the <span class="type">GtkNativeDialog</span> functions.</p>
@ -234,7 +234,7 @@ Showing, hiding and running the dialog is handled by the <span class="type">GtkN
</div>
<div class="refsect3">
<a name="gtkfilechooserdialognative-responses"></a><h4>Response Codes</h4>
<p><span class="type">GtkFileChooserNative</span> inherits from <span class="type">GtkNativeDialog</span>, which means it
<p><a href="https://developer.gnome.org/gtk4/gtk4-GtkFileChooserNative.html#GtkFileChooserNative"><span class="type">GtkFileChooserNative</span></a> inherits from <span class="type">GtkNativeDialog</span>, which means it
will return <a class="link" href="GtkDialog.html#GTK-RESPONSE-ACCEPT:CAPS"><span class="type">GTK_RESPONSE_ACCEPT</span></a> if the user accepted, and
<a class="link" href="GtkDialog.html#GTK-RESPONSE-CANCEL:CAPS"><span class="type">GTK_RESPONSE_CANCEL</span></a> if he pressed cancel. It can also return
<a class="link" href="GtkDialog.html#GTK-RESPONSE-DELETE-EVENT:CAPS"><span class="type">GTK_RESPONSE_DELETE_EVENT</span></a> if the window was unexpectedly closed.</p>
@ -243,7 +243,7 @@ will return <a class="link" href="GtkDialog.html#GTK-RESPONSE-ACCEPT:CAPS"><span
<a name="gtkfilechooserdialognative-differences"></a><h4>Differences from <a class="link" href="GtkFileChooserDialog.html" title="GtkFileChooserDialog"><span class="type">GtkFileChooserDialog</span></a>
</h4>
<p>There are a few things in the GtkFileChooser API that are not
possible to use with <span class="type">GtkFileChooserNative</span>, as such use would
possible to use with <a href="https://developer.gnome.org/gtk4/gtk4-GtkFileChooserNative.html#GtkFileChooserNative"><span class="type">GtkFileChooserNative</span></a>, as such use would
prohibit the use of a native dialog.</p>
<p>There is no support for the signals that are emitted when the user
navigates in the dialog, including:</p>
@ -308,13 +308,13 @@ to set the NSSavePanel message instance property.</p></li>
<a name="gtk3-GtkFileChooserNative.functions_details"></a><h2>Functions</h2>
<div class="refsect2">
<a name="gtk-file-chooser-native-new"></a><h3>gtk_file_chooser_native_new ()</h3>
<pre class="programlisting"><span class="returnvalue">GtkFileChooserNative</span> *
<pre class="programlisting"><a href="https://developer.gnome.org/gtk4/gtk4-GtkFileChooserNative.html#GtkFileChooserNative"><span class="returnvalue">GtkFileChooserNative</span></a> *
gtk_file_chooser_native_new (<em class="parameter"><code>const <span class="type">gchar</span> *title</code></em>,
<em class="parameter"><code><a class="link" href="GtkWindow.html" title="GtkWindow"><span class="type">GtkWindow</span></a> *parent</code></em>,
<em class="parameter"><code><a class="link" href="GtkFileChooser.html#GtkFileChooserAction" title="enum GtkFileChooserAction"><span class="type">GtkFileChooserAction</span></a> action</code></em>,
<em class="parameter"><code>const <span class="type">gchar</span> *accept_label</code></em>,
<em class="parameter"><code>const <span class="type">gchar</span> *cancel_label</code></em>);</pre>
<p>Creates a new <span class="type">GtkFileChooserNative</span>.</p>
<p>Creates a new <a href="https://developer.gnome.org/gtk4/gtk4-GtkFileChooserNative.html#GtkFileChooserNative"><span class="type">GtkFileChooserNative</span></a>.</p>
<div class="refsect3">
<a name="gtk-file-chooser-native-new.parameters"></a><h4>Parameters</h4>
<div class="informaltable"><table class="informaltable" width="100%" border="0">
@ -354,7 +354,7 @@ gtk_file_chooser_native_new (<em class="parameter"><code>const <span class="type
</div>
<div class="refsect3">
<a name="gtk-file-chooser-native-new.returns"></a><h4>Returns</h4>
<p> a new <span class="type">GtkFileChooserNative</span></p>
<p> a new <a href="https://developer.gnome.org/gtk4/gtk4-GtkFileChooserNative.html#GtkFileChooserNative"><span class="type">GtkFileChooserNative</span></a></p>
</div>
<p class="since">Since: <a class="link" href="api-index-3-20.html#api-index-3.20">3.20</a></p>
</div>
@ -363,7 +363,7 @@ gtk_file_chooser_native_new (<em class="parameter"><code>const <span class="type
<a name="gtk-file-chooser-native-get-accept-label"></a><h3>gtk_file_chooser_native_get_accept_label ()</h3>
<pre class="programlisting">const <span class="returnvalue">char</span> *
gtk_file_chooser_native_get_accept_label
(<em class="parameter"><code><span class="type">GtkFileChooserNative</span> *self</code></em>);</pre>
(<em class="parameter"><code><a href="https://developer.gnome.org/gtk4/gtk4-GtkFileChooserNative.html#GtkFileChooserNative"><span class="type">GtkFileChooserNative</span></a> *self</code></em>);</pre>
<p>Retrieves the custom label text for the accept button.</p>
<div class="refsect3">
<a name="gtk-file-chooser-native-get-accept-label.parameters"></a><h4>Parameters</h4>
@ -393,7 +393,7 @@ is owned by GTK+ and should not be modified or freed. </p>
<a name="gtk-file-chooser-native-set-accept-label"></a><h3>gtk_file_chooser_native_set_accept_label ()</h3>
<pre class="programlisting"><span class="returnvalue">void</span>
gtk_file_chooser_native_set_accept_label
(<em class="parameter"><code><span class="type">GtkFileChooserNative</span> *self</code></em>,
(<em class="parameter"><code><a href="https://developer.gnome.org/gtk4/gtk4-GtkFileChooserNative.html#GtkFileChooserNative"><span class="type">GtkFileChooserNative</span></a> *self</code></em>,
<em class="parameter"><code>const <span class="type">char</span> *accept_label</code></em>);</pre>
<p>Sets the custom label text for the accept button.</p>
<p>If characters in <em class="parameter"><code>label</code></em>
@ -431,7 +431,7 @@ Pressing Alt and that key activates the button.</p>
<a name="gtk-file-chooser-native-get-cancel-label"></a><h3>gtk_file_chooser_native_get_cancel_label ()</h3>
<pre class="programlisting">const <span class="returnvalue">char</span> *
gtk_file_chooser_native_get_cancel_label
(<em class="parameter"><code><span class="type">GtkFileChooserNative</span> *self</code></em>);</pre>
(<em class="parameter"><code><a href="https://developer.gnome.org/gtk4/gtk4-GtkFileChooserNative.html#GtkFileChooserNative"><span class="type">GtkFileChooserNative</span></a> *self</code></em>);</pre>
<p>Retrieves the custom label text for the cancel button.</p>
<div class="refsect3">
<a name="gtk-file-chooser-native-get-cancel-label.parameters"></a><h4>Parameters</h4>
@ -461,7 +461,7 @@ is owned by GTK+ and should not be modified or freed. </p>
<a name="gtk-file-chooser-native-set-cancel-label"></a><h3>gtk_file_chooser_native_set_cancel_label ()</h3>
<pre class="programlisting"><span class="returnvalue">void</span>
gtk_file_chooser_native_set_cancel_label
(<em class="parameter"><code><span class="type">GtkFileChooserNative</span> *self</code></em>,
(<em class="parameter"><code><a href="https://developer.gnome.org/gtk4/gtk4-GtkFileChooserNative.html#GtkFileChooserNative"><span class="type">GtkFileChooserNative</span></a> *self</code></em>,
<em class="parameter"><code>const <span class="type">char</span> *cancel_label</code></em>);</pre>
<p>Sets the custom label text for the cancel button.</p>
<p>If characters in <em class="parameter"><code>label</code></em>

View File

@ -163,7 +163,7 @@ supporting platform specific features.</p>
need a similar API in order to drive them. The <span class="type">GtkNativeDialog</span>
object is an API that allows you to do this. It allows you to set
various common properties on the dialog, as well as show and hide
it and get a <span class="type">“response”</span> signal when the user finished
it and get a <a href="https://developer.gnome.org/gtk4/GtkNativeDialog.html#GtkNativeDialog-response"><span class="type">“response”</span></a> signal when the user finished
with the dialog.</p>
<p>There is also a <a class="link" href="gtk3-GtkNativeDialog.html#gtk-native-dialog-run" title="gtk_native_dialog_run ()"><code class="function">gtk_native_dialog_run()</code></a> helper that makes it easy
to run any native dialog in a modal way with a recursive mainloop,
@ -177,7 +177,7 @@ similar to <a class="link" href="GtkDialog.html#gtk-dialog-run" title="gtk_dialo
gtk_native_dialog_show (<em class="parameter"><code><span class="type">GtkNativeDialog</span> *self</code></em>);</pre>
<p>Shows the dialog on the display, allowing the user to interact with
it. When the user accepts the state of the dialog the dialog will
be automatically hidden and the <span class="type">“response”</span> signal
be automatically hidden and the <a href="https://developer.gnome.org/gtk4/GtkNativeDialog.html#GtkNativeDialog-response"><span class="type">“response”</span></a> signal
will be emitted.</p>
<p>Multiple calls while the dialog is visible will be ignored.</p>
<div class="refsect3">
@ -203,7 +203,7 @@ will be emitted.</p>
<pre class="programlisting"><span class="returnvalue">void</span>
gtk_native_dialog_hide (<em class="parameter"><code><span class="type">GtkNativeDialog</span> *self</code></em>);</pre>
<p>Hides the dialog if it is visilbe, aborting any interaction. Once this
is called the <span class="type">“response”</span> signal will not be emitted
is called the <a href="https://developer.gnome.org/gtk4/GtkNativeDialog.html#GtkNativeDialog-response"><span class="type">“response”</span></a> signal will not be emitted
until after the next call to <a class="link" href="gtk3-GtkNativeDialog.html#gtk-native-dialog-show" title="gtk_native_dialog_show ()"><code class="function">gtk_native_dialog_show()</code></a>.</p>
<p>If the dialog is not visible this does nothing.</p>
<div class="refsect3">
@ -477,7 +477,7 @@ or <code class="literal">NULL</code> if no transient parent has been set. </p>
gtk_native_dialog_run (<em class="parameter"><code><span class="type">GtkNativeDialog</span> *self</code></em>);</pre>
<p>Blocks in a recursive main loop until <em class="parameter"><code>self</code></em>
emits the
<span class="type">“response”</span> signal. It then returns the response ID
<a href="https://developer.gnome.org/gtk4/GtkNativeDialog.html#GtkNativeDialog-response"><span class="type">“response”</span></a> signal. It then returns the response ID
from the ::response signal emission.</p>
<p>Before entering the recursive main loop, <a class="link" href="gtk3-GtkNativeDialog.html#gtk-native-dialog-run" title="gtk_native_dialog_run ()"><code class="function">gtk_native_dialog_run()</code></a>
calls <a class="link" href="gtk3-GtkNativeDialog.html#gtk-native-dialog-show" title="gtk_native_dialog_show ()"><code class="function">gtk_native_dialog_show()</code></a> on the dialog for you.</p>
@ -562,7 +562,7 @@ be triggered during a <code class="function">gtk_nautilus_dialog_run()</code> ca
</div>
<div class="refsect1">
<a name="gtk3-GtkNativeDialog.see-also"></a><h2>See Also</h2>
<p><span class="type">GtkFileChooserNative</span>, <a class="link" href="GtkDialog.html" title="GtkDialog"><span class="type">GtkDialog</span></a></p>
<p><a href="https://developer.gnome.org/gtk4/gtk4-GtkFileChooserNative.html#GtkFileChooserNative"><span class="type">GtkFileChooserNative</span></a>, <a class="link" href="GtkDialog.html" title="GtkDialog"><span class="type">GtkDialog</span></a></p>
</div>
</div>
<div class="footer">

View File

@ -6480,6 +6480,7 @@
<keyword type="property" name="The “gtk-can-change-accels” property" link="GtkSettings.html#GtkSettings--gtk-can-change-accels"/>
<keyword type="property" name="The “gtk-color-palette” property" link="GtkSettings.html#GtkSettings--gtk-color-palette"/>
<keyword type="property" name="The “gtk-color-scheme” property" link="GtkSettings.html#GtkSettings--gtk-color-scheme"/>
<keyword type="property" name="The “gtk-cursor-aspect-ratio” property" link="GtkSettings.html#GtkSettings--gtk-cursor-aspect-ratio"/>
<keyword type="property" name="The “gtk-cursor-blink” property" link="GtkSettings.html#GtkSettings--gtk-cursor-blink"/>
<keyword type="property" name="The “gtk-cursor-blink-time” property" link="GtkSettings.html#GtkSettings--gtk-cursor-blink-time"/>
<keyword type="property" name="The “gtk-cursor-blink-timeout” property" link="GtkSettings.html#GtkSettings--gtk-cursor-blink-timeout"/>

View File

@ -15,7 +15,7 @@
<div>
<div><table class="navigation" id="top" width="100%" cellpadding="2" cellspacing="0"><tr><th valign="middle"><p class="title">GTK+ 3 Reference Manual</p></th></tr></table></div>
<div><p class="releaseinfo">
This document is for the GTK+ 3 library, version 3.24.20
This document is for the GTK+ 3 library, version 3.24.21
.
The latest versions can be found online at
<a class="ulink" href="https://developer.gnome.org/gtk3/" target="_top">https://developer.gnome.org/gtk3/</a>.

View File

@ -61,18 +61,6 @@ a:hover
color: #729fcf;
}
div.informaltable table
{
border-collapse: separate;
border-spacing: 1em 0.3em;
border: none;
}
div.informaltable table td, div.informaltable table th
{
vertical-align: top;
}
.function_type,
.variable_type,
.property_type,
@ -127,6 +115,7 @@ td p
margin: 0.25em;
}
div.informaltable table[border="1"],
div.table table
{
border-collapse: collapse;
@ -135,6 +124,7 @@ div.table table
border: solid 1px #babdb6;
}
div.informaltable table[border="1"] td, div.informaltable table th,
div.table table td, div.table table th
{
/* tango:aluminium 3 */
@ -143,13 +133,7 @@ div.table table td, div.table table th
vertical-align: top;
}
div.table table tr.subhead
{
/* tango:aluminium 2 */
background-color: #d3d7cf;
font-weight: bold;
}
div.informaltable table[border="1"] th,
div.table table th
{
/* tango:aluminium 2 */

View File

@ -1 +1 @@
3.24.20
3.24.21

View File

@ -15,7 +15,7 @@
<div>
<div><table class="navigation" id="top" width="100%" cellpadding="2" cellspacing="0"><tr><th valign="middle"><p class="title">GAIL Reference Manual</p></th></tr></table></div>
<div><p class="releaseinfo">
Version 3.24.20
Version 3.24.21
The latest version of this documentation can be found on-line at
<a class="ulink" href="http://developer.gnome.org/gail-libgail-util/unstable/" target="_top">http://developer.gnome.org/gail-libgail-util/unstable/</a>.

View File

@ -61,18 +61,6 @@ a:hover
color: #729fcf;
}
div.informaltable table
{
border-collapse: separate;
border-spacing: 1em 0.3em;
border: none;
}
div.informaltable table td, div.informaltable table th
{
vertical-align: top;
}
.function_type,
.variable_type,
.property_type,
@ -127,6 +115,7 @@ td p
margin: 0.25em;
}
div.informaltable table[border="1"],
div.table table
{
border-collapse: collapse;
@ -135,6 +124,7 @@ div.table table
border: solid 1px #babdb6;
}
div.informaltable table[border="1"] td, div.informaltable table th,
div.table table td, div.table table th
{
/* tango:aluminium 3 */
@ -143,13 +133,7 @@ div.table table td, div.table table th
vertical-align: top;
}
div.table table tr.subhead
{
/* tango:aluminium 2 */
background-color: #d3d7cf;
font-weight: bold;
}
div.informaltable table[border="1"] th,
div.table table th
{
/* tango:aluminium 2 */

View File

@ -1 +1 @@
3.24.20
3.24.21

View File

@ -790,14 +790,16 @@ static const SECTION union { const guint8 data[6205]; const double alignment; vo
#endif /* !_MSC_VER */
static GStaticResource static_resource = { exampleapp_resource_data.data, sizeof (exampleapp_resource_data.data) - 1 /* nul terminator */, NULL, NULL, NULL };
extern GResource *exampleapp_get_resource (void);
G_MODULE_EXPORT
GResource *exampleapp_get_resource (void);
GResource *exampleapp_get_resource (void)
{
return g_static_resource_get_resource (&static_resource);
}
/*
If G_HAS_CONSTRUCTORS is true then the compiler support *both* constructors and
destructors, in a sane way, including e.g. on library unload. If not you're on
destructors, in a usable way, including e.g. on library unload. If not you're on
your own.
Some compilers need #pragma to handle this, which does not work with macros,

View File

@ -152,14 +152,16 @@ static const SECTION union { const guint8 data[1097]; const double alignment; vo
#endif /* !_MSC_VER */
static GStaticResource static_resource = { exampleapp_resource_data.data, sizeof (exampleapp_resource_data.data) - 1 /* nul terminator */, NULL, NULL, NULL };
extern GResource *exampleapp_get_resource (void);
G_MODULE_EXPORT
GResource *exampleapp_get_resource (void);
GResource *exampleapp_get_resource (void)
{
return g_static_resource_get_resource (&static_resource);
}
/*
If G_HAS_CONSTRUCTORS is true then the compiler support *both* constructors and
destructors, in a sane way, including e.g. on library unload. If not you're on
destructors, in a usable way, including e.g. on library unload. If not you're on
your own.
Some compilers need #pragma to handle this, which does not work with macros,

View File

@ -152,14 +152,16 @@ static const SECTION union { const guint8 data[1097]; const double alignment; vo
#endif /* !_MSC_VER */
static GStaticResource static_resource = { exampleapp_resource_data.data, sizeof (exampleapp_resource_data.data) - 1 /* nul terminator */, NULL, NULL, NULL };
extern GResource *exampleapp_get_resource (void);
G_MODULE_EXPORT
GResource *exampleapp_get_resource (void);
GResource *exampleapp_get_resource (void)
{
return g_static_resource_get_resource (&static_resource);
}
/*
If G_HAS_CONSTRUCTORS is true then the compiler support *both* constructors and
destructors, in a sane way, including e.g. on library unload. If not you're on
destructors, in a usable way, including e.g. on library unload. If not you're on
your own.
Some compilers need #pragma to handle this, which does not work with macros,

View File

@ -208,14 +208,16 @@ static const SECTION union { const guint8 data[1549]; const double alignment; vo
#endif /* !_MSC_VER */
static GStaticResource static_resource = { exampleapp_resource_data.data, sizeof (exampleapp_resource_data.data) - 1 /* nul terminator */, NULL, NULL, NULL };
extern GResource *exampleapp_get_resource (void);
G_MODULE_EXPORT
GResource *exampleapp_get_resource (void);
GResource *exampleapp_get_resource (void)
{
return g_static_resource_get_resource (&static_resource);
}
/*
If G_HAS_CONSTRUCTORS is true then the compiler support *both* constructors and
destructors, in a sane way, including e.g. on library unload. If not you're on
destructors, in a usable way, including e.g. on library unload. If not you're on
your own.
Some compilers need #pragma to handle this, which does not work with macros,

View File

@ -208,14 +208,16 @@ static const SECTION union { const guint8 data[1549]; const double alignment; vo
#endif /* !_MSC_VER */
static GStaticResource static_resource = { exampleapp_resource_data.data, sizeof (exampleapp_resource_data.data) - 1 /* nul terminator */, NULL, NULL, NULL };
extern GResource *exampleapp_get_resource (void);
G_MODULE_EXPORT
GResource *exampleapp_get_resource (void);
GResource *exampleapp_get_resource (void)
{
return g_static_resource_get_resource (&static_resource);
}
/*
If G_HAS_CONSTRUCTORS is true then the compiler support *both* constructors and
destructors, in a sane way, including e.g. on library unload. If not you're on
destructors, in a usable way, including e.g. on library unload. If not you're on
your own.
Some compilers need #pragma to handle this, which does not work with macros,

View File

@ -462,14 +462,16 @@ static const SECTION union { const guint8 data[3577]; const double alignment; vo
#endif /* !_MSC_VER */
static GStaticResource static_resource = { exampleapp_resource_data.data, sizeof (exampleapp_resource_data.data) - 1 /* nul terminator */, NULL, NULL, NULL };
extern GResource *exampleapp_get_resource (void);
G_MODULE_EXPORT
GResource *exampleapp_get_resource (void);
GResource *exampleapp_get_resource (void)
{
return g_static_resource_get_resource (&static_resource);
}
/*
If G_HAS_CONSTRUCTORS is true then the compiler support *both* constructors and
destructors, in a sane way, including e.g. on library unload. If not you're on
destructors, in a usable way, including e.g. on library unload. If not you're on
your own.
Some compilers need #pragma to handle this, which does not work with macros,

View File

@ -562,14 +562,16 @@ static const SECTION union { const guint8 data[4377]; const double alignment; vo
#endif /* !_MSC_VER */
static GStaticResource static_resource = { exampleapp_resource_data.data, sizeof (exampleapp_resource_data.data) - 1 /* nul terminator */, NULL, NULL, NULL };
extern GResource *exampleapp_get_resource (void);
G_MODULE_EXPORT
GResource *exampleapp_get_resource (void);
GResource *exampleapp_get_resource (void)
{
return g_static_resource_get_resource (&static_resource);
}
/*
If G_HAS_CONSTRUCTORS is true then the compiler support *both* constructors and
destructors, in a sane way, including e.g. on library unload. If not you're on
destructors, in a usable way, including e.g. on library unload. If not you're on
your own.
Some compilers need #pragma to handle this, which does not work with macros,

View File

@ -718,14 +718,16 @@ static const SECTION union { const guint8 data[5621]; const double alignment; vo
#endif /* !_MSC_VER */
static GStaticResource static_resource = { exampleapp_resource_data.data, sizeof (exampleapp_resource_data.data) - 1 /* nul terminator */, NULL, NULL, NULL };
extern GResource *exampleapp_get_resource (void);
G_MODULE_EXPORT
GResource *exampleapp_get_resource (void);
GResource *exampleapp_get_resource (void)
{
return g_static_resource_get_resource (&static_resource);
}
/*
If G_HAS_CONSTRUCTORS is true then the compiler support *both* constructors and
destructors, in a sane way, including e.g. on library unload. If not you're on
destructors, in a usable way, including e.g. on library unload. If not you're on
your own.
Some compilers need #pragma to handle this, which does not work with macros,

View File

@ -782,14 +782,16 @@ static const SECTION union { const guint8 data[6141]; const double alignment; vo
#endif /* !_MSC_VER */
static GStaticResource static_resource = { exampleapp_resource_data.data, sizeof (exampleapp_resource_data.data) - 1 /* nul terminator */, NULL, NULL, NULL };
extern GResource *exampleapp_get_resource (void);
G_MODULE_EXPORT
GResource *exampleapp_get_resource (void);
GResource *exampleapp_get_resource (void)
{
return g_static_resource_get_resource (&static_resource);
}
/*
If G_HAS_CONSTRUCTORS is true then the compiler support *both* constructors and
destructors, in a sane way, including e.g. on library unload. If not you're on
destructors, in a usable way, including e.g. on library unload. If not you're on
your own.
Some compilers need #pragma to handle this, which does not work with macros,

View File

@ -505,11 +505,15 @@ _gdk_frame_clock_debug_print_timings (GdkFrameClock *clock,
GString *str;
gint64 previous_frame_time = 0;
gint64 previous_smoothed_frame_time = 0;
GdkFrameTimings *previous_timings = gdk_frame_clock_get_timings (clock,
timings->frame_counter - 1);
if (previous_timings != NULL)
previous_frame_time = previous_timings->frame_time;
{
previous_frame_time = previous_timings->frame_time;
previous_smoothed_frame_time = previous_timings->smoothed_frame_time;
}
str = g_string_new ("");
@ -518,6 +522,9 @@ _gdk_frame_clock_debug_print_timings (GdkFrameClock *clock,
{
g_string_append_printf (str, " interval=%-4.1f", (timings->frame_time - previous_frame_time) / 1000.);
g_string_append_printf (str, timings->slept_before ? " (sleep)" : " ");
g_string_append_printf (str, " smoothed=%4.1f / %-4.1f",
(timings->smoothed_frame_time - timings->frame_time) / 1000.,
(timings->smoothed_frame_time - previous_smoothed_frame_time) / 1000.);
}
if (timings->layout_start_time != 0)
g_string_append_printf (str, " layout_start=%-4.1f", (timings->layout_start_time - timings->frame_time) / 1000.);
@ -525,6 +532,8 @@ _gdk_frame_clock_debug_print_timings (GdkFrameClock *clock,
g_string_append_printf (str, " paint_start=%-4.1f", (timings->paint_start_time - timings->frame_time) / 1000.);
if (timings->frame_end_time != 0)
g_string_append_printf (str, " frame_end=%-4.1f", (timings->frame_end_time - timings->frame_time) / 1000.);
if (timings->drawn_time != 0)
g_string_append_printf (str, " drawn=%-4.1f", (timings->drawn_time - timings->frame_time) / 1000.);
if (timings->presentation_time != 0)
g_string_append_printf (str, " present=%-4.1f", (timings->presentation_time - timings->frame_time) / 1000.);
if (timings->predicted_presentation_time != 0)
@ -566,16 +575,12 @@ gdk_frame_clock_get_refresh_info (GdkFrameClock *frame_clock,
gint64 *presentation_time_return)
{
gint64 frame_counter;
gint64 default_refresh_interval = DEFAULT_REFRESH_INTERVAL;
g_return_if_fail (GDK_IS_FRAME_CLOCK (frame_clock));
frame_counter = gdk_frame_clock_get_frame_counter (frame_clock);
if (presentation_time_return)
*presentation_time_return = 0;
if (refresh_interval_return)
*refresh_interval_return = DEFAULT_REFRESH_INTERVAL;
while (TRUE)
{
GdkFrameTimings *timings = gdk_frame_clock_get_timings (frame_clock, frame_counter);
@ -583,19 +588,21 @@ gdk_frame_clock_get_refresh_info (GdkFrameClock *frame_clock,
gint64 refresh_interval;
if (timings == NULL)
return;
break;
refresh_interval = timings->refresh_interval;
presentation_time = timings->presentation_time;
if (refresh_interval == 0)
refresh_interval = default_refresh_interval;
else
default_refresh_interval = refresh_interval;
if (presentation_time != 0)
{
if (presentation_time > base_time - MAX_HISTORY_AGE &&
presentation_time_return)
{
if (refresh_interval == 0)
refresh_interval = DEFAULT_REFRESH_INTERVAL;
if (refresh_interval_return)
*refresh_interval_return = refresh_interval;
@ -604,13 +611,20 @@ gdk_frame_clock_get_refresh_info (GdkFrameClock *frame_clock,
if (presentation_time_return)
*presentation_time_return = presentation_time;
return;
}
return;
break;
}
frame_counter--;
}
if (presentation_time_return)
*presentation_time_return = 0;
if (refresh_interval_return)
*refresh_interval_return = default_refresh_interval;
}
void

View File

@ -36,10 +36,25 @@
#define FRAME_INTERVAL 16667 /* microseconds */
typedef enum {
SMOOTH_PHASE_STATE_VALID = 0, /* explicit, since we count on zero-init */
SMOOTH_PHASE_STATE_AWAIT_FIRST,
SMOOTH_PHASE_STATE_AWAIT_DRAWN,
} SmoothDeltaState;
struct _GdkFrameClockIdlePrivate
{
gint64 frame_time;
gint64 min_next_frame_time;
gint64 frame_time; /* The exact time we last ran the clock cycle, or 0 if never */
gint64 smoothed_frame_time_base; /* A grid-aligned version of frame_time (grid size == refresh period), never more than half a grid from frame_time */
gint64 smoothed_frame_time_period; /* The grid size that smoothed_frame_time_base is aligned to */
gint64 smoothed_frame_time_reported; /* Ensures we are always monotonic */
gint64 smoothed_frame_time_phase; /* The offset of the first reported frame time, in the current animation sequence, from the preceding vsync */
gint64 min_next_frame_time; /* We're not synced to vblank, so wait at least until this before next cycle to avoid busy looping */
SmoothDeltaState smooth_phase_state; /* The state of smoothed_frame_time_phase - is it valid, awaiting vsync etc. Thanks to zero-init, the initial value
of smoothed_frame_time_phase is `0`. This is valid, since we didn't get a "frame drawn" event yet. Accordingly,
the initial value of smooth_phase_state is SMOOTH_PHASE_STATE_VALID. See the comment in gdk_frame_clock_paint_idle()
for details. */
gint64 sleep_serial;
#ifdef G_ENABLE_DEBUG
gint64 freeze_time;
@ -54,6 +69,7 @@ struct _GdkFrameClockIdlePrivate
GdkFrameClockPhase phase;
guint in_paint_idle : 1;
guint paint_is_thaw : 1;
#ifdef G_OS_WIN32
guint begin_period : 1;
#endif
@ -124,8 +140,8 @@ gdk_frame_clock_idle_init (GdkFrameClockIdle *frame_clock_idle)
frame_clock_idle->priv = priv =
gdk_frame_clock_idle_get_instance_private (frame_clock_idle);
priv->frame_time = g_get_monotonic_time (); /* more sane than zero */
priv->freeze_count = 0;
priv->smoothed_frame_time_period = FRAME_INTERVAL;
}
static void
@ -156,44 +172,107 @@ gdk_frame_clock_idle_dispose (GObject *object)
G_OBJECT_CLASS (gdk_frame_clock_idle_parent_class)->dispose (object);
}
/* Note: This is never called on first frame, so
* smoothed_frame_time_base != 0 and we have a valid frame_interval. */
static gint64
compute_frame_time (GdkFrameClockIdle *idle)
compute_smooth_frame_time (GdkFrameClock *clock,
gint64 new_frame_time,
gboolean new_frame_time_is_vsync_related,
gint64 smoothed_frame_time_base,
gint64 frame_interval)
{
GdkFrameClockIdlePrivate *priv = idle->priv;
gint64 computed_frame_time;
GdkFrameClockIdlePrivate *priv = GDK_FRAME_CLOCK_IDLE (clock)->priv;
int frames_passed;
gint64 new_smoothed_time;
gint64 current_error;
gint64 correction_magnitude;
computed_frame_time = g_get_monotonic_time ();
/* Consecutive frame, assume it is an integer number of frames later, so round to nearest such */
/* NOTE: This is >= 0, because smoothed_frame_time_base is < frame_interval/2 from old_frame_time
* and new_frame_time >= old_frame_time. */
frames_passed = (new_frame_time - smoothed_frame_time_base + frame_interval / 2) / frame_interval;
/* ensure monotonicity of frame time */
if (computed_frame_time <= priv->frame_time)
computed_frame_time = priv->frame_time + 1;
/* We use an approximately whole number of frames in the future from
* last smoothed frame time. This way we avoid minor jitter in the
* frame times making the animation speed uneven, but still animate
* evenly in case of whole frame skips. */
new_smoothed_time = smoothed_frame_time_base + frames_passed * frame_interval;
return computed_frame_time;
/* However, sometimes the smoothed time is too much off from the
* real time. For example, if the first frame clock cycle happened
* not due to a frame rendering but an input event, then
* new_frame_time could happen to be near the middle between two
* frames. If that happens and we then start regularly animating at
* the refresh_rate, then the jitter in the real time may cause us
* to randomly sometimes round up, and sometimes down.
*
* To combat this we converge the smooth time towards the real time
* in a way that is slow when they are near and fast when they are
* far from each other.
*
* This is done by using the square of the error as the correction
* magnitude. I.e. if the error is 0.5 frame, we correct by
* 0.5*0.5=0.25 frame, if the error is 0.25 we correct by 0.125, if
* the error is 0.1, frame we correct by 0.01 frame, etc.
*
* The actual computation is:
* (current_error/frame_interval)*(current_error/frame_interval)*frame_interval
* But this can be simplified as below.
*
* Note: We only do this correction if the new frame is caused by a
* thaw of the frame clock, so that we know the time is actually
* related to the physical vblank. For frameclock cycles triggered
* by other events we always step up in whole frames from the last
* reported time.
*/
if (new_frame_time_is_vsync_related)
{
current_error = new_smoothed_time - new_frame_time;
correction_magnitude = current_error * current_error / frame_interval; /* Note, this is always > 0 due to the square */
if (current_error > 0)
new_smoothed_time -= correction_magnitude;
else
new_smoothed_time += correction_magnitude;
}
/* Ensure we're always monotonic */
if (new_smoothed_time <= priv->smoothed_frame_time_reported)
new_smoothed_time = priv->smoothed_frame_time_reported;
return new_smoothed_time;
}
static gint64
gdk_frame_clock_idle_get_frame_time (GdkFrameClock *clock)
{
GdkFrameClockIdlePrivate *priv = GDK_FRAME_CLOCK_IDLE (clock)->priv;
gint64 computed_frame_time;
gint64 now;
gint64 new_smoothed_time;
/* can't change frame time during a paint */
if (priv->phase != GDK_FRAME_CLOCK_PHASE_NONE &&
priv->phase != GDK_FRAME_CLOCK_PHASE_FLUSH_EVENTS)
return priv->frame_time;
priv->phase != GDK_FRAME_CLOCK_PHASE_FLUSH_EVENTS &&
(priv->phase != GDK_FRAME_CLOCK_PHASE_BEFORE_PAINT || priv->in_paint_idle))
return priv->smoothed_frame_time_base;
/* Outside a paint, pick something close to "now" */
computed_frame_time = compute_frame_time (GDK_FRAME_CLOCK_IDLE (clock));
/* Outside a paint, pick something smoothed close to now */
now = g_get_monotonic_time ();
/* 16ms is 60fps. We only update frame time that often because we'd
* like to try to keep animations on the same start times.
* get_frame_time() would normally be used outside of a paint to
* record an animation start time for example.
*/
if ((computed_frame_time - priv->frame_time) > FRAME_INTERVAL)
priv->frame_time = computed_frame_time;
/* First time frame, just return something */
if (priv->smoothed_frame_time_base == 0)
{
priv->smoothed_frame_time_reported = now;
return now;
}
return priv->frame_time;
/* Since time is monotonic this is <= what we will pick for the next cycle, but
more likely than not it will be equal if we're doing a constant animation. */
new_smoothed_time = compute_smooth_frame_time (clock, now, FALSE,
priv->smoothed_frame_time_base,
priv->smoothed_frame_time_period);
priv->smoothed_frame_time_reported = new_smoothed_time;
return new_smoothed_time;
}
#define RUN_FLUSH_IDLE(priv) \
@ -211,7 +290,8 @@ gdk_frame_clock_idle_get_frame_time (GdkFrameClock *clock)
(priv)->updating_count > 0))
static void
maybe_start_idle (GdkFrameClockIdle *clock_idle)
maybe_start_idle (GdkFrameClockIdle *clock_idle,
gboolean caused_by_thaw)
{
GdkFrameClockIdlePrivate *priv = clock_idle->priv;
@ -221,7 +301,7 @@ maybe_start_idle (GdkFrameClockIdle *clock_idle)
if (priv->min_next_frame_time != 0)
{
gint64 now = compute_frame_time (clock_idle);
gint64 now = g_get_monotonic_time ();
gint64 min_interval_us = MAX (priv->min_next_frame_time, now) - now;
min_interval = (min_interval_us + 500) / 1000;
}
@ -239,6 +319,7 @@ maybe_start_idle (GdkFrameClockIdle *clock_idle)
if (!priv->in_paint_idle &&
priv->paint_idle_id == 0 && RUN_PAINT_IDLE (priv))
{
priv->paint_is_thaw = caused_by_thaw;
priv->paint_idle_id = gdk_threads_add_timeout_full (GDK_PRIORITY_REDRAW,
min_interval,
gdk_frame_clock_paint_idle,
@ -267,23 +348,6 @@ maybe_stop_idle (GdkFrameClockIdle *clock_idle)
}
}
static gint64
compute_min_next_frame_time (GdkFrameClockIdle *clock_idle,
gint64 last_frame_time)
{
gint64 presentation_time;
gint64 refresh_interval;
gdk_frame_clock_get_refresh_info (GDK_FRAME_CLOCK (clock_idle),
last_frame_time,
&refresh_interval, &presentation_time);
if (presentation_time == 0)
return last_frame_time + refresh_interval;
else
return presentation_time + refresh_interval / 2;
}
static gboolean
gdk_frame_clock_flush_idle (void *data)
{
@ -310,6 +374,25 @@ gdk_frame_clock_flush_idle (void *data)
return FALSE;
}
/*
* Returns the positive remainder.
*
* As an example, lets consider (-5) % 16:
*
* (-5) % 16 = (0 * 16) + (-5) = -5
*
* If we only want positive remainders, we can instead calculate
*
* (-5) % 16 = (1 * 16) + (-5) = 11
*
* The built-in `%` operator returns the former, positive_modulo() returns the latter.
*/
static int
positive_modulo (int i, int n)
{
return (i % n + n) % n;
}
static gboolean
gdk_frame_clock_paint_idle (void *data)
{
@ -343,39 +426,103 @@ gdk_frame_clock_paint_idle (void *data)
if (priv->freeze_count == 0)
{
gint64 frame_interval = FRAME_INTERVAL;
gint64 reset_frame_time;
gint64 smoothest_frame_time;
gint64 frame_time_error;
GdkFrameTimings *prev_timings =
gdk_frame_clock_get_current_timings (clock);
GdkFrameTimings *prev_timings = gdk_frame_clock_get_current_timings (clock);
if (prev_timings && prev_timings->refresh_interval)
frame_interval = prev_timings->refresh_interval;
/* We are likely not getting precisely even callbacks in real
* time, particularly if the event loop is busy.
* This is a documented limitation in the precision of
* gdk_threads_add_timeout_full and g_timeout_add_full.
priv->frame_time = g_get_monotonic_time ();
/*
* The first clock cycle of an animation might have been triggered by some external event. An external
* event can be an input event, an expired timer, data arriving over the network etc. This can happen at
* any time, so the cycle could have been scheduled at some random time rather then immediately after a
* frame completion. The offset between the start of the first animation cycle and the preceding vsync is
* called the "phase" of the clock cycle start time (not to be confused with the phase of the frame
* clock).
*
* In order to avoid this imprecision from compounding between
* frames and affecting visual smoothness, we correct frame_time
* to more precisely match the even refresh interval of the
* physical display. This also means we proactively avoid (most)
* missed frames before they occur.
* In this first clock cycle, the "smooth" frame time is simply the time when the cycle was started. This
* could be followed by several cycles which are not vsync-related. As long as we don't get a "frame
* drawn" signal from the compositor, the clock cycles will occur every about frame_interval. Once we do
* get a "frame drawn" signal, from this point on the frame clock cycles will start shortly after the
* corresponding vsync signals, again every about frame_interval. The first vsync-related clock cycle
* might occur less than a refresh interval away from the last non-vsync-related cycle. See the diagram
* below for details. So while the cadence stays the same - a frame clock cycle every about frame_interval
* - the phase of the cycles start time has changed.
*
* Since we might have already reported the frame time to the application in the previous clock cycles, we
* have to adjust future reported frame times. We want the first vsync-related smooth time to be separated
* by exactly 1 frame_interval from the previous one, in order to maintain the regularity of the reported
* frame times. To achieve that, from this point on we add the phase of the first clock cycle start time to
* the smooth time. In order to compute that phase, accounting for possible skipped frames (e.g. due to
* compositor stalls), we want the following to be true:
*
* first_vsync_smooth_time = last_non_vsync_smooth_time + frame_interval * (1 + frames_skipped)
*
* We can assign the following known/desired values to the above equation:
*
* last_non_vsync_smooth_time = smoothed_frame_time_base
* first_vsync_smooth_time = frame_time + smoothed_frame_time_phase
*
* That leads us to the following, from which we can extract smoothed_frame_time_phase:
*
* frame_time + smoothed_frame_time_phase = smoothed_frame_time_base +
* frame_interval * (1 + frames_skipped)
*
* In the following diagram, '|' mark a vsync, '*' mark the start of a clock cycle, '+' is the adjusted
* frame time, '!' marks the reception of "frame drawn" events from the compositor. Note that the clock
* cycle cadence changed after the first vsync-related cycle. This cadence is kept even if we don't
* receive a 'frame drawn' signal in a subsequent frame, since then we schedule the clock at intervals of
* refresh_interval.
*
* vsync | | | | | |...
* frame drawn | | |! |! | |...
* cycle start | * | * |* |* |* |...
* adjusted times | * | * | + | + | + |...
* phase ^------^
*/
smoothest_frame_time = priv->frame_time + frame_interval;
reset_frame_time = compute_frame_time (clock_idle);
frame_time_error = ABS (reset_frame_time - smoothest_frame_time);
if (frame_time_error >= frame_interval)
priv->frame_time = reset_frame_time;
if (priv->smooth_phase_state == SMOOTH_PHASE_STATE_AWAIT_FIRST)
{
/* First animation cycle - usually unrelated to vsync */
priv->smoothed_frame_time_base = 0;
priv->smoothed_frame_time_phase = 0;
priv->smooth_phase_state = SMOOTH_PHASE_STATE_AWAIT_DRAWN;
}
else if (priv->smooth_phase_state == SMOOTH_PHASE_STATE_AWAIT_DRAWN &&
priv->paint_is_thaw)
{
/* First vsync-related animation cycle, we can now compute the phase. We want the phase to satisfy
0 <= phase < frame_interval */
priv->smoothed_frame_time_phase =
positive_modulo (priv->smoothed_frame_time_base - priv->frame_time,
frame_interval);
priv->smooth_phase_state = SMOOTH_PHASE_STATE_VALID;
}
if (priv->smoothed_frame_time_base == 0)
{
/* First frame ever, or first cycle in a new animation sequence. Ensure monotonicity */
priv->smoothed_frame_time_base = MAX (priv->frame_time, priv->smoothed_frame_time_reported);
}
else
priv->frame_time = smoothest_frame_time;
{
/* compute_smooth_frame_time() ensures monotonicity */
priv->smoothed_frame_time_base =
compute_smooth_frame_time (clock, priv->frame_time + priv->smoothed_frame_time_phase,
priv->paint_is_thaw,
priv->smoothed_frame_time_base,
priv->smoothed_frame_time_period);
}
priv->smoothed_frame_time_period = frame_interval;
priv->smoothed_frame_time_reported = priv->smoothed_frame_time_base;
_gdk_frame_clock_begin_frame (clock);
/* Note "current" is different now so timings != prev_timings */
timings = gdk_frame_clock_get_current_timings (clock);
timings->frame_time = priv->frame_time;
timings->smoothed_frame_time = priv->smoothed_frame_time_base;
timings->slept_before = priv->sleep_serial != get_sleep_serial ();
priv->phase = GDK_FRAME_CLOCK_PHASE_BEFORE_PAINT;
@ -496,9 +643,20 @@ gdk_frame_clock_paint_idle (void *data)
*/
if (priv->freeze_count == 0)
{
priv->min_next_frame_time = compute_min_next_frame_time (clock_idle,
priv->frame_time);
maybe_start_idle (clock_idle);
/*
* If we don't receive "frame drawn" events, smooth_cycle_start will simply be advanced in constant increments of
* the refresh interval. That way we get absolute target times for the next cycles, which should prevent skewing
* in the scheduling of the frame clock.
*
* Once we do receive "frame drawn" events, smooth_cycle_start will track the vsync, and do so in a more stable
* way compared to frame_time. If we then no longer receive "frame drawn" events, smooth_cycle_start will again be
* simply advanced in increments of the refresh interval, but this time we are in sync with the vsync. If we start
* receiving "frame drawn" events shortly after loosing them, then we should still be in sync.
*/
gint64 smooth_cycle_start = priv->smoothed_frame_time_base - priv->smoothed_frame_time_phase;
priv->min_next_frame_time = smooth_cycle_start + priv->smoothed_frame_time_period;
maybe_start_idle (clock_idle, FALSE);
}
if (priv->freeze_count == 0)
@ -515,7 +673,7 @@ gdk_frame_clock_idle_request_phase (GdkFrameClock *clock,
GdkFrameClockIdlePrivate *priv = clock_idle->priv;
priv->requested |= phase;
maybe_start_idle (clock_idle);
maybe_start_idle (clock_idle, FALSE);
}
static void
@ -533,8 +691,13 @@ gdk_frame_clock_idle_begin_updating (GdkFrameClock *clock)
}
#endif
if (priv->updating_count == 0)
{
priv->smooth_phase_state = SMOOTH_PHASE_STATE_AWAIT_FIRST;
}
priv->updating_count++;
maybe_start_idle (clock_idle);
maybe_start_idle (clock_idle, FALSE);
}
static void
@ -548,6 +711,11 @@ gdk_frame_clock_idle_end_updating (GdkFrameClock *clock)
priv->updating_count--;
maybe_stop_idle (clock_idle);
if (priv->updating_count == 0)
{
priv->smooth_phase_state = SMOOTH_PHASE_STATE_VALID;
}
#ifdef G_OS_WIN32
if (priv->updating_count == 0 && priv->begin_period)
{
@ -586,7 +754,7 @@ gdk_frame_clock_idle_thaw (GdkFrameClock *clock)
priv->freeze_count--;
if (priv->freeze_count == 0)
{
maybe_start_idle (clock_idle);
maybe_start_idle (clock_idle, TRUE);
/* If nothing is requested so we didn't start an idle, we need
* to skip to the end of the state chain, since the idle won't
* run and do it for us.

View File

@ -89,6 +89,7 @@ struct _GdkFrameTimings
gint64 frame_counter;
guint64 cookie;
gint64 frame_time;
gint64 smoothed_frame_time;
gint64 drawn_time;
gint64 presentation_time;
gint64 refresh_interval;

View File

@ -324,19 +324,23 @@ static const SECTION union { const guint8 data[2473]; const double alignment; vo
#endif /* !_MSC_VER */
static GStaticResource static_resource = { _gdk_resource_data.data, sizeof (_gdk_resource_data.data) - 1 /* nul terminator */, NULL, NULL, NULL };
extern GResource *_gdk_get_resource (void);
G_MODULE_EXPORT
GResource *_gdk_get_resource (void);
GResource *_gdk_get_resource (void)
{
return g_static_resource_get_resource (&static_resource);
}
extern void _gdk_unregister_resource (void);
G_MODULE_EXPORT
void _gdk_unregister_resource (void);
void _gdk_unregister_resource (void)
{
g_static_resource_fini (&static_resource);
}
extern void _gdk_register_resource (void);
G_MODULE_EXPORT
void _gdk_register_resource (void);
void _gdk_register_resource (void)
{
g_static_resource_init (&static_resource);

View File

@ -26,7 +26,7 @@
#define GDK_MAJOR_VERSION (3)
#define GDK_MINOR_VERSION (24)
#define GDK_MICRO_VERSION (20)
#define GDK_MICRO_VERSION (21)
#ifndef _GDK_EXTERN
#define _GDK_EXTERN extern

View File

@ -31,6 +31,10 @@
struct _GdkQuartzDeviceCore
{
GdkDevice parent_instance;
gboolean active;
NSUInteger device_id;
unsigned long long unique_id;
};
struct _GdkQuartzDeviceCoreClass
@ -364,3 +368,36 @@ gdk_quartz_device_core_select_window_events (GdkDevice *device,
{
/* The mask is set in the common code. */
}
void
_gdk_quartz_device_core_set_active (GdkDevice *device,
gboolean active,
NSUInteger device_id)
{
GdkQuartzDeviceCore *self = GDK_QUARTZ_DEVICE_CORE (device);
self->active = active;
self->device_id = device_id;
}
gboolean
_gdk_quartz_device_core_is_active (GdkDevice *device,
NSUInteger device_id)
{
GdkQuartzDeviceCore *self = GDK_QUARTZ_DEVICE_CORE (device);
return (self->active && self->device_id == device_id);
}
void
_gdk_quartz_device_core_set_unique (GdkDevice *device,
unsigned long long unique_id)
{
GDK_QUARTZ_DEVICE_CORE (device)->unique_id = unique_id;
}
unsigned long long
_gdk_quartz_device_core_get_unique (GdkDevice *device)
{
return GDK_QUARTZ_DEVICE_CORE (device)->unique_id;
}

View File

@ -27,7 +27,20 @@
#include "gdkquartzdevice-core.h"
#include "gdkkeysyms.h"
#include "gdkprivate-quartz.h"
#include "gdkinternal-quartz.h"
typedef enum
{
#if MAC_OS_X_VERSION_MIN_REQUIRED < 101200
GDK_QUARTZ_POINTER_DEVICE_TYPE_CURSOR = NSCursorPointingDevice,
GDK_QUARTZ_POINTER_DEVICE_TYPE_ERASER = NSEraserPointingDevice,
GDK_QUARTZ_POINTER_DEVICE_TYPE_PEN = NSPenPointingDevice,
#else
GDK_QUARTZ_POINTER_DEVICE_TYPE_CURSOR = NSPointingDeviceTypeCursor,
GDK_QUARTZ_POINTER_DEVICE_TYPE_ERASER = NSPointingDeviceTypeEraser,
GDK_QUARTZ_POINTER_DEVICE_TYPE_PEN = NSPointingDeviceTypePen,
#endif
} GdkQuartzPointerDeviceType;
#define HAS_FOCUS(toplevel) \
((toplevel)->has_focus || (toplevel)->has_pointer_focus)
@ -87,6 +100,7 @@ create_core_keyboard (GdkDeviceManager *device_manager,
static void
gdk_quartz_device_manager_core_init (GdkQuartzDeviceManagerCore *device_manager)
{
device_manager->known_tablet_devices = NULL;
}
static void
@ -99,6 +113,8 @@ gdk_quartz_device_manager_core_finalize (GObject *object)
g_object_unref (quartz_device_manager_core->core_pointer);
g_object_unref (quartz_device_manager_core->core_keyboard);
g_list_free_full (quartz_device_manager_core->known_tablet_devices, g_object_unref);
G_OBJECT_CLASS (gdk_quartz_device_manager_core_parent_class)->finalize (object);
}
@ -127,16 +143,25 @@ static GList *
gdk_quartz_device_manager_core_list_devices (GdkDeviceManager *device_manager,
GdkDeviceType type)
{
GdkQuartzDeviceManagerCore *quartz_device_manager_core;
GdkQuartzDeviceManagerCore *self;
GList *devices = NULL;
GList *l;
self = GDK_QUARTZ_DEVICE_MANAGER_CORE (device_manager);
if (type == GDK_DEVICE_TYPE_MASTER)
{
quartz_device_manager_core = (GdkQuartzDeviceManagerCore *) device_manager;
devices = g_list_prepend (devices, quartz_device_manager_core->core_keyboard);
devices = g_list_prepend (devices, quartz_device_manager_core->core_pointer);
devices = g_list_prepend (devices, self->core_keyboard);
devices = g_list_prepend (devices, self->core_pointer);
}
for (l = self->known_tablet_devices; l; l = g_list_next (l))
{
devices = g_list_prepend (devices, GDK_DEVICE (l->data));
}
devices = g_list_reverse (devices);
return devices;
}
@ -148,3 +173,154 @@ gdk_quartz_device_manager_core_get_client_pointer (GdkDeviceManager *device_mana
quartz_device_manager_core = (GdkQuartzDeviceManagerCore *) device_manager;
return quartz_device_manager_core->core_pointer;
}
static GdkDevice *
create_core_device (GdkDeviceManager *device_manager,
const gchar *device_name,
GdkInputSource source)
{
GdkDisplay *display = gdk_device_manager_get_display (device_manager);
GdkDevice *device = g_object_new (GDK_TYPE_QUARTZ_DEVICE_CORE,
"name", device_name,
"type", GDK_DEVICE_TYPE_SLAVE,
"input-source", source,
"input-mode", GDK_MODE_DISABLED,
"has-cursor", FALSE,
"display", display,
"device-manager", device_manager,
NULL);
_gdk_device_add_axis (device, GDK_NONE, GDK_AXIS_PRESSURE, 0.0, 1.0, 0.001);
_gdk_device_add_axis (device, GDK_NONE, GDK_AXIS_XTILT, -1.0, 1.0, 0.001);
_gdk_device_add_axis (device, GDK_NONE, GDK_AXIS_YTILT, -1.0, 1.0, 0.001);
return device;
}
void
_gdk_quartz_device_manager_register_device_for_ns_event (GdkDeviceManager *device_manager,
NSEvent *nsevent)
{
GdkQuartzDeviceManagerCore *self = GDK_QUARTZ_DEVICE_MANAGER_CORE (device_manager);
GList *l = NULL;
GdkInputSource input_source = GDK_SOURCE_MOUSE;
GdkDevice *device = NULL;
/* Only handle device updates for proximity events */
if ([nsevent type] != GDK_QUARTZ_EVENT_TABLET_PROXIMITY &&
[nsevent subtype] != GDK_QUARTZ_EVENT_SUBTYPE_TABLET_PROXIMITY)
return;
if ([nsevent pointingDeviceType] == GDK_QUARTZ_POINTER_DEVICE_TYPE_PEN)
input_source = GDK_SOURCE_PEN;
else if ([nsevent pointingDeviceType] == GDK_QUARTZ_POINTER_DEVICE_TYPE_CURSOR)
input_source = GDK_SOURCE_CURSOR;
else if ([nsevent pointingDeviceType] == GDK_QUARTZ_POINTER_DEVICE_TYPE_ERASER)
input_source = GDK_SOURCE_ERASER;
for (l = self->known_tablet_devices; l; l = g_list_next (l))
{
GdkDevice *device_to_check = GDK_DEVICE (l->data);
if (input_source == gdk_device_get_source (device_to_check) &&
[nsevent uniqueID] == _gdk_quartz_device_core_get_unique (device_to_check))
{
device = device_to_check;
if ([nsevent isEnteringProximity])
{
if (!_gdk_quartz_device_core_is_active (device, [nsevent deviceID]))
self->num_active_devices++;
_gdk_quartz_device_core_set_active (device, TRUE, [nsevent deviceID]);
}
else
{
if (_gdk_quartz_device_core_is_active (device, [nsevent deviceID]))
self->num_active_devices--;
_gdk_quartz_device_core_set_active (device, FALSE, [nsevent deviceID]);
}
}
}
/* If we haven't seen this device before, add it */
if (!device)
{
GdkSeat *seat;
switch (input_source)
{
case GDK_SOURCE_PEN:
device = create_core_device (device_manager,
"Quartz Pen",
GDK_SOURCE_PEN);
break;
case GDK_SOURCE_CURSOR:
device = create_core_device (device_manager,
"Quartz Cursor",
GDK_SOURCE_CURSOR);
break;
case GDK_SOURCE_ERASER:
device = create_core_device (device_manager,
"Quartz Eraser",
GDK_SOURCE_ERASER);
break;
default:
g_warning ("GDK Quarz unknown input source: %i", input_source);
break;
}
_gdk_device_set_associated_device (GDK_DEVICE (device), self->core_pointer);
_gdk_device_add_slave (self->core_pointer, GDK_DEVICE (device));
seat = gdk_device_get_seat (self->core_pointer);
gdk_seat_default_add_slave (GDK_SEAT_DEFAULT (seat), device);
_gdk_quartz_device_core_set_unique (device, [nsevent uniqueID]);
_gdk_quartz_device_core_set_active (device, TRUE, [nsevent deviceID]);
self->known_tablet_devices = g_list_append (self->known_tablet_devices,
device);
if ([nsevent isEnteringProximity])
{
if (!_gdk_quartz_device_core_is_active (device, [nsevent deviceID]))
self->num_active_devices++;
_gdk_quartz_device_core_set_active (device, TRUE, [nsevent deviceID]);
}
}
if (self->num_active_devices)
[NSEvent setMouseCoalescingEnabled: FALSE];
else
[NSEvent setMouseCoalescingEnabled: TRUE];
}
GdkDevice *
_gdk_quartz_device_manager_core_device_for_ns_event (GdkDeviceManager *device_manager,
NSEvent *nsevent)
{
GdkQuartzDeviceManagerCore *self = GDK_QUARTZ_DEVICE_MANAGER_CORE (device_manager);
GdkDevice *device = NULL;
if ([nsevent type] == GDK_QUARTZ_EVENT_TABLET_PROXIMITY ||
[nsevent subtype] == GDK_QUARTZ_EVENT_SUBTYPE_TABLET_PROXIMITY ||
[nsevent subtype] == GDK_QUARTZ_EVENT_SUBTYPE_TABLET_POINT)
{
/* Find the device based on deviceID */
GList *l = NULL;
for (l = self->known_tablet_devices; l && !device; l = g_list_next (l))
{
GdkDevice *device_to_check = GDK_DEVICE (l->data);
if (_gdk_quartz_device_core_is_active (device_to_check, [nsevent deviceID]))
device = device_to_check;
}
}
if (!device)
device = self->core_pointer;
return device;
}

View File

@ -23,6 +23,8 @@
#include <gdkdevicemanagerprivate.h>
#include "gdkquartzdevicemanager-core.h"
#import <Cocoa/Cocoa.h>
G_BEGIN_DECLS
struct _GdkQuartzDeviceManagerCore
@ -30,6 +32,8 @@ struct _GdkQuartzDeviceManagerCore
GdkDeviceManager parent_object;
GdkDevice *core_pointer;
GdkDevice *core_keyboard;
GList *known_tablet_devices;
guint num_active_devices;
};
struct _GdkQuartzDeviceManagerCoreClass
@ -37,6 +41,12 @@ struct _GdkQuartzDeviceManagerCoreClass
GdkDeviceManagerClass parent_class;
};
void _gdk_quartz_device_manager_register_device_for_ns_event (GdkDeviceManager *device_manager,
NSEvent *nsevent);
GdkDevice *_gdk_quartz_device_manager_core_device_for_ns_event (GdkDeviceManager *device_manager,
NSEvent *ns_event);
G_END_DECLS
#endif /* __GDK_QUARTZ_DEVICE_MANAGER__ */

View File

@ -42,6 +42,7 @@
#define GRIP_WIDTH 15
#define GRIP_HEIGHT 15
#define GDK_LION_RESIZE 5
#define TABLET_AXES 5
#if MAC_OS_X_VERSION_MAX_ALLOWED < 1060
#define NSEventTypeRotate 13
@ -173,7 +174,7 @@ gdk_event_apply_filters (NSEvent *nsevent,
{
GList *tmp_list;
GdkFilterReturn result;
tmp_list = *filters;
while (tmp_list)
@ -557,7 +558,7 @@ generate_motion_event (GdkWindow *window)
event->motion.state = _gdk_quartz_events_get_current_keyboard_modifiers () |
_gdk_quartz_events_get_current_mouse_modifiers ();
event->motion.is_hint = FALSE;
event->motion.device = gdk_seat_get_pointer (seat);
gdk_event_set_device (event, gdk_seat_get_pointer (seat));
gdk_event_set_seat (event, seat);
append_event (event, TRUE);
@ -643,8 +644,9 @@ find_toplevel_under_pointer (GdkDisplay *display,
if (!(toplevel && WINDOW_IS_TOPLEVEL (toplevel)))
{
gint gdk_x = 0, gdk_y = 0;
GdkDevice *pointer = gdk_seat_get_pointer(seat);
_gdk_quartz_window_nspoint_to_gdk_xy (screen_point, &gdk_x, &gdk_y);
toplevel = gdk_display_get_window_at_pointer (display, &gdk_x, &gdk_y);
toplevel = gdk_device_get_window_at_position (pointer, &gdk_x, &gdk_y);
if (toplevel && ! WINDOW_IS_TOPLEVEL (toplevel))
toplevel = gdk_window_get_toplevel (toplevel);
@ -1019,6 +1021,8 @@ fill_button_event (GdkWindow *window,
gint y_root)
{
GdkEventType type;
GdkDevice *event_device = NULL;
gdouble *axes = NULL;
gint state;
GdkSeat *seat = gdk_display_get_default_seat (_gdk_display);
@ -1045,6 +1049,20 @@ fill_button_event (GdkWindow *window,
g_assert_not_reached ();
}
event_device = _gdk_quartz_device_manager_core_device_for_ns_event (gdk_display_get_device_manager (_gdk_display),
nsevent);
if ([nsevent subtype] == GDK_QUARTZ_EVENT_SUBTYPE_TABLET_POINT)
{
axes = g_new (gdouble, TABLET_AXES);
axes[0] = x;
axes[1] = y;
axes[2] = [nsevent pressure];
axes[3] = [nsevent tilt].x;
axes[4] = [nsevent tilt].y;
}
event->any.type = type;
event->button.window = window;
event->button.time = get_time_from_ns_event (nsevent);
@ -1052,11 +1070,12 @@ fill_button_event (GdkWindow *window,
event->button.y = y;
event->button.x_root = x_root;
event->button.y_root = y_root;
/* FIXME event->axes */
event->button.axes = axes;
event->button.state = state;
event->button.button = get_mouse_button_from_ns_event (nsevent);
event->button.device = gdk_seat_get_pointer (seat);
gdk_event_set_device (event, gdk_seat_get_pointer (seat));
gdk_event_set_source_device (event, event_device);
gdk_event_set_seat (event, seat);
}
@ -1070,6 +1089,22 @@ fill_motion_event (GdkWindow *window,
gint y_root)
{
GdkSeat *seat = gdk_display_get_default_seat (_gdk_display);
GdkDevice *event_device = NULL;
gdouble *axes = NULL;
event_device = _gdk_quartz_device_manager_core_device_for_ns_event (gdk_display_get_device_manager (_gdk_display),
nsevent);
if ([nsevent subtype] == GDK_QUARTZ_EVENT_SUBTYPE_TABLET_POINT)
{
axes = g_new (gdouble, TABLET_AXES);
axes[0] = x;
axes[1] = y;
axes[2] = [nsevent pressure];
axes[3] = [nsevent tilt].x;
axes[4] = [nsevent tilt].y;
}
event->any.type = GDK_MOTION_NOTIFY;
event->motion.window = window;
@ -1078,11 +1113,13 @@ fill_motion_event (GdkWindow *window,
event->motion.y = y;
event->motion.x_root = x_root;
event->motion.y_root = y_root;
/* FIXME event->axes */
event->motion.axes = axes;
event->motion.state = get_keyboard_modifiers_from_ns_event (nsevent) |
_gdk_quartz_events_get_current_mouse_modifiers ();
event->motion.is_hint = FALSE;
event->motion.device = gdk_seat_get_pointer (seat);
gdk_event_set_device (event, gdk_seat_get_pointer (seat));
gdk_event_set_source_device (event, event_device);
gdk_event_set_seat (event, seat);
}
@ -1112,9 +1149,9 @@ fill_scroll_event (GdkWindow *window,
event->scroll.y_root = y_root;
event->scroll.state = get_keyboard_modifiers_from_ns_event (nsevent);
event->scroll.direction = direction;
event->scroll.device = gdk_seat_get_pointer (seat);
event->scroll.delta_x = delta_x;
event->scroll.delta_y = delta_y;
gdk_event_set_device (event, gdk_seat_get_pointer (seat));
gdk_event_set_seat (event, seat);
}
@ -1343,16 +1380,18 @@ _gdk_quartz_events_get_current_keyboard_modifiers (void)
GdkModifierType
_gdk_quartz_events_get_current_mouse_modifiers (void)
{
NSUInteger buttons = 0;
#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1060
if (gdk_quartz_osx_version () >= GDK_OSX_SNOW_LEOPARD)
return get_mouse_button_modifiers_from_ns_buttons ([NSClassFromString(@"NSEvent") pressedMouseButtons]);
buttons = [NSClassFromString(@"NSEvent") pressedMouseButtons];
#if MAC_OS_X_VERSION_MIN_REQUIRED < 1060
else
#endif
#endif
#if MAC_OS_X_VERSION_MIN_REQUIRED < 1060
return get_mouse_button_modifiers_from_ns_buttons (GetCurrentButtonState ());
buttons = GetCurrentButtonState ();
#endif
return get_mouse_button_modifiers_from_ns_buttons (buttons);
}
/* Detect window resizing */
@ -1470,6 +1509,15 @@ gdk_event_translate (GdkEvent *event,
}
}
/* We need to register the proximity event from any point on the screen
* to properly register the devices
*/
if (event_type == GDK_QUARTZ_EVENT_TABLET_PROXIMITY)
{
_gdk_quartz_device_manager_register_device_for_ns_event (gdk_display_get_device_manager (_gdk_display),
nsevent);
}
nswindow = [nsevent window];
/* Ignore events for windows not created by GDK. */

View File

@ -75,6 +75,16 @@ typedef enum {
GDK_QUARTZ_EVENT_SUBTYPE_EVENTLOOP
} GdkQuartzEventSubType;
#if MAC_OS_X_VERSION_MIN_REQUIRED >= 10130
#define GDK_QUARTZ_EVENT_TABLET_PROXIMITY NSEventTypeTabletProximity
#define GDK_QUARTZ_EVENT_SUBTYPE_TABLET_PROXIMITY NSEventSubtypeTabletProximity
#define GDK_QUARTZ_EVENT_SUBTYPE_TABLET_POINT NSEventSubtypeTabletPoint
#else
#define GDK_QUARTZ_EVENT_TABLET_PROXIMITY NSTabletProximity
#define GDK_QUARTZ_EVENT_SUBTYPE_TABLET_PROXIMITY NSTabletProximityEventSubtype
#define GDK_QUARTZ_EVENT_SUBTYPE_TABLET_POINT NSTabletPointEventSubtype
#endif
void _gdk_quartz_events_update_focus_window (GdkWindow *new_window,
gboolean got_focus);
void _gdk_quartz_events_send_map_event (GdkWindow *window);
@ -84,6 +94,19 @@ GdkModifierType _gdk_quartz_events_get_current_mouse_modifiers (void);
void _gdk_quartz_events_break_all_grabs (guint32 time);
/* Devices */
void _gdk_quartz_device_core_set_active (GdkDevice *device,
gboolean active,
NSUInteger device_id);
gboolean _gdk_quartz_device_core_is_active (GdkDevice *device,
NSUInteger device_id);
void _gdk_quartz_device_core_set_unique (GdkDevice *device,
unsigned long long unique_id);
unsigned long long _gdk_quartz_device_core_get_unique (GdkDevice *device);
/* Event loop */
gboolean _gdk_quartz_event_loop_check_pending (void);
NSEvent * _gdk_quartz_event_loop_get_pending (void);

View File

@ -18,7 +18,8 @@
*/
#include "config.h"
/* GdkScreen is deprecated, but we need to support it still so silence the warnings.*/
#define GDK_DISABLE_DEPRECATION_WARNINGS 1
#include <gdk/gdk.h>
#include "gdkprivate-quartz.h"
@ -121,9 +122,6 @@ static void
gdk_quartz_screen_calculate_layout (GdkQuartzScreen *screen,
GdkQuartzDisplay *display)
{
int i, monitors;
int max_x, max_y;
if (!display)
display = GDK_QUARTZ_DISPLAY (gdk_screen_get_display (GDK_SCREEN (screen)));

View File

@ -847,6 +847,7 @@ _gdk_quartz_display_create_window_impl (GdkDisplay *display,
{
GdkWindowImplQuartz *impl;
GdkWindowImplQuartz *parent_impl;
GdkWindowTypeHint type_hint = GDK_WINDOW_TYPE_HINT_NORMAL;
GDK_QUARTZ_ALLOC_POOL;
@ -879,6 +880,12 @@ _gdk_quartz_display_create_window_impl (GdkDisplay *display,
impl->view = NULL;
if (attributes_mask & GDK_WA_TYPE_HINT)
{
type_hint = attributes->type_hint;
gdk_window_set_type_hint (window, type_hint);
}
switch (window->window_type)
{
case GDK_WINDOW_TOPLEVEL:
@ -908,8 +915,7 @@ _gdk_quartz_display_create_window_impl (GdkDisplay *display,
window->height);
if (window->window_type == GDK_WINDOW_TEMP ||
((attributes_mask & GDK_WA_TYPE_HINT) &&
attributes->type_hint == GDK_WINDOW_TYPE_HINT_SPLASHSCREEN))
type_hint == GDK_WINDOW_TYPE_HINT_SPLASHSCREEN)
{
style_mask = GDK_QUARTZ_BORDERLESS_WINDOW;
}
@ -927,6 +933,9 @@ _gdk_quartz_display_create_window_impl (GdkDisplay *display,
defer:NO
screen:screen];
if (type_hint != GDK_WINDOW_TYPE_HINT_NORMAL)
impl->toplevel.excludedFromWindowsMenu = true;
if (attributes_mask & GDK_WA_TITLE)
title = attributes->title;
else
@ -982,9 +991,6 @@ _gdk_quartz_display_create_window_impl (GdkDisplay *display,
}
GDK_QUARTZ_RELEASE_POOL;
if (attributes_mask & GDK_WA_TYPE_HINT)
gdk_window_set_type_hint (window, attributes->type_hint);
}
void

View File

@ -2816,6 +2816,14 @@ _gdk_wayland_seat_remove_tablet (GdkWaylandSeat *seat,
zwp_tablet_v2_destroy (tablet->wp_tablet);
while (tablet->pads)
{
GdkWaylandTabletPadData *pad = tablet->pads->data;
pad->current_tablet = NULL;
tablet->pads = g_list_remove (tablet->pads, pad);
}
device_manager->devices =
g_list_remove (device_manager->devices, tablet->master);
device_manager->devices =

View File

@ -31,7 +31,6 @@
#include <limits.h>
#include <errno.h>
#include <sys/mman.h>
#include <fribidi.h>
#include "gdk.h"
#include "gdkwayland.h"

View File

@ -2535,12 +2535,17 @@ calculate_moved_to_rect_result (GdkWindow *window,
gboolean *flipped_x,
gboolean *flipped_y)
{
GdkWindowImplWayland *impl = GDK_WINDOW_IMPL_WAYLAND (window->impl);
GdkWindowImplWayland *impl;
GdkWindow *parent;
gint window_x, window_y;
gint window_width, window_height;
GdkRectangle best_rect;
g_return_if_fail (GDK_IS_WAYLAND_WINDOW (window));
g_return_if_fail (GDK_IS_WINDOW_IMPL_WAYLAND (window->impl));
impl = GDK_WINDOW_IMPL_WAYLAND (window->impl);
parent = translate_from_real_parent_window_geometry (window, &x, &y);
*final_rect = (GdkRectangle) {
.x = x,
@ -5328,10 +5333,16 @@ void
gdk_wayland_window_restore_shortcuts (GdkWindow *window,
GdkSeat *gdk_seat)
{
GdkWindowImplWayland *impl = GDK_WINDOW_IMPL_WAYLAND (window->impl);
struct wl_seat *seat = gdk_wayland_seat_get_wl_seat (gdk_seat);
GdkWindowImplWayland *impl;
struct wl_seat *seat;
struct zwp_keyboard_shortcuts_inhibitor_v1 *inhibitor;
g_return_if_fail (GDK_IS_WAYLAND_WINDOW (window));
g_return_if_fail (GDK_IS_WINDOW_IMPL_WAYLAND (window->impl));
impl = GDK_WINDOW_IMPL_WAYLAND (window->impl);
seat = gdk_wayland_seat_get_wl_seat (gdk_seat);
inhibitor = gdk_wayland_window_get_inhibitor (impl, seat);
if (inhibitor == NULL)
return; /* Not inhibitted */

View File

@ -802,17 +802,17 @@ _gdk_win32_monitor_get_pixel_structure (GdkMonitor *monitor)
GdkWin32Monitor *w32_m;
BOOL enabled = TRUE;
unsigned int smoothing_orientation = FE_FONTSMOOTHINGORIENTATIONRGB;
BOOL cleartype = TRUE;
UINT cleartype = FE_FONTSMOOTHINGCLEARTYPE;
g_return_val_if_fail (monitor != NULL, NULL);
w32_m = GDK_WIN32_MONITOR (monitor);
SystemParametersInfoW (SPI_GETFONTSMOOTHING, 0, &enabled, 0);
SystemParametersInfoW (SPI_GETCLEARTYPE, 0, &cleartype, 0);
SystemParametersInfoW (SPI_GETFONTSMOOTHINGTYPE, 0, &cleartype, 0);
if (!enabled ||
!cleartype ||
(cleartype == FE_FONTSMOOTHINGSTANDARD) ||
!SystemParametersInfoW (SPI_GETFONTSMOOTHINGORIENTATION, 0, &smoothing_orientation, 0))
return "none";

View File

@ -3,8 +3,8 @@
GTK_ICON ICON "gtk.ico"
VS_VERSION_INFO VERSIONINFO
FILEVERSION 3,24,20,0
PRODUCTVERSION 3,24,20,0
FILEVERSION 3,24,21,0
PRODUCTVERSION 3,24,21,0
FILEFLAGSMASK 0
FILEFLAGS 0
FILEOS VOS__WINDOWS32
@ -17,12 +17,12 @@ VS_VERSION_INFO VERSIONINFO
BEGIN
VALUE "CompanyName", "The GTK developer community"
VALUE "FileDescription", "GIMP Drawing Kit"
VALUE "FileVersion", "3.24.20.0"
VALUE "FileVersion", "3.24.21.0"
VALUE "InternalName", "libgdk-win32-3.0-0"
VALUE "LegalCopyright", "Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald. Modified by the GTK+ Team and others 1997-2011."
VALUE "OriginalFilename", "libgdk-win32-3.0-0.dll"
VALUE "ProductName", "GTK+"
VALUE "ProductVersion", "3.24.20"
VALUE "ProductVersion", "3.24.21"
END
END
BLOCK "VarFileInfo"

View File

@ -149,7 +149,7 @@ gdk_x11_window_invalidate_for_new_frame (GdkWindow *window,
invalidate_all = FALSE;
if (buffer_age == 0 || buffer_age >= 4)
if (buffer_age >= 4)
{
cairo_rectangle_int_t whole_window = { 0, 0, gdk_window_get_width (window), gdk_window_get_height (window) };
@ -163,6 +163,10 @@ gdk_x11_window_invalidate_for_new_frame (GdkWindow *window,
}
else
{
if (buffer_age == 0)
{
invalidate_all = TRUE;
}
if (buffer_age >= 2)
{
if (window->old_updated_area[0])

View File

@ -1,8 +1,8 @@
#include <winver.h>
VS_VERSION_INFO VERSIONINFO
FILEVERSION 3,24,20,0
PRODUCTVERSION 3,24,20,0
FILEVERSION 3,24,21,0
PRODUCTVERSION 3,24,21,0
FILEFLAGSMASK 0
FILEFLAGS 0
FILEOS VOS__WINDOWS32
@ -15,12 +15,12 @@ VS_VERSION_INFO VERSIONINFO
BEGIN
VALUE "CompanyName", "The GTK developer community"
VALUE "FileDescription", "GIMP Toolkit"
VALUE "FileVersion", "3.24.20.0"
VALUE "FileVersion", "3.24.21.0"
VALUE "InternalName", "libgtk-win32-3.0-0"
VALUE "LegalCopyright", "Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald. Modified by the GTK+ Team and others 1997-2011."
VALUE "OriginalFilename", "libgtk-win32-3.0-0.dll"
VALUE "ProductName", "GTK+"
VALUE "ProductVersion", "3.24.20"
VALUE "ProductVersion", "3.24.21"
END
END
BLOCK "VarFileInfo"

View File

@ -8,126 +8,126 @@
<file preprocess='to-pixdata'>theme/Adwaita/assets/bullet-symbolic.symbolic.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/check-symbolic.symbolic.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/dash-symbolic.symbolic.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-horz-scale-has-marks-above-active-dark.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-horz-scale-has-marks-above-active-dark@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-horz-scale-has-marks-above-active.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-horz-scale-has-marks-above-active@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-horz-scale-has-marks-above-backdrop-dark.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-horz-scale-has-marks-above-backdrop-dark@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-horz-scale-has-marks-above-backdrop-insensitive-dark.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-horz-scale-has-marks-above-backdrop-insensitive-dark@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-horz-scale-has-marks-above-backdrop-insensitive.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-horz-scale-has-marks-above-backdrop-insensitive@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-horz-scale-has-marks-above-backdrop.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-horz-scale-has-marks-above-backdrop@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-horz-scale-has-marks-above-dark.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-horz-scale-has-marks-above-dark@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-horz-scale-has-marks-above-hover-dark.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-horz-scale-has-marks-above-hover-dark@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-horz-scale-has-marks-above-hover.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-horz-scale-has-marks-above-hover@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-horz-scale-has-marks-above-insensitive-dark.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-horz-scale-has-marks-above-insensitive-dark@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-horz-scale-has-marks-above-insensitive.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-horz-scale-has-marks-above-insensitive@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-horz-scale-has-marks-above.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-horz-scale-has-marks-above@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-horz-scale-has-marks-below-active-dark.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-horz-scale-has-marks-below-active-dark@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-horz-scale-has-marks-below-active.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-horz-scale-has-marks-below-active@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-horz-scale-has-marks-below-backdrop-dark.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-horz-scale-has-marks-below-backdrop-dark@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-horz-scale-has-marks-below-backdrop-insensitive-dark.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-horz-scale-has-marks-below-backdrop-insensitive-dark@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-horz-scale-has-marks-below-backdrop-insensitive.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-horz-scale-has-marks-below-backdrop-insensitive@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-horz-scale-has-marks-below-backdrop.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-horz-scale-has-marks-below-backdrop@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-horz-scale-has-marks-below-dark.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-horz-scale-has-marks-below-dark@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-horz-scale-has-marks-below-hover-dark.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-horz-scale-has-marks-below-hover-dark@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-horz-scale-has-marks-below-hover.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-horz-scale-has-marks-below-hover@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-horz-scale-has-marks-below-insensitive-dark.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-horz-scale-has-marks-below-insensitive-dark@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-horz-scale-has-marks-below-insensitive.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-horz-scale-has-marks-below-insensitive@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-horz-scale-has-marks-below.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-horz-scale-has-marks-above-active@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-horz-scale-has-marks-above-active-dark@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-horz-scale-has-marks-above-active-dark.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-horz-scale-has-marks-above-active.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-horz-scale-has-marks-above-backdrop@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-horz-scale-has-marks-above-backdrop-dark@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-horz-scale-has-marks-above-backdrop-dark.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-horz-scale-has-marks-above-backdrop-insensitive@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-horz-scale-has-marks-above-backdrop-insensitive-dark@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-horz-scale-has-marks-above-backdrop-insensitive-dark.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-horz-scale-has-marks-above-backdrop-insensitive.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-horz-scale-has-marks-above-backdrop.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-horz-scale-has-marks-above-dark@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-horz-scale-has-marks-above-dark.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-horz-scale-has-marks-above-hover@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-horz-scale-has-marks-above-hover-dark@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-horz-scale-has-marks-above-hover-dark.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-horz-scale-has-marks-above-hover.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-horz-scale-has-marks-above-insensitive@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-horz-scale-has-marks-above-insensitive-dark@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-horz-scale-has-marks-above-insensitive-dark.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-horz-scale-has-marks-above-insensitive.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-horz-scale-has-marks-above.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-horz-scale-has-marks-below@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-vert-scale-has-marks-above-active-dark.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-vert-scale-has-marks-above-active-dark@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-vert-scale-has-marks-above-active.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-vert-scale-has-marks-above-active@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-vert-scale-has-marks-above-backdrop-dark.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-vert-scale-has-marks-above-backdrop-dark@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-vert-scale-has-marks-above-backdrop-insensitive-dark.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-vert-scale-has-marks-above-backdrop-insensitive-dark@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-vert-scale-has-marks-above-backdrop-insensitive.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-vert-scale-has-marks-above-backdrop-insensitive@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-vert-scale-has-marks-above-backdrop.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-vert-scale-has-marks-above-backdrop@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-vert-scale-has-marks-above-dark.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-vert-scale-has-marks-above-dark@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-vert-scale-has-marks-above-hover-dark.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-vert-scale-has-marks-above-hover-dark@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-vert-scale-has-marks-above-hover.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-vert-scale-has-marks-above-hover@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-vert-scale-has-marks-above-insensitive-dark.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-vert-scale-has-marks-above-insensitive-dark@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-vert-scale-has-marks-above-insensitive.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-vert-scale-has-marks-above-insensitive@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-vert-scale-has-marks-above.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-horz-scale-has-marks-below-active@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-horz-scale-has-marks-below-active-dark@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-horz-scale-has-marks-below-active-dark.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-horz-scale-has-marks-below-active.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-horz-scale-has-marks-below-backdrop@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-horz-scale-has-marks-below-backdrop-dark@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-horz-scale-has-marks-below-backdrop-dark.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-horz-scale-has-marks-below-backdrop-insensitive@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-horz-scale-has-marks-below-backdrop-insensitive-dark@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-horz-scale-has-marks-below-backdrop-insensitive-dark.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-horz-scale-has-marks-below-backdrop-insensitive.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-horz-scale-has-marks-below-backdrop.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-horz-scale-has-marks-below-dark@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-horz-scale-has-marks-below-dark.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-horz-scale-has-marks-below-hover@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-horz-scale-has-marks-below-hover-dark@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-horz-scale-has-marks-below-hover-dark.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-horz-scale-has-marks-below-hover.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-horz-scale-has-marks-below-insensitive@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-horz-scale-has-marks-below-insensitive-dark@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-horz-scale-has-marks-below-insensitive-dark.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-horz-scale-has-marks-below-insensitive.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-horz-scale-has-marks-below.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-vert-scale-has-marks-above@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-vert-scale-has-marks-below-active-dark.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-vert-scale-has-marks-below-active-dark@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-vert-scale-has-marks-below-active.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-vert-scale-has-marks-below-active@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-vert-scale-has-marks-below-backdrop-dark.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-vert-scale-has-marks-below-backdrop-dark@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-vert-scale-has-marks-below-backdrop-insensitive-dark.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-vert-scale-has-marks-below-backdrop-insensitive-dark@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-vert-scale-has-marks-below-backdrop-insensitive.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-vert-scale-has-marks-below-backdrop-insensitive@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-vert-scale-has-marks-below-backdrop.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-vert-scale-has-marks-below-backdrop@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-vert-scale-has-marks-below-dark.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-vert-scale-has-marks-below-dark@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-vert-scale-has-marks-below-hover-dark.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-vert-scale-has-marks-below-hover-dark@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-vert-scale-has-marks-below-hover.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-vert-scale-has-marks-below-hover@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-vert-scale-has-marks-below-insensitive-dark.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-vert-scale-has-marks-below-insensitive-dark@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-vert-scale-has-marks-below-insensitive.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-vert-scale-has-marks-below-insensitive@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-vert-scale-has-marks-below.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-vert-scale-has-marks-above-active@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-vert-scale-has-marks-above-active-dark@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-vert-scale-has-marks-above-active-dark.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-vert-scale-has-marks-above-active.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-vert-scale-has-marks-above-backdrop@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-vert-scale-has-marks-above-backdrop-dark@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-vert-scale-has-marks-above-backdrop-dark.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-vert-scale-has-marks-above-backdrop-insensitive@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-vert-scale-has-marks-above-backdrop-insensitive-dark@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-vert-scale-has-marks-above-backdrop-insensitive-dark.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-vert-scale-has-marks-above-backdrop-insensitive.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-vert-scale-has-marks-above-backdrop.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-vert-scale-has-marks-above-dark@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-vert-scale-has-marks-above-dark.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-vert-scale-has-marks-above-hover@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-vert-scale-has-marks-above-hover-dark@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-vert-scale-has-marks-above-hover-dark.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-vert-scale-has-marks-above-hover.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-vert-scale-has-marks-above-insensitive@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-vert-scale-has-marks-above-insensitive-dark@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-vert-scale-has-marks-above-insensitive-dark.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-vert-scale-has-marks-above-insensitive.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-vert-scale-has-marks-above.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-vert-scale-has-marks-below@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/text-select-end-active-dark.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/text-select-end-active-dark@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/text-select-end-active.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/text-select-end-active@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/text-select-end-dark.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/text-select-end-dark@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/text-select-end-hover-dark.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/text-select-end-hover-dark@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/text-select-end-hover.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/text-select-end-hover@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/text-select-end.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-vert-scale-has-marks-below-active@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-vert-scale-has-marks-below-active-dark@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-vert-scale-has-marks-below-active-dark.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-vert-scale-has-marks-below-active.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-vert-scale-has-marks-below-backdrop@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-vert-scale-has-marks-below-backdrop-dark@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-vert-scale-has-marks-below-backdrop-dark.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-vert-scale-has-marks-below-backdrop-insensitive@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-vert-scale-has-marks-below-backdrop-insensitive-dark@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-vert-scale-has-marks-below-backdrop-insensitive-dark.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-vert-scale-has-marks-below-backdrop-insensitive.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-vert-scale-has-marks-below-backdrop.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-vert-scale-has-marks-below-dark@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-vert-scale-has-marks-below-dark.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-vert-scale-has-marks-below-hover@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-vert-scale-has-marks-below-hover-dark@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-vert-scale-has-marks-below-hover-dark.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-vert-scale-has-marks-below-hover.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-vert-scale-has-marks-below-insensitive@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-vert-scale-has-marks-below-insensitive-dark@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-vert-scale-has-marks-below-insensitive-dark.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-vert-scale-has-marks-below-insensitive.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/slider-vert-scale-has-marks-below.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/text-select-end@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/text-select-start-active-dark.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/text-select-start-active-dark@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/text-select-start-active.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/text-select-start-active@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/text-select-start-dark.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/text-select-start-dark@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/text-select-start-hover-dark.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/text-select-start-hover-dark@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/text-select-start-hover.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/text-select-start-hover@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/text-select-start.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/text-select-end-active@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/text-select-end-active-dark@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/text-select-end-active-dark.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/text-select-end-active.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/text-select-end-dark@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/text-select-end-dark.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/text-select-end-hover@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/text-select-end-hover-dark@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/text-select-end-hover-dark.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/text-select-end-hover.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/text-select-end.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/text-select-start@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/text-select-start-active@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/text-select-start-active-dark@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/text-select-start-active-dark.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/text-select-start-active.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/text-select-start-dark@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/text-select-start-dark.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/text-select-start-hover@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/text-select-start-hover-dark@2.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/text-select-start-hover-dark.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/text-select-start-hover.png</file>
<file preprocess='to-pixdata'>theme/Adwaita/assets/text-select-start.png</file>
<file>theme/Adwaita/assets/bullet-symbolic.svg</file>
<file>theme/Adwaita/assets/check-symbolic.svg</file>
<file>theme/Adwaita/assets/dash-symbolic.svg</file>
@ -135,132 +135,132 @@
<file alias='theme/HighContrastInverse/gtk.css'>theme/HighContrast/gtk-inverse.css</file>
<file>theme/HighContrast/gtk-contained.css</file>
<file>theme/HighContrast/gtk-contained-inverse.css</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/bullet-symbolic.symbolic.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/bullet@2-symbolic.symbolic.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/check-symbolic.symbolic.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/bullet-symbolic.symbolic.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/check@2-symbolic.symbolic.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/dash-symbolic.symbolic.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/check-symbolic.symbolic.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/dash@2-symbolic.symbolic.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-horz-scale-has-marks-above-active-dark.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-horz-scale-has-marks-above-active-dark@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-horz-scale-has-marks-above-active.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-horz-scale-has-marks-above-active@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-horz-scale-has-marks-above-backdrop-dark.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-horz-scale-has-marks-above-backdrop-dark@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-horz-scale-has-marks-above-backdrop-insensitive-dark.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-horz-scale-has-marks-above-backdrop-insensitive-dark@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-horz-scale-has-marks-above-backdrop-insensitive.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-horz-scale-has-marks-above-backdrop-insensitive@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-horz-scale-has-marks-above-backdrop.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-horz-scale-has-marks-above-backdrop@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-horz-scale-has-marks-above-dark.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-horz-scale-has-marks-above-dark@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-horz-scale-has-marks-above-hover-dark.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-horz-scale-has-marks-above-hover-dark@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-horz-scale-has-marks-above-hover.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-horz-scale-has-marks-above-hover@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-horz-scale-has-marks-above-insensitive-dark.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-horz-scale-has-marks-above-insensitive-dark@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-horz-scale-has-marks-above-insensitive.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-horz-scale-has-marks-above-insensitive@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-horz-scale-has-marks-above.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/dash-symbolic.symbolic.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-horz-scale-has-marks-above@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-horz-scale-has-marks-below-active-dark.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-horz-scale-has-marks-below-active-dark@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-horz-scale-has-marks-below-active.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-horz-scale-has-marks-below-active@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-horz-scale-has-marks-below-backdrop-dark.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-horz-scale-has-marks-below-backdrop-dark@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-horz-scale-has-marks-below-backdrop-insensitive-dark.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-horz-scale-has-marks-below-backdrop-insensitive-dark@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-horz-scale-has-marks-below-backdrop-insensitive.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-horz-scale-has-marks-below-backdrop-insensitive@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-horz-scale-has-marks-below-backdrop.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-horz-scale-has-marks-below-backdrop@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-horz-scale-has-marks-below-dark.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-horz-scale-has-marks-below-dark@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-horz-scale-has-marks-below-hover-dark.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-horz-scale-has-marks-below-hover-dark@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-horz-scale-has-marks-below-hover.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-horz-scale-has-marks-below-hover@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-horz-scale-has-marks-below-insensitive-dark.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-horz-scale-has-marks-below-insensitive-dark@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-horz-scale-has-marks-below-insensitive.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-horz-scale-has-marks-below-insensitive@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-horz-scale-has-marks-below.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-horz-scale-has-marks-above-active@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-horz-scale-has-marks-above-active-dark@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-horz-scale-has-marks-above-active-dark.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-horz-scale-has-marks-above-active.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-horz-scale-has-marks-above-backdrop@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-horz-scale-has-marks-above-backdrop-dark@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-horz-scale-has-marks-above-backdrop-dark.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-horz-scale-has-marks-above-backdrop-insensitive@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-horz-scale-has-marks-above-backdrop-insensitive-dark@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-horz-scale-has-marks-above-backdrop-insensitive-dark.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-horz-scale-has-marks-above-backdrop-insensitive.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-horz-scale-has-marks-above-backdrop.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-horz-scale-has-marks-above-dark@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-horz-scale-has-marks-above-dark.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-horz-scale-has-marks-above-hover@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-horz-scale-has-marks-above-hover-dark@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-horz-scale-has-marks-above-hover-dark.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-horz-scale-has-marks-above-hover.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-horz-scale-has-marks-above-insensitive@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-horz-scale-has-marks-above-insensitive-dark@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-horz-scale-has-marks-above-insensitive-dark.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-horz-scale-has-marks-above-insensitive.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-horz-scale-has-marks-above.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-horz-scale-has-marks-below@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-vert-scale-has-marks-above-active-dark.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-vert-scale-has-marks-above-active-dark@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-vert-scale-has-marks-above-active.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-vert-scale-has-marks-above-active@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-vert-scale-has-marks-above-backdrop-dark.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-vert-scale-has-marks-above-backdrop-dark@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-vert-scale-has-marks-above-backdrop-insensitive-dark.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-vert-scale-has-marks-above-backdrop-insensitive-dark@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-vert-scale-has-marks-above-backdrop-insensitive.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-vert-scale-has-marks-above-backdrop-insensitive@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-vert-scale-has-marks-above-backdrop.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-vert-scale-has-marks-above-backdrop@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-vert-scale-has-marks-above-dark.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-vert-scale-has-marks-above-dark@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-vert-scale-has-marks-above-hover-dark.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-vert-scale-has-marks-above-hover-dark@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-vert-scale-has-marks-above-hover.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-vert-scale-has-marks-above-hover@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-vert-scale-has-marks-above-insensitive-dark.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-vert-scale-has-marks-above-insensitive-dark@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-vert-scale-has-marks-above-insensitive.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-vert-scale-has-marks-above-insensitive@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-vert-scale-has-marks-above.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-horz-scale-has-marks-below-active@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-horz-scale-has-marks-below-active-dark@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-horz-scale-has-marks-below-active-dark.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-horz-scale-has-marks-below-active.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-horz-scale-has-marks-below-backdrop@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-horz-scale-has-marks-below-backdrop-dark@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-horz-scale-has-marks-below-backdrop-dark.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-horz-scale-has-marks-below-backdrop-insensitive@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-horz-scale-has-marks-below-backdrop-insensitive-dark@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-horz-scale-has-marks-below-backdrop-insensitive-dark.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-horz-scale-has-marks-below-backdrop-insensitive.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-horz-scale-has-marks-below-backdrop.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-horz-scale-has-marks-below-dark@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-horz-scale-has-marks-below-dark.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-horz-scale-has-marks-below-hover@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-horz-scale-has-marks-below-hover-dark@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-horz-scale-has-marks-below-hover-dark.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-horz-scale-has-marks-below-hover.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-horz-scale-has-marks-below-insensitive@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-horz-scale-has-marks-below-insensitive-dark@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-horz-scale-has-marks-below-insensitive-dark.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-horz-scale-has-marks-below-insensitive.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-horz-scale-has-marks-below.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-vert-scale-has-marks-above@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-vert-scale-has-marks-below-active-dark.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-vert-scale-has-marks-below-active-dark@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-vert-scale-has-marks-below-active.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-vert-scale-has-marks-below-active@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-vert-scale-has-marks-below-backdrop-dark.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-vert-scale-has-marks-below-backdrop-dark@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-vert-scale-has-marks-below-backdrop-insensitive-dark.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-vert-scale-has-marks-below-backdrop-insensitive-dark@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-vert-scale-has-marks-below-backdrop-insensitive.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-vert-scale-has-marks-below-backdrop-insensitive@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-vert-scale-has-marks-below-backdrop.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-vert-scale-has-marks-below-backdrop@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-vert-scale-has-marks-below-dark.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-vert-scale-has-marks-below-dark@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-vert-scale-has-marks-below-hover-dark.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-vert-scale-has-marks-below-hover-dark@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-vert-scale-has-marks-below-hover.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-vert-scale-has-marks-below-hover@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-vert-scale-has-marks-below-insensitive-dark.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-vert-scale-has-marks-below-insensitive-dark@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-vert-scale-has-marks-below-insensitive.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-vert-scale-has-marks-below-insensitive@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-vert-scale-has-marks-below.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-vert-scale-has-marks-above-active@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-vert-scale-has-marks-above-active-dark@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-vert-scale-has-marks-above-active-dark.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-vert-scale-has-marks-above-active.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-vert-scale-has-marks-above-backdrop@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-vert-scale-has-marks-above-backdrop-dark@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-vert-scale-has-marks-above-backdrop-dark.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-vert-scale-has-marks-above-backdrop-insensitive@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-vert-scale-has-marks-above-backdrop-insensitive-dark@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-vert-scale-has-marks-above-backdrop-insensitive-dark.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-vert-scale-has-marks-above-backdrop-insensitive.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-vert-scale-has-marks-above-backdrop.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-vert-scale-has-marks-above-dark@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-vert-scale-has-marks-above-dark.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-vert-scale-has-marks-above-hover@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-vert-scale-has-marks-above-hover-dark@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-vert-scale-has-marks-above-hover-dark.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-vert-scale-has-marks-above-hover.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-vert-scale-has-marks-above-insensitive@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-vert-scale-has-marks-above-insensitive-dark@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-vert-scale-has-marks-above-insensitive-dark.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-vert-scale-has-marks-above-insensitive.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-vert-scale-has-marks-above.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-vert-scale-has-marks-below@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/text-select-end-active-dark.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/text-select-end-active-dark@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/text-select-end-active.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/text-select-end-active@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/text-select-end-dark.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/text-select-end-dark@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/text-select-end-hover-dark.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/text-select-end-hover-dark@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/text-select-end-hover.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/text-select-end-hover@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/text-select-end.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-vert-scale-has-marks-below-active@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-vert-scale-has-marks-below-active-dark@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-vert-scale-has-marks-below-active-dark.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-vert-scale-has-marks-below-active.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-vert-scale-has-marks-below-backdrop@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-vert-scale-has-marks-below-backdrop-dark@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-vert-scale-has-marks-below-backdrop-dark.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-vert-scale-has-marks-below-backdrop-insensitive@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-vert-scale-has-marks-below-backdrop-insensitive-dark@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-vert-scale-has-marks-below-backdrop-insensitive-dark.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-vert-scale-has-marks-below-backdrop-insensitive.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-vert-scale-has-marks-below-backdrop.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-vert-scale-has-marks-below-dark@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-vert-scale-has-marks-below-dark.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-vert-scale-has-marks-below-hover@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-vert-scale-has-marks-below-hover-dark@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-vert-scale-has-marks-below-hover-dark.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-vert-scale-has-marks-below-hover.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-vert-scale-has-marks-below-insensitive@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-vert-scale-has-marks-below-insensitive-dark@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-vert-scale-has-marks-below-insensitive-dark.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-vert-scale-has-marks-below-insensitive.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/slider-vert-scale-has-marks-below.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/text-select-end@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/text-select-start-active-dark.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/text-select-start-active-dark@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/text-select-start-active.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/text-select-start-active@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/text-select-start-dark.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/text-select-start-dark@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/text-select-start-hover-dark.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/text-select-start-hover-dark@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/text-select-start-hover.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/text-select-start-hover@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/text-select-start.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/text-select-end-active@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/text-select-end-active-dark@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/text-select-end-active-dark.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/text-select-end-active.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/text-select-end-dark@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/text-select-end-dark.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/text-select-end-hover@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/text-select-end-hover-dark@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/text-select-end-hover-dark.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/text-select-end-hover.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/text-select-end.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/text-select-start@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/text-select-start-active@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/text-select-start-active-dark@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/text-select-start-active-dark.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/text-select-start-active.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/text-select-start-dark@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/text-select-start-dark.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/text-select-start-hover@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/text-select-start-hover-dark@2.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/text-select-start-hover-dark.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/text-select-start-hover.png</file>
<file preprocess='to-pixdata'>theme/HighContrast/assets/text-select-start.png</file>
<file>theme/HighContrast/assets/bullet-symbolic.svg</file>
<file>theme/HighContrast/assets/check-symbolic.svg</file>
<file>theme/HighContrast/assets/dash-symbolic.svg</file>
@ -300,8 +300,8 @@
<file preprocess='xml-stripblanks'>ui/gtkmessagedialog.ui</file>
<file preprocess='xml-stripblanks'>ui/gtkpagesetupunixdialog.ui</file>
<file preprocess='xml-stripblanks'>ui/gtkpathbar.ui</file>
<file preprocess='xml-stripblanks'>ui/gtkplacesview.ui</file>
<file preprocess='xml-stripblanks'>ui/gtkplacesviewrow.ui</file>
<file preprocess='xml-stripblanks'>ui/gtkplacesview.ui</file>
<file preprocess='xml-stripblanks'>ui/gtkprintunixdialog.ui</file>
<file preprocess='xml-stripblanks'>ui/gtkrecentchooserdefault.ui</file>
<file preprocess='xml-stripblanks'>ui/gtkscalebutton.ui</file>
@ -325,8 +325,8 @@
<file>icons/16x16/actions/gtk-preferences.png</file>
<file>icons/16x16/actions/gtk-select-color.png</file>
<file>icons/16x16/actions/gtk-select-font.png</file>
<file>icons/16x16/actions/gtk-undelete-rtl.png</file>
<file>icons/16x16/actions/gtk-undelete.png</file>
<file>icons/16x16/actions/gtk-undelete-rtl.png</file>
<file>icons/16x16/status/caps-lock-symbolic.symbolic.png</file>
<file>icons/16x16/status/image-missing.png</file>
<file>icons/16x16/status/switch-off-symbolic.symbolic.png</file>
@ -361,8 +361,8 @@
<file>icons/24x24/actions/gtk-preferences.png</file>
<file>icons/24x24/actions/gtk-select-color.png</file>
<file>icons/24x24/actions/gtk-select-font.png</file>
<file>icons/24x24/actions/gtk-undelete-rtl.png</file>
<file>icons/24x24/actions/gtk-undelete.png</file>
<file>icons/24x24/actions/gtk-undelete-rtl.png</file>
<file>icons/24x24/status/image-missing.png</file>
<file>icons/24x24/categories/emoji-activities-symbolic.symbolic.png</file>
<file>icons/24x24/categories/emoji-body-symbolic.symbolic.png</file>

View File

@ -130,6 +130,9 @@ static const LicenseInfo gtk_license_info [] = {
{ N_("Apache License, Version 2.0"), "https://opensource.org/licenses/Apache-2.0" },
{ N_("Mozilla Public License 2.0"), "https://opensource.org/licenses/MPL-2.0" }
};
/* Keep this static assertion updated with the last element of the
* enumeration, and make sure it matches the last element of the array */
G_STATIC_ASSERT (G_N_ELEMENTS (gtk_license_info) - 1 == GTK_LICENSE_MPL_2_0);
typedef struct
{
@ -2467,7 +2470,7 @@ gtk_about_dialog_set_license_type (GtkAboutDialog *about,
g_return_if_fail (GTK_IS_ABOUT_DIALOG (about));
g_return_if_fail (license_type >= GTK_LICENSE_UNKNOWN &&
license_type <= GTK_LICENSE_AGPL_3_0_ONLY);
license_type < G_N_ELEMENTS (gtk_license_info));
priv = about->priv;

View File

@ -60,6 +60,9 @@ typedef struct _GtkAboutDialogPrivate GtkAboutDialogPrivate;
* @GTK_LICENSE_LGPL_3_0_ONLY: The GNU Lesser General Public License, version 3.0 only. Since 3.12.
* @GTK_LICENSE_AGPL_3_0: The GNU Affero General Public License, version 3.0 or later. Since: 3.22.
* @GTK_LICENSE_AGPL_3_0_ONLY: The GNU Affero General Public License, version 3.0 only. Since: 3.22.27.
* @GTK_LICENSE_BSD_3: The 3-clause BSD licence. Since: 3.24.20.
* @GTK_LICENSE_APACHE_2_0: The Apache License, version 2.0. Since: 3.24.20.
* @GTK_LICENSE_MPL_2_0: The Mozilla Public License, version 2.0. Since: 3.24.20.
*
* The type of license for an application.
*

View File

@ -199,16 +199,18 @@ set_dialog_properties (GtkAppChooserDialog *self)
unknown = g_content_type_is_unknown (self->priv->content_type);
}
title = g_strdup (_("Select Application"));
subtitle = NULL;
string = NULL;
if (name != NULL)
{
title = g_strdup (_("Select Application"));
/* Translators: %s is a filename */
subtitle = g_strdup_printf (_("Opening “%s”."), name);
string = g_strdup_printf (_("No applications found for “%s”"), name);
}
else
else if (self->priv->content_type)
{
title = g_strdup (_("Select Application"));
/* Translators: %s is a file type description */
subtitle = g_strdup_printf (_("Opening “%s” files."),
unknown ? self->priv->content_type : description);

View File

@ -56,14 +56,18 @@ typedef struct
} GtkApplicationImplQuartz;
G_DEFINE_TYPE (GtkApplicationImplQuartz, gtk_application_impl_quartz, GTK_TYPE_APPLICATION_IMPL)
#if MAC_OS_X_VERSION_MIN_REQUIRED >= 1060
@interface GtkApplicationQuartzDelegate : NSObject <NSApplicationDelegate>
#else
@interface GtkApplicationQuartzDelegate : NSObject
#endif
{
GtkApplicationImplQuartz *quartz;
}
- (id)initWithImpl:(GtkApplicationImplQuartz*)impl;
- (NSApplicationTerminateReply) applicationShouldTerminate:(NSApplication *)sender;
- (void)application:(NSApplication *)theApplication openFiles:(NSArray *)filenames;
@end
@implementation GtkApplicationQuartzDelegate
@ -84,6 +88,35 @@ G_DEFINE_TYPE (GtkApplicationImplQuartz, gtk_application_impl_quartz, GTK_TYPE_A
*/
return quartz->quit_inhibit == 0 ? NSTerminateNow : NSTerminateCancel;
}
-(void)application:(NSApplication *)theApplication openFiles:(NSArray *)filenames
{
GFile **files;
gint i;
GApplicationFlags flags;
flags = g_application_get_flags (G_APPLICATION (quartz->impl.application));
if (~flags & G_APPLICATION_HANDLES_OPEN)
{
[theApplication replyToOpenOrPrint:NSApplicationDelegateReplyFailure];
return;
}
files = g_new (GFile *, [filenames count]);
for (i = 0; i < [filenames count]; i++)
files[i] = g_file_new_for_path ([(NSString *)[filenames objectAtIndex:i] UTF8String]);
g_application_open (G_APPLICATION (quartz->impl.application), files, [filenames count], "");
for (i = 0; i < [filenames count]; i++)
g_object_unref (files[i]);
g_free (files);
[theApplication replyToOpenOrPrint:NSApplicationDelegateReplySuccess];
}
@end
/* these exist only for accel handling */
@ -132,7 +165,7 @@ gtk_application_impl_quartz_startup (GtkApplicationImpl *impl,
if (register_session)
{
quartz->delegate = [[GtkApplicationQuartzDelegate alloc] initWithImpl:quartz];
[NSApp setDelegate: quartz->delegate];
[NSApp setDelegate: (id)(quartz->delegate)];
}
quartz->muxer = gtk_action_muxer_new ();
@ -307,6 +340,13 @@ gtk_application_impl_quartz_is_inhibited (GtkApplicationImpl *impl,
static void
gtk_application_impl_quartz_init (GtkApplicationImplQuartz *quartz)
{
/* This is required so that Cocoa is not going to parse the
command line arguments by itself and generate OpenFile events.
We already parse the command line ourselves, so this is needed
to prevent opening files twice, etc. */
[[NSUserDefaults standardUserDefaults] setObject:@"NO"
forKey:@"NSTreatUnknownArgumentsAsOpen"];
quartz->combined = g_menu_new ();
}

View File

@ -67,7 +67,7 @@
* It is common to use `.ui` as the filename extension for files containing
* GtkBuilder UI definitions.
*
* [RELAX NG Compact Syntax](https://git.gnome.org/browse/gtk+/tree/gtk/gtkbuilder.rnc)
* [RELAX NG Compact Syntax](https://gitlab.gnome.org/GNOME/gtk/-/blob/gtk-3-24/gtk/gtkbuilder.rnc)
*
* The toplevel element is <interface>. It optionally takes a domain
* attribute, which will make the builder look for translated strings
@ -458,6 +458,7 @@ gtk_builder_get_parameters (GtkBuilder *builder,
GType object_type,
const gchar *object_name,
GSList *properties,
gsize n_properties,
GParamFlags filter_flags,
GArray **parameters,
GArray **filtered_parameters)
@ -466,10 +467,23 @@ gtk_builder_get_parameters (GtkBuilder *builder,
DelayedProperty *property;
GError *error = NULL;
/* Create the two arrays with size @n_properties. The total number of elements
* between them will eventually be @n_properties, but its more important to
* avoid realloc()/memcpy() calls on these arrays than to be tight with memory
* allocations (and overallocating by 100% is no worse than what #GArray does
* internally with doubling its size every time its full).
*
* @n_properties is typically 8, so its
* (a) not much of an impact to overallocate
* (b) disproportionally subject to realloc()/memcpy() since the array size
* doubles 3 times in the first 8 elements
*
* gtk_builder_get_parameters() gets called twice for every object in every
* #GtkBuilder file, so its a fairly hot path. */
if (parameters)
*parameters = g_array_new (FALSE, FALSE, sizeof (GParameter));
*parameters = g_array_sized_new (FALSE, FALSE, sizeof (GParameter), n_properties);
if (filtered_parameters)
*filtered_parameters = g_array_new (FALSE, FALSE, sizeof (GParameter));
*filtered_parameters = g_array_sized_new (FALSE, FALSE, sizeof (GParameter), n_properties);
for (l = properties; l; l = l->next)
{
@ -670,6 +684,7 @@ _gtk_builder_construct (GtkBuilder *builder,
gtk_builder_get_parameters (builder, info->type,
info->id,
info->properties,
info->n_properties,
param_filter_flags,
&parameters,
&construct_parameters);
@ -814,6 +829,7 @@ _gtk_builder_apply_properties (GtkBuilder *builder,
gtk_builder_get_parameters (builder, info->type,
info->id,
info->properties,
info->n_properties,
G_PARAM_CONSTRUCT_ONLY,
&parameters, NULL);

View File

@ -1112,6 +1112,7 @@ end_element (GMarkupParseContext *context,
}
object_info->properties = g_slist_prepend (object_info->properties, prop_info);
object_info->n_properties++;
}
else
g_assert_not_reached ();

View File

@ -36,6 +36,7 @@ typedef struct {
gchar *id;
gchar *constructor;
GSList *properties;
gsize n_properties;
GSList *signals;
GSList *bindings;
GObject *object;

View File

@ -706,14 +706,14 @@ gtk_css_node_get_timestamp (GtkCssNode *cssnode)
static void
gtk_css_node_parent_was_unset (GtkCssNode *node)
{
if (node->invalid)
if (node->visible && node->invalid)
GTK_CSS_NODE_GET_CLASS (node)->queue_validate (node);
}
static void
gtk_css_node_parent_will_be_set (GtkCssNode *node)
{
if (node->invalid)
if (node->visible && node->invalid)
GTK_CSS_NODE_GET_CLASS (node)->dequeue_validate (node);
}

Some files were not shown because too many files have changed in this diff Show More