New upstream version 3.24.30

This commit is contained in:
Simon McVittie 2021-08-15 15:07:19 +01:00
commit cc6b7040ea
262 changed files with 653767 additions and 578087 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.29 requires at least
the same location as GTK+. GTK+ 3.24.30 requires at least
GLib 2.57.2, Pango 1.41.0,
GdkPixbuf 2.30.0, ATK 2.32.0
and cairo 1.14.0.
@ -22,8 +22,8 @@ GTK+ requires the following packages:
Simple install procedure
========================
% tar xf gtk+-3.24.29.tar.xz # unpack the sources
% cd gtk+-3.24.29 # change to the toplevel directory
% tar xf gtk+-3.24.30.tar.xz # unpack the sources
% cd gtk+-3.24.30 # change to the toplevel directory
% ./configure # run the `configure' script
% make # build GTK+
[ Become root if necessary ]

View File

@ -216,8 +216,8 @@ am__DIST_COMMON = $(srcdir)/INSTALL.in $(srcdir)/Makefile.in \
$(top_srcdir)/build-aux/missing ABOUT-NLS AUTHORS COPYING \
ChangeLog INSTALL NEWS README build-aux/compile \
build-aux/config.guess build-aux/config.rpath \
build-aux/config.sub build-aux/depcomp build-aux/install-sh \
build-aux/ltmain.sh build-aux/missing
build-aux/config.sub build-aux/install-sh build-aux/ltmain.sh \
build-aux/missing
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
distdir = $(PACKAGE)-$(VERSION)
top_distdir = $(distdir)
@ -399,8 +399,6 @@ INTROSPECTION_REQUIRED_VERSION = @INTROSPECTION_REQUIRED_VERSION@
INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
ISO_CODES_PREFIX = @ISO_CODES_PREFIX@
JSON_GLIB_CFLAGS = @JSON_GLIB_CFLAGS@
JSON_GLIB_LIBS = @JSON_GLIB_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LDFLAGS_FOR_BUILD = @LDFLAGS_FOR_BUILD@
@ -449,8 +447,6 @@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
POSUB = @POSUB@
RANLIB = @RANLIB@
REST_CFLAGS = @REST_CFLAGS@
REST_LIBS = @REST_LIBS@
SASSC = @SASSC@
SED = @SED@
SET_MAKE = @SET_MAKE@

55
NEWS
View File

@ -1,3 +1,58 @@
Overview of Changes in GTK+ 3.24.30
===================================
* Input:
- Ignore NoSymbol key events (happens with some XKB options)
- Fix incomplete reset in some cases
* GtkEmojiChooser:
- Update data from CLDR 39
- Support translated keywords for multiple languages
- Allow inserting multiple Emoji with Ctrl
- Match keywords for search
- Fix a memory leak
* GtkFileChooser:
- Accessibility improvements
* GtkTreeView
- Fix an accessibility-related memory leak
- Fix assertion failures in some cases
* Printing:
- Remove the Google Cloud Print backend, since the
service was shut down
* Wayland:
- Work with pointer-gestures v1 protocol
* Win32:
- Fix using GL with Mesa drivers
- Add support for Windows Pointer Input stack
* MacOS:
- Fix a crash with Drag-and-Drop
* Translation updates:
Belarusian
Brazilian Portuguese
British English
Catalan
Indonesian
Lithuanian
Nepali
Norwegian Bokmål
Occitan
Portuguese
Romanian
Russian
Serbian
Slovenian
Spanish
Turkish
Ukrainian
Overview of Changes in GTK+ 3.24.29
===================================

2
README
View File

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

View File

@ -15,6 +15,8 @@ the same compiler is used for at least GDK-Pixbuf, Pango, atk and glib
so that crashes and errors caused by different CRTs can be avoided. Currently
building with Visual Studio 2008 or later is supported, either via Visual Studio
project files or via the Meson build system, as described in the below sections.
For Visual Studio 2008, 2010, a special setup making use of the Windows 8.0 SDK
is required, see at the bottom of this document for guidance.
Interchanging between Visual Studio 2015, 2017 and 2019 builds should be fine
as they use the same CRT (UCRT) DLLs.
@ -286,6 +288,73 @@ If you are building with Visual Studio 2008, note the following items as well:
- The more modern visual style for the print dialog is not applied for Visual
Studio 2008 builds. Any solutions to this is really appreciated.
Support for pre-2012 Visual Studio
==================================
This release of GTK+ requires at least the Windows 8.0 SDK in order to be built
successfully using Visual Studio, which means that building with Visual Studio
2008 or 2010 is possible only with a special setup and must be done in the
command line with Ninja. Please see
https://devblogs.microsoft.com/cppblog/using-the-windows-software-development-kit-sdk-for-windows-8-consumer-preview-with-visual-studio-2010/
for references; basically, assuming that your Windows 8.0 SDK is installed in
`C:\Program Files (x86)\Windows Kits\8.0` (`$(WIN8SDKDIR)` in short), you need
to ensure the following before invoking Meson to configure the build:
- Your `%INCLUDE%` must not include the Windows 7.0/7.1 SDK include directories,
and `$(WIN8SDKDIR)\include\um`, `$(WIN8SDKDIR)\include\um\share` and
`$(WIN8SDKDIR)\include\winrt` (in this order) must be before your stock
Visual Studio 2008/2010 header directories. If you have the DirectX SDK installed,
you should remove its include directory from your `%INCLUDE%` as well.
- You must replace the Windows 7.0/7.1 SDK library directory in `%LIB%` with the
Windows 8.0 SDK library directory, i.e. `$(WIN8SDKDIR)\lib\win8\um\[x86|x64]`.
If you have the DirectX SDK installed, you should remove its library directory
from your `%INCLUDE%` as well.
- You must replace the Windows 7.0/7.1 SDK tools directory from your `%PATH%` with
the Windows 8.0 SDK tools directory, i.e. `$(WIN8SDKDIR)\bin\[x86|x64]`.
If you have the DirectX SDK installed, you should remove its utility directory
from your `%PATH%` as well.
The Windows 8.0 SDK headers may contain an `roapi.h` that cannot be used under plain
C, so to remedy that, change the following lines (around lines 55-57):
// RegisterActivationFactory/RevokeActivationFactory registration cookie
typedef struct {} *RO_REGISTRATION_COOKIE;
// RegisterActivationFactory/DllGetActivationFactory callback
to
// RegisterActivationFactory/RevokeActivationFactory registration cookie
#ifdef __cplusplus
typedef struct {} *RO_REGISTRATION_COOKIE;
#else
typedef struct _RO_REGISTRATION_COOKIE *RO_REGISTRATION_COOKIE; /* make this header includable in C files */
#endif
// RegisterActivationFactory/DllGetActivationFactory callback
This follows what is done in the Windows 8.1 SDK, which contains an `roapi.h`
that is usable under plain C. Please note that you might need to copy that file
into a location that is in your `%INCLUDE%` which precedes the include path for the
Windows 8.0 SDK headers, if you do not have administrative privileges.
Visual Studio 2008 hacks
========================
- You need to run the following lines from your build directory, to embed the
manifests that are generated during the build, assuming the built binaries
are installed to `$(PREFIX)`, after a successful build/installation:
```cmd
> for /r %f in (*.dll.manifest) do if exist $(PREFIX)\bin\%~nf mt /manifest %f (PREFIX)\bin\%~nf;2
> for /r %f in (*.exe.manifest) do if exist $(PREFIX)\bin\%~nf mt /manifest %f (PREFIX)\bin\%~nf;1
```
- If building for amd64/x86_64/x64, sometimes the compilation of sources may seem to hang, which
is caused by an optimization issue in the 2008 x64 compiler. You need to use Task Manager to
remove all running instances of `cl.exe`, which will cause the build process to terminate. Update
the build flags of the sources that hang on compilation by changing its `"/O2"` flag to `"/O1"`
in `build.ninja`, and retry the build, where things should continue to build normally.
Using GTK+ on Win32
===================
@ -302,13 +371,5 @@ cases, but not in general. Sorry. If you have all GTK+ and GDK calls
in the same thread, it might work. Otherwise, probably not at
all. Possible ways to fix this are being investigated.
Wintab
======
The tablet support uses the Wintab API. The Wintab development kit is
no longer required. The wintab.h header file is bundled with GTK+
sources. Unfortunately it seems that only Wacom tablets come with
support for the Wintab API nowadays.
--Tor Lillqvist <tml@iki.fi>, <tml@novell.com>
--Updated by Fan, Chun-wei <fanc999@yahoo.com.tw>

View File

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

253
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.29.
# Generated by GNU Autoconf 2.69 for gtk+ 3.24.30.
#
# 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.29'
PACKAGE_STRING='gtk+ 3.24.29'
PACKAGE_VERSION='3.24.30'
PACKAGE_STRING='gtk+ 3.24.30'
PACKAGE_BUGREPORT='http://bugzilla.gnome.org/enter_bug.cgi?product=gtk%2B'
PACKAGE_URL=''
@ -697,12 +697,6 @@ GSETTINGS_DISABLE_SCHEMAS_COMPILE
GTK_PRINT_BACKENDS
TEST_PRINT_BACKEND_FALSE
TEST_PRINT_BACKEND_TRUE
JSON_GLIB_LIBS
JSON_GLIB_CFLAGS
REST_LIBS
REST_CFLAGS
HAVE_CLOUDPRINT_FALSE
HAVE_CLOUDPRINT_TRUE
HAVE_TRACKER3_FALSE
HAVE_TRACKER3_TRUE
TRACKER3_LIBS
@ -1069,7 +1063,6 @@ enable_win32_gles
enable_cups
enable_papi
enable_tracker3
enable_cloudprint
enable_test_print_backend
enable_schemas_compile
enable_introspection
@ -1128,10 +1121,6 @@ GTK_FONT_CHOOSER_WIDGET_CFLAGS
GTK_FONT_CHOOSER_WIDGET_LIBS
TRACKER3_CFLAGS
TRACKER3_LIBS
REST_CFLAGS
REST_LIBS
JSON_GLIB_CFLAGS
JSON_GLIB_LIBS
GLIB_COMPILE_SCHEMAS
COLORD_CFLAGS
COLORD_LIBS
@ -1688,7 +1677,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.29 to adapt to many kinds of systems.
\`configure' configures gtk+ 3.24.30 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@ -1763,7 +1752,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
short | recursive ) echo "Configuration of gtk+ 3.24.29:";;
short | recursive ) echo "Configuration of gtk+ 3.24.30:";;
esac
cat <<\_ACEOF
@ -1819,7 +1808,6 @@ Optional Features:
--disable-cups disable cups print backend
--disable-papi disable papi print backend
--enable-tracker3 enable tracker3 search engine
--disable-cloudprint disable cloudprint print backend
--enable-test-print-backend
build test print backend
--disable-schemas-compile
@ -1929,12 +1917,6 @@ Some influential environment variables:
C compiler flags for TRACKER3, overriding pkg-config
TRACKER3_LIBS
linker flags for TRACKER3, overriding pkg-config
REST_CFLAGS C compiler flags for REST, overriding pkg-config
REST_LIBS linker flags for REST, overriding pkg-config
JSON_GLIB_CFLAGS
C compiler flags for JSON_GLIB, overriding pkg-config
JSON_GLIB_LIBS
linker flags for JSON_GLIB, overriding pkg-config
GLIB_COMPILE_SCHEMAS
value of glib_compile_schemas for gio-2.0, overriding pkg-config
COLORD_CFLAGS
@ -2012,7 +1994,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
gtk+ configure 3.24.29
gtk+ configure 3.24.30
generated by GNU Autoconf 2.69
Copyright (C) 2012 Free Software Foundation, Inc.
@ -2842,7 +2824,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.29, which was
It was created by gtk+ $as_me 3.24.30, which was
generated by GNU Autoconf 2.69. Invocation command line was
$ $0 $@
@ -3835,7 +3817,7 @@ fi
# Define the identity of the package.
PACKAGE='gtk+'
VERSION='3.24.29'
VERSION='3.24.30'
# Some tools Automake needs.
@ -4115,10 +4097,10 @@ AM_BACKSLASH='\'
GTK_MAJOR_VERSION=3
GTK_MINOR_VERSION=24
GTK_MICRO_VERSION=29
GTK_INTERFACE_AGE=25
GTK_BINARY_AGE=2429
GTK_VERSION=3.24.29
GTK_MICRO_VERSION=30
GTK_INTERFACE_AGE=26
GTK_BINARY_AGE=2430
GTK_VERSION=3.24.30
GTK_API_VERSION=3.0
GTK_BINARY_VERSION=3.0.0
@ -4140,7 +4122,7 @@ GTK_BINARY_VERSION=3.0.0
LT_VERSION_INFO="2404:25:2404"
LT_VERSION_INFO="2404:26:2404"
LT_CURRENT_MINUS_AGE=0
@ -21071,7 +21053,7 @@ Usage: $0 [OPTIONS]
Report bugs to <bug-libtool@gnu.org>."
lt_cl_version="\
gtk+ config.lt 3.24.29
gtk+ config.lt 3.24.30
configured by $0, generated by GNU Autoconf 2.69.
Copyright (C) 2011 Free Software Foundation, Inc.
@ -27813,195 +27795,6 @@ else
fi
# Checks to see if we should compile with cloudprint backend for GTK+
#
# Check whether --enable-cloudprint was given.
if test "${enable_cloudprint+set}" = set; then :
enableval=$enable_cloudprint;
else
enable_cloudprint=auto
fi
if test "x$enable_cloudprint" = "xno"; then
if false; then
HAVE_CLOUDPRINT_TRUE=
HAVE_CLOUDPRINT_FALSE='#'
else
HAVE_CLOUDPRINT_TRUE='#'
HAVE_CLOUDPRINT_FALSE=
fi
else
pkg_failed=no
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for REST" >&5
$as_echo_n "checking for REST... " >&6; }
if test -n "$REST_CFLAGS"; then
pkg_cv_REST_CFLAGS="$REST_CFLAGS"
elif test -n "$PKG_CONFIG"; then
if test -n "$PKG_CONFIG" && \
{ { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"rest-0.7\""; } >&5
($PKG_CONFIG --exists --print-errors "rest-0.7") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
pkg_cv_REST_CFLAGS=`$PKG_CONFIG --cflags "rest-0.7" 2>/dev/null`
test "x$?" != "x0" && pkg_failed=yes
else
pkg_failed=yes
fi
else
pkg_failed=untried
fi
if test -n "$REST_LIBS"; then
pkg_cv_REST_LIBS="$REST_LIBS"
elif test -n "$PKG_CONFIG"; then
if test -n "$PKG_CONFIG" && \
{ { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"rest-0.7\""; } >&5
($PKG_CONFIG --exists --print-errors "rest-0.7") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
pkg_cv_REST_LIBS=`$PKG_CONFIG --libs "rest-0.7" 2>/dev/null`
test "x$?" != "x0" && pkg_failed=yes
else
pkg_failed=yes
fi
else
pkg_failed=untried
fi
if test $pkg_failed = yes; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
_pkg_short_errors_supported=yes
else
_pkg_short_errors_supported=no
fi
if test $_pkg_short_errors_supported = yes; then
REST_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "rest-0.7" 2>&1`
else
REST_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "rest-0.7" 2>&1`
fi
# Put the nasty error message in config.log where it belongs
echo "$REST_PKG_ERRORS" >&5
have_rest=no
elif test $pkg_failed = untried; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
have_rest=no
else
REST_CFLAGS=$pkg_cv_REST_CFLAGS
REST_LIBS=$pkg_cv_REST_LIBS
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
have_rest=yes
fi
pkg_failed=no
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for JSON_GLIB" >&5
$as_echo_n "checking for JSON_GLIB... " >&6; }
if test -n "$JSON_GLIB_CFLAGS"; then
pkg_cv_JSON_GLIB_CFLAGS="$JSON_GLIB_CFLAGS"
elif test -n "$PKG_CONFIG"; then
if test -n "$PKG_CONFIG" && \
{ { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"json-glib-1.0\""; } >&5
($PKG_CONFIG --exists --print-errors "json-glib-1.0") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
pkg_cv_JSON_GLIB_CFLAGS=`$PKG_CONFIG --cflags "json-glib-1.0" 2>/dev/null`
test "x$?" != "x0" && pkg_failed=yes
else
pkg_failed=yes
fi
else
pkg_failed=untried
fi
if test -n "$JSON_GLIB_LIBS"; then
pkg_cv_JSON_GLIB_LIBS="$JSON_GLIB_LIBS"
elif test -n "$PKG_CONFIG"; then
if test -n "$PKG_CONFIG" && \
{ { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"json-glib-1.0\""; } >&5
($PKG_CONFIG --exists --print-errors "json-glib-1.0") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
pkg_cv_JSON_GLIB_LIBS=`$PKG_CONFIG --libs "json-glib-1.0" 2>/dev/null`
test "x$?" != "x0" && pkg_failed=yes
else
pkg_failed=yes
fi
else
pkg_failed=untried
fi
if test $pkg_failed = yes; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
_pkg_short_errors_supported=yes
else
_pkg_short_errors_supported=no
fi
if test $_pkg_short_errors_supported = yes; then
JSON_GLIB_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "json-glib-1.0" 2>&1`
else
JSON_GLIB_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "json-glib-1.0" 2>&1`
fi
# Put the nasty error message in config.log where it belongs
echo "$JSON_GLIB_PKG_ERRORS" >&5
have_json_glib=no
elif test $pkg_failed = untried; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
have_json_glib=no
else
JSON_GLIB_CFLAGS=$pkg_cv_JSON_GLIB_CFLAGS
JSON_GLIB_LIBS=$pkg_cv_JSON_GLIB_LIBS
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
have_json_glib=yes
fi
if test "x$have_rest" = "xyes" -a "x$have_json_glib" = "xyes"; then
PRINT_BACKENDS="$PRINT_BACKENDS cloudprint"
have_cloudprint=yes
fi
if test "x$have_cloudprint" = "xyes"; then
HAVE_CLOUDPRINT_TRUE=
HAVE_CLOUDPRINT_FALSE='#'
else
HAVE_CLOUDPRINT_TRUE='#'
HAVE_CLOUDPRINT_FALSE=
fi
fi
if test "x$enable_cloudprint" = "xyes" -a "x$have_rest" = "xno"; then
as_fn_error $? "
*** rest not found.
" "$LINENO" 5
fi
if test "x$enable_cloudprint" = "xyes" -a "x$have_json_glib" = "xno"; then
as_fn_error $? "
*** json-glib not found.
" "$LINENO" 5
fi
gtk_save_cppflags="$CPPFLAGS"
CPPFLAGS="$CPPFLAGS $GTK_DEP_CFLAGS $GDK_DEP_CFLAGS"
@ -28085,9 +27878,6 @@ fi
if test "$have_papi" != "yes" -a "$have_cups" != "yes"; then
GTK_PRINT_BACKENDS="$GTK_PRINT_BACKENDS,lpr"
fi
if test "$have_cloudprint" = "yes"; then
GTK_PRINT_BACKENDS="$GTK_PRINT_BACKENDS,cloudprint"
fi
################################################################
@ -29422,7 +29212,7 @@ else
fi
ac_config_files="$ac_config_files README INSTALL config.h.win32 gtk-zip.sh Makefile gdk-3.0.pc gtk+-3.0.pc gtk+-unix-print-3.0.pc gail-3.0.pc m4macros/Makefile po/Makefile.in po-properties/Makefile.in demos/Makefile demos/gtk-demo/Makefile demos/gtk-demo/geninclude.pl demos/widget-factory/Makefile demos/icon-browser/Makefile examples/Makefile examples/bp/Makefile examples/application1/Makefile examples/application2/Makefile examples/application3/Makefile examples/application4/Makefile examples/application5/Makefile examples/application6/Makefile examples/application7/Makefile examples/application8/Makefile examples/application9/Makefile examples/application10/Makefile tests/Makefile tests/visuals/Makefile testsuite/Makefile testsuite/a11y/Makefile testsuite/a11y/state/Makefile testsuite/css/Makefile testsuite/css/parser/Makefile testsuite/css/nodes/Makefile testsuite/css/style/Makefile testsuite/gdk/Makefile testsuite/gtk/Makefile testsuite/reftests/Makefile testsuite/tools/Makefile docs/Makefile docs/reference/Makefile docs/reference/gdk/Makefile docs/reference/gdk/version.xml docs/reference/gtk/Makefile docs/reference/gtk/gtk3.types docs/reference/gtk/version.xml docs/reference/gtk/getting_started.xml docs/reference/libgail-util/Makefile docs/reference/libgail-util/version.xml docs/tools/Makefile win32/Makefile win32/config-msvc.mak win32/vs9/Makefile win32/vs9/gtk3-version-paths.vsprops win32/vs10/Makefile win32/vs10/gtk3-version-paths.props win32/vs11/Makefile win32/vs12/Makefile win32/vs14/Makefile win32/vs15/Makefile win32/vs16/Makefile gdk/Makefile gdk/broadway/Makefile gdk/x11/Makefile gdk/win32/Makefile gdk/win32/rc/Makefile gdk/win32/rc/gdk.rc gdk/quartz/Makefile gdk/wayland/Makefile gdk/gdkversionmacros.h gtk/Makefile gtk/makefile.msc gtk/gtkversion.h gtk/gtk-win32.rc.body gtk/libgtk3.manifest libgail-util/Makefile modules/Makefile modules/input/Makefile modules/printbackends/Makefile modules/printbackends/cups/Makefile modules/printbackends/cloudprint/Makefile modules/printbackends/lpr/Makefile modules/printbackends/file/Makefile modules/printbackends/papi/Makefile modules/printbackends/test/Makefile"
ac_config_files="$ac_config_files README INSTALL config.h.win32 gtk-zip.sh Makefile gdk-3.0.pc gtk+-3.0.pc gtk+-unix-print-3.0.pc gail-3.0.pc m4macros/Makefile po/Makefile.in po-properties/Makefile.in demos/Makefile demos/gtk-demo/Makefile demos/gtk-demo/geninclude.pl demos/widget-factory/Makefile demos/icon-browser/Makefile examples/Makefile examples/bp/Makefile examples/application1/Makefile examples/application2/Makefile examples/application3/Makefile examples/application4/Makefile examples/application5/Makefile examples/application6/Makefile examples/application7/Makefile examples/application8/Makefile examples/application9/Makefile examples/application10/Makefile tests/Makefile tests/visuals/Makefile testsuite/Makefile testsuite/a11y/Makefile testsuite/a11y/state/Makefile testsuite/css/Makefile testsuite/css/parser/Makefile testsuite/css/nodes/Makefile testsuite/css/style/Makefile testsuite/gdk/Makefile testsuite/gtk/Makefile testsuite/reftests/Makefile testsuite/tools/Makefile docs/Makefile docs/reference/Makefile docs/reference/gdk/Makefile docs/reference/gdk/version.xml docs/reference/gtk/Makefile docs/reference/gtk/gtk3.types docs/reference/gtk/version.xml docs/reference/gtk/getting_started.xml docs/reference/libgail-util/Makefile docs/reference/libgail-util/version.xml docs/tools/Makefile win32/Makefile win32/config-msvc.mak win32/vs9/Makefile win32/vs9/gtk3-version-paths.vsprops win32/vs10/Makefile win32/vs10/gtk3-version-paths.props win32/vs11/Makefile win32/vs12/Makefile win32/vs14/Makefile win32/vs15/Makefile win32/vs16/Makefile gdk/Makefile gdk/broadway/Makefile gdk/x11/Makefile gdk/win32/Makefile gdk/win32/rc/Makefile gdk/win32/rc/gdk.rc gdk/quartz/Makefile gdk/wayland/Makefile gdk/gdkversionmacros.h gtk/Makefile gtk/makefile.msc gtk/gtkversion.h gtk/gtk-win32.rc.body gtk/libgtk3.manifest libgail-util/Makefile modules/Makefile modules/input/Makefile modules/printbackends/Makefile modules/printbackends/cups/Makefile modules/printbackends/lpr/Makefile modules/printbackends/file/Makefile modules/printbackends/papi/Makefile modules/printbackends/test/Makefile"
cat >confcache <<\_ACEOF
@ -29766,14 +29556,6 @@ if test -z "${HAVE_TRACKER3_TRUE}" && test -z "${HAVE_TRACKER3_FALSE}"; then
as_fn_error $? "conditional \"HAVE_TRACKER3\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
if test -z "${HAVE_CLOUDPRINT_TRUE}" && test -z "${HAVE_CLOUDPRINT_FALSE}"; then
as_fn_error $? "conditional \"HAVE_CLOUDPRINT\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
if test -z "${HAVE_CLOUDPRINT_TRUE}" && test -z "${HAVE_CLOUDPRINT_FALSE}"; then
as_fn_error $? "conditional \"HAVE_CLOUDPRINT\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
if test -z "${TEST_PRINT_BACKEND_TRUE}" && test -z "${TEST_PRINT_BACKEND_FALSE}"; then
as_fn_error $? "conditional \"TEST_PRINT_BACKEND\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
@ -30227,7 +30009,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.29, which was
This file was extended by gtk+ $as_me 3.24.30, which was
generated by GNU Autoconf 2.69. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@ -30293,7 +30075,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.29
gtk+ config.status 3.24.30
configured by $0, generated by GNU Autoconf 2.69,
with options \\"\$ac_cs_config\\"
@ -30904,7 +30686,6 @@ do
"modules/input/Makefile") CONFIG_FILES="$CONFIG_FILES modules/input/Makefile" ;;
"modules/printbackends/Makefile") CONFIG_FILES="$CONFIG_FILES modules/printbackends/Makefile" ;;
"modules/printbackends/cups/Makefile") CONFIG_FILES="$CONFIG_FILES modules/printbackends/cups/Makefile" ;;
"modules/printbackends/cloudprint/Makefile") CONFIG_FILES="$CONFIG_FILES modules/printbackends/cloudprint/Makefile" ;;
"modules/printbackends/lpr/Makefile") CONFIG_FILES="$CONFIG_FILES modules/printbackends/lpr/Makefile" ;;
"modules/printbackends/file/Makefile") CONFIG_FILES="$CONFIG_FILES modules/printbackends/file/Makefile" ;;
"modules/printbackends/papi/Makefile") CONFIG_FILES="$CONFIG_FILES modules/printbackends/papi/Makefile" ;;

View File

@ -10,8 +10,8 @@
m4_define([gtk_major_version], [3])
m4_define([gtk_minor_version], [24])
m4_define([gtk_micro_version], [29])
m4_define([gtk_interface_age], [25])
m4_define([gtk_micro_version], [30])
m4_define([gtk_interface_age], [26])
m4_define([gtk_binary_age],
[m4_eval(100 * gtk_minor_version + gtk_micro_version)])
m4_define([gtk_version],
@ -1576,38 +1576,6 @@ fi
AM_CONDITIONAL(HAVE_TRACKER3, test "x$have_tracker3" = "xyes")
# Checks to see if we should compile with cloudprint backend for GTK+
#
AC_ARG_ENABLE(cloudprint,
[AS_HELP_STRING([--disable-cloudprint],
[disable cloudprint print backend])],,
[enable_cloudprint=auto])
if test "x$enable_cloudprint" = "xno"; then
AM_CONDITIONAL(HAVE_CLOUDPRINT, false)
else
PKG_CHECK_MODULES(REST, [rest-0.7], have_rest=yes, have_rest=no)
PKG_CHECK_MODULES(JSON_GLIB, [json-glib-1.0], have_json_glib=yes, have_json_glib=no)
if test "x$have_rest" = "xyes" -a "x$have_json_glib" = "xyes"; then
PRINT_BACKENDS="$PRINT_BACKENDS cloudprint"
have_cloudprint=yes
fi
AM_CONDITIONAL(HAVE_CLOUDPRINT, test "x$have_cloudprint" = "xyes")
fi
if test "x$enable_cloudprint" = "xyes" -a "x$have_rest" = "xno"; then
AC_MSG_ERROR([
*** rest not found.
])
fi
if test "x$enable_cloudprint" = "xyes" -a "x$have_json_glib" = "xno"; then
AC_MSG_ERROR([
*** json-glib not found.
])
fi
gtk_save_cppflags="$CPPFLAGS"
CPPFLAGS="$CPPFLAGS $GTK_DEP_CFLAGS $GDK_DEP_CFLAGS"
@ -1650,9 +1618,6 @@ fi
if test "$have_papi" != "yes" -a "$have_cups" != "yes"; then
GTK_PRINT_BACKENDS="$GTK_PRINT_BACKENDS,lpr"
fi
if test "$have_cloudprint" = "yes"; then
GTK_PRINT_BACKENDS="$GTK_PRINT_BACKENDS,cloudprint"
fi
AC_SUBST(GTK_PRINT_BACKENDS)
################################################################
@ -1994,7 +1959,6 @@ modules/Makefile
modules/input/Makefile
modules/printbackends/Makefile
modules/printbackends/cups/Makefile
modules/printbackends/cloudprint/Makefile
modules/printbackends/lpr/Makefile
modules/printbackends/file/Makefile
modules/printbackends/papi/Makefile

View File

@ -330,8 +330,6 @@ INTROSPECTION_REQUIRED_VERSION = @INTROSPECTION_REQUIRED_VERSION@
INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
ISO_CODES_PREFIX = @ISO_CODES_PREFIX@
JSON_GLIB_CFLAGS = @JSON_GLIB_CFLAGS@
JSON_GLIB_LIBS = @JSON_GLIB_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LDFLAGS_FOR_BUILD = @LDFLAGS_FOR_BUILD@
@ -380,8 +378,6 @@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
POSUB = @POSUB@
RANLIB = @RANLIB@
REST_CFLAGS = @REST_CFLAGS@
REST_LIBS = @REST_LIBS@
SASSC = @SASSC@
SED = @SED@
SET_MAKE = @SET_MAKE@

View File

@ -494,8 +494,6 @@ INTROSPECTION_REQUIRED_VERSION = @INTROSPECTION_REQUIRED_VERSION@
INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
ISO_CODES_PREFIX = @ISO_CODES_PREFIX@
JSON_GLIB_CFLAGS = @JSON_GLIB_CFLAGS@
JSON_GLIB_LIBS = @JSON_GLIB_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LDFLAGS_FOR_BUILD = @LDFLAGS_FOR_BUILD@
@ -544,8 +542,6 @@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
POSUB = @POSUB@
RANLIB = @RANLIB@
REST_CFLAGS = @REST_CFLAGS@
REST_LIBS = @REST_LIBS@
SASSC = @SASSC@
SED = @SED@
SET_MAKE = @SET_MAKE@

View File

@ -388,8 +388,6 @@ INTROSPECTION_REQUIRED_VERSION = @INTROSPECTION_REQUIRED_VERSION@
INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
ISO_CODES_PREFIX = @ISO_CODES_PREFIX@
JSON_GLIB_CFLAGS = @JSON_GLIB_CFLAGS@
JSON_GLIB_LIBS = @JSON_GLIB_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LDFLAGS_FOR_BUILD = @LDFLAGS_FOR_BUILD@
@ -438,8 +436,6 @@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
POSUB = @POSUB@
RANLIB = @RANLIB@
REST_CFLAGS = @REST_CFLAGS@
REST_LIBS = @REST_LIBS@
SASSC = @SASSC@
SED = @SED@
SET_MAKE = @SET_MAKE@

View File

@ -366,8 +366,6 @@ INTROSPECTION_REQUIRED_VERSION = @INTROSPECTION_REQUIRED_VERSION@
INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
ISO_CODES_PREFIX = @ISO_CODES_PREFIX@
JSON_GLIB_CFLAGS = @JSON_GLIB_CFLAGS@
JSON_GLIB_LIBS = @JSON_GLIB_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LDFLAGS_FOR_BUILD = @LDFLAGS_FOR_BUILD@
@ -416,8 +414,6 @@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
POSUB = @POSUB@
RANLIB = @RANLIB@
REST_CFLAGS = @REST_CFLAGS@
REST_LIBS = @REST_LIBS@
SASSC = @SASSC@
SED = @SED@
SET_MAKE = @SET_MAKE@

View File

@ -330,8 +330,6 @@ INTROSPECTION_REQUIRED_VERSION = @INTROSPECTION_REQUIRED_VERSION@
INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
ISO_CODES_PREFIX = @ISO_CODES_PREFIX@
JSON_GLIB_CFLAGS = @JSON_GLIB_CFLAGS@
JSON_GLIB_LIBS = @JSON_GLIB_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LDFLAGS_FOR_BUILD = @LDFLAGS_FOR_BUILD@
@ -380,8 +378,6 @@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
POSUB = @POSUB@
RANLIB = @RANLIB@
REST_CFLAGS = @REST_CFLAGS@
REST_LIBS = @REST_LIBS@
SASSC = @SASSC@
SED = @SED@
SET_MAKE = @SET_MAKE@

View File

@ -330,8 +330,6 @@ INTROSPECTION_REQUIRED_VERSION = @INTROSPECTION_REQUIRED_VERSION@
INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
ISO_CODES_PREFIX = @ISO_CODES_PREFIX@
JSON_GLIB_CFLAGS = @JSON_GLIB_CFLAGS@
JSON_GLIB_LIBS = @JSON_GLIB_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LDFLAGS_FOR_BUILD = @LDFLAGS_FOR_BUILD@
@ -380,8 +378,6 @@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
POSUB = @POSUB@
RANLIB = @RANLIB@
REST_CFLAGS = @REST_CFLAGS@
REST_LIBS = @REST_LIBS@
SASSC = @SASSC@
SED = @SED@
SET_MAKE = @SET_MAKE@

View File

@ -293,8 +293,6 @@ INTROSPECTION_REQUIRED_VERSION = @INTROSPECTION_REQUIRED_VERSION@
INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
ISO_CODES_PREFIX = @ISO_CODES_PREFIX@
JSON_GLIB_CFLAGS = @JSON_GLIB_CFLAGS@
JSON_GLIB_LIBS = @JSON_GLIB_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LDFLAGS_FOR_BUILD = @LDFLAGS_FOR_BUILD@
@ -343,8 +341,6 @@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
POSUB = @POSUB@
RANLIB = @RANLIB@
REST_CFLAGS = @REST_CFLAGS@
REST_LIBS = @REST_LIBS@
SASSC = @SASSC@
SED = @SED@
SET_MAKE = @SET_MAKE@

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.29
This document is for the GDK 3 library, version 3.24.30
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

@ -1 +1 @@
3.24.29
3.24.30

View File

@ -325,8 +325,6 @@ INTROSPECTION_REQUIRED_VERSION = @INTROSPECTION_REQUIRED_VERSION@
INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
ISO_CODES_PREFIX = @ISO_CODES_PREFIX@
JSON_GLIB_CFLAGS = @JSON_GLIB_CFLAGS@
JSON_GLIB_LIBS = @JSON_GLIB_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LDFLAGS_FOR_BUILD = @LDFLAGS_FOR_BUILD@
@ -375,8 +373,6 @@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
POSUB = @POSUB@
RANLIB = @RANLIB@
REST_CFLAGS = @REST_CFLAGS@
REST_LIBS = @REST_LIBS@
SASSC = @SASSC@
SED = @SED@
SET_MAKE = @SET_MAKE@

View File

@ -2,7 +2,7 @@
.\" Title: broadwayd
.\" Author: Alexander Larsson
.\" Generator: DocBook XSL Stylesheets vsnapshot <http://docbook.sf.net/>
.\" Date: 04/22/2021
.\" Date: 07/08/2021
.\" 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/22/2021
.\" Date: 07/08/2021
.\" 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/22/2021
.\" Date: 07/08/2021
.\" 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/22/2021
.\" Date: 07/08/2021
.\" 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/22/2021
.\" Date: 07/08/2021
.\" 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/22/2021
.\" Date: 07/08/2021
.\" 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/22/2021
.\" Date: 07/08/2021
.\" 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/22/2021
.\" Date: 07/08/2021
.\" 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/22/2021
.\" Date: 07/08/2021
.\" 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/22/2021
.\" Date: 07/08/2021
.\" 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/22/2021
.\" Date: 07/08/2021
.\" Manual: User Commands
.\" Source: GTK+
.\" Language: English

View File

@ -1963,7 +1963,7 @@ dialog. Available print backends depend on the GTK+ installation,
and may include "file", "cups", "lpr" or "papi".</p>
<p>Owner: GtkSettings</p>
<p>Flags: Read / Write</p>
<p>Default value: "file,lpr"</p>
<p>Default value: "file,cups"</p>
<p class="since">Since: 2.10</p>
</div>
<hr>

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 (29)
<pre class="programlisting">#define GTK_MICRO_VERSION (30)
</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 (2429)
<pre class="programlisting">#define GTK_BINARY_AGE (2430)
</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 (25)
<pre class="programlisting">#define GTK_INTERFACE_AGE (26)
</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

@ -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.29
This document is for the GTK+ 3 library, version 3.24.30
.
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

@ -1 +1 @@
3.24.29
3.24.30

View File

@ -293,8 +293,6 @@ INTROSPECTION_REQUIRED_VERSION = @INTROSPECTION_REQUIRED_VERSION@
INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
ISO_CODES_PREFIX = @ISO_CODES_PREFIX@
JSON_GLIB_CFLAGS = @JSON_GLIB_CFLAGS@
JSON_GLIB_LIBS = @JSON_GLIB_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LDFLAGS_FOR_BUILD = @LDFLAGS_FOR_BUILD@
@ -343,8 +341,6 @@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
POSUB = @POSUB@
RANLIB = @RANLIB@
REST_CFLAGS = @REST_CFLAGS@
REST_LIBS = @REST_LIBS@
SASSC = @SASSC@
SED = @SED@
SET_MAKE = @SET_MAKE@

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.29
Version 3.24.30
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

@ -1 +1 @@
3.24.29
3.24.30

View File

@ -328,8 +328,6 @@ INTROSPECTION_REQUIRED_VERSION = @INTROSPECTION_REQUIRED_VERSION@
INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
ISO_CODES_PREFIX = @ISO_CODES_PREFIX@
JSON_GLIB_CFLAGS = @JSON_GLIB_CFLAGS@
JSON_GLIB_LIBS = @JSON_GLIB_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LDFLAGS_FOR_BUILD = @LDFLAGS_FOR_BUILD@
@ -378,8 +376,6 @@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
POSUB = @POSUB@
RANLIB = @RANLIB@
REST_CFLAGS = @REST_CFLAGS@
REST_LIBS = @REST_LIBS@
SASSC = @SASSC@
SED = @SED@
SET_MAKE = @SET_MAKE@

View File

@ -422,8 +422,6 @@ INTROSPECTION_REQUIRED_VERSION = @INTROSPECTION_REQUIRED_VERSION@
INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
ISO_CODES_PREFIX = @ISO_CODES_PREFIX@
JSON_GLIB_CFLAGS = @JSON_GLIB_CFLAGS@
JSON_GLIB_LIBS = @JSON_GLIB_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LDFLAGS_FOR_BUILD = @LDFLAGS_FOR_BUILD@
@ -472,8 +470,6 @@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
POSUB = @POSUB@
RANLIB = @RANLIB@
REST_CFLAGS = @REST_CFLAGS@
REST_LIBS = @REST_LIBS@
SASSC = @SASSC@
SED = @SED@
SET_MAKE = @SET_MAKE@

View File

@ -330,8 +330,6 @@ INTROSPECTION_REQUIRED_VERSION = @INTROSPECTION_REQUIRED_VERSION@
INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
ISO_CODES_PREFIX = @ISO_CODES_PREFIX@
JSON_GLIB_CFLAGS = @JSON_GLIB_CFLAGS@
JSON_GLIB_LIBS = @JSON_GLIB_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LDFLAGS_FOR_BUILD = @LDFLAGS_FOR_BUILD@
@ -380,8 +378,6 @@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
POSUB = @POSUB@
RANLIB = @RANLIB@
REST_CFLAGS = @REST_CFLAGS@
REST_LIBS = @REST_LIBS@
SASSC = @SASSC@
SED = @SED@
SET_MAKE = @SET_MAKE@

View File

@ -334,8 +334,6 @@ INTROSPECTION_REQUIRED_VERSION = @INTROSPECTION_REQUIRED_VERSION@
INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
ISO_CODES_PREFIX = @ISO_CODES_PREFIX@
JSON_GLIB_CFLAGS = @JSON_GLIB_CFLAGS@
JSON_GLIB_LIBS = @JSON_GLIB_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LDFLAGS_FOR_BUILD = @LDFLAGS_FOR_BUILD@
@ -384,8 +382,6 @@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
POSUB = @POSUB@
RANLIB = @RANLIB@
REST_CFLAGS = @REST_CFLAGS@
REST_LIBS = @REST_LIBS@
SASSC = @SASSC@
SED = @SED@
SET_MAKE = @SET_MAKE@

View File

@ -332,8 +332,6 @@ INTROSPECTION_REQUIRED_VERSION = @INTROSPECTION_REQUIRED_VERSION@
INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
ISO_CODES_PREFIX = @ISO_CODES_PREFIX@
JSON_GLIB_CFLAGS = @JSON_GLIB_CFLAGS@
JSON_GLIB_LIBS = @JSON_GLIB_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LDFLAGS_FOR_BUILD = @LDFLAGS_FOR_BUILD@
@ -382,8 +380,6 @@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
POSUB = @POSUB@
RANLIB = @RANLIB@
REST_CFLAGS = @REST_CFLAGS@
REST_LIBS = @REST_LIBS@
SASSC = @SASSC@
SED = @SED@
SET_MAKE = @SET_MAKE@

View File

@ -332,8 +332,6 @@ INTROSPECTION_REQUIRED_VERSION = @INTROSPECTION_REQUIRED_VERSION@
INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
ISO_CODES_PREFIX = @ISO_CODES_PREFIX@
JSON_GLIB_CFLAGS = @JSON_GLIB_CFLAGS@
JSON_GLIB_LIBS = @JSON_GLIB_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LDFLAGS_FOR_BUILD = @LDFLAGS_FOR_BUILD@
@ -382,8 +380,6 @@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
POSUB = @POSUB@
RANLIB = @RANLIB@
REST_CFLAGS = @REST_CFLAGS@
REST_LIBS = @REST_LIBS@
SASSC = @SASSC@
SED = @SED@
SET_MAKE = @SET_MAKE@

View File

@ -332,8 +332,6 @@ INTROSPECTION_REQUIRED_VERSION = @INTROSPECTION_REQUIRED_VERSION@
INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
ISO_CODES_PREFIX = @ISO_CODES_PREFIX@
JSON_GLIB_CFLAGS = @JSON_GLIB_CFLAGS@
JSON_GLIB_LIBS = @JSON_GLIB_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LDFLAGS_FOR_BUILD = @LDFLAGS_FOR_BUILD@
@ -382,8 +380,6 @@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
POSUB = @POSUB@
RANLIB = @RANLIB@
REST_CFLAGS = @REST_CFLAGS@
REST_LIBS = @REST_LIBS@
SASSC = @SASSC@
SED = @SED@
SET_MAKE = @SET_MAKE@

View File

@ -332,8 +332,6 @@ INTROSPECTION_REQUIRED_VERSION = @INTROSPECTION_REQUIRED_VERSION@
INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
ISO_CODES_PREFIX = @ISO_CODES_PREFIX@
JSON_GLIB_CFLAGS = @JSON_GLIB_CFLAGS@
JSON_GLIB_LIBS = @JSON_GLIB_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LDFLAGS_FOR_BUILD = @LDFLAGS_FOR_BUILD@
@ -382,8 +380,6 @@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
POSUB = @POSUB@
RANLIB = @RANLIB@
REST_CFLAGS = @REST_CFLAGS@
REST_LIBS = @REST_LIBS@
SASSC = @SASSC@
SED = @SED@
SET_MAKE = @SET_MAKE@

View File

@ -334,8 +334,6 @@ INTROSPECTION_REQUIRED_VERSION = @INTROSPECTION_REQUIRED_VERSION@
INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
ISO_CODES_PREFIX = @ISO_CODES_PREFIX@
JSON_GLIB_CFLAGS = @JSON_GLIB_CFLAGS@
JSON_GLIB_LIBS = @JSON_GLIB_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LDFLAGS_FOR_BUILD = @LDFLAGS_FOR_BUILD@
@ -384,8 +382,6 @@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
POSUB = @POSUB@
RANLIB = @RANLIB@
REST_CFLAGS = @REST_CFLAGS@
REST_LIBS = @REST_LIBS@
SASSC = @SASSC@
SED = @SED@
SET_MAKE = @SET_MAKE@

View File

@ -334,8 +334,6 @@ INTROSPECTION_REQUIRED_VERSION = @INTROSPECTION_REQUIRED_VERSION@
INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
ISO_CODES_PREFIX = @ISO_CODES_PREFIX@
JSON_GLIB_CFLAGS = @JSON_GLIB_CFLAGS@
JSON_GLIB_LIBS = @JSON_GLIB_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LDFLAGS_FOR_BUILD = @LDFLAGS_FOR_BUILD@
@ -384,8 +382,6 @@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
POSUB = @POSUB@
RANLIB = @RANLIB@
REST_CFLAGS = @REST_CFLAGS@
REST_LIBS = @REST_LIBS@
SASSC = @SASSC@
SED = @SED@
SET_MAKE = @SET_MAKE@

View File

@ -334,8 +334,6 @@ INTROSPECTION_REQUIRED_VERSION = @INTROSPECTION_REQUIRED_VERSION@
INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
ISO_CODES_PREFIX = @ISO_CODES_PREFIX@
JSON_GLIB_CFLAGS = @JSON_GLIB_CFLAGS@
JSON_GLIB_LIBS = @JSON_GLIB_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LDFLAGS_FOR_BUILD = @LDFLAGS_FOR_BUILD@
@ -384,8 +382,6 @@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
POSUB = @POSUB@
RANLIB = @RANLIB@
REST_CFLAGS = @REST_CFLAGS@
REST_LIBS = @REST_LIBS@
SASSC = @SASSC@
SED = @SED@
SET_MAKE = @SET_MAKE@

View File

@ -334,8 +334,6 @@ INTROSPECTION_REQUIRED_VERSION = @INTROSPECTION_REQUIRED_VERSION@
INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
ISO_CODES_PREFIX = @ISO_CODES_PREFIX@
JSON_GLIB_CFLAGS = @JSON_GLIB_CFLAGS@
JSON_GLIB_LIBS = @JSON_GLIB_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LDFLAGS_FOR_BUILD = @LDFLAGS_FOR_BUILD@
@ -384,8 +382,6 @@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
POSUB = @POSUB@
RANLIB = @RANLIB@
REST_CFLAGS = @REST_CFLAGS@
REST_LIBS = @REST_LIBS@
SASSC = @SASSC@
SED = @SED@
SET_MAKE = @SET_MAKE@

View File

@ -325,8 +325,6 @@ INTROSPECTION_REQUIRED_VERSION = @INTROSPECTION_REQUIRED_VERSION@
INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
ISO_CODES_PREFIX = @ISO_CODES_PREFIX@
JSON_GLIB_CFLAGS = @JSON_GLIB_CFLAGS@
JSON_GLIB_LIBS = @JSON_GLIB_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LDFLAGS_FOR_BUILD = @LDFLAGS_FOR_BUILD@
@ -375,8 +373,6 @@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
POSUB = @POSUB@
RANLIB = @RANLIB@
REST_CFLAGS = @REST_CFLAGS@
REST_LIBS = @REST_LIBS@
SASSC = @SASSC@
SED = @SED@
SET_MAKE = @SET_MAKE@

View File

@ -548,8 +548,6 @@ INTROSPECTION_REQUIRED_VERSION = @INTROSPECTION_REQUIRED_VERSION@
INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
ISO_CODES_PREFIX = @ISO_CODES_PREFIX@
JSON_GLIB_CFLAGS = @JSON_GLIB_CFLAGS@
JSON_GLIB_LIBS = @JSON_GLIB_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LDFLAGS_FOR_BUILD = @LDFLAGS_FOR_BUILD@
@ -598,8 +596,6 @@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
POSUB = @POSUB@
RANLIB = @RANLIB@
REST_CFLAGS = @REST_CFLAGS@
REST_LIBS = @REST_LIBS@
SASSC = @SASSC@
SED = @SED@
SET_MAKE = @SET_MAKE@

View File

@ -418,8 +418,6 @@ INTROSPECTION_REQUIRED_VERSION = @INTROSPECTION_REQUIRED_VERSION@
INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
ISO_CODES_PREFIX = @ISO_CODES_PREFIX@
JSON_GLIB_CFLAGS = @JSON_GLIB_CFLAGS@
JSON_GLIB_LIBS = @JSON_GLIB_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LDFLAGS_FOR_BUILD = @LDFLAGS_FOR_BUILD@
@ -468,8 +466,6 @@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
POSUB = @POSUB@
RANLIB = @RANLIB@
REST_CFLAGS = @REST_CFLAGS@
REST_LIBS = @REST_LIBS@
SASSC = @SASSC@
SED = @SED@
SET_MAKE = @SET_MAKE@

View File

@ -370,7 +370,7 @@ gdk_cairo_draw_from_gl (cairo_t *cr,
paint_data = gdk_gl_context_get_paint_data (paint_context);
if (paint_data->tmp_framebuffer == 0)
glGenFramebuffersEXT (1, &paint_data->tmp_framebuffer);
glGenFramebuffers (1, &paint_data->tmp_framebuffer);
if (source_type == GL_RENDERBUFFER)
{
@ -423,10 +423,10 @@ gdk_cairo_draw_from_gl (cairo_t *cr,
/* Create a framebuffer with the source renderbuffer and
make it the current target for reads */
framebuffer = paint_data->tmp_framebuffer;
glBindFramebufferEXT (GL_FRAMEBUFFER_EXT, framebuffer);
glFramebufferRenderbufferEXT (GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT,
GL_RENDERBUFFER_EXT, source);
glBindFramebufferEXT (GL_DRAW_FRAMEBUFFER_EXT, 0);
glBindFramebuffer (GL_FRAMEBUFFER, framebuffer);
glFramebufferRenderbuffer (GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
GL_RENDERBUFFER, source);
glBindFramebuffer (GL_DRAW_FRAMEBUFFER, 0);
/* Translate to impl coords */
cairo_region_translate (clip_region, dx, dy);
@ -481,11 +481,11 @@ gdk_cairo_draw_from_gl (cairo_t *cr,
{
int clipped_src_x = x + (dest.x - dx * window_scale);
int clipped_src_y = y + (height - dest.height - (dest.y - dy * window_scale));
glBlitFramebufferEXT(clipped_src_x, clipped_src_y,
(clipped_src_x + dest.width), (clipped_src_y + dest.height),
dest.x, FLIP_Y(dest.y + dest.height),
dest.x + dest.width, FLIP_Y(dest.y),
GL_COLOR_BUFFER_BIT, GL_NEAREST);
glBlitFramebuffer (clipped_src_x, clipped_src_y,
(clipped_src_x + dest.width), (clipped_src_y + dest.height),
dest.x, FLIP_Y(dest.y + dest.height),
dest.x + dest.width, FLIP_Y(dest.y),
GL_COLOR_BUFFER_BIT, GL_NEAREST);
if (impl_window->current_paint.flushed_region)
{
cairo_rectangle_int_t flushed_rect;
@ -505,7 +505,7 @@ gdk_cairo_draw_from_gl (cairo_t *cr,
glDisable (GL_SCISSOR_TEST);
glBindFramebufferEXT (GL_FRAMEBUFFER_EXT, 0);
glBindFramebuffer (GL_FRAMEBUFFER, 0);
#undef FLIP_Y
@ -671,19 +671,19 @@ gdk_cairo_draw_from_gl (cairo_t *cr,
cairo_surface_set_device_scale (image, buffer_scale, buffer_scale);
framebuffer = paint_data->tmp_framebuffer;
glBindFramebufferEXT (GL_FRAMEBUFFER_EXT, framebuffer);
glBindFramebuffer (GL_FRAMEBUFFER, framebuffer);
if (source_type == GL_RENDERBUFFER)
{
/* Create a framebuffer with the source renderbuffer and
make it the current target for reads */
glFramebufferRenderbufferEXT (GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT,
GL_RENDERBUFFER_EXT, source);
glFramebufferRenderbuffer (GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
GL_RENDERBUFFER, source);
}
else
{
glFramebufferTexture2DEXT (GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT,
GL_TEXTURE_2D, source, 0);
glFramebufferTexture2D (GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
GL_TEXTURE_2D, source, 0);
}
glPixelStorei (GL_PACK_ALIGNMENT, 4);
@ -699,7 +699,7 @@ gdk_cairo_draw_from_gl (cairo_t *cr,
glPixelStorei (GL_PACK_ROW_LENGTH, 0);
glBindFramebufferEXT (GL_FRAMEBUFFER_EXT, 0);
glBindFramebuffer (GL_FRAMEBUFFER, 0);
cairo_surface_mark_dirty (image);

View File

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

View File

@ -803,8 +803,7 @@ update_context_from_dragging_info (id <NSDraggingInfo> sender)
gdk_event_free (event);
g_object_unref (_gdk_quartz_drag_source_context);
_gdk_quartz_drag_source_context = NULL;
_gdk_quartz_drag_source_context_destroy_gtk_only ();
}
#ifdef AVAILABLE_MAC_OS_X_VERSION_10_7_AND_LATER

View File

@ -380,8 +380,6 @@ INTROSPECTION_REQUIRED_VERSION = @INTROSPECTION_REQUIRED_VERSION@
INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
ISO_CODES_PREFIX = @ISO_CODES_PREFIX@
JSON_GLIB_CFLAGS = @JSON_GLIB_CFLAGS@
JSON_GLIB_LIBS = @JSON_GLIB_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LDFLAGS_FOR_BUILD = @LDFLAGS_FOR_BUILD@
@ -430,8 +428,6 @@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
POSUB = @POSUB@
RANLIB = @RANLIB@
REST_CFLAGS = @REST_CFLAGS@
REST_LIBS = @REST_LIBS@
SASSC = @SASSC@
SED = @SED@
SET_MAKE = @SET_MAKE@

View File

@ -59,6 +59,14 @@ _gdk_quartz_window_drag_begin (GdkWindow *window,
return _gdk_quartz_drag_source_context;
}
void
_gdk_quartz_drag_source_context_destroy_gtk_only ()
{
if (_gdk_quartz_drag_source_context)
g_object_unref (_gdk_quartz_drag_source_context);
_gdk_quartz_drag_source_context = NULL;
}
static gboolean
gdk_quartz_drag_context_drag_motion (GdkDragContext *context,
GdkWindow *dest_window,

View File

@ -79,14 +79,10 @@ typedef enum {
#define GDK_QUARTZ_EVENT_TABLET_PROXIMITY NSEventTypeTabletProximity
#define GDK_QUARTZ_EVENT_SUBTYPE_TABLET_PROXIMITY NSEventSubtypeTabletProximity
#define GDK_QUARTZ_EVENT_SUBTYPE_TABLET_POINT NSEventSubtypeTabletPoint
#elif MAC_OS_X_VERSION_MIN_REQUIRED >= 10120
#else
#define GDK_QUARTZ_EVENT_TABLET_PROXIMITY NSTabletProximity
#define GDK_QUARTZ_EVENT_SUBTYPE_TABLET_PROXIMITY NSTabletProximityEventSubtype
#define GDK_QUARTZ_EVENT_SUBTYPE_TABLET_POINT NSTabletPointEventSubtype
#else
#define GDK_QUARTZ_EVENT_TABLET_PROXIMITY kEventTabletProximity
#define GDK_QUARTZ_EVENT_SUBTYPE_TABLET_PROXIMITY NSTabletProximityEventSubtype
#define GDK_QUARTZ_EVENT_SUBTYPE_TABLET_POINT kCGEventMouseSubtypeTabletPoint
#endif
void _gdk_quartz_events_update_focus_window (GdkWindow *new_window,

View File

@ -51,6 +51,9 @@ id gdk_quartz_drag_context_get_dragging_info_libgtk_only (GdkDragContext
GDK_AVAILABLE_IN_ALL
GdkDragContext *gdk_quartz_drag_source_context_libgtk_only (void);
GDK_AVAILABLE_IN_3_24
void _gdk_quartz_drag_source_context_destroy_gtk_only ();
G_END_DECLS
#endif /* __GDK_QUARTZ_DRAG_CONTEXT_H__ */

View File

@ -2228,7 +2228,7 @@ _gdk_quartz_window_set_collection_behavior (NSWindow *nswindow,
GdkWindowTypeHint hint)
{
#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1070
#if MAC_OS_X_VERSION_MAX_ALLOWED >= 10110
#if MAC_OS_X_VERSION_MIN_REQUIRED >= 101100
#define GDK_QUARTZ_ALLOWS_TILING NSWindowCollectionBehaviorFullScreenAllowsTiling
#define GDK_QUARTZ_DISALLOWS_TILING NSWindowCollectionBehaviorFullScreenDisallowsTiling
#else

View File

@ -393,8 +393,6 @@ INTROSPECTION_REQUIRED_VERSION = @INTROSPECTION_REQUIRED_VERSION@
INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
ISO_CODES_PREFIX = @ISO_CODES_PREFIX@
JSON_GLIB_CFLAGS = @JSON_GLIB_CFLAGS@
JSON_GLIB_LIBS = @JSON_GLIB_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LDFLAGS_FOR_BUILD = @LDFLAGS_FOR_BUILD@
@ -443,8 +441,6 @@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
POSUB = @POSUB@
RANLIB = @RANLIB@
REST_CFLAGS = @REST_CFLAGS@
REST_LIBS = @REST_LIBS@
SASSC = @SASSC@
SED = @SED@
SET_MAKE = @SET_MAKE@

View File

@ -460,12 +460,12 @@ gdk_registry_handle_global (void *data,
display_wayland->subcompositor =
wl_registry_bind (display_wayland->wl_registry, id, &wl_subcompositor_interface, 1);
}
else if (strcmp (interface, "zwp_pointer_gestures_v1") == 0 &&
version == GDK_ZWP_POINTER_GESTURES_V1_VERSION)
else if (strcmp (interface, "zwp_pointer_gestures_v1") == 0)
{
display_wayland->pointer_gestures =
wl_registry_bind (display_wayland->wl_registry,
id, &zwp_pointer_gestures_v1_interface, version);
id, &zwp_pointer_gestures_v1_interface,
MIN (version, GDK_ZWP_POINTER_GESTURES_V1_VERSION));
}
else if (strcmp (interface, "gtk_primary_selection_device_manager") == 0)
{

View File

@ -1638,7 +1638,21 @@ output_handle_geometry (void *data,
monitor->x = x;
monitor->y = y;
gdk_monitor_set_physical_size (GDK_MONITOR (monitor), physical_width, physical_height);
switch (transform)
{
case WL_OUTPUT_TRANSFORM_90:
case WL_OUTPUT_TRANSFORM_270:
case WL_OUTPUT_TRANSFORM_FLIPPED_90:
case WL_OUTPUT_TRANSFORM_FLIPPED_270:
gdk_monitor_set_physical_size (GDK_MONITOR (monitor),
physical_height, physical_width);
break;
default:
gdk_monitor_set_physical_size (GDK_MONITOR (monitor),
physical_width, physical_height);
}
gdk_monitor_set_subpixel_layout (GDK_MONITOR (monitor), subpixel);
gdk_monitor_set_manufacturer (GDK_MONITOR (monitor), make);
gdk_monitor_set_model (GDK_MONITOR (monitor), model);

View File

@ -21,7 +21,10 @@ if WIN32_GLES
AM_CPPFLAGS += "-DGDK_WIN32_ENABLE_EGL=1"
endif #WIN32_GLES
LDADDS = $(GDK_DEP_LIBS)
libgdk_win32_DEP_LIBS = \
hid.lib
LDADDS = $(libgdk_win32_DEP_LIBS) $(GDK_DEP_LIBS)
noinst_LTLIBRARIES = libgdk-win32.la
@ -40,6 +43,8 @@ libgdk_win32_la_SOURCES = \
gdkdevice-virtual.h \
gdkdevice-win32.c \
gdkdevice-win32.h \
gdkdevice-winpointer.c \
gdkdevice-winpointer.h \
gdkdevice-wintab.c \
gdkdevice-wintab.h \
gdkdisplay-win32.c \

View File

@ -146,13 +146,13 @@ LTLIBRARIES = $(noinst_LTLIBRARIES)
libgdk_win32_la_LIBADD =
am_libgdk_win32_la_OBJECTS = gdkcursor-win32.lo \
gdkdevicemanager-win32.lo gdkdevice-virtual.lo \
gdkdevice-win32.lo gdkdevice-wintab.lo gdkdisplay-win32.lo \
gdkdisplaymanager-win32.lo gdkdnd-win32.lo gdkevents-win32.lo \
gdkgeometry-win32.lo gdkglcontext-win32.lo gdkglobals-win32.lo \
gdkkeys-win32.lo gdkmain-win32.lo gdkmonitor-win32.lo \
gdkproperty-win32.lo gdkscreen-win32.lo gdkselection-win32.lo \
gdktestutils-win32.lo gdkwin32langnotification.lo \
gdkwin32id.lo gdkwindow-win32.lo
gdkdevice-win32.lo gdkdevice-winpointer.lo gdkdevice-wintab.lo \
gdkdisplay-win32.lo gdkdisplaymanager-win32.lo gdkdnd-win32.lo \
gdkevents-win32.lo gdkgeometry-win32.lo gdkglcontext-win32.lo \
gdkglobals-win32.lo gdkkeys-win32.lo gdkmain-win32.lo \
gdkmonitor-win32.lo gdkproperty-win32.lo gdkscreen-win32.lo \
gdkselection-win32.lo gdktestutils-win32.lo \
gdkwin32langnotification.lo gdkwin32id.lo gdkwindow-win32.lo
libgdk_win32_la_OBJECTS = $(am_libgdk_win32_la_OBJECTS)
AM_V_lt = $(am__v_lt_@AM_V@)
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
@ -176,6 +176,7 @@ am__maybe_remake_depfiles = depfiles
am__depfiles_remade = ./$(DEPDIR)/gdkcursor-win32.Plo \
./$(DEPDIR)/gdkdevice-virtual.Plo \
./$(DEPDIR)/gdkdevice-win32.Plo \
./$(DEPDIR)/gdkdevice-winpointer.Plo \
./$(DEPDIR)/gdkdevice-wintab.Plo \
./$(DEPDIR)/gdkdevicemanager-win32.Plo \
./$(DEPDIR)/gdkdisplay-win32.Plo \
@ -451,8 +452,6 @@ INTROSPECTION_REQUIRED_VERSION = @INTROSPECTION_REQUIRED_VERSION@
INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
ISO_CODES_PREFIX = @ISO_CODES_PREFIX@
JSON_GLIB_CFLAGS = @JSON_GLIB_CFLAGS@
JSON_GLIB_LIBS = @JSON_GLIB_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LDFLAGS_FOR_BUILD = @LDFLAGS_FOR_BUILD@
@ -501,8 +500,6 @@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
POSUB = @POSUB@
RANLIB = @RANLIB@
REST_CFLAGS = @REST_CFLAGS@
REST_LIBS = @REST_LIBS@
SASSC = @SASSC@
SED = @SED@
SET_MAKE = @SET_MAKE@
@ -627,7 +624,10 @@ AM_CPPFLAGS = -DG_LOG_DOMAIN=\"Gdk\" -DG_LOG_USE_STRUCTURED=1 \
-I$(top_builddir)/gdk $(GDK_HIDDEN_VISIBILITY_CFLAGS) \
$(GTK_DEBUG_FLAGS) $(GDK_DEP_CFLAGS) $(GDK_WIN32_EXTRA_CFLAGS) \
-DGDK_COMPILATION $(am__append_1)
LDADDS = $(GDK_DEP_LIBS)
libgdk_win32_DEP_LIBS = \
hid.lib
LDADDS = $(libgdk_win32_DEP_LIBS) $(GDK_DEP_LIBS)
noinst_LTLIBRARIES = libgdk-win32.la
SUBDIRS = rc
libgdk_win32_la_SOURCES = \
@ -638,6 +638,8 @@ libgdk_win32_la_SOURCES = \
gdkdevice-virtual.h \
gdkdevice-win32.c \
gdkdevice-win32.h \
gdkdevice-winpointer.c \
gdkdevice-winpointer.h \
gdkdevice-wintab.c \
gdkdevice-wintab.h \
gdkdisplay-win32.c \
@ -773,6 +775,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gdkcursor-win32.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gdkdevice-virtual.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gdkdevice-win32.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gdkdevice-winpointer.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gdkdevice-wintab.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gdkdevicemanager-win32.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gdkdisplay-win32.Plo@am__quote@ # am--include-marker
@ -1079,6 +1082,7 @@ distclean: distclean-recursive
-rm -f ./$(DEPDIR)/gdkcursor-win32.Plo
-rm -f ./$(DEPDIR)/gdkdevice-virtual.Plo
-rm -f ./$(DEPDIR)/gdkdevice-win32.Plo
-rm -f ./$(DEPDIR)/gdkdevice-winpointer.Plo
-rm -f ./$(DEPDIR)/gdkdevice-wintab.Plo
-rm -f ./$(DEPDIR)/gdkdevicemanager-win32.Plo
-rm -f ./$(DEPDIR)/gdkdisplay-win32.Plo
@ -1147,6 +1151,7 @@ maintainer-clean: maintainer-clean-recursive
-rm -f ./$(DEPDIR)/gdkcursor-win32.Plo
-rm -f ./$(DEPDIR)/gdkdevice-virtual.Plo
-rm -f ./$(DEPDIR)/gdkdevice-win32.Plo
-rm -f ./$(DEPDIR)/gdkdevice-winpointer.Plo
-rm -f ./$(DEPDIR)/gdkdevice-wintab.Plo
-rm -f ./$(DEPDIR)/gdkdevicemanager-win32.Plo
-rm -f ./$(DEPDIR)/gdkdisplay-win32.Plo

View File

@ -117,7 +117,7 @@ gdk_device_win32_query_state (GdkDevice *device,
impl = GDK_WINDOW_IMPL_WIN32 (window->impl);
hwnd = GDK_WINDOW_HWND (window);
GetCursorPos (&point);
_gdk_win32_get_cursor_pos (&point);
if (root_x)
*root_x = point.x / impl->window_scale;
@ -215,7 +215,7 @@ _gdk_device_win32_window_at_position (GdkDevice *device,
HWND hwnd;
RECT rect;
if (!GetCursorPos (&screen_pt))
if (!_gdk_win32_get_cursor_pos (&screen_pt))
return NULL;
hwnd = WindowFromPoint (screen_pt);

View File

@ -0,0 +1,321 @@
/* GDK - The GIMP Drawing Kit
* Copyright (C) 2020 the GTK team
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*/
#include "config.h"
#include <gdk/gdkwindow.h>
#include <windows.h>
#include "gdkwin32.h"
#include "gdkdevice-winpointer.h"
G_DEFINE_TYPE (GdkDeviceWinpointer, gdk_device_winpointer, GDK_TYPE_DEVICE)
static GdkModifierType
get_keyboard_mask (void)
{
GdkModifierType mask;
BYTE kbd[256];
GetKeyboardState (kbd);
mask = 0;
if (kbd[VK_SHIFT] & 0x80)
mask |= GDK_SHIFT_MASK;
if (kbd[VK_CAPITAL] & 0x80)
mask |= GDK_LOCK_MASK;
if (kbd[VK_CONTROL] & 0x80)
mask |= GDK_CONTROL_MASK;
if (kbd[VK_MENU] & 0x80)
mask |= GDK_MOD1_MASK;
return mask;
}
static gboolean
gdk_device_winpointer_get_history (GdkDevice *device,
GdkWindow *window,
guint32 start,
guint32 stop,
GdkTimeCoord ***events,
gint *n_events)
{
return FALSE;
}
static void
gdk_device_winpointer_get_state (GdkDevice *device,
GdkWindow *window,
gdouble *axes,
GdkModifierType *mask)
{
GdkDeviceWinpointer *device_winpointer = GDK_DEVICE_WINPOINTER (device);
if (mask)
{
*mask = get_keyboard_mask ();
*mask |= device_winpointer->last_button_mask;
}
if (axes)
{
gsize size = sizeof (double) * device_winpointer->num_axes;
memcpy (axes, device_winpointer->last_axis_data, size);
}
}
static void
gdk_device_winpointer_set_window_cursor (GdkDevice *device,
GdkWindow *window,
GdkCursor *cursor)
{
}
static void
gdk_device_winpointer_warp (GdkDevice *device,
GdkScreen *screen,
gdouble x,
gdouble y)
{
}
static void
gdk_device_winpointer_query_state (GdkDevice *device,
GdkWindow *window,
GdkWindow **root_window,
GdkWindow **child_window,
gdouble *root_x,
gdouble *root_y,
gdouble *win_x,
gdouble *win_y,
GdkModifierType *mask)
{
GdkDeviceWinpointer *device_winpointer = GDK_DEVICE_WINPOINTER (device);
GdkWindowImplWin32 *impl = GDK_WINDOW_IMPL_WIN32 (window->impl);
GdkScreen *screen = gdk_window_get_screen (window);
HWND hwnd = GDK_WINDOW_HWND (window);
HWND hwndc = NULL;
POINT point;
_gdk_win32_get_cursor_pos (&point);
if (root_x)
*root_x = point.x / impl->window_scale;
if (root_y)
*root_y = point.y / impl->window_scale;
ScreenToClient (hwnd, &point);
if (win_x)
*win_x = point.x / impl->window_scale;
if (win_y)
*win_y = point.y / impl->window_scale;
if (window == gdk_screen_get_root_window (screen))
{
if (win_x)
*win_x += _gdk_offset_x;
if (win_y)
*win_y += _gdk_offset_y;
if (root_x)
*root_x += _gdk_offset_x;
if (root_y)
*root_y += _gdk_offset_y;
}
if (child_window)
{
if (window == gdk_screen_get_root_window (screen))
{
/* Always use WindowFromPoint when searching from the root window.
* Only WindowFromPoint is able to look through transparent
* layered windows.
*/
hwndc = GetAncestor (WindowFromPoint (point), GA_ROOT);
}
else
{
hwndc = ChildWindowFromPoint (hwnd, point);
}
if (hwndc && hwndc != hwnd)
*child_window = gdk_win32_handle_table_lookup (hwndc);
else
*child_window = NULL; /* Direct child unknown to gdk */
}
if (root_window)
*root_window = gdk_screen_get_root_window (screen);
if (mask)
{
*mask = get_keyboard_mask ();
*mask |= device_winpointer->last_button_mask;
}
}
static GdkGrabStatus
gdk_device_winpointer_grab (GdkDevice *device,
GdkWindow *window,
gboolean owner_events,
GdkEventMask event_mask,
GdkWindow *confine_to,
GdkCursor *cursor,
guint32 time_)
{
return GDK_GRAB_SUCCESS;
}
static void
gdk_device_winpointer_ungrab (GdkDevice *device,
guint32 time_)
{
}
static void
screen_to_client (HWND hwnd, POINT screen_pt, POINT *client_pt)
{
*client_pt = screen_pt;
ScreenToClient (hwnd, client_pt);
}
GdkWindow *
_gdk_device_winpointer_window_at_position (GdkDevice *device,
gdouble *win_x,
gdouble *win_y,
GdkModifierType *mask,
gboolean get_toplevel)
{
GdkDeviceWinpointer *device_winpointer = GDK_DEVICE_WINPOINTER (device);
GdkWindow *window = NULL;
GdkWindowImplWin32 *impl = NULL;
POINT screen_pt, client_pt;
HWND hwnd;
RECT rect;
if (!_gdk_win32_get_cursor_pos (&screen_pt))
return NULL;
hwnd = WindowFromPoint (screen_pt);
if (get_toplevel)
{
/* Use WindowFromPoint instead of ChildWindowFromPoint(Ex).
* Only WindowFromPoint is able to look through transparent
* layered windows.
*/
hwnd = GetAncestor (hwnd, GA_ROOT);
}
/* Verify that we're really inside the client area of the window */
GetClientRect (hwnd, &rect);
screen_to_client (hwnd, screen_pt, &client_pt);
if (!PtInRect (&rect, client_pt))
hwnd = NULL;
if (!get_toplevel && hwnd == NULL)
{
/* If we didn't hit any window, return the root window */
/* note that the root window ain't a toplevel window */
window = gdk_get_default_root_window ();
impl = GDK_WINDOW_IMPL_WIN32 (window->impl);
if (win_x)
*win_x = (screen_pt.x + _gdk_offset_x) / impl->window_scale;
if (win_y)
*win_y = (screen_pt.y + _gdk_offset_y) / impl->window_scale;
return window;
}
window = gdk_win32_handle_table_lookup (hwnd);
if (window && (win_x || win_y))
{
impl = GDK_WINDOW_IMPL_WIN32 (window->impl);
if (win_x)
*win_x = client_pt.x / impl->window_scale;
if (win_y)
*win_y = client_pt.y / impl->window_scale;
}
if (mask)
{
*mask = get_keyboard_mask ();
*mask |= device_winpointer->last_button_mask;
}
return window;
}
static void
gdk_device_winpointer_select_window_events (GdkDevice *device,
GdkWindow *window,
GdkEventMask event_mask)
{
}
static void
gdk_device_winpointer_init (GdkDeviceWinpointer *device_winpointer)
{
device_winpointer->device_handle = NULL;
device_winpointer->start_cursor_id = 0;
device_winpointer->end_cursor_id = 0;
device_winpointer->origin_x = 0;
device_winpointer->origin_y = 0;
device_winpointer->scale_x = 0.0;
device_winpointer->scale_y = 0.0;
device_winpointer->last_axis_data = NULL;
device_winpointer->num_axes = 0;
device_winpointer->last_button_mask = 0;
}
static void
gdk_device_winpointer_finalize (GObject *object)
{
GdkDeviceWinpointer *device_winpointer = GDK_DEVICE_WINPOINTER (object);
g_free (device_winpointer->last_axis_data);
G_OBJECT_CLASS (gdk_device_winpointer_parent_class)->finalize (object);
}
static void
gdk_device_winpointer_class_init (GdkDeviceWinpointerClass *klass)
{
GdkDeviceClass *device_class = GDK_DEVICE_CLASS (klass);
GObjectClass *object_class = G_OBJECT_CLASS (klass);
object_class->finalize = gdk_device_winpointer_finalize;
device_class->get_history = gdk_device_winpointer_get_history;
device_class->get_state = gdk_device_winpointer_get_state;
device_class->set_window_cursor = gdk_device_winpointer_set_window_cursor;
device_class->warp = gdk_device_winpointer_warp;
device_class->query_state = gdk_device_winpointer_query_state;
device_class->grab = gdk_device_winpointer_grab;
device_class->ungrab = gdk_device_winpointer_ungrab;
device_class->window_at_position = _gdk_device_winpointer_window_at_position;
device_class->select_window_events = gdk_device_winpointer_select_window_events;
}

View File

@ -0,0 +1,64 @@
/* GDK - The GIMP Drawing Kit
* Copyright (C) 2020 the GTK team
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef __GDK_DEVICE_WINPOINTER_H__
#define __GDK_DEVICE_WINPOINTER_H__
#include <gdk/gdkdeviceprivate.h>
#include <windows.h>
G_BEGIN_DECLS
#define GDK_TYPE_DEVICE_WINPOINTER (gdk_device_winpointer_get_type ())
#define GDK_DEVICE_WINPOINTER(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GDK_TYPE_DEVICE_WINPOINTER, GdkDeviceWinpointer))
#define GDK_DEVICE_WINPOINTER_CLASS(c) (G_TYPE_CHECK_CLASS_CAST ((c), GDK_TYPE_DEVICE_WINPOINTER, GdkDeviceWinpointerClass))
#define GDK_IS_DEVICE_WINPOINTER(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GDK_TYPE_DEVICE_WINPOINTER))
#define GDK_IS_DEVICE_WINPOINTER_CLASS(c) (G_TYPE_CHECK_CLASS_TYPE ((c), GDK_TYPE_DEVICE_WINPOINTER))
#define GDK_DEVICE_WINPOINTER_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GDK_TYPE_DEVICE_WINPOINTER, GdkDeviceWinpointerClass))
typedef struct _GdkDeviceWinpointer GdkDeviceWinpointer;
typedef struct _GdkDeviceWinpointerClass GdkDeviceWinpointerClass;
struct _GdkDeviceWinpointer
{
GdkDevice parent_instance;
HANDLE device_handle;
UINT32 start_cursor_id;
UINT32 end_cursor_id;
int origin_x;
int origin_y;
double scale_x;
double scale_y;
double *last_axis_data;
unsigned num_axes;
GdkModifierType last_button_mask;
};
struct _GdkDeviceWinpointerClass
{
GdkDeviceClass parent_class;
};
GType gdk_device_winpointer_get_type (void) G_GNUC_CONST;
G_END_DECLS
#endif /* __GDK_DEVICE_WINPOINTER_H__ */

View File

@ -128,7 +128,7 @@ gdk_device_wintab_query_state (GdkDevice *device,
impl = GDK_WINDOW_IMPL_WIN32 (window->impl);
hwnd = GDK_WINDOW_HWND (window);
GetCursorPos (&point);
_gdk_win32_get_cursor_pos (&point);
if (root_x)
*root_x = point.x / impl->window_scale;

File diff suppressed because it is too large Load Diff

View File

@ -41,6 +41,8 @@ struct _GdkDeviceManagerWin32
/* Fake slave devices */
GdkDevice *system_pointer;
GdkDevice *system_keyboard;
GList *winpointer_devices;
GList *wintab_devices;
/* Bumped up every time a wintab device enters the proximity
@ -57,11 +59,31 @@ struct _GdkDeviceManagerWin32Class
GType gdk_device_manager_win32_get_type (void) G_GNUC_CONST;
void _gdk_input_set_tablet_active (void);
gboolean gdk_input_other_event (GdkDisplay *display,
GdkEvent *event,
MSG *msg,
GdkWindow *window);
typedef void
(*crossing_cb_t)(GdkDisplay *display,
GdkDevice *device,
GdkWindow *window,
POINT *screen_pt,
guint32 time_);
void gdk_winpointer_initialize_window (GdkWindow *window);
gboolean gdk_winpointer_should_forward_message (MSG *msg);
void gdk_winpointer_input_events (GdkDisplay *display,
GdkWindow *window,
crossing_cb_t crossing_cb,
MSG *msg);
gboolean gdk_winpointer_get_message_info (GdkDisplay *display,
MSG *msg,
GdkDevice **device,
guint32 *time_);
void gdk_winpointer_interaction_ended (MSG *msg);
void gdk_winpointer_finalize_window (GdkWindow *window);
void _gdk_wintab_set_tablet_active (void);
gboolean gdk_wintab_input_events (GdkDisplay *display,
GdkEvent *event,
MSG *msg,
GdkWindow *window);
G_END_DECLS

View File

@ -54,6 +54,7 @@
#include "gdkglcontext-win32.h"
#include "gdkdevicemanager-win32.h"
#include "gdkdeviceprivate.h"
#include "gdkdevice-virtual.h"
#include "gdkdevice-wintab.h"
#include "gdkwin32dnd.h"
#include "gdkdisplay-win32.h"
@ -61,6 +62,8 @@
#include "gdkdndprivate.h"
#include <windowsx.h>
#include <tpcshrd.h>
#include "winpointer.h"
#ifdef G_WITH_CYGWIN
#include <fcntl.h>
@ -153,6 +156,10 @@ static int both_shift_pressed[2]; /* to store keycodes for shift keys */
static HHOOK keyboard_hook = NULL;
static UINT aerosnap_message;
static gboolean pen_touch_input;
static POINT pen_touch_cursor_position;
static LONG last_digitizer_time;
static void
track_mouse_event (DWORD dwFlags,
HWND hwnd)
@ -187,6 +194,18 @@ _gdk_win32_get_next_tick (gulong suggested_tick)
return cur_tick = suggested_tick;
}
BOOL
_gdk_win32_get_cursor_pos (LPPOINT lpPoint)
{
if (pen_touch_input)
{
*lpPoint = pen_touch_cursor_position;
return TRUE;
}
else
return GetCursorPos (lpPoint);
}
static void
generate_focus_event (GdkDeviceManager *device_manager,
GdkWindow *window,
@ -228,6 +247,7 @@ generate_grab_broken_event (GdkDeviceManager *device_manager,
{
device = GDK_DEVICE_MANAGER_WIN32 (device_manager)->core_pointer;
source_device = GDK_DEVICE_MANAGER_WIN32 (device_manager)->system_pointer;
_gdk_device_virtual_set_active (device, source_device);
}
event->grab_broken.window = window;
@ -1237,6 +1257,7 @@ do_show_window (GdkWindow *window, gboolean hide_window)
static void
send_crossing_event (GdkDisplay *display,
GdkDevice *source_device,
GdkWindow *window,
GdkEventType type,
GdkCrossingMode mode,
@ -1271,7 +1292,7 @@ send_crossing_event (GdkDisplay *display,
event = gdk_event_new (type);
event->crossing.window = window;
event->crossing.subwindow = subwindow;
event->crossing.time = _gdk_win32_get_next_tick (time_);
event->crossing.time = time_;
event->crossing.x = pt.x / impl->window_scale;
event->crossing.y = pt.y / impl->window_scale;
event->crossing.x_root = (screen_pt->x + _gdk_offset_x) / impl->window_scale;
@ -1283,9 +1304,11 @@ send_crossing_event (GdkDisplay *display,
event->crossing.focus = FALSE;
event->crossing.state = mask;
gdk_event_set_device (event, device_manager->core_pointer);
gdk_event_set_source_device (event, device_manager->system_pointer);
gdk_event_set_source_device (event, source_device);
gdk_event_set_seat (event, gdk_device_get_seat (device_manager->core_pointer));
_gdk_device_virtual_set_active (device_manager->core_pointer, source_device);
_gdk_win32_append_event (event);
}
@ -1336,6 +1359,7 @@ find_common_ancestor (GdkWindow *win1,
void
synthesize_crossing_events (GdkDisplay *display,
GdkDevice *source_device,
GdkWindow *src,
GdkWindow *dest,
GdkCrossingMode mode,
@ -1370,6 +1394,7 @@ synthesize_crossing_events (GdkDisplay *display,
else
notify_type = GDK_NOTIFY_ANCESTOR;
send_crossing_event (display,
source_device,
a, GDK_LEAVE_NOTIFY,
mode,
notify_type,
@ -1389,6 +1414,7 @@ synthesize_crossing_events (GdkDisplay *display,
while (win != c && win->window_type != GDK_WINDOW_ROOT)
{
send_crossing_event (display,
source_device,
win, GDK_LEAVE_NOTIFY,
mode,
notify_type,
@ -1431,6 +1457,7 @@ synthesize_crossing_events (GdkDisplay *display,
next = b;
send_crossing_event (display,
source_device,
win, GDK_ENTER_NOTIFY,
mode,
notify_type,
@ -1450,6 +1477,7 @@ synthesize_crossing_events (GdkDisplay *display,
notify_type = GDK_NOTIFY_INFERIOR;
send_crossing_event (display,
source_device,
b, GDK_ENTER_NOTIFY,
mode,
notify_type,
@ -1459,6 +1487,27 @@ synthesize_crossing_events (GdkDisplay *display,
}
}
static void
make_crossing_event (GdkDisplay *display,
GdkDevice *device,
GdkWindow *window,
POINT *screen_pt,
guint32 time_)
{
GDK_NOTE (EVENTS, g_print (" mouse_window %p -> %p",
mouse_window ? GDK_WINDOW_HWND (mouse_window) : NULL,
window ? GDK_WINDOW_HWND (window) : NULL));
synthesize_crossing_events (display,
device,
mouse_window, window,
GDK_CROSSING_NORMAL,
screen_pt,
0, /* TODO: Set right mask */
time_,
FALSE);
g_set_object (&mouse_window, window);
}
/* The check_extended flag controls whether to check if the windows want
* events from extended input devices and if the message should be skipped
* because an extended input device is active
@ -1861,6 +1910,8 @@ generate_button_event (GdkEventType type,
gdk_event_set_source_device (event, device_manager->system_pointer);
gdk_event_set_seat (event, gdk_device_get_seat (device_manager->core_pointer));
_gdk_device_virtual_set_active (device_manager->core_pointer, device_manager->system_pointer);
_gdk_win32_append_event (event);
}
@ -2104,6 +2155,8 @@ gdk_event_translate (MSG *msg,
GdkDeviceGrabInfo *pointer_grab = NULL;
GdkWindow *grab_window = NULL;
crossing_cb_t crossing_cb = NULL;
gint button;
GdkAtom target;
@ -2600,6 +2653,8 @@ gdk_event_translate (MSG *msg,
g_print (" (%d,%d)",
GET_X_LPARAM (msg->lParam), GET_Y_LPARAM (msg->lParam)));
pen_touch_input = FALSE;
g_set_object (&window, find_window_for_mouse_event (window, msg));
/* TODO_CSW?: there used to some synthesize and propagate */
if (GDK_WINDOW_DESTROYED (window))
@ -2639,6 +2694,8 @@ gdk_event_translate (MSG *msg,
g_print (" (%d,%d)",
GET_X_LPARAM (msg->lParam), GET_Y_LPARAM (msg->lParam)));
pen_touch_input = FALSE;
g_set_object (&window, find_window_for_mouse_event (window, msg));
if (pointer_grab != NULL && pointer_grab->implicit)
@ -2665,11 +2722,12 @@ gdk_event_translate (MSG *msg,
}
synthesize_crossing_events (display,
device_manager_win32->system_pointer,
native_window, new_window,
GDK_CROSSING_UNGRAB,
&msg->pt,
0, /* TODO: Set right mask */
msg->time,
_gdk_win32_get_next_tick (msg->time),
FALSE);
g_set_object (&mouse_window, new_window);
mouse_window_ignored_leave = NULL;
@ -2695,6 +2753,13 @@ gdk_event_translate (MSG *msg,
(gpointer) msg->wParam,
GET_X_LPARAM (msg->lParam), GET_Y_LPARAM (msg->lParam)));
if (_gdk_win32_tablet_input_api == GDK_WIN32_TABLET_INPUT_API_WINPOINTER &&
( (msg->time - last_digitizer_time) < 200 ||
-(msg->time - last_digitizer_time) < 200 ))
break;
pen_touch_input = FALSE;
new_window = window;
if (pointer_grab != NULL)
@ -2722,15 +2787,16 @@ gdk_event_translate (MSG *msg,
if (mouse_window != new_window)
{
GDK_NOTE (EVENTS, g_print (" mouse_sinwod %p -> %p",
GDK_NOTE (EVENTS, g_print (" mouse_window %p -> %p",
mouse_window ? GDK_WINDOW_HWND (mouse_window) : NULL,
new_window ? GDK_WINDOW_HWND (new_window) : NULL));
synthesize_crossing_events (display,
device_manager_win32->system_pointer,
mouse_window, new_window,
GDK_CROSSING_NORMAL,
&msg->pt,
0, /* TODO: Set right mask */
msg->time,
_gdk_win32_get_next_tick (msg->time),
FALSE);
g_set_object (&mouse_window, new_window);
mouse_window_ignored_leave = NULL;
@ -2782,6 +2848,8 @@ gdk_event_translate (MSG *msg,
gdk_event_set_source_device (event, device_manager_win32->system_pointer);
gdk_event_set_seat (event, gdk_device_get_seat (device_manager_win32->core_pointer));
_gdk_device_virtual_set_active (device_manager_win32->core_pointer, device_manager_win32->system_pointer);
_gdk_win32_append_event (event);
}
@ -2792,12 +2860,17 @@ gdk_event_translate (MSG *msg,
GDK_NOTE (EVENTS,
g_print (" (%d,%d)",
GET_X_LPARAM (msg->lParam), GET_Y_LPARAM (msg->lParam)));
pen_touch_input = FALSE;
break;
case WM_MOUSELEAVE:
GDK_NOTE (EVENTS, g_print (" %d (%ld,%ld)",
HIWORD (msg->wParam), msg->pt.x, msg->pt.y));
pen_touch_input = FALSE;
new_window = NULL;
hwnd = WindowFromPoint (msg->pt);
ignore_leave = FALSE;
@ -2823,11 +2896,12 @@ gdk_event_translate (MSG *msg,
if (!ignore_leave)
synthesize_crossing_events (display,
device_manager_win32->system_pointer,
mouse_window, new_window,
GDK_CROSSING_NORMAL,
&msg->pt,
0, /* TODO: Set right mask */
msg->time,
_gdk_win32_get_next_tick (msg->time),
FALSE);
g_set_object (&mouse_window, new_window);
mouse_window_ignored_leave = ignore_leave ? new_window : NULL;
@ -2836,6 +2910,215 @@ gdk_event_translate (MSG *msg,
return_val = TRUE;
break;
case WM_POINTERDOWN:
if (_gdk_win32_tablet_input_api != GDK_WIN32_TABLET_INPUT_API_WINPOINTER ||
gdk_winpointer_should_forward_message (msg))
{
return_val = FALSE;
break;
}
if (IS_POINTER_PRIMARY_WPARAM (msg->wParam))
{
current_root_x = pen_touch_cursor_position.x = GET_X_LPARAM (msg->lParam);
current_root_y = pen_touch_cursor_position.y = GET_Y_LPARAM (msg->lParam);
pen_touch_input = TRUE;
last_digitizer_time = msg->time;
}
if (pointer_grab != NULL &&
!pointer_grab->implicit &&
!pointer_grab->owner_events)
g_set_object (&window, pointer_grab->native_window);
if (IS_POINTER_PRIMARY_WPARAM (msg->wParam) && mouse_window != window)
crossing_cb = make_crossing_event;
gdk_winpointer_input_events (display, window, crossing_cb, msg);
*ret_valp = 0;
return_val = TRUE;
break;
case WM_POINTERUP:
if (_gdk_win32_tablet_input_api != GDK_WIN32_TABLET_INPUT_API_WINPOINTER ||
gdk_winpointer_should_forward_message (msg))
{
return_val = FALSE;
break;
}
if (IS_POINTER_PRIMARY_WPARAM (msg->wParam))
{
current_root_x = pen_touch_cursor_position.x = GET_X_LPARAM (msg->lParam);
current_root_y = pen_touch_cursor_position.y = GET_Y_LPARAM (msg->lParam);
pen_touch_input = TRUE;
last_digitizer_time = msg->time;
}
if (pointer_grab != NULL &&
!pointer_grab->implicit &&
!pointer_grab->owner_events)
g_set_object (&window, pointer_grab->native_window);
gdk_winpointer_input_events (display, window, NULL, msg);
impl = GDK_WINDOW_IMPL_WIN32 (window->impl);
if (impl->drag_move_resize_context.op != GDK_WIN32_DRAGOP_NONE)
{
gdk_win32_window_end_move_resize_drag (window);
}
*ret_valp = 0;
return_val = TRUE;
break;
case WM_POINTERUPDATE:
if (_gdk_win32_tablet_input_api != GDK_WIN32_TABLET_INPUT_API_WINPOINTER ||
gdk_winpointer_should_forward_message (msg))
{
return_val = FALSE;
break;
}
if (IS_POINTER_PRIMARY_WPARAM (msg->wParam))
{
current_root_x = pen_touch_cursor_position.x = GET_X_LPARAM (msg->lParam);
current_root_y = pen_touch_cursor_position.y = GET_Y_LPARAM (msg->lParam);
pen_touch_input = TRUE;
last_digitizer_time = msg->time;
}
if (pointer_grab != NULL &&
!pointer_grab->implicit &&
!pointer_grab->owner_events)
g_set_object (&window, pointer_grab->native_window);
if (IS_POINTER_PRIMARY_WPARAM (msg->wParam) && mouse_window != window)
crossing_cb = make_crossing_event;
impl = GDK_WINDOW_IMPL_WIN32 (window->impl);
if (impl->drag_move_resize_context.op != GDK_WIN32_DRAGOP_NONE)
{
gdk_win32_window_do_move_resize_drag (window, current_root_x, current_root_y);
}
else
{
gdk_winpointer_input_events (display, window, crossing_cb, msg);
}
*ret_valp = 0;
return_val = TRUE;
break;
case WM_NCPOINTERUPDATE:
if (_gdk_win32_tablet_input_api != GDK_WIN32_TABLET_INPUT_API_WINPOINTER ||
gdk_winpointer_should_forward_message (msg))
{
return_val = FALSE;
break;
}
if (IS_POINTER_PRIMARY_WPARAM (msg->wParam))
{
current_root_x = pen_touch_cursor_position.x = GET_X_LPARAM (msg->lParam);
current_root_y = pen_touch_cursor_position.y = GET_Y_LPARAM (msg->lParam);
pen_touch_input = TRUE;
last_digitizer_time = msg->time;
}
if (IS_POINTER_PRIMARY_WPARAM (msg->wParam) &&
!IS_POINTER_INCONTACT_WPARAM (msg->wParam) &&
mouse_window != NULL)
{
GdkDevice *event_device = NULL;
guint32 event_time = 0;
if (gdk_winpointer_get_message_info (display, msg, &event_device, &event_time))
{
make_crossing_event(display,
event_device,
NULL,
&pen_touch_cursor_position,
event_time);
}
}
return_val = FALSE; /* forward to DefWindowProc */
break;
case WM_POINTERENTER:
if (_gdk_win32_tablet_input_api != GDK_WIN32_TABLET_INPUT_API_WINPOINTER ||
gdk_winpointer_should_forward_message (msg))
{
return_val = FALSE;
break;
}
if (IS_POINTER_PRIMARY_WPARAM (msg->wParam))
{
current_root_x = pen_touch_cursor_position.x = GET_X_LPARAM (msg->lParam);
current_root_y = pen_touch_cursor_position.y = GET_Y_LPARAM (msg->lParam);
pen_touch_input = TRUE;
last_digitizer_time = msg->time;
}
if (pointer_grab != NULL &&
!pointer_grab->implicit &&
!pointer_grab->owner_events)
g_set_object (&window, pointer_grab->native_window);
if (IS_POINTER_NEW_WPARAM (msg->wParam))
{
gdk_winpointer_input_events (display, window, NULL, msg);
}
*ret_valp = 0;
return_val = TRUE;
break;
case WM_POINTERLEAVE:
if (_gdk_win32_tablet_input_api != GDK_WIN32_TABLET_INPUT_API_WINPOINTER ||
gdk_winpointer_should_forward_message (msg))
{
return_val = FALSE;
break;
}
if (IS_POINTER_PRIMARY_WPARAM (msg->wParam))
{
current_root_x = pen_touch_cursor_position.x = GET_X_LPARAM (msg->lParam);
current_root_y = pen_touch_cursor_position.y = GET_Y_LPARAM (msg->lParam);
pen_touch_input = TRUE;
last_digitizer_time = msg->time;
}
if (!IS_POINTER_INRANGE_WPARAM (msg->wParam))
{
gdk_winpointer_input_events (display, window, NULL, msg);
}
else if (IS_POINTER_PRIMARY_WPARAM (msg->wParam) && mouse_window != NULL)
{
GdkDevice *event_device = NULL;
guint32 event_time = 0;
if (gdk_winpointer_get_message_info (display, msg, &event_device, &event_time))
{
make_crossing_event(display,
event_device,
NULL,
&pen_touch_cursor_position,
event_time);
}
}
gdk_winpointer_interaction_ended (msg);
*ret_valp = 0;
return_val = TRUE;
break;
case WM_MOUSEWHEEL:
case WM_MOUSEHWHEEL:
GDK_NOTE (EVENTS, g_print (" %d", (short) HIWORD (msg->wParam)));
@ -2914,6 +3197,8 @@ gdk_event_translate (MSG *msg,
gdk_event_set_seat (event, gdk_device_get_seat (device_manager_win32->core_pointer));
gdk_event_set_pointer_emulated (event, FALSE);
_gdk_device_virtual_set_active (device_manager_win32->core_pointer, device_manager_win32->system_pointer);
_gdk_win32_append_event (gdk_event_copy (event));
/* Append the discrete version too */
@ -2932,44 +3217,6 @@ gdk_event_translate (MSG *msg,
return_val = TRUE;
break;
case WM_HSCROLL:
/* Just print more debugging information, don't actually handle it. */
GDK_NOTE (EVENTS,
(g_print (" %s",
(LOWORD (msg->wParam) == SB_ENDSCROLL ? "ENDSCROLL" :
(LOWORD (msg->wParam) == SB_LEFT ? "LEFT" :
(LOWORD (msg->wParam) == SB_RIGHT ? "RIGHT" :
(LOWORD (msg->wParam) == SB_LINELEFT ? "LINELEFT" :
(LOWORD (msg->wParam) == SB_LINERIGHT ? "LINERIGHT" :
(LOWORD (msg->wParam) == SB_PAGELEFT ? "PAGELEFT" :
(LOWORD (msg->wParam) == SB_PAGERIGHT ? "PAGERIGHT" :
(LOWORD (msg->wParam) == SB_THUMBPOSITION ? "THUMBPOSITION" :
(LOWORD (msg->wParam) == SB_THUMBTRACK ? "THUMBTRACK" :
"???")))))))))),
(LOWORD (msg->wParam) == SB_THUMBPOSITION ||
LOWORD (msg->wParam) == SB_THUMBTRACK) ?
(g_print (" %d", HIWORD (msg->wParam)), 0) : 0));
break;
case WM_VSCROLL:
/* Just print more debugging information, don't actually handle it. */
GDK_NOTE (EVENTS,
(g_print (" %s",
(LOWORD (msg->wParam) == SB_ENDSCROLL ? "ENDSCROLL" :
(LOWORD (msg->wParam) == SB_BOTTOM ? "BOTTOM" :
(LOWORD (msg->wParam) == SB_TOP ? "TOP" :
(LOWORD (msg->wParam) == SB_LINEDOWN ? "LINDOWN" :
(LOWORD (msg->wParam) == SB_LINEUP ? "LINEUP" :
(LOWORD (msg->wParam) == SB_PAGEDOWN ? "PAGEDOWN" :
(LOWORD (msg->wParam) == SB_PAGEUP ? "PAGEUP" :
(LOWORD (msg->wParam) == SB_THUMBPOSITION ? "THUMBPOSITION" :
(LOWORD (msg->wParam) == SB_THUMBTRACK ? "THUMBTRACK" :
"???")))))))))),
(LOWORD (msg->wParam) == SB_THUMBPOSITION ||
LOWORD (msg->wParam) == SB_THUMBTRACK) ?
(g_print (" %d", HIWORD (msg->wParam)), 0) : 0));
break;
case WM_MOUSEACTIVATE:
{
if (gdk_window_get_window_type (window) == GDK_WINDOW_TEMP
@ -2988,6 +3235,17 @@ gdk_event_translate (MSG *msg,
break;
case WM_POINTERACTIVATE:
if (gdk_window_get_window_type (window) == GDK_WINDOW_TEMP ||
!window->accept_focus ||
_gdk_modal_blocked (gdk_window_get_toplevel (window)))
{
*ret_valp = PA_NOACTIVATE;
return_val = TRUE;
}
break;
case WM_KILLFOCUS:
if (keyboard_grab != NULL &&
!GDK_WINDOW_DESTROYED (keyboard_grab->window) &&
@ -3566,6 +3824,14 @@ gdk_event_translate (MSG *msg,
return_val = TRUE;
break;
case WM_DESTROY:
/* we have to call RemoveProp before the window is destroyed */
if (_gdk_win32_tablet_input_api == GDK_WIN32_TABLET_INPUT_API_WINPOINTER)
gdk_winpointer_finalize_window (window);
return_val = FALSE;
break;
case WM_NCDESTROY:
if ((pointer_grab != NULL && pointer_grab -> window == window) ||
(keyboard_grab && keyboard_grab -> window == window))
@ -3735,7 +4001,10 @@ gdk_event_translate (MSG *msg,
* instead
*/
if (LOWORD(msg->wParam) != WA_INACTIVE)
_gdk_input_set_tablet_active ();
{
if (_gdk_win32_tablet_input_api == GDK_WIN32_TABLET_INPUT_API_WINTAB)
_gdk_wintab_set_tablet_active ();
}
break;
case WM_ACTIVATEAPP:
@ -3775,17 +4044,30 @@ gdk_event_translate (MSG *msg,
HIWORD (msg->lParam)));
/* Fall through */
wintab:
if (_gdk_win32_tablet_input_api != GDK_WIN32_TABLET_INPUT_API_WINTAB)
break;
event = gdk_event_new (GDK_NOTHING);
event->any.window = window;
g_object_ref (window);
if (gdk_input_other_event (display, event, msg, window))
if (gdk_wintab_input_events (display, event, msg, window))
_gdk_win32_append_event (event);
else
gdk_event_free (event);
break;
case WM_TABLET_QUERYSYSTEMGESTURESTATUS:
*ret_valp = TABLET_DISABLE_PRESSANDHOLD |
TABLET_DISABLE_PENTAPFEEDBACK |
TABLET_DISABLE_PENBARRELFEEDBACK |
TABLET_DISABLE_FLICKS |
TABLET_DISABLE_FLICKFALLBACKKEYS;
return_val = TRUE;
break;
}
done:

View File

@ -855,19 +855,30 @@ _set_pixformat_for_hdc (HDC hdc,
const gboolean need_alpha_bits,
GdkWin32Display *display)
{
PIXELFORMATDESCRIPTOR pfd;
gboolean set_pixel_format_result = FALSE;
gboolean already_checked = TRUE;
*best_idx = GetPixelFormat (hdc);
/* one is only allowed to call SetPixelFormat(), and so ChoosePixelFormat()
* one single time per window HDC
*/
*best_idx = _get_wgl_pfd (hdc, need_alpha_bits, &pfd, display);
if (*best_idx != 0)
set_pixel_format_result = SetPixelFormat (hdc, *best_idx, &pfd);
if (*best_idx == 0)
{
PIXELFORMATDESCRIPTOR pfd;
gboolean set_pixel_format_result = FALSE;
/* ChoosePixelFormat() or SetPixelFormat() failed, bail out */
if (*best_idx == 0 || !set_pixel_format_result)
return FALSE;
GDK_NOTE (OPENGL, g_print ("requesting pixel format...\n"));
already_checked = FALSE;
*best_idx = _get_wgl_pfd (hdc, need_alpha_bits, &pfd, display);
if (*best_idx != 0)
set_pixel_format_result = SetPixelFormat (hdc, *best_idx, &pfd);
/* ChoosePixelFormat() or SetPixelFormat() failed, bail out */
if (*best_idx == 0 || !set_pixel_format_result)
return FALSE;
}
GDK_NOTE (OPENGL, g_print ("%s""requested and set pixel format: %d\n", already_checked ? "already " : "", *best_idx));
return TRUE;
}

View File

@ -36,12 +36,12 @@ HINSTANCE _gdk_dll_hinstance;
HINSTANCE _gdk_app_hmodule;
gint _gdk_input_ignore_core;
GdkWin32TabletInputAPI _gdk_win32_tablet_input_api;
HKL _gdk_input_locale;
gboolean _gdk_input_locale_is_ime = FALSE;
UINT _gdk_input_codepage;
gint _gdk_input_ignore_wintab = FALSE;
gint _gdk_max_colors = 0;
GdkWin32ModalOpKind _modal_operation_in_progress = GDK_WIN32_MODAL_OP_NONE;

View File

@ -49,23 +49,6 @@
static gboolean gdk_synchronize = FALSE;
static gboolean dummy;
const GOptionEntry _gdk_windowing_args[] = {
{ "sync", 0, 0, G_OPTION_ARG_NONE, &gdk_synchronize,
/* Description of --sync in --help output */ N_("Don't batch GDI requests"), NULL },
{ "no-wintab", 0, 0, G_OPTION_ARG_NONE, &_gdk_input_ignore_wintab,
/* Description of --no-wintab in --help output */ N_("Don't use the Wintab API for tablet support"), NULL },
{ "ignore-wintab", 0, 0, G_OPTION_ARG_NONE, &_gdk_input_ignore_wintab,
/* Description of --ignore-wintab in --help output */ N_("Same as --no-wintab"), NULL },
{ "use-wintab", 0, 0, G_OPTION_ARG_NONE, &dummy,
/* Description of --use-wintab in --help output */ N_("Do use the Wintab API [default]"), NULL },
{ "max-colors", 0, 0, G_OPTION_ARG_INT, &_gdk_max_colors,
/* Description of --max-colors=COLORS in --help output */ N_("Size of the palette in 8 bit mode"),
/* Placeholder in --max-colors=COLORS in --help output */ N_("COLORS") },
{ NULL }
};
BOOL WINAPI
DllMain (HINSTANCE hinstDLL,
DWORD dwReason,
@ -81,11 +64,6 @@ _gdk_win32_windowing_init (void)
{
gchar buf[10];
if (getenv ("GDK_IGNORE_WINTAB") != NULL)
_gdk_input_ignore_wintab = TRUE;
else if (getenv ("GDK_USE_WINTAB") != NULL)
_gdk_input_ignore_wintab = FALSE;
if (gdk_synchronize)
GdiSetBatchLimit (1);

View File

@ -523,7 +523,7 @@ populate_monitor_devices_from_display_config (GPtrArray *monitors)
refresh = &dispconf_paths[path_index].targetInfo.refreshRate;
gdk_monitor_set_refresh_rate (mon,
refresh->Numerator * 1000 / refresh->Denominator);
refresh->Numerator * (UINT64) 1000 / refresh->Denominator);
}
g_free (dispconf_paths);

View File

@ -163,10 +163,18 @@ struct _GdkColormapPrivateWin32
GdkColorInfo *info;
};
typedef enum {
GDK_WIN32_TABLET_INPUT_API_NONE = 0,
GDK_WIN32_TABLET_INPUT_API_WINTAB,
GDK_WIN32_TABLET_INPUT_API_WINPOINTER
} GdkWin32TabletInputAPI;
GType _gdk_gc_win32_get_type (void);
gulong _gdk_win32_get_next_tick (gulong suggested_tick);
BOOL _gdk_win32_get_cursor_pos (LPPOINT lpPoint);
void _gdk_window_init_position (GdkWindow *window);
void _gdk_window_move_resize_child (GdkWindow *window,
gint x,
@ -262,6 +270,8 @@ void _gdk_other_api_failed (const gchar *where,
#define WIN32_GDI_FAILED(api) WIN32_API_FAILED (api)
#define OTHER_API_FAILED(api) _gdk_other_api_failed (G_STRLOC, api)
#define WIN32_API_FAILED_LOG_ONCE(api) G_STMT_START { static gboolean logged = 0; if (!logged) { _gdk_win32_api_failed (G_STRLOC , api); logged = 1; }} G_STMT_END
/* These two macros call a GDI or other Win32 API and if the return
* value is zero or NULL, print a warning message. The majority of GDI
* calls return zero or NULL on failure. The value of the macros is nonzero
@ -287,6 +297,7 @@ extern HINSTANCE _gdk_dll_hinstance;
extern HINSTANCE _gdk_app_hmodule;
extern gint _gdk_input_ignore_core;
extern GdkWin32TabletInputAPI _gdk_win32_tablet_input_api;
/* These are thread specific, but GDK/win32 works OK only when invoked
* from a single thread anyway.
@ -326,7 +337,6 @@ void _gdk_win32_end_modal_call (GdkWin32ModalOpKind kind);
/* Options */
extern gboolean _gdk_input_ignore_wintab;
extern gint _gdk_max_colors;
#define GDK_WIN32_COLORMAP_DATA(cmap) ((GdkColormapPrivateWin32 *) GDK_COLORMAP (cmap)->windowing_data)

View File

@ -555,7 +555,6 @@ RegisterGdkClass (GdkWindowType wtype, GdkWindowTypeHint wtype_hint)
static ATOM klassTOPLEVEL = 0;
static ATOM klassCHILD = 0;
static ATOM klassTEMP = 0;
static ATOM klassTEMPSHADOW = 0;
static HICON hAppIcon = NULL;
static HICON hAppIconSm = NULL;
static WNDCLASSEXW wcl;
@ -652,34 +651,16 @@ RegisterGdkClass (GdkWindowType wtype, GdkWindowTypeHint wtype_hint)
break;
case GDK_WINDOW_TEMP:
if ((wtype_hint == GDK_WINDOW_TYPE_HINT_MENU) ||
(wtype_hint == GDK_WINDOW_TYPE_HINT_DROPDOWN_MENU) ||
(wtype_hint == GDK_WINDOW_TYPE_HINT_POPUP_MENU))
if (klassTEMP == 0)
{
if (klassTEMPSHADOW == 0)
{
wcl.lpszClassName = L"gdkWindowTempShadow";
wcl.style |= CS_SAVEBITS;
wcl.style |= 0x00020000; /* CS_DROPSHADOW */
ONCE_PER_CLASS ();
klassTEMPSHADOW = RegisterClassExW (&wcl);
}
klass = klassTEMPSHADOW;
wcl.lpszClassName = L"gdkWindowTemp";
wcl.style |= CS_SAVEBITS;
ONCE_PER_CLASS ();
klassTEMP = RegisterClassExW (&wcl);
}
else
{
if (klassTEMP == 0)
{
wcl.lpszClassName = L"gdkWindowTemp";
wcl.style |= CS_SAVEBITS;
ONCE_PER_CLASS ();
klassTEMP = RegisterClassExW (&wcl);
}
klass = klassTEMP;
}
klass = klassTEMP;
break;
default:
@ -994,6 +975,9 @@ _gdk_win32_display_create_window_impl (GdkDisplay *display,
if (attributes_mask & GDK_WA_CURSOR)
gdk_window_set_cursor (window, attributes->cursor);
if (_gdk_win32_tablet_input_api == GDK_WIN32_TABLET_INPUT_API_WINPOINTER)
gdk_winpointer_initialize_window (window);
_gdk_win32_window_enable_transparency (window);
}

View File

@ -30,9 +30,13 @@ all: \
gdk-win32.lib \
gdk.res
gdk_win32_DEPS = \
hid.lib
gdk_win32_OBJECTS = \
gdkcursor-win32.obj \
gdkdevice-win32.obj \
gdkdevice-winpointer.obj \
gdkdevice-wintab.obj \
gdkdevicemanager-win32.obj \
gdkdnd-win32.obj \
@ -61,7 +65,7 @@ gdk.res : rc\gdk.rc
rc -DBUILDNUMBER=0 -r -fo gdk.res rc\gdk.rc
gdk-win32.lib : $(gdk_win32_OBJECTS)
lib -out:gdk-win32.lib $(gdk_win32_OBJECTS)
lib -out:gdk-win32.lib $(gdk_win32_DEPS) $(gdk_win32_OBJECTS)
clean::
del *.obj

View File

@ -3,6 +3,7 @@ gdk_win32_sources = files(
'gdkdevicemanager-win32.c',
'gdkdevice-virtual.c',
'gdkdevice-win32.c',
'gdkdevice-winpointer.c',
'gdkdevice-wintab.c',
'gdkdisplay-win32.c',
'gdkdisplaymanager-win32.c',
@ -47,7 +48,8 @@ install_headers(gdk_win32_public_headers, subdir: 'gtk-3.0/gdk/win32')
install_headers('gdkwin32.h', subdir: 'gtk-3.0/gdk')
gdk_win32_deps = [ # FIXME
pangowin32_dep
pangowin32_dep,
meson.get_compiler('c').find_library('hid')
]
libgdk_win32 = static_library('gdk-win32',

View File

@ -273,8 +273,6 @@ INTROSPECTION_REQUIRED_VERSION = @INTROSPECTION_REQUIRED_VERSION@
INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
ISO_CODES_PREFIX = @ISO_CODES_PREFIX@
JSON_GLIB_CFLAGS = @JSON_GLIB_CFLAGS@
JSON_GLIB_LIBS = @JSON_GLIB_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LDFLAGS_FOR_BUILD = @LDFLAGS_FOR_BUILD@
@ -323,8 +321,6 @@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
POSUB = @POSUB@
RANLIB = @RANLIB@
REST_CFLAGS = @REST_CFLAGS@
REST_LIBS = @REST_LIBS@
SASSC = @SASSC@
SED = @SED@
SET_MAKE = @SET_MAKE@

View File

@ -3,8 +3,8 @@
GTK_ICON ICON "gtk.ico"
VS_VERSION_INFO VERSIONINFO
FILEVERSION 3,24,29,0
PRODUCTVERSION 3,24,29,0
FILEVERSION 3,24,30,0
PRODUCTVERSION 3,24,30,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.29.0"
VALUE "FileVersion", "3.24.30.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.29"
VALUE "ProductVersion", "3.24.30"
END
END
BLOCK "VarFileInfo"

View File

@ -380,8 +380,6 @@ INTROSPECTION_REQUIRED_VERSION = @INTROSPECTION_REQUIRED_VERSION@
INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
ISO_CODES_PREFIX = @ISO_CODES_PREFIX@
JSON_GLIB_CFLAGS = @JSON_GLIB_CFLAGS@
JSON_GLIB_LIBS = @JSON_GLIB_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LDFLAGS_FOR_BUILD = @LDFLAGS_FOR_BUILD@
@ -430,8 +428,6 @@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
POSUB = @POSUB@
RANLIB = @RANLIB@
REST_CFLAGS = @REST_CFLAGS@
REST_LIBS = @REST_LIBS@
SASSC = @SASSC@
SED = @SED@
SET_MAKE = @SET_MAKE@

View File

@ -1355,7 +1355,10 @@ gtk.gresource.xml: Makefile.am inspector/Makefile.inc
echo " <file compressed='true' preprocess='xml-stripblanks'>inspector/$$n</file>" >> $@; \
done; \
echo " <file>inspector/logo.png</file>" >> $@; \
echo " <file>emoji/emoji.data</file>" >> $@; \
for f in $(srcdir)/emoji/*.data; do \
n=`basename $$f`; \
echo " <file>emoji/$$n</file>" >> $@; \
done; \
echo " </gresource>" >> $@; \
echo "</gresources>" >> $@;
@ -1743,8 +1746,13 @@ EXTRA_DIST += \
$(gsettings_SCHEMAS) \
compose/compose-parse.py \
emoji/convert-emoji.c \
emoji/emoji.json \
emoji/emoji1.json \
emoji/gresource.xml.in \
emoji/README.md \
emoji/de.data \
emoji/en.data \
emoji/es.data \
emoji/fr.data \
emoji/zh.data \
a11y/Makefile.inc \
deprecated/Makefile.inc \
glade/README.glade \

View File

@ -287,18 +287,20 @@ am__libgtk_3_la_SOURCES_DIST = a11y/gtkaccessibility.c \
a11y/gtkcolorswatchaccessible.c a11y/gtkcomboboxaccessible.c \
a11y/gtkcontaineraccessible.c \
a11y/gtkcontainercellaccessible.c a11y/gtkentryaccessible.c \
a11y/gtkexpanderaccessible.c a11y/gtkflowboxaccessible.c \
a11y/gtkflowboxchildaccessible.c a11y/gtkframeaccessible.c \
a11y/gtkheaderbaraccessible.c a11y/gtkiconviewaccessible.c \
a11y/gtkimageaccessible.c a11y/gtkimagecellaccessible.c \
a11y/gtklabelaccessible.c a11y/gtklevelbaraccessible.c \
a11y/gtklinkbuttonaccessible.c a11y/gtklistboxaccessible.c \
a11y/gtklistboxrowaccessible.c a11y/gtklockbuttonaccessible.c \
a11y/gtkmenuaccessible.c a11y/gtkmenubuttonaccessible.c \
a11y/gtkmenushellaccessible.c a11y/gtkmenuitemaccessible.c \
a11y/gtknotebookaccessible.c a11y/gtknotebookpageaccessible.c \
a11y/gtkpanedaccessible.c a11y/gtkplugaccessible.c \
a11y/gtkpopoveraccessible.c a11y/gtkprogressbaraccessible.c \
a11y/gtkexpanderaccessible.c \
a11y/gtkfilechooserwidgetaccessible.c \
a11y/gtkflowboxaccessible.c a11y/gtkflowboxchildaccessible.c \
a11y/gtkframeaccessible.c a11y/gtkheaderbaraccessible.c \
a11y/gtkiconviewaccessible.c a11y/gtkimageaccessible.c \
a11y/gtkimagecellaccessible.c a11y/gtklabelaccessible.c \
a11y/gtklevelbaraccessible.c a11y/gtklinkbuttonaccessible.c \
a11y/gtklistboxaccessible.c a11y/gtklistboxrowaccessible.c \
a11y/gtklockbuttonaccessible.c a11y/gtkmenuaccessible.c \
a11y/gtkmenubuttonaccessible.c a11y/gtkmenushellaccessible.c \
a11y/gtkmenuitemaccessible.c a11y/gtknotebookaccessible.c \
a11y/gtknotebookpageaccessible.c a11y/gtkpanedaccessible.c \
a11y/gtkplugaccessible.c a11y/gtkpopoveraccessible.c \
a11y/gtkprogressbaraccessible.c \
a11y/gtkradiobuttonaccessible.c \
a11y/gtkradiomenuitemaccessible.c a11y/gtkrangeaccessible.c \
a11y/gtkrenderercellaccessible.c a11y/gtkscaleaccessible.c \
@ -497,6 +499,7 @@ am__objects_1 = a11y/libgtk_3_la-gtkaccessibility.lo \
a11y/libgtk_3_la-gtkcontainercellaccessible.lo \
a11y/libgtk_3_la-gtkentryaccessible.lo \
a11y/libgtk_3_la-gtkexpanderaccessible.lo \
a11y/libgtk_3_la-gtkfilechooserwidgetaccessible.lo \
a11y/libgtk_3_la-gtkflowboxaccessible.lo \
a11y/libgtk_3_la-gtkflowboxchildaccessible.lo \
a11y/libgtk_3_la-gtkframeaccessible.lo \
@ -1395,6 +1398,7 @@ am__depfiles_remade = ./$(DEPDIR)/encodesymbolic.Po \
a11y/$(DEPDIR)/libgtk_3_la-gtkcontainercellaccessible.Plo \
a11y/$(DEPDIR)/libgtk_3_la-gtkentryaccessible.Plo \
a11y/$(DEPDIR)/libgtk_3_la-gtkexpanderaccessible.Plo \
a11y/$(DEPDIR)/libgtk_3_la-gtkfilechooserwidgetaccessible.Plo \
a11y/$(DEPDIR)/libgtk_3_la-gtkflowboxaccessible.Plo \
a11y/$(DEPDIR)/libgtk_3_la-gtkflowboxchildaccessible.Plo \
a11y/$(DEPDIR)/libgtk_3_la-gtkframeaccessible.Plo \
@ -1715,8 +1719,6 @@ INTROSPECTION_REQUIRED_VERSION = @INTROSPECTION_REQUIRED_VERSION@
INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
ISO_CODES_PREFIX = @ISO_CODES_PREFIX@
JSON_GLIB_CFLAGS = @JSON_GLIB_CFLAGS@
JSON_GLIB_LIBS = @JSON_GLIB_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LDFLAGS_FOR_BUILD = @LDFLAGS_FOR_BUILD@
@ -1765,8 +1767,6 @@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
POSUB = @POSUB@
RANLIB = @RANLIB@
REST_CFLAGS = @REST_CFLAGS@
REST_LIBS = @REST_LIBS@
SASSC = @SASSC@
SED = @SED@
SET_MAKE = @SET_MAKE@
@ -1860,9 +1860,10 @@ EXTRA_DIST = $(gtk_all_private_h_sources) $(gtk_extra_sources) \
$(gtk_built_sources) gtkbuilder.rnc gtkbuilder.rng $(its_DATA) \
$(resource_files) $(gesture_sources) $(theme_sources) \
$(gsettings_SCHEMAS) compose/compose-parse.py \
emoji/convert-emoji.c emoji/emoji.json emoji/emoji1.json \
a11y/Makefile.inc deprecated/Makefile.inc glade/README.glade \
glade/gtk-private-widgets.xml \
emoji/convert-emoji.c emoji/gresource.xml.in emoji/README.md \
emoji/de.data emoji/en.data emoji/es.data emoji/fr.data \
emoji/zh.data a11y/Makefile.inc deprecated/Makefile.inc \
glade/README.glade glade/gtk-private-widgets.xml \
compose/gtk-compose-lookaside.txt inspector/Makefile.inc \
libgtk3.manifest.in gtk-win32.rc.body.in gtk-win32.rc.body \
gtkwin32embed.h gtkwin32embedwidget.h gtkwin32embedwidget.c \
@ -1971,6 +1972,7 @@ a11y_h_sources = \
a11y/gtkcontainercellaccessible.h \
a11y/gtkentryaccessible.h \
a11y/gtkexpanderaccessible.h \
a11y/gtkfilechooserwidgetaccessible.h \
a11y/gtkflowboxaccessible.h \
a11y/gtkflowboxchildaccessible.h \
a11y/gtkframeaccessible.h \
@ -2048,6 +2050,7 @@ a11y_c_sources = \
a11y/gtkcontainercellaccessible.c \
a11y/gtkentryaccessible.c \
a11y/gtkexpanderaccessible.c \
a11y/gtkfilechooserwidgetaccessible.c \
a11y/gtkflowboxaccessible.c \
a11y/gtkflowboxchildaccessible.c \
a11y/gtkframeaccessible.c \
@ -3337,6 +3340,8 @@ a11y/libgtk_3_la-gtkentryaccessible.lo: a11y/$(am__dirstamp) \
a11y/$(DEPDIR)/$(am__dirstamp)
a11y/libgtk_3_la-gtkexpanderaccessible.lo: a11y/$(am__dirstamp) \
a11y/$(DEPDIR)/$(am__dirstamp)
a11y/libgtk_3_la-gtkfilechooserwidgetaccessible.lo: \
a11y/$(am__dirstamp) a11y/$(DEPDIR)/$(am__dirstamp)
a11y/libgtk_3_la-gtkflowboxaccessible.lo: a11y/$(am__dirstamp) \
a11y/$(DEPDIR)/$(am__dirstamp)
a11y/libgtk_3_la-gtkflowboxchildaccessible.lo: a11y/$(am__dirstamp) \
@ -4054,6 +4059,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@a11y/$(DEPDIR)/libgtk_3_la-gtkcontainercellaccessible.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@a11y/$(DEPDIR)/libgtk_3_la-gtkentryaccessible.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@a11y/$(DEPDIR)/libgtk_3_la-gtkexpanderaccessible.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@a11y/$(DEPDIR)/libgtk_3_la-gtkfilechooserwidgetaccessible.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@a11y/$(DEPDIR)/libgtk_3_la-gtkflowboxaccessible.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@a11y/$(DEPDIR)/libgtk_3_la-gtkflowboxchildaccessible.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@a11y/$(DEPDIR)/libgtk_3_la-gtkframeaccessible.Plo@am__quote@ # am--include-marker
@ -4303,6 +4309,13 @@ a11y/libgtk_3_la-gtkexpanderaccessible.lo: a11y/gtkexpanderaccessible.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgtk_3_la_CFLAGS) $(CFLAGS) -c -o a11y/libgtk_3_la-gtkexpanderaccessible.lo `test -f 'a11y/gtkexpanderaccessible.c' || echo '$(srcdir)/'`a11y/gtkexpanderaccessible.c
a11y/libgtk_3_la-gtkfilechooserwidgetaccessible.lo: a11y/gtkfilechooserwidgetaccessible.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgtk_3_la_CFLAGS) $(CFLAGS) -MT a11y/libgtk_3_la-gtkfilechooserwidgetaccessible.lo -MD -MP -MF a11y/$(DEPDIR)/libgtk_3_la-gtkfilechooserwidgetaccessible.Tpo -c -o a11y/libgtk_3_la-gtkfilechooserwidgetaccessible.lo `test -f 'a11y/gtkfilechooserwidgetaccessible.c' || echo '$(srcdir)/'`a11y/gtkfilechooserwidgetaccessible.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) a11y/$(DEPDIR)/libgtk_3_la-gtkfilechooserwidgetaccessible.Tpo a11y/$(DEPDIR)/libgtk_3_la-gtkfilechooserwidgetaccessible.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='a11y/gtkfilechooserwidgetaccessible.c' object='a11y/libgtk_3_la-gtkfilechooserwidgetaccessible.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgtk_3_la_CFLAGS) $(CFLAGS) -c -o a11y/libgtk_3_la-gtkfilechooserwidgetaccessible.lo `test -f 'a11y/gtkfilechooserwidgetaccessible.c' || echo '$(srcdir)/'`a11y/gtkfilechooserwidgetaccessible.c
a11y/libgtk_3_la-gtkflowboxaccessible.lo: a11y/gtkflowboxaccessible.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgtk_3_la_CFLAGS) $(CFLAGS) -MT a11y/libgtk_3_la-gtkflowboxaccessible.lo -MD -MP -MF a11y/$(DEPDIR)/libgtk_3_la-gtkflowboxaccessible.Tpo -c -o a11y/libgtk_3_la-gtkflowboxaccessible.lo `test -f 'a11y/gtkflowboxaccessible.c' || echo '$(srcdir)/'`a11y/gtkflowboxaccessible.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) a11y/$(DEPDIR)/libgtk_3_la-gtkflowboxaccessible.Tpo a11y/$(DEPDIR)/libgtk_3_la-gtkflowboxaccessible.Plo
@ -8719,6 +8732,7 @@ distclean: distclean-am
-rm -f a11y/$(DEPDIR)/libgtk_3_la-gtkcontainercellaccessible.Plo
-rm -f a11y/$(DEPDIR)/libgtk_3_la-gtkentryaccessible.Plo
-rm -f a11y/$(DEPDIR)/libgtk_3_la-gtkexpanderaccessible.Plo
-rm -f a11y/$(DEPDIR)/libgtk_3_la-gtkfilechooserwidgetaccessible.Plo
-rm -f a11y/$(DEPDIR)/libgtk_3_la-gtkflowboxaccessible.Plo
-rm -f a11y/$(DEPDIR)/libgtk_3_la-gtkflowboxchildaccessible.Plo
-rm -f a11y/$(DEPDIR)/libgtk_3_la-gtkframeaccessible.Plo
@ -9313,6 +9327,7 @@ maintainer-clean: maintainer-clean-am
-rm -f a11y/$(DEPDIR)/libgtk_3_la-gtkcontainercellaccessible.Plo
-rm -f a11y/$(DEPDIR)/libgtk_3_la-gtkentryaccessible.Plo
-rm -f a11y/$(DEPDIR)/libgtk_3_la-gtkexpanderaccessible.Plo
-rm -f a11y/$(DEPDIR)/libgtk_3_la-gtkfilechooserwidgetaccessible.Plo
-rm -f a11y/$(DEPDIR)/libgtk_3_la-gtkflowboxaccessible.Plo
-rm -f a11y/$(DEPDIR)/libgtk_3_la-gtkflowboxchildaccessible.Plo
-rm -f a11y/$(DEPDIR)/libgtk_3_la-gtkframeaccessible.Plo
@ -9688,7 +9703,10 @@ gtk.gresource.xml: Makefile.am inspector/Makefile.inc
echo " <file compressed='true' preprocess='xml-stripblanks'>inspector/$$n</file>" >> $@; \
done; \
echo " <file>inspector/logo.png</file>" >> $@; \
echo " <file>emoji/emoji.data</file>" >> $@; \
for f in $(srcdir)/emoji/*.data; do \
n=`basename $$f`; \
echo " <file>emoji/$$n</file>" >> $@; \
done; \
echo " </gresource>" >> $@; \
echo "</gresources>" >> $@;

View File

@ -11,6 +11,7 @@ a11y_h_sources = \
a11y/gtkcontainercellaccessible.h \
a11y/gtkentryaccessible.h \
a11y/gtkexpanderaccessible.h \
a11y/gtkfilechooserwidgetaccessible.h \
a11y/gtkflowboxaccessible.h \
a11y/gtkflowboxchildaccessible.h \
a11y/gtkframeaccessible.h \
@ -88,6 +89,7 @@ a11y_c_sources = \
a11y/gtkcontainercellaccessible.c \
a11y/gtkentryaccessible.c \
a11y/gtkexpanderaccessible.c \
a11y/gtkfilechooserwidgetaccessible.c \
a11y/gtkflowboxaccessible.c \
a11y/gtkflowboxchildaccessible.c \
a11y/gtkframeaccessible.c \

View File

@ -30,12 +30,19 @@ struct _GtkContainerCellAccessiblePrivate
G_DEFINE_TYPE_WITH_PRIVATE (GtkContainerCellAccessible, gtk_container_cell_accessible, GTK_TYPE_CELL_ACCESSIBLE)
static void
unset_child (gpointer child)
{
atk_object_set_parent (ATK_OBJECT (child), NULL);
g_object_unref (child);
}
static void
gtk_container_cell_accessible_finalize (GObject *obj)
{
GtkContainerCellAccessible *container = GTK_CONTAINER_CELL_ACCESSIBLE (obj);
g_list_free_full (container->priv->children, g_object_unref);
g_list_free_full (container->priv->children, unset_child);
G_OBJECT_CLASS (gtk_container_cell_accessible_parent_class)->finalize (obj);
}
@ -157,6 +164,7 @@ gtk_container_cell_accessible_remove_child (GtkContainerCellAccessible *containe
g_return_if_fail (GTK_IS_CELL_ACCESSIBLE (child));
g_return_if_fail (container->priv->n_children > 0);
atk_object_set_parent (ATK_OBJECT (child), NULL);
container->priv->children = g_list_remove (container->priv->children, child);
container->priv->n_children--;

View File

@ -0,0 +1,122 @@
/* GTK+ - accessibility implementations
* Copyright 2001, 2002, 2003 Sun Microsystems Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*/
#include "config.h"
#include <string.h>
#include <gtk/gtk.h>
#include <glib/gi18n-lib.h>
#include "gtkfilechooserwidgetaccessible.h"
static void atk_action_interface_init (AtkActionIface *iface);
G_DEFINE_TYPE_WITH_CODE (GtkFileChooserWidgetAccessible, gtk_file_chooser_widget_accessible, GTK_TYPE_CONTAINER_ACCESSIBLE,
G_IMPLEMENT_INTERFACE (ATK_TYPE_ACTION, atk_action_interface_init))
static void
gtk_file_chooser_widget_accessible_initialize (AtkObject *obj,
gpointer data)
{
ATK_OBJECT_CLASS (gtk_file_chooser_widget_accessible_parent_class)->initialize (obj, data);
obj->role = ATK_ROLE_FILE_CHOOSER;
}
static void
gtk_file_chooser_widget_accessible_class_init (GtkFileChooserWidgetAccessibleClass *klass)
{
AtkObjectClass *class = ATK_OBJECT_CLASS (klass);
GtkContainerAccessibleClass *container_class = (GtkContainerAccessibleClass*)klass;
class->initialize = gtk_file_chooser_widget_accessible_initialize;
container_class->add_gtk = NULL;
container_class->remove_gtk = NULL;
}
static void
gtk_file_chooser_widget_accessible_init (GtkFileChooserWidgetAccessible *file_chooser_widget)
{
}
static gboolean
gtk_file_chooser_widget_accessible_do_action (AtkAction *action,
gint i)
{
GtkWidget *widget;
widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (action));
if (widget == NULL)
return FALSE;
if (!gtk_widget_is_sensitive (widget) || !gtk_widget_get_visible (widget))
return FALSE;
switch (i)
{
case 0:
g_signal_emit_by_name (GTK_FILE_CHOOSER_WIDGET (widget), "location-popup", "");
return TRUE;
default:
break;
}
return FALSE;
}
static gint
gtk_file_chooser_widget_accessible_get_n_actions (AtkAction *action)
{
return 1;
}
static const gchar *
gtk_file_chooser_widget_accessible_action_get_name (AtkAction *action,
gint i)
{
if (i == 0)
return "show_location";
return NULL;
}
static const gchar *
gtk_file_chooser_widget_accessible_action_get_localized_name (AtkAction *action,
gint i)
{
if (i == 0)
return C_("Action name", "Show location");
return NULL;
}
static const gchar *
gtk_file_chooser_widget_accessible_action_get_description (AtkAction *action,
gint i)
{
if (i == 0)
return C_("Action description", "Show the File Chooser's Location text field");
return NULL;
}
static void
atk_action_interface_init (AtkActionIface *iface)
{
iface->do_action = gtk_file_chooser_widget_accessible_do_action;
iface->get_n_actions = gtk_file_chooser_widget_accessible_get_n_actions;
iface->get_name = gtk_file_chooser_widget_accessible_action_get_name;
iface->get_localized_name = gtk_file_chooser_widget_accessible_action_get_localized_name;
iface->get_description = gtk_file_chooser_widget_accessible_action_get_description;
}

View File

@ -0,0 +1,57 @@
/* GTK+ - accessibility implementations
* Copyright 2001 Sun Microsystems Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef __GTK_FILE_CHOOSER_WIDGET_ACCESSIBLE_H__
#define __GTK_FILE_CHOOSER_WIDGET_ACCESSIBLE_H__
#if !defined (__GTK_A11Y_H_INSIDE__) && !defined (GTK_COMPILATION)
#error "Only <gtk/gtk-a11y.h> can be included directly."
#endif
#include <gtk/a11y/gtkcontaineraccessible.h>
G_BEGIN_DECLS
#define GTK_TYPE_FILE_CHOOSER_WIDGET_ACCESSIBLE (gtk_file_chooser_widget_accessible_get_type ())
#define GTK_FILE_CHOOSER_WIDGET_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_FILE_CHOOSER_WIDGET_ACCESSIBLE, GtkFileChooserWidgetAccessible))
#define GTK_FILE_CHOOSER_WIDGET_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_FILE_CHOOSER_WIDGET_ACCESSIBLE, GtkFileChooserWidgetAccessibleClass))
#define GTK_IS_FILE_CHOOSER_WIDGET_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_FILE_CHOOSER_WIDGET_ACCESSIBLE))
#define GTK_IS_FILE_CHOOSER_WIDGET_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_FILE_CHOOSER_WIDGET_ACCESSIBLE))
#define GTK_FILE_CHOOSER_WIDGET_ACCESSIBLE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_FILE_CHOOSER_WIDGET_ACCESSIBLE, GtkFileChooserWidgetAccessibleClass))
typedef struct _GtkFileChooserWidgetAccessible GtkFileChooserWidgetAccessible;
typedef struct _GtkFileChooserWidgetAccessibleClass GtkFileChooserWidgetAccessibleClass;
typedef struct _GtkFileChooserWidgetAccessiblePrivate GtkFileChooserWidgetAccessiblePrivate;
struct _GtkFileChooserWidgetAccessible
{
GtkContainerAccessible parent;
GtkFileChooserWidgetAccessiblePrivate *priv;
};
struct _GtkFileChooserWidgetAccessibleClass
{
GtkContainerAccessibleClass parent_class;
};
GDK_AVAILABLE_IN_ALL
GType gtk_file_chooser_widget_accessible_get_type (void);
G_END_DECLS
#endif /* __GTK_FILE_CHOOSER_WIDGET_ACCESSIBLE_H__ */

View File

@ -104,6 +104,17 @@ static void
cell_info_free (GtkTreeViewAccessibleCellInfo *cell_info)
{
gtk_accessible_set_widget (GTK_ACCESSIBLE (cell_info->cell), NULL);
if (GTK_IS_CONTAINER_CELL_ACCESSIBLE (cell_info->cell))
{
GList *children;
while ((children = gtk_container_cell_accessible_get_children (GTK_CONTAINER_CELL_ACCESSIBLE (cell_info->cell))) != NULL)
{
GtkCellAccessible *child = children->data;
gtk_container_cell_accessible_remove_child (GTK_CONTAINER_CELL_ACCESSIBLE (cell_info->cell), child);
}
}
g_object_unref (cell_info->cell);
g_free (cell_info);

View File

@ -14,6 +14,7 @@ a11y_sources = files(
'gtkcontainercellaccessible.c',
'gtkentryaccessible.c',
'gtkexpanderaccessible.c',
'gtkfilechooserwidgetaccessible.c',
'gtkflowboxaccessible.c',
'gtkflowboxchildaccessible.c',
'gtkframeaccessible.c',
@ -72,6 +73,7 @@ a11y_headers = files(
'gtkcontainercellaccessible.h',
'gtkentryaccessible.h',
'gtkexpanderaccessible.h',
'gtkfilechooserwidgetaccessible.h',
'gtkflowboxaccessible.h',
'gtkflowboxchildaccessible.h',
'gtkframeaccessible.h',

23
gtk/emoji/README.md Normal file
View File

@ -0,0 +1,23 @@
Emoji data
==========
We use Emoji data from Unicode and the CLDR, stored in a GVariant.
The immediate source for our data is the json files from
https://github.com/milesj/emojibase.git
To convert the data from that repository to a GVariant that GTK
can use, the convert-emoji tool can be used:
convert-emoji $emojibase/packages/data/de/data.raw.json de.data
for example (for German).
To make these usable by GTK, we wrap them in a resource bundle
that has the GVariant as
/org/gtk/libgtk/emoji/de.data
and install the resulting resource bundle at this location:
/usr/share/gtk-4.0/emoji/de.gresource

View File

@ -18,18 +18,40 @@
/* Build with gcc -o convert-emoji convert-emoji.c `pkg-config --cflags --libs json-glib-1.0`
*/
/* Reads data from the json files in emojibase, expecting
* language-specific data.raw.json as input
*/
/* The format of the generated data is: a(ausasu).
* Each member of the array has the following fields:
* au - sequence of unicode codepoints. If the
* sequence contains a 0, it marks the point
* where skin tone modifiers should be inserted
* s - name, e.g. "man worker"
* as - keywords, e.g. "man", "worker"
* u - the group that this item belongs to:
* 0: smileys-emotion
* 1: people-body
* 2: component
* 3: animals-nature
* 4: food-drink
* 5: travel-places
* 6: activities
* 7: objects
* 8: symbols
* 9: flags
*/
#include <json-glib/json-glib.h>
#include <string.h>
gboolean
parse_code (GVariantBuilder *b,
const char *code,
GString *name_key)
const char *code)
{
g_auto(GStrv) strv = NULL;
int j;
strv = g_strsplit (code, " ", -1);
strv = g_strsplit (code, "-", -1);
for (j = 0; strv[j]; j++)
{
guint32 u;
@ -44,12 +66,7 @@ parse_code (GVariantBuilder *b,
if (0x1f3fb <= u && u <= 0x1f3ff)
g_variant_builder_add (b, "u", 0);
else
{
g_variant_builder_add (b, "u", u);
if (j > 0)
g_string_append_c (name_key, '-');
g_string_append_printf (name_key, "%x", u);
}
g_variant_builder_add (b, "u", u);
}
return TRUE;
@ -60,57 +77,27 @@ main (int argc, char *argv[])
{
JsonParser *parser;
JsonNode *root;
JsonArray *array;
JsonObject *ro;
JsonArray *array;
JsonNode *node;
const char *name;
const char *unicode;
JsonObjectIter iter;
GError *error = NULL;
guint length, i;
GVariantBuilder builder;
GVariant *v;
GString *s;
GBytes *bytes;
GHashTable *names;
GString *name_key;
if (argc != 4)
if (argc != 3)
{
g_print ("Usage: emoji-convert INPUT INPUT1 OUTPUT\n");
g_print ("Usage: emoji-convert INPUT OUTPUT\n");
return 1;
}
parser = json_parser_new ();
if (!json_parser_load_from_file (parser, argv[2], &error))
{
g_error ("%s", error->message);
return 1;
}
root = json_parser_get_root (parser);
ro = json_node_get_object (root);
json_object_iter_init (&iter, ro);
names = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
name_key = g_string_new ("");
while (json_object_iter_next (&iter, &name, &node))
{
JsonObject *obj = json_node_get_object (node);
const char *unicode;
const char *shortname;
unicode = json_object_get_string_member (obj, "unicode");
shortname = json_object_get_string_member (obj, "shortname");
g_hash_table_insert (names, g_strdup (unicode), g_strdup (shortname));
}
g_object_unref (parser);
parser = json_parser_new ();
if (!json_parser_load_from_file (parser, argv[1], &error))
{
g_error ("%s", error->message);
@ -121,65 +108,74 @@ main (int argc, char *argv[])
array = json_node_get_array (root);
length = json_array_get_length (array);
g_variant_builder_init (&builder, G_VARIANT_TYPE ("a(auss)"));
i = 0;
while (i < length)
g_variant_builder_init (&builder, G_VARIANT_TYPE ("a(ausasu)"));
for (i = 0; i < length; i++)
{
JsonNode *node = json_array_get_element (array, i);
JsonObject *obj = json_node_get_object (node);
JsonObject *obj = json_array_get_object_element (array, i);
GVariantBuilder b1;
GVariantBuilder b2;
guint group;
const char *name;
const char *shortname;
char *code;
int j;
gboolean skip;
gboolean has_variations;
i++;
if (!json_object_has_member (obj, "group"))
continue;
group = json_object_get_int_member (obj, "group");
name = json_object_get_string_member (obj, "annotation");
if (json_object_has_member (obj, "skins"))
{
JsonArray *a2 = json_object_get_array_member (obj, "skins");
JsonNode *n2 = json_array_get_element (a2, 0);
JsonObject *o2 = json_node_get_object (n2);
code = g_strdup (json_object_get_string_member (o2, "hexcode"));
}
else
{
code = g_strdup (json_object_get_string_member (obj, "hexcode"));
}
g_variant_builder_init (&b1, G_VARIANT_TYPE ("au"));
name = json_object_get_string_member (obj, "name");
code = g_strdup (json_object_get_string_member (obj, "code"));
has_variations = FALSE;
while (i < length)
{
JsonNode *node2 = json_array_get_element (array, i);
JsonObject *obj2 = json_node_get_object (node2);
const char *name2;
const char *code2;
name2 = json_object_get_string_member (obj2, "name");
code2 = json_object_get_string_member (obj2, "code");
if (!strstr (name2, "skin tone") || !g_str_has_prefix (name2, name))
break;
if (!has_variations)
{
has_variations = TRUE;
g_free (code);
code = g_strdup (code2);
}
i++;
}
g_string_set_size (name_key, 0);
if (!parse_code (&b1, code, name_key))
if (!parse_code (&b1, code))
return 1;
shortname = g_hash_table_lookup (names, name_key->str);
g_variant_builder_init (&b2, G_VARIANT_TYPE ("as"));
if (json_object_has_member (obj, "tags"))
{
JsonArray *tags = json_object_get_array_member (obj, "tags");
for (int j = 0; j < json_array_get_length (tags); j++)
g_variant_builder_add (&b2, "s", json_array_get_string_element (tags, j));
}
g_variant_builder_add (&builder, "(auss)", &b1, name, shortname ? shortname : "");
g_variant_builder_add (&builder, "(ausasu)", &b1, name, &b2, group);
}
v = g_variant_builder_end (&builder);
bytes = g_variant_get_data_as_bytes (v);
if (!g_file_set_contents (argv[3], g_bytes_get_data (bytes, NULL), g_bytes_get_size (bytes), &error))
if (g_str_has_suffix (argv[2], ".json"))
{
g_error ("%s", error->message);
return 1;
JsonNode *node;
char *out;
node = json_gvariant_serialize (v);
out = json_to_string (node, TRUE);
if (!g_file_set_contents (argv[2], out, -1, &error))
{
g_error ("%s", error->message);
return 1;
}
}
else
{
GBytes *bytes;
bytes = g_variant_get_data_as_bytes (v);
if (!g_file_set_contents (argv[2], g_bytes_get_data (bytes, NULL), g_bytes_get_size (bytes), &error))
{
g_error ("%s", error->message);
return 1;
}
}
return 0;

BIN
gtk/emoji/de.data Normal file

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

BIN
gtk/emoji/en.data Normal file

Binary file not shown.

BIN
gtk/emoji/es.data Normal file

Binary file not shown.

BIN
gtk/emoji/fr.data Normal file

Binary file not shown.

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<gresources>
<gresource prefix="/org/gtk/libgtk/emoji/">
<file>@lang@.data</file>
</gresource>
</gresources>

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