Compare commits
218 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3e6fd55ee0 | ||
|
|
f1602ef833 | ||
|
|
0e3cb4b84d | ||
|
|
294249a8bd | ||
|
|
32e5c18213 | ||
|
|
acb183ef7c | ||
|
|
ddf984f42c | ||
|
|
90472dc481 | ||
|
|
a76ae3eb85 | ||
|
|
de1660132e | ||
|
|
fc1643956b | ||
|
|
2a7877277e | ||
|
|
4986c622c1 | ||
|
|
b6dc66159d | ||
|
|
d3aaf9ed03 | ||
|
|
048d23c36d | ||
|
|
71fcbce0d7 | ||
|
|
afeded7e95 | ||
|
|
f0c12ee7b8 | ||
|
|
d6f42d167a | ||
|
|
7f74f15b5e | ||
|
|
77216107dd | ||
|
|
66a94161bd | ||
|
|
60d197fca8 | ||
|
|
b497382659 | ||
|
|
d8190aae3f | ||
|
|
1afbe2d08b | ||
|
|
ff892684c8 | ||
|
|
433356856e | ||
|
|
a40126e1f9 | ||
|
|
58b91ca254 | ||
|
|
2c3388112e | ||
|
|
b5f27d2e9c | ||
|
|
bda80c4e41 | ||
|
|
789d202720 | ||
|
|
2e09856d63 | ||
|
|
1ce6c7f73c | ||
|
|
3bf883b979 | ||
|
|
ac882269a5 | ||
|
|
f2c8b8b0d2 | ||
|
|
007299ccc8 | ||
|
|
8e48e6548b | ||
|
|
19c2e87627 | ||
|
|
da15d2186b | ||
|
|
06e8cf40f9 | ||
|
|
00296bde4d | ||
|
|
0302894039 | ||
|
|
cfe2a829f1 | ||
|
|
af9bea059a | ||
|
|
c74c4adbce | ||
|
|
74540525c7 | ||
|
|
2ebdce8633 | ||
|
|
c26a209283 | ||
|
|
33fd9eb472 | ||
|
|
22dd7189bb | ||
|
|
f1b6556aac | ||
|
|
22b091047f | ||
|
|
a7ff289302 | ||
|
|
a4ceb296a6 | ||
|
|
ec1551c854 | ||
|
|
7776052c46 | ||
|
|
8a5619d981 | ||
|
|
2e299d3808 | ||
|
|
c1fa916e88 | ||
|
|
fb364dd84b | ||
|
|
3e460253ad | ||
|
|
6ea6391581 | ||
|
|
2c951f122d | ||
|
|
9dc0e6c4d0 | ||
|
|
7afaf5d2ae | ||
|
|
cf3e037e64 | ||
|
|
2ebf7c29e1 | ||
|
|
bc1f17972c | ||
|
|
5fee632386 | ||
|
|
8a946fd1a4 | ||
|
|
b668e6d8a1 | ||
|
|
b2d761f706 | ||
|
|
013b629a2e | ||
|
|
b56202937a | ||
|
|
e38800ad3e | ||
|
|
6402137bbf | ||
|
|
24ea83e55e | ||
|
|
e2f2076bf2 | ||
|
|
a3c604d5cc | ||
|
|
a1f0d64287 | ||
|
|
8562476872 | ||
|
|
6de506f277 | ||
|
|
9f81db139d | ||
|
|
bae6a37ed9 | ||
|
|
20964a3fa6 | ||
|
|
53f8a2ef93 | ||
|
|
783af2e3bf | ||
|
|
8369148c3b | ||
|
|
fba09dbfc7 | ||
|
|
f931c73316 | ||
|
|
312e5781f3 | ||
|
|
4fcf3b3a7d | ||
|
|
1562ce4ebd | ||
|
|
857f734d83 | ||
|
|
8497425535 | ||
|
|
3fd14b444a | ||
|
|
dbdfac0310 | ||
|
|
11c4cc235f | ||
|
|
5554113c74 | ||
|
|
15f0ac6f93 | ||
|
|
37ea15e81f | ||
|
|
384d9a75cd | ||
|
|
b24e43a1f7 | ||
|
|
5aaa373b70 | ||
|
|
13647e0144 | ||
|
|
a23dfcd4c1 | ||
|
|
41827d9f72 | ||
|
|
9811485990 | ||
|
|
b6795f8ff9 | ||
|
|
79e11bed1a | ||
|
|
2a47038635 | ||
|
|
6ccd786a93 | ||
|
|
f5a5480fe2 | ||
|
|
a067938589 | ||
|
|
1a17e71432 | ||
|
|
89c7d5fe4b | ||
|
|
128cdaa113 | ||
|
|
f60359c183 | ||
|
|
6a2fb84446 | ||
|
|
7a9f88ee48 | ||
|
|
f2a8878570 | ||
|
|
c1aec7f100 | ||
|
|
10689066e3 | ||
|
|
a5198dd935 | ||
|
|
459f5537b3 | ||
|
|
f1471ea033 | ||
|
|
0f55e9552f | ||
|
|
7a41da3a6e | ||
|
|
8a76236f13 | ||
|
|
7e4a2a5724 | ||
|
|
35516a5e86 | ||
|
|
feb38ce112 | ||
|
|
6057e2141c | ||
|
|
82e8605627 | ||
|
|
6c70b5a43d | ||
|
|
9651546b97 | ||
|
|
56b8cf501c | ||
|
|
115588128f | ||
|
|
f39dea3d57 | ||
|
|
74bdb8d8a5 | ||
|
|
89583c456d | ||
|
|
2f6d0792f8 | ||
|
|
3b9531d3d3 | ||
|
|
5304d1c8d1 | ||
|
|
8eb4e59613 | ||
|
|
efdc6b81e6 | ||
|
|
5b8553fae5 | ||
|
|
dc201938b5 | ||
|
|
2c56d0491d | ||
|
|
d819af3dbd | ||
|
|
f2bbaf4f32 | ||
|
|
50b5144b0b | ||
|
|
302adb0ad2 | ||
|
|
5d91434f38 | ||
|
|
783d4d7577 | ||
|
|
ef8eaef429 | ||
|
|
26b2a45b2b | ||
|
|
7938570be2 | ||
|
|
78daa17a89 | ||
|
|
a89bb5bd9b | ||
|
|
6e88d10a35 | ||
|
|
bc67f7a6fc | ||
|
|
c6321e52df | ||
|
|
900454e9d9 | ||
|
|
71e138c201 | ||
|
|
2b0a605c5d | ||
|
|
4b8cdeec09 | ||
|
|
3a871c9184 | ||
|
|
eca445672a | ||
|
|
d960720156 | ||
|
|
880dd62c09 | ||
|
|
b24550abc0 | ||
|
|
ec156ad5b7 | ||
|
|
a3e82f20a1 | ||
|
|
03afe9be4e | ||
|
|
75cb21e448 | ||
|
|
f8669d55c6 | ||
|
|
7b02682b1d | ||
|
|
01ac1bbaae | ||
|
|
04bed1d3ab | ||
|
|
b310ee1eac | ||
|
|
4b16634e0e | ||
|
|
48ed99e14d | ||
|
|
2b095b501f | ||
|
|
ca1dfc7092 | ||
|
|
e95f0aa73b | ||
|
|
3bcdbc3fb2 | ||
|
|
6b3b068ab0 | ||
|
|
903464f1d1 | ||
|
|
aef02551e3 | ||
|
|
9c60b8d4d4 | ||
|
|
785e2ab168 | ||
|
|
47bfc83931 | ||
|
|
fb72264a27 | ||
|
|
7e1a3ffa37 | ||
|
|
ce99b56f25 | ||
|
|
307945fbe4 | ||
|
|
cf53a34db4 | ||
|
|
7d89e5e92a | ||
|
|
91c37c8692 | ||
|
|
3f1536632f | ||
|
|
5beaf8d014 | ||
|
|
cdb598793a | ||
|
|
a1cd0f71d9 | ||
|
|
6af43f823e | ||
|
|
820d72ffb8 | ||
|
|
4bdfb11d1f | ||
|
|
e413f5c432 | ||
|
|
b2ad8d2aba | ||
|
|
5c6d2c8e87 | ||
|
|
573636d84a | ||
|
|
24ef893cb4 | ||
|
|
6af85a62bb |
@@ -6,12 +6,6 @@ cache:
|
||||
paths:
|
||||
- _ccache/
|
||||
|
||||
fedora-autotools:
|
||||
image: registry.gitlab.gnome.org/gnome/gtk/fedora-gtk3:v3
|
||||
stage: build
|
||||
script:
|
||||
- bash -x ./.gitlab-ci/test-docker-autotools.sh
|
||||
|
||||
fedora-distcheck:
|
||||
image: registry.gitlab.gnome.org/gnome/gtk/fedora-gtk3:v3
|
||||
variables:
|
||||
@@ -19,7 +13,7 @@ fedora-distcheck:
|
||||
when: manual
|
||||
stage: build
|
||||
script:
|
||||
- bash -x ./.gitlab-ci/test-docker-autotools.sh
|
||||
- bash -x ./.gitlab-ci/test-docker-meson.sh
|
||||
|
||||
fedora-meson:
|
||||
image: registry.gitlab.gnome.org/gnome/gtk/fedora-gtk3:v3
|
||||
@@ -81,15 +75,3 @@ msys2-mingw64-meson:
|
||||
- "_build/meson-logs"
|
||||
- "_build/gdk/libgdk-3-0.dll"
|
||||
- "_build/gtk/libgtk-3-0.dll"
|
||||
|
||||
msys2-mingw64-autotools:
|
||||
when: manual
|
||||
variables:
|
||||
MSYSTEM: "MINGW64"
|
||||
CHERE_INVOKING: "yes"
|
||||
stage: build
|
||||
tags:
|
||||
- win32-ps
|
||||
script:
|
||||
- C:\msys64\usr\bin\pacman --noconfirm -Syyuu
|
||||
- C:\msys64\usr\bin\bash -lc "bash -x ./.gitlab-ci/test-msys2-autotools.sh"
|
||||
|
||||
@@ -1,35 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
mkdir -p _ccache
|
||||
export CCACHE_BASEDIR="$(pwd)"
|
||||
export CCACHE_DIR="${CCACHE_BASEDIR}/_ccache"
|
||||
export N_PROCS=$(($(nproc) - 1))
|
||||
|
||||
EXTRA_CONFIGURE_OPT=""
|
||||
|
||||
# Only enable documentation when distchecking, since it's required
|
||||
if [ -n "${DO_DISTCHECK-}" ]; then
|
||||
EXTRA_CONFIGURE_OPTS="${EXTRA_CONFIGURE_OPTS} --enable-gtk-doc"
|
||||
fi
|
||||
|
||||
NOCONFIGURE=1 ./autogen.sh
|
||||
|
||||
mkdir _build
|
||||
cd _build
|
||||
|
||||
../configure \
|
||||
--enable-cloudproviders \
|
||||
--enable-broadway-backend \
|
||||
--enable-wayland-backend \
|
||||
--enable-x11-backend \
|
||||
--enable-xinerama \
|
||||
${EXTRA_CONFIGURE_OPTS}
|
||||
|
||||
make -j${N_PROCS}
|
||||
|
||||
if [ -n "${DO_DISTCHECK-}" ]; then
|
||||
make -j${N_PROCS} check SKIP_GDKTARGET="echo Not actually running tests for now"
|
||||
make -j${N_PROCS} distcheck SKIP_GDKTARGET="echo Not actually running tests for now"
|
||||
fi
|
||||
@@ -7,7 +7,7 @@ export CCACHE_BASEDIR="$(pwd)"
|
||||
export CCACHE_DIR="${CCACHE_BASEDIR}/_ccache"
|
||||
|
||||
export PATH="${HOME}/.local/bin:${PATH}"
|
||||
python3 -m pip install --user meson==0.49.2
|
||||
python3 -m pip install --user meson==0.60
|
||||
|
||||
meson \
|
||||
-Dinstalled_tests=true \
|
||||
@@ -22,9 +22,26 @@ meson \
|
||||
cd _build
|
||||
ninja
|
||||
|
||||
# Meson < 0.57 can't exclude suites in a test_setup() so we have to
|
||||
# explicitly leave out the failing and flaky suites.
|
||||
xvfb-run -a -s "-screen 0 1024x768x24" \
|
||||
meson test \
|
||||
--timeout-multiplier 4 \
|
||||
--print-errorlogs \
|
||||
--suite=gtk+-3.0 \
|
||||
--no-suite=gtk+-3.0:a11y
|
||||
--no-suite=flaky \
|
||||
--no-suite=failing
|
||||
|
||||
# We run the flaky and failing tests to get them reported in the CI logs,
|
||||
# but if they fail (which we expect they often will), that isn't an error.
|
||||
xvfb-run -a -s "-screen 0 1024x768x24" \
|
||||
meson test \
|
||||
--timeout-multiplier 4 \
|
||||
--print-errorlogs \
|
||||
--suite=flaky \
|
||||
--suite=failing \
|
||||
|| true
|
||||
|
||||
if [ -n "${DO_DISTCHECK-}" ]; then
|
||||
meson dist --no-tests
|
||||
fi
|
||||
|
||||
@@ -1,44 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
if [[ "$MSYSTEM" == "MINGW32" ]]; then
|
||||
export MSYS2_ARCH="i686"
|
||||
else
|
||||
export MSYS2_ARCH="x86_64"
|
||||
fi
|
||||
|
||||
# Update everything
|
||||
pacman --noconfirm -Suy
|
||||
|
||||
# Install the required packages
|
||||
pacman --noconfirm -S --needed \
|
||||
base-devel \
|
||||
mingw-w64-$MSYS2_ARCH-toolchain \
|
||||
mingw-w64-$MSYS2_ARCH-ccache \
|
||||
mingw-w64-$MSYS2_ARCH-pkg-config \
|
||||
mingw-w64-$MSYS2_ARCH-gobject-introspection \
|
||||
mingw-w64-$MSYS2_ARCH-adwaita-icon-theme \
|
||||
mingw-w64-$MSYS2_ARCH-atk \
|
||||
mingw-w64-$MSYS2_ARCH-cairo \
|
||||
mingw-w64-$MSYS2_ARCH-gdk-pixbuf2 \
|
||||
mingw-w64-$MSYS2_ARCH-glib2 \
|
||||
mingw-w64-$MSYS2_ARCH-json-glib \
|
||||
mingw-w64-$MSYS2_ARCH-libepoxy \
|
||||
mingw-w64-$MSYS2_ARCH-pango \
|
||||
mingw-w64-$MSYS2_ARCH-shared-mime-info \
|
||||
mingw-w64-$MSYS2_ARCH-gtk-doc
|
||||
|
||||
mkdir -p _ccache
|
||||
export CCACHE_BASEDIR="$(pwd)"
|
||||
export CCACHE_DIR="${CCACHE_BASEDIR}/_ccache"
|
||||
export CC="ccache gcc"
|
||||
|
||||
# Build
|
||||
ccache --zero-stats
|
||||
ccache --show-stats
|
||||
|
||||
./autogen.sh
|
||||
make -j4
|
||||
|
||||
ccache --show-stats
|
||||
65
AUTHORS
65
AUTHORS
@@ -1,65 +0,0 @@
|
||||
Please do not mail any of the authors listed here
|
||||
asking questions about this version of GTK+.
|
||||
|
||||
Original Authors
|
||||
----------------
|
||||
Peter Mattis <petm@xcf.berkeley.edu>
|
||||
Spencer Kimball <spencer@xcf.berkeley.edu>
|
||||
Josh MacDonald <jmacd@xcf.berkeley.edu>
|
||||
|
||||
The GTK+ Team (in alphabetical order)
|
||||
-------------------------------------
|
||||
Shawn T. Amundson <amundson@gtk.org>
|
||||
Jerome Bolliet <bolliet@gtk.org>
|
||||
Damon Chaplin <damon@gtk.org>
|
||||
Tony Gale <gale@gtk.org>
|
||||
Jeff Garzik <jgarzik@gtk.org>
|
||||
Lars Hamann <lars@gtk.org>
|
||||
Raja R Harinath <harinath@gtk.org>
|
||||
Carsten Haitzler <raster@gtk.org>
|
||||
Tim Janik <timj@gtk.org>
|
||||
Stefan Jeske <stefan@gtk.org>
|
||||
Elliot Lee <sopwith@gtk.org>
|
||||
Raph Levien <raph@gtk.org>
|
||||
Ian Main <imain@gtk.org>
|
||||
Federico Mena <quartic@gtk.org>
|
||||
Paolo Molaro <lupus@gtk.org>
|
||||
Jay Painter <jpaint@gtk.org>
|
||||
Manish Singh <manish@gtk.org>
|
||||
Owen Taylor <otaylor@gtk.org>
|
||||
|
||||
There are many others who have contributed patches; we thank them,
|
||||
GTK+ is much better because of them.
|
||||
|
||||
|
||||
Over time, GTK+ has incorporated some pieces of software which
|
||||
started as independent projects. We list the original authors here:
|
||||
|
||||
|
||||
MS-Windows theme engine
|
||||
-----------------------
|
||||
Raymond Penners
|
||||
Dom Lachowicz
|
||||
|
||||
|
||||
Pixbuf theme engine
|
||||
-------------------
|
||||
Owen Taylor
|
||||
|
||||
|
||||
IME input method
|
||||
----------------
|
||||
Takuro Ashie
|
||||
Kazuki IWAMOTO
|
||||
|
||||
|
||||
Mac OS X backend
|
||||
----------------
|
||||
Anders Carlsson
|
||||
|
||||
|
||||
DirectFB backend
|
||||
----------------
|
||||
Denis Oliver Kropp
|
||||
Sven Neumann
|
||||
Mike Emmel
|
||||
262
CONTRIBUTING.md
Normal file
262
CONTRIBUTING.md
Normal file
@@ -0,0 +1,262 @@
|
||||
# Contribution guidelines
|
||||
|
||||
Thank you for considering contributing to the GTK project!
|
||||
|
||||
These guidelines are meant for new contributors, regardless of their level
|
||||
of proficiency; following them allows the maintainers of the GTK project to
|
||||
more effectively evaluate your contribution, and provide prompt feedback to
|
||||
you. Additionally, by following these guidelines you clearly communicate
|
||||
that you respect the time and effort that the people developing GTK put into
|
||||
managing the project.
|
||||
|
||||
GTK is a complex free software GUI toolkit, and it would not exist without
|
||||
contributions from the free and open source software community. There are
|
||||
many things that we value:
|
||||
|
||||
- bug reporting and fixing
|
||||
- documentation and examples
|
||||
- tests
|
||||
- new features
|
||||
|
||||
Please, do not use the issue tracker for support questions. If you have
|
||||
questions on how to use GTK effectively, you can use:
|
||||
|
||||
- the `#gtk` IRC channel on irc.gnome.org
|
||||
- the [gtk tag on the GNOME Discourse instance](https://discourse.gnome.org/tag/gtk)
|
||||
|
||||
You can also look at the GTK tag on [Stack
|
||||
Overflow](https://stackoverflow.com/questions/tagged/gtk).
|
||||
|
||||
The issue tracker is meant to be used for actionable issues only.
|
||||
|
||||
## How to report bugs
|
||||
|
||||
### Security issues
|
||||
|
||||
You should not open a new issue for security related questions.
|
||||
|
||||
When in doubt, send an email to the [security](mailto:security@gnome.org)
|
||||
mailing list.
|
||||
|
||||
### Bug reports
|
||||
|
||||
If you're reporting a bug make sure to list:
|
||||
|
||||
0. which version of GTK are you using?
|
||||
0. which operating system are you using?
|
||||
0. the necessary steps to reproduce the issue
|
||||
0. the expected outcome
|
||||
0. a description of the behavior; screenshots are also welcome
|
||||
0. a small, self-contained example exhibiting the behavior; if this
|
||||
is not available, try reproducing the issue using the GTK examples
|
||||
or interactive tests
|
||||
|
||||
If the issue includes a crash, you should also include:
|
||||
|
||||
0. the eventual warnings printed on the terminal
|
||||
0. a backtrace, obtained with tools such as GDB or LLDB
|
||||
|
||||
It is fine to include screenshots of screen recordings to demonstrate
|
||||
an issue that is best to understand visually, but please don't just
|
||||
dump screen recordings without further details into issues. It is
|
||||
essential that the problem is described in enough detail to reproduce
|
||||
it without watching a video.
|
||||
|
||||
For small issues, such as:
|
||||
|
||||
- spelling/grammar fixes in the documentation
|
||||
- typo correction
|
||||
- comment clean ups
|
||||
- changes to metadata files (CI, `.gitignore`)
|
||||
- build system changes
|
||||
- source tree clean ups and reorganizations
|
||||
|
||||
You should directly open a merge request instead of filing a new issue.
|
||||
|
||||
### Features and enhancements
|
||||
|
||||
Feature discussion can be open ended and require high bandwidth channels; if
|
||||
you are proposing a new feature on the issue tracker, make sure to make
|
||||
an actionable proposal, and list:
|
||||
|
||||
0. what you're trying to achieve
|
||||
0. prior art, in other toolkits or applications
|
||||
0. design and theming changes
|
||||
|
||||
If you're proposing the integration of new features it helps to have
|
||||
multiple applications using shared or similar code, especially if they have
|
||||
iterated over it various times.
|
||||
|
||||
Each feature should also come fully documented, and with tests.
|
||||
|
||||
## Your first contribution
|
||||
|
||||
### Prerequisites
|
||||
|
||||
If you want to contribute to the GTK project, you will need to have the
|
||||
development tools appropriate for your operating system, including:
|
||||
|
||||
- Python 3.x
|
||||
- Meson
|
||||
- Ninja
|
||||
- Gettext (19.7 or newer)
|
||||
- a [C99 compatible compiler](https://wiki.gnome.org/Projects/GLib/CompilerRequirements)
|
||||
|
||||
Up-to-date instructions about developing GNOME applications and libraries
|
||||
can be found on [the GNOME Developer Center](https://developer.gnome.org).
|
||||
|
||||
The GTK project uses GitLab for code hosting and for tracking issues. More
|
||||
information about using GitLab can be found [on the GNOME
|
||||
wiki](https://wiki.gnome.org/GitLab).
|
||||
|
||||
### Dependencies
|
||||
|
||||
In order to get GTK from Git installed on your system, you need to have the
|
||||
required versions of all the software dependencies required by GTK; typically,
|
||||
this means a recent version of GLib, Cairo, Pango, and ATK, as well as the
|
||||
platform-specific dependencies for the windowing system you are using (Wayland,
|
||||
X11, Windows, or macOS).
|
||||
|
||||
The core dependencies for GTK are:
|
||||
|
||||
- [GLib, GObject, and GIO](https://gitlab.gnome.org/GNOME/glib)
|
||||
- [Cairo](http://cairographics.org)
|
||||
- [Pango](https://gitlab.gnome.org/GNOME/pango)
|
||||
- [GdkPixbuf](https://gitlab.gnome.org/GNOME/gdk-pixbuf)
|
||||
- [Epoxy](https://github.com/anholt/libepoxy)
|
||||
- [ATK](https://gitlab.gnome.org/GNOME/atk)
|
||||
- [Graphene](https://github.com/ebassi/graphene)
|
||||
|
||||
GTK will attempt to download and build some of these dependencies if it
|
||||
cannot find them on your system.
|
||||
|
||||
Additionally, you may want to look at projects that create a development
|
||||
environment for you, like [jhbuild](https://wiki.gnome.org/HowDoI/Jhbuild)
|
||||
and [gvsbuild](https://github.com/wingtk/gvsbuild).
|
||||
|
||||
### Getting started
|
||||
|
||||
You should start by forking the GTK repository from the GitLab web UI, and
|
||||
cloning from your fork:
|
||||
|
||||
```sh
|
||||
$ git clone --branch=gtk-3-24 https://gitlab.gnome.org/yourusername/gtk.git gtk-3
|
||||
$ cd gtk-3
|
||||
```
|
||||
|
||||
**Note**: if you plan to push changes to back to the main repository and
|
||||
have a GNOME account, you can skip the fork, and use the following instead:
|
||||
|
||||
```sh
|
||||
$ git clone --branch=gtk-3-24 git@gitlab.gnome.org:GNOME/gtk.git gtk-3
|
||||
$ cd gtk-3
|
||||
```
|
||||
|
||||
To compile the Git version of GTK on your system, you will need to
|
||||
configure your build using Meson:
|
||||
|
||||
```sh
|
||||
$ meson setup _builddir .
|
||||
$ meson compile -C _builddir
|
||||
```
|
||||
|
||||
Typically, you should work on your own branch:
|
||||
|
||||
```sh
|
||||
$ git switch -C your-branch
|
||||
```
|
||||
|
||||
Once you've finished working on the bug fix or feature, push the branch
|
||||
to the Git repository and open a new merge request, to let the GTK
|
||||
maintainers review your contribution.
|
||||
|
||||
### Code reviews
|
||||
|
||||
Each contribution is reviewed by the core developers of the GTK project.
|
||||
|
||||
### Commit messages
|
||||
|
||||
The expected format for git commit messages is as follows:
|
||||
|
||||
```plain
|
||||
Short explanation of the commit
|
||||
|
||||
Longer explanation explaining exactly what's changed, whether any
|
||||
external or private interfaces changed, what bugs were fixed (with bug
|
||||
tracker reference if applicable) and so forth. Be concise but not too
|
||||
brief.
|
||||
|
||||
Closes #1234
|
||||
```
|
||||
|
||||
- Always add a brief description of the commit to the _first_ line of
|
||||
the commit and terminate by two newlines (it will work without the
|
||||
second newline, but that is not nice for the interfaces).
|
||||
|
||||
- First line (the brief description) must only be one sentence and
|
||||
should start with a capital letter unless it starts with a lowercase
|
||||
symbol or identifier. Don't use a trailing period either. Don't exceed
|
||||
72 characters.
|
||||
|
||||
- The main description (the body) is normal prose and should use normal
|
||||
punctuation and capital letters where appropriate. Consider the commit
|
||||
message as an email sent to the developers (or yourself, six months
|
||||
down the line) detailing **why** you changed something. There's no need
|
||||
to specify the **how**: the changes can be inlined.
|
||||
|
||||
- When committing code on behalf of others use the `--author` option, e.g.
|
||||
`git commit -a --author "Joe Coder <joe@coder.org>"` and `--signoff`.
|
||||
|
||||
- If your commit is addressing an issue, use the
|
||||
[GitLab syntax](https://docs.gitlab.com/ce/user/project/issues/automatic_issue_closing.html)
|
||||
to automatically close the issue when merging the commit with the upstream
|
||||
repository:
|
||||
|
||||
```plain
|
||||
Closes #1234
|
||||
Fixes #1234
|
||||
Closes: https://gitlab.gnome.org/GNOME/gtk/issues/1234
|
||||
```
|
||||
|
||||
- If you have a merge request with multiple commits and none of them
|
||||
completely fixes an issue, you should add a reference to the issue in
|
||||
the commit message, e.g. `Bug: #1234`, and use the automatic issue
|
||||
closing syntax in the description of the merge request.
|
||||
|
||||
### Commit access to the GTK repository
|
||||
|
||||
GTK is part of the GNOME infrastructure. At the current time, any
|
||||
person with write access to the GNOME repository can merge changes to
|
||||
GTK. This is a good thing, in that it encourages many people to work
|
||||
on GTK, and progress can be made quickly. However, GTK is a fairly
|
||||
large and complicated project on which many other things depend, so to
|
||||
avoid unnecessary breakage, and to take advantage of the knowledge
|
||||
about GTK that has been built up over the years, we'd like to ask
|
||||
people committing to GTK to follow a few rules:
|
||||
|
||||
0. Ask first. If your changes are major, or could possibly break existing
|
||||
code, you should always ask. If your change is minor and you've been
|
||||
working on GTK for a while it probably isn't necessary to ask. But when
|
||||
in doubt, ask. Even if your change is correct, somebody may know a
|
||||
better way to do things. If you are making changes to GTK, you should
|
||||
be subscribed to the [gtk-devel](https://mail.gnome.org/mailman/listinfo/gtk-devel-list)
|
||||
mailing list; this is a good place to ask about intended changes.
|
||||
The `#gtk` IRC channel on irc.gnome.org is also a good place to find GTK
|
||||
developers to discuss changes, but if you live outside of the EU/US time
|
||||
zones, an email to the gtk-devel mailing list is the most certain and
|
||||
preferred method.
|
||||
|
||||
0. Ask _first_.
|
||||
|
||||
0. Always write a meaningful commit message. Changes without a sufficient
|
||||
commit message will be reverted.
|
||||
|
||||
0. Never push to the `main` branch, or any stable branches, directly; you
|
||||
should always go through a merge request, to ensure that the code is
|
||||
tested on the CI infrastructure at the very least. A merge request is
|
||||
also the proper place to get a comprehensive code review from the core
|
||||
developers of GTK.
|
||||
|
||||
If you have been contributing to GTK for a while and you don't have commit
|
||||
access to the repository, you may ask to obtain it following the [GNOME account
|
||||
process](https://wiki.gnome.org/AccountsTeam/NewAccounts).
|
||||
64
HACKING
64
HACKING
@@ -1,64 +0,0 @@
|
||||
If you want to hack on the GTK+ project, you'll need to have
|
||||
the following packages installed:
|
||||
|
||||
- GNU autoconf 2.62
|
||||
- GNU automake 1.11
|
||||
- GNU libtool 2.2
|
||||
- indent (GNU indent 1.9.1 is known good)
|
||||
- GNU gettext 10.40
|
||||
|
||||
These should be available by ftp from ftp.gnu.org or any of the
|
||||
fine GNU mirrors. Beta software can be found at alpha.gnu.org.
|
||||
|
||||
Up-to-date instructions about developing GNOME applications and libraries
|
||||
can be found here:
|
||||
|
||||
http://library.gnome.org/devel/
|
||||
|
||||
Information about using git with GNOME can be found here:
|
||||
|
||||
https://wiki.gnome.org/Git
|
||||
|
||||
In order to get GIT GTK+ installed on your system, you need to have
|
||||
the most recent GIT versions of GLib, Pango, and ATK installed as well.
|
||||
The installation process of these libraries is similar to that of GTK+,
|
||||
but needs to be fulfilled prior to installation of GTK+.
|
||||
|
||||
If at all possible, please use GIT to get the latest development version of
|
||||
gtk+ and glib. You can do the following to get glib and gtk+ from GIT:
|
||||
|
||||
$ git clone git://git.gnome.org/glib
|
||||
$ git clone git://git.gnome.org/pango
|
||||
$ git clone git://git.gnome.org/atk
|
||||
$ git clone git://git.gnome.org/gtk+
|
||||
|
||||
Note: if you plan to push changes to back to the master repository and
|
||||
have a gnome account, you want to use the following instead:
|
||||
|
||||
$ git clone ssh://<username>@git.gnome.org/git/gtk+
|
||||
|
||||
To compile the GIT version of GTK+ on your system, you will need to take
|
||||
several steps to setup the tree for compilation. You can do all these
|
||||
steps at once by running:
|
||||
|
||||
gtk+$ ./autogen.sh
|
||||
|
||||
Basically this does the following for you:
|
||||
|
||||
gtk+$ aclocal; automake; autoconf
|
||||
|
||||
The above commands create the `configure' script. Now you
|
||||
run the `configure' script in `gtk+/' to create all Makefiles.
|
||||
More information about that in `INSTALL'.
|
||||
|
||||
Before running `autogen.sh' or `configure', make sure you have libtool
|
||||
in your path.
|
||||
|
||||
Note that autogen.sh runs configure for you. If you wish to pass
|
||||
options like `--prefix=/usr' to `configure' you can give those options
|
||||
to `autogen.sh' and they will be passed on to `configure'.
|
||||
|
||||
For information about submitting patches and pushing changes
|
||||
to GIT, see the `README' and `README.commits' files. In particular,
|
||||
don't, under any circumstances, push anything to GIT before
|
||||
reading and understanding `README.commmits'.
|
||||
42
INSTALL.in
42
INSTALL.in
@@ -1,42 +0,0 @@
|
||||
Prerequisites
|
||||
=============
|
||||
|
||||
GTK+ requires the following packages:
|
||||
|
||||
- The GLib, Pango, GdkPixbuf, ATK and cairo libraries, available at
|
||||
the same location as GTK+. GTK+ @GTK_VERSION@ requires at least
|
||||
GLib @GLIB_REQUIRED_VERSION@, Pango @PANGO_REQUIRED_VERSION@,
|
||||
GdkPixbuf @GDK_PIXBUF_REQUIRED_VERSION@, ATK @ATK_REQUIRED_VERSION@
|
||||
and cairo @CAIRO_REQUIRED_VERSION@.
|
||||
|
||||
- libepoxy, for cross-platform OpenGL support.
|
||||
It can be found here: https://github.com/anholt/libepoxy
|
||||
|
||||
- Each GDK backend has its own backend-specific requirements. For
|
||||
the X11 backend, X11 R6 and XInput version 2 (as well as a number
|
||||
of other extensions) are required. The Wayland backend requires
|
||||
(obviously) the Wayland libraries.
|
||||
|
||||
- gobject-introspection @INTROSPECTION_REQUIRED_VERSION@ or newer.
|
||||
|
||||
Simple install procedure
|
||||
========================
|
||||
|
||||
% tar xf gtk+-@GTK_VERSION@.tar.xz # unpack the sources
|
||||
% cd gtk+-@GTK_VERSION@ # change to the toplevel directory
|
||||
% ./configure # run the `configure' script
|
||||
% make # build GTK+
|
||||
[ Become root if necessary ]
|
||||
% make install # install GTK+
|
||||
|
||||
The Details
|
||||
===========
|
||||
|
||||
Complete information about installing GTK+ and related libraries
|
||||
can be found in the file:
|
||||
|
||||
docs/reference/gtk/html/gtk-building.html
|
||||
|
||||
Or online at:
|
||||
|
||||
http://library.gnome.org/devel/gtk/stable/gtk-building.html
|
||||
41
INSTALL.md
Normal file
41
INSTALL.md
Normal file
@@ -0,0 +1,41 @@
|
||||
Prerequisites
|
||||
=============
|
||||
|
||||
GTK requires the following packages:
|
||||
|
||||
- Autotools or Meson
|
||||
|
||||
- The GLib, Pango, GdkPixbuf, ATK and cairo libraries, available at
|
||||
the same location as GTK.
|
||||
|
||||
- libepoxy, for cross-platform OpenGL support.
|
||||
It can be found here: https://github.com/anholt/libepoxy
|
||||
|
||||
- Each GDK backend has its own backend-specific requirements. For
|
||||
the X11 backend, X11 R6 and XInput version 2 (as well as a number
|
||||
of other extensions) are required. The Wayland backend requires
|
||||
(obviously) the Wayland libraries.
|
||||
|
||||
- gobject-introspection
|
||||
|
||||
Simple install procedure for Meson
|
||||
==================================
|
||||
|
||||
$ tar xf gtk+-3.24.46.tar.xz # unpack the sources
|
||||
$ cd gtk+-3.24.46 # change to the toplevel directory
|
||||
$ meson setup _build # configure GTK+
|
||||
$ meson compile -C _build # build GTK+
|
||||
[ Become root if necessary ]
|
||||
# meson install -C _build # install GTK+
|
||||
|
||||
The Details
|
||||
===========
|
||||
|
||||
Complete information about installing GTK+ and related libraries
|
||||
can be found in the file:
|
||||
|
||||
- [gtk-building.html](./docs/reference/gtk/html/gtk-building.html)
|
||||
|
||||
Or online at:
|
||||
|
||||
- http://developer-old.gnome.org/gtk/3.24/gtk-building.html
|
||||
12
MAINTAINERS
12
MAINTAINERS
@@ -1,12 +0,0 @@
|
||||
Matthias Clasen
|
||||
E-mail: mclasen@redhat.com
|
||||
Userid: matthiasc
|
||||
|
||||
Tim Janik
|
||||
E-mail: timj@gtk.org
|
||||
Userid: timj
|
||||
|
||||
Note that a lot of people are contributing to GTK+, and some parts of it
|
||||
are technically maintained by other people. The people listed above are
|
||||
meant as contacts for administrative questions such as cvs accounts. Other
|
||||
questions are best directed to the mailing list gtk-devel-list@gnome.org.
|
||||
124
Makefile.am
124
Makefile.am
@@ -1,124 +0,0 @@
|
||||
## Makefile.am for GTK+
|
||||
include $(top_srcdir)/Makefile.decl
|
||||
|
||||
SRC_SUBDIRS = gdk gtk libgail-util modules demos tests testsuite examples
|
||||
SUBDIRS = po po-properties $(SRC_SUBDIRS) docs m4macros win32
|
||||
|
||||
ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS}
|
||||
|
||||
EXTRA_DIST += \
|
||||
autogen.sh \
|
||||
HACKING \
|
||||
README \
|
||||
README.in \
|
||||
INSTALL \
|
||||
INSTALL.in \
|
||||
NEWS.pre-1-0 \
|
||||
README.commits \
|
||||
README.win32.md \
|
||||
check-version.py \
|
||||
config.h.win32 \
|
||||
makefile.msc \
|
||||
gtk-zip.sh.in \
|
||||
sanitize-la.sh \
|
||||
po/README.translators \
|
||||
po/po2tbl.sed.in \
|
||||
make-pot \
|
||||
meson_options.txt \
|
||||
meson.build \
|
||||
po/meson.build \
|
||||
po-properties/meson.build \
|
||||
build-aux/meson/post-install.py \
|
||||
config.h.meson \
|
||||
gtk.supp
|
||||
|
||||
MAINTAINERCLEANFILES = \
|
||||
$(GITIGNORE_MAINTAINERCLEANFILES_TOPLEVEL) \
|
||||
$(GITIGNORE_MAINTAINERCLEANFILES_M4_LIBTOOL) \
|
||||
$(GITIGNORE_MAINTAINERCLEANFILES_MAKEFILE_IN) \
|
||||
$(srcdir)/m4/gtk-doc.m4 \
|
||||
$(srcdir)/INSTALL \
|
||||
$(srcdir)/README \
|
||||
$(srcdir)/gtk-doc.make \
|
||||
$(srcdir)/ChangeLog
|
||||
|
||||
if OS_UNIX
|
||||
valgrinddir = $(datadir)/gtk-3.0/valgrind
|
||||
valgrind_DATA = gtk.supp
|
||||
endif
|
||||
|
||||
## Copy .pc files to target-specific names
|
||||
gtk+-x11-3.0.pc gtk+-win32-3.0.pc gtk+-quartz-3.0.pc gtk+-broadway-3.0.pc gtk+-wayland-3.0.pc: gtk+-3.0.pc
|
||||
rm -f $@ && \
|
||||
cp gtk+-3.0.pc $@
|
||||
|
||||
gdk-x11-3.0.pc gdk-win32-3.0.pc gdk-quartz-3.0.pc gdk-broadway-3.0.pc gdk-wayland-3.0.pc: gdk-3.0.pc
|
||||
rm -f $@ && \
|
||||
cp gdk-3.0.pc $@
|
||||
|
||||
pkgconfigdir = $(libdir)/pkgconfig
|
||||
pkgconfig_DATA = gdk-3.0.pc gtk+-3.0.pc gail-3.0.pc
|
||||
pkgconfig_DATA += ${GDK_BACKENDS:%=gtk+-%-3.0.pc}
|
||||
pkgconfig_DATA += ${GDK_BACKENDS:%=gdk-%-3.0.pc}
|
||||
|
||||
if OS_UNIX
|
||||
pkgconfig_DATA += gtk+-unix-print-3.0.pc
|
||||
endif
|
||||
|
||||
DISTCLEANFILES = \
|
||||
gtk+-unix-print-3.0.pc \
|
||||
gtk+-3.0.pc \
|
||||
gtk+-x11-3.0.pc \
|
||||
gtk+-win32-3.0.pc \
|
||||
gtk+-quartz-3.0.pc \
|
||||
gtk+-broadway-3.0.pc \
|
||||
gtk+-wayland-3.0.pc \
|
||||
gdk-3.0.pc \
|
||||
gdk-x11-3.0.pc \
|
||||
gdk-win32-3.0.pc \
|
||||
gdk-quartz-3.0.pc \
|
||||
gdk-broadway-3.0.pc \
|
||||
gdk-wayland-3.0.pc \
|
||||
gail-3.0.pc \
|
||||
config.lt
|
||||
|
||||
dist-hook:
|
||||
mkdir $(distdir)/subprojects
|
||||
cp -p $(srcdir)/subprojects/*.wrap $(distdir)/subprojects
|
||||
$(top_srcdir)/check-version.py $(top_srcdir)/configure.ac $(top_srcdir)/meson.build
|
||||
|
||||
distclean-local:
|
||||
if test "$(srcdir)" = "."; then :; else \
|
||||
rm -f ChangeLog; \
|
||||
fi
|
||||
|
||||
ChangeLog:
|
||||
$(AM_V_GEN) if test -d "$(srcdir)/.git"; then \
|
||||
(GIT_DIR=$(top_srcdir)/.git $(top_builddir)/build-aux/missing git log GTK_2_16_0^^.. --stat) | fmt --split-only > $@.tmp \
|
||||
&& mv -f $@.tmp $@ \
|
||||
|| ($(RM) $@.tmp; \
|
||||
echo Failed to generate ChangeLog, your ChangeLog may be outdated >&2; \
|
||||
(test -f $@ || echo git-log is required to generate this file >> $@)); \
|
||||
else \
|
||||
test -f $@ || \
|
||||
(echo A git checkout and git-log is required to generate ChangeLog >&2 && \
|
||||
echo A git checkout and git-log is required to generate this file >> $@); \
|
||||
fi
|
||||
|
||||
.PHONY: ChangeLog
|
||||
|
||||
uninstall-local:
|
||||
rm -f $(DESTDIR)$(pkgconfigdir)/gtk+-3.0.pc
|
||||
|
||||
AM_DISTCHECK_CONFIGURE_FLAGS = \
|
||||
--enable-gtk-doc \
|
||||
--disable-doc-cross-references \
|
||||
--enable-man \
|
||||
--disable-maintainer-mode \
|
||||
--enable-introspection \
|
||||
--enable-installed-tests
|
||||
|
||||
GITIGNORE_TRANSLATION_DIRS = po-properties
|
||||
GITIGNOREFILES = po-properties/gtk30-properties.pot
|
||||
|
||||
-include $(top_srcdir)/git.mk
|
||||
@@ -1,96 +0,0 @@
|
||||
# GTK+ - The GIMP Toolkit
|
||||
|
||||
GTESTER = gtester -k # in $PATH for non-GLIB packages
|
||||
GTESTER_REPORT = gtester-report # in $PATH for non-GLIB packages
|
||||
|
||||
# initialize variables for unconditional += appending
|
||||
EXTRA_DIST =
|
||||
TEST_PROGS =
|
||||
|
||||
### testing rules
|
||||
|
||||
# Xvfb based test rules
|
||||
XVFB = Xvfb -ac -noreset -screen 0 1024x768x16
|
||||
XIDS = 101 102 103 104 105 106 107 197 199 211 223 227 293 307 308 309 310 311 \
|
||||
491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 \
|
||||
991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 \
|
||||
1008 1009 4703 4721 4723 4729 4733 4751 9973 9974 9975 9976 9977 9978 9979 \
|
||||
9980 9981 9982 9983 9984 9985 9986 9987 9988 9989 9990 9991 9992 9993 9994 \
|
||||
9995 9996 9997 9998 9999
|
||||
|
||||
if USE_X11
|
||||
SKIP_GDKTARGET = \
|
||||
false
|
||||
else
|
||||
SKIP_GDKTARGET = \
|
||||
echo "Gtk+Tests:INFO: Skipping GUI tests for non-X11 target."
|
||||
endif
|
||||
|
||||
if PLATFORM_WIN32
|
||||
no_undefined = -no-undefined
|
||||
endif
|
||||
|
||||
XVFB_START = \
|
||||
${XVFB} -help 2>/dev/null 1>&2 \
|
||||
&& XID=`for id in $(XIDS) ; do test -e /tmp/.X$$id-lock || { echo $$id; exit 0; }; done; exit 1` \
|
||||
&& { ${XVFB} :$$XID -nolisten tcp -auth /dev/null >/dev/null 2>&1 & \
|
||||
trap "kill -15 $$! " 0 HUP INT QUIT TRAP USR1 PIPE TERM ; } \
|
||||
|| { echo "Gtk+Tests:ERROR: Failed to start Xvfb environment for X11 target tests."; exit 1; } \
|
||||
&& DISPLAY=:$$XID && export DISPLAY
|
||||
# call as: $(XVFB_START) && someprogram
|
||||
|
||||
# test: run all tests in cwd and subdirs
|
||||
test: test-cwd test-recurse
|
||||
# test-cwd: run tests in cwd
|
||||
test-cwd: ${TEST_PROGS}
|
||||
@$(SKIP_GDKTARGET) || test -z "${TEST_PROGS}" || { \
|
||||
$(XVFB_START) && { set -e; $(TESTS_ENVIRONMENT) G_TEST_SRCDIR="${abs_srcdir}" G_TEST_BUILDDIR="${abs_builddir}" ${GTESTER} --verbose ${TEST_PROGS}; }; \
|
||||
}
|
||||
# test-recurse: run tests in subdirs
|
||||
test-recurse:
|
||||
@ for subdir in $(SUBDIRS) ; do \
|
||||
test "$$subdir" = "." -o "$$subdir" = "po" -o "$$subdir" = "po-properties" || \
|
||||
( cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) test ) || exit $? ; \
|
||||
done
|
||||
# test-report: run tests in subdirs and generate report
|
||||
# perf-report: run tests in subdirs with -m perf and generate report
|
||||
# full-report: like test-report: with -m perf and -m slow
|
||||
test-report perf-report full-report: ${TEST_PROGS}
|
||||
@ ignore_logdir=true ; \
|
||||
if test -z "$$GTESTER_LOGDIR" ; then \
|
||||
GTESTER_LOGDIR=`mktemp -d "\`pwd\`/.testlogs-XXXXXX"`; export GTESTER_LOGDIR ; \
|
||||
ignore_logdir=false ; \
|
||||
fi ; \
|
||||
for subdir in $(SUBDIRS) ; do \
|
||||
test "$$subdir" = "." -o "$$subdir" = "po" -o "$$subdir" = "po-properties" || \
|
||||
( cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $@ ) || exit $? ; \
|
||||
done ; \
|
||||
$(SKIP_GDKTARGET) || test -z "${TEST_PROGS}" || { \
|
||||
case $@ in \
|
||||
test-report) test_options="-k";; \
|
||||
perf-report) test_options="-k -m=perf";; \
|
||||
full-report) test_options="-k -m=perf -m=slow";; \
|
||||
esac ; \
|
||||
$(XVFB_START) && { \
|
||||
set -e; \
|
||||
if test -z "$$GTESTER_LOGDIR" ; then \
|
||||
G_TEST_SRCDIR="${abs_srcdir}" G_TEST_BUILDDIR="${abs_builddir}" ${GTESTER} --verbose $$test_options -o test-report.xml ${TEST_PROGS} ; \
|
||||
elif test -n "${TEST_PROGS}" ; then \
|
||||
G_TEST_SRCDIR="${abs_srcdir}" G_TEST_BUILDDIR="${abs_builddir}" ${GTESTER} --verbose $$test_options -o `mktemp "$$GTESTER_LOGDIR/log-XXXXXX"` ${TEST_PROGS} ; \
|
||||
fi ; \
|
||||
}; \
|
||||
}; \
|
||||
$$ignore_logdir || { \
|
||||
echo '<?xml version="1.0"?>' > $@.xml ; \
|
||||
echo '<report-collection>' >> $@.xml ; \
|
||||
for lf in `ls -L "$$GTESTER_LOGDIR"/.` ; do \
|
||||
sed '1,1s/^<?xml\b[^>?]*?>//' <"$$GTESTER_LOGDIR"/"$$lf" >> $@.xml ; \
|
||||
done ; \
|
||||
echo >> $@.xml ; \
|
||||
echo '</report-collection>' >> $@.xml ; \
|
||||
rm -rf "$$GTESTER_LOGDIR"/ ; \
|
||||
${GTESTER_REPORT} --version 2>/dev/null 1>&2 ; test "$$?" != 0 || ${GTESTER_REPORT} $@.xml >$@.html ; \
|
||||
}
|
||||
.PHONY: test test-cwd test-recurse test-report perf-report full-report
|
||||
# run make test-cwd as part of make check
|
||||
check-local: test-cwd
|
||||
111
NEWS
111
NEWS
@@ -1,3 +1,114 @@
|
||||
Overview of Changes in GTK+ 3.24.38, 21-05-2023
|
||||
===============================================
|
||||
|
||||
* GtkFileChooser:
|
||||
- Avoid warnings with GLib 2.76
|
||||
|
||||
* Theme:
|
||||
- Set caret color in the dark theme
|
||||
|
||||
* Windows:
|
||||
- Fix running under GLES
|
||||
|
||||
* Wayland:
|
||||
- Notify on initial setting changes
|
||||
- Don't crash on 0 size cursors
|
||||
- Don't crash if xdg_activation_v1 is missing
|
||||
|
||||
* Debugging:
|
||||
- Show more information in the inspector
|
||||
|
||||
* Translation updates
|
||||
Abkhazian
|
||||
Basque
|
||||
Brazilian Portuguese
|
||||
Bulgarian
|
||||
Catalan
|
||||
Danish
|
||||
Dutch
|
||||
French
|
||||
Galician
|
||||
Georgian
|
||||
German
|
||||
Hebrew
|
||||
Hungarian
|
||||
Indonesian
|
||||
ITalian
|
||||
Korean
|
||||
Lithuanian
|
||||
Persian
|
||||
Polish
|
||||
Portuguese
|
||||
Russian
|
||||
Serbian
|
||||
Slovenian
|
||||
Spanish
|
||||
Swedish
|
||||
Turkish
|
||||
Ukrainian
|
||||
|
||||
|
||||
Overview of Changes in GTK+ 3.24.37, 02-03-2023
|
||||
===============================================
|
||||
|
||||
* Support the file transfer portal for copy-paste and DND
|
||||
|
||||
* Treat XKB_MODE_NAME_LODO as super key
|
||||
|
||||
* Refactor startup notification handling to be in sync with GTK 4
|
||||
|
||||
* GL: Synchronie when calling MakeCurrent
|
||||
|
||||
* CSS: Fix a problem with stopping animations
|
||||
|
||||
* Wayland: Drop the legacy text input module
|
||||
|
||||
* Windows: Set the default file extension in the native file chooser
|
||||
|
||||
* Translation updates:
|
||||
Abkhazian
|
||||
Turkish
|
||||
|
||||
|
||||
Overview of Changes in GTK+ 3.24.36, 12-22-2022
|
||||
===============================================
|
||||
|
||||
This release is the first GTK 3 release to exclusively
|
||||
use the meson build system.
|
||||
|
||||
* GtkLabel:
|
||||
- Tweak selection behavior
|
||||
|
||||
* GtkEmojiChooser:
|
||||
- Properly handle empty recent section
|
||||
|
||||
* GtkFileChooser:
|
||||
- Make ~ key work regardless of dead keys
|
||||
|
||||
* build:
|
||||
- Improve handling of flaky tests
|
||||
- Drop the autotools build
|
||||
|
||||
* Wayland:
|
||||
- Fix problems with X<>Wayland DND
|
||||
- Revert cursor changes from 3.24.35
|
||||
- Fix handling of surrounding text in input
|
||||
|
||||
* Windows:
|
||||
- Improve handling of line ends in clipboard
|
||||
|
||||
* MacOS:
|
||||
- Use NSTrackingArea
|
||||
|
||||
* Translation updates:
|
||||
Abkhazian
|
||||
Basque
|
||||
Brazilian Portuguese
|
||||
Catalan
|
||||
Interlingue
|
||||
Persian
|
||||
|
||||
|
||||
Overview of Changes in GTK+ 3.24.35, 11-22-2022
|
||||
===============================================
|
||||
|
||||
|
||||
124
NEWS.pre-1-0
124
NEWS.pre-1-0
@@ -1,124 +0,0 @@
|
||||
|
||||
Overview of Changes in GTK+ 1.0.0:
|
||||
|
||||
* A few bug fixes.
|
||||
|
||||
Overview of Changes in GTK+ 0.99.10:
|
||||
|
||||
* Lots of bug fixes
|
||||
* Documentation improvements
|
||||
* Better looking handlebox
|
||||
* A few convenience functions
|
||||
|
||||
Overview of Changes in GTK+ 0.99.9:
|
||||
|
||||
* Added examples directory, even more examples soon
|
||||
* Added optional word wrap to gtktext
|
||||
* Changes to gtkhandlebox
|
||||
* Lots of bug fixes
|
||||
|
||||
Overview of Changes in GTK+ 0.99.8:
|
||||
|
||||
* Compilation and configuration fixes
|
||||
* DND Fixes
|
||||
* New test in testgtk: cursors
|
||||
* Tutorial updates/additions
|
||||
* Few more FAQ additions
|
||||
* More prep for 1.0
|
||||
|
||||
Overview of Changes in GTK+ 0.99.7:
|
||||
|
||||
* This release is mainly because 0.99.6 did not compile completely
|
||||
due to a missing file.
|
||||
* Fixes to Gtk's quit handlers.
|
||||
|
||||
Overview of Changes in GTK+ 0.99.6:
|
||||
|
||||
* Intermediate release to become 1.0.
|
||||
* More signedness corrections for handler functions in gtkmain.h.
|
||||
* Semantics of GtkWidget::delete_event changed.
|
||||
* Documentation updates.
|
||||
* Inclusion of Gtk tutorial.
|
||||
* Implementation of a new shutdown method for GtkObject's executed prior to
|
||||
actual destruction. WARNING: this breaks binary compatibility, programs using
|
||||
Gtk need to be recompiled.
|
||||
* Clean ups due to compiler warnings.
|
||||
* Various widget fixes.
|
||||
|
||||
Overview of Fixes in GTK+ 0.99.5:
|
||||
|
||||
* Signal signedness and naming corrections
|
||||
* rc/style fixes
|
||||
* text, entry widget fixes
|
||||
* gtkeditable fixes
|
||||
* scrollbar flickering fixed
|
||||
* check casts are more descriptive
|
||||
* DND fixes
|
||||
* FAQ updates
|
||||
* Bug fixes
|
||||
|
||||
Overview of Changes in GTK+ 0.99.4:
|
||||
|
||||
* Reference counting revolution integrated.
|
||||
Refer to docs/refcounting.txt on this issue.
|
||||
* Implementation of a decent debugging system, you would want
|
||||
to export GTK_DEBUG=objects if you are going to develop gtk applications,
|
||||
refer to docs/debugging.txt for further information.
|
||||
* Additions on the signal code for querying information about certain signals,
|
||||
and pending handlers of signals.
|
||||
* Support for user signals, and major changes to internal signal handler
|
||||
handling for proper signal removal and invokation of after signals.
|
||||
* Additional signals for various widgets e.g, GtkHandleBox::child_attached,
|
||||
GtkHandleBox::child_detached, GtkWidget::style_set, GtkWidget::parent_set.
|
||||
* GtkTooltips became a true descendant of GtkObject via derivation from
|
||||
GtkData and facilitates an extra tip string which can be used as e.g. an
|
||||
index into context help.
|
||||
* Split up of the widget/object flags into a private and a public portion,
|
||||
consult docs/widget_system.txt on this.
|
||||
* Support for hot keys on gtk programs via gtk_key_snooper_install().
|
||||
* Reimplementation of the *_interp functions as *_full functions to provide
|
||||
simple callback functions as well.
|
||||
* Idle functions are now prioritized.
|
||||
* Many enhancements to GtkNotebook.
|
||||
* New widget GtkSpinButton, check out testgtk.
|
||||
* New widget GtkTipsQuery for letting the user query tooltips of widgets.
|
||||
* Addition of GtkEditable base widget to encapsulate selection and
|
||||
clipboard handling. (GtkEntry and GtkText use this)
|
||||
* Text widget more complete.
|
||||
* Additions to GtkStatusBar to make it complete.
|
||||
* Gdk now supports regions.
|
||||
* Access masks for widget arguments (GTK_ARG_READABLE/GTK_ARG_WRITABLE).
|
||||
* Function replacements:
|
||||
g_string_hash() -> g_str_hash()
|
||||
g_string_equal() -> g_str_equal()
|
||||
gtk_tooltips_set_tips() -> gtk_tooltips_set_tip()
|
||||
* Support for quit handlers in gtk_main().
|
||||
* Motif window mangaer hints support.
|
||||
* Widget arguments are now flagged for readability/writability.
|
||||
* Additions to documentation.
|
||||
* Various FAQ updates. (FAQ now included)
|
||||
* Clean ups and many many bug fixes by a lot of people all over the place.
|
||||
* New, long and descriptive ChangeLog entries for bored readers ;)
|
||||
|
||||
Overview of Changes in GTK+ 0.99.3:
|
||||
|
||||
* Filesel enhancement / stability changes
|
||||
* New widget, gtkcombo
|
||||
* Widgets in the toolbar do not get the focus
|
||||
* New widget, gtkstatusbar (still in-progress)
|
||||
* g_string_equal renamed g_str_equal
|
||||
* g_string_hash renamed g_str_hash
|
||||
* new gtkbox functions to allow modification of the child
|
||||
linkage after the widget tree is setup
|
||||
* gtk_*_get_arg() and gtk_*_set_arg() fixes and implementations
|
||||
* DND changes/fixes
|
||||
* Entry widget now has set_max_length function
|
||||
* Handlebox widget changes/fixes
|
||||
* Some work on text widget (still in-progress)
|
||||
* Now the toolbar supports arbitrary widgets as well
|
||||
* CList has resizable columns again
|
||||
* CList now looks consistant with scrolled windows
|
||||
* Remove flickering from entry widget
|
||||
* Added switch_page signal to notebook widget
|
||||
* Documentation additions
|
||||
* Other bug fixes...
|
||||
@@ -1,72 +0,0 @@
|
||||
GTK+ is part of the GNOME git repository. At the current time, any
|
||||
person with write access to the GNOME repository, can make changes to
|
||||
GTK+. This is a good thing, in that it encourages many people to work
|
||||
on GTK+, and progress can be made quickly. However, GTK+ is a fairly
|
||||
large and complicated package that many other things depend on, so to
|
||||
avoid unnecessary breakage, and to take advantage of the knowledge
|
||||
about GTK+ that has been built up over the years, we'd like to ask
|
||||
people committing to GTK+ to follow a few rules:
|
||||
|
||||
0) Ask first. If your changes are major, or could possibly break existing
|
||||
code, you should always ask. If your change is minor and you've
|
||||
been working on GTK+ for a while it probably isn't necessary
|
||||
to ask. But when in doubt, ask. Even if your change is correct,
|
||||
somebody may know a better way to do things.
|
||||
|
||||
If you are making changes to GTK+, you should be subscribed
|
||||
to gtk-devel-list@gnome.org. (Subscription address:
|
||||
gtk-devel-list-request@gnome.org.) This is a good place to ask
|
||||
about intended changes.
|
||||
|
||||
#gtk+ on GIMPNet (irc.gimp.org, irc.us.gimp.org, irc.eu.gimp.org, ...)
|
||||
is also a good place to find GTK+ developers to discuss changes with,
|
||||
however, email to gtk-devel-list is the most certain and preferred
|
||||
method.
|
||||
|
||||
1) Ask _first_.
|
||||
|
||||
2) With git, we no longer maintain a ChangeLog file, but you are expected
|
||||
to produce a meaningful commit message. Changes without a sufficient
|
||||
commit message will be reverted. See below for the expected format
|
||||
of commit messages.
|
||||
|
||||
Notes:
|
||||
|
||||
* When developing larger features or complicated bug fixes, it is
|
||||
advisable to work in a branch in your own cloned GTK+ repository.
|
||||
You may even consider making your repository publically available
|
||||
so that others can easily test and review your changes.
|
||||
|
||||
* The expected format for git commit messages is as follows:
|
||||
|
||||
=== begin example commit ===
|
||||
Short explanation of the commit
|
||||
|
||||
Longer explanation explaining exactly what's changed, whether any
|
||||
external or private interfaces changed, what bugs were fixed (with bug
|
||||
tracker reference if applicable) and so forth. Be concise but not too brief.
|
||||
=== end example commit ===
|
||||
|
||||
- Always add a brief description of the commit to the _first_ line of
|
||||
the commit and terminate by two newlines (it will work without the
|
||||
second newline, but that is not nice for the interfaces).
|
||||
|
||||
- First line (the brief description) must only be one sentence and
|
||||
should start with a capital letter unless it starts with a lowercase
|
||||
symbol or identifier. Don't use a trailing period either. Don't exceed
|
||||
72 characters.
|
||||
|
||||
- The main description (the body) is normal prose and should use normal
|
||||
punctuation and capital letters where appropriate. Normally, for patches
|
||||
sent to a mailing list it's copied from there.
|
||||
|
||||
- When committing code on behalf of others use the --author option, e.g.
|
||||
git commit -a --author "Joe Coder <joe@coder.org>" and --signoff.
|
||||
|
||||
|
||||
Owen Taylor
|
||||
13 Aug 1998
|
||||
17 Apr 2001
|
||||
|
||||
Matthias Clasen
|
||||
31 Mar 2009
|
||||
82
README.in
82
README.in
@@ -1,82 +0,0 @@
|
||||
General Information
|
||||
===================
|
||||
|
||||
This is GTK+ version @GTK_VERSION@. 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.
|
||||
|
||||
GTK+ is free software and part of the GNU Project. However, the
|
||||
licensing terms for GTK+, the GNU LGPL, allow it to be used by all
|
||||
developers, including those developing proprietary software, without any
|
||||
license fees or royalties.
|
||||
|
||||
The official download locations are:
|
||||
ftp://ftp.gtk.org/pub/gtk
|
||||
http://download.gnome.org/sources/gtk+
|
||||
|
||||
The official web site is:
|
||||
http://www.gtk.org/
|
||||
|
||||
Information about mailing lists can be found at
|
||||
http://www.gtk.org/mailing-lists.php
|
||||
|
||||
|
||||
Installation
|
||||
============
|
||||
|
||||
See the file 'INSTALL'
|
||||
|
||||
|
||||
How to report bugs
|
||||
==================
|
||||
|
||||
Bugs should be reported to the GNOME bug tracking system.
|
||||
(http://bugzilla.gnome.org, product glib.) You will need
|
||||
to create an account for yourself.
|
||||
|
||||
In the bug report please include:
|
||||
|
||||
* Information about your system. For instance:
|
||||
|
||||
- What operating system and version
|
||||
- For Linux, what version of the C library
|
||||
|
||||
And anything else you think is relevant.
|
||||
|
||||
* How to reproduce the bug.
|
||||
|
||||
If you can reproduce it with one of the test programs that are built
|
||||
in the tests/ subdirectory, that will be most convenient. Otherwise,
|
||||
please include a short test program that exhibits the behavior.
|
||||
As a last resort, you can also provide a pointer to a larger piece
|
||||
of software that can be downloaded.
|
||||
|
||||
* If the bug was a crash, the exact text that was printed out
|
||||
when the crash occurred.
|
||||
|
||||
* Further information such as stack traces may be useful, but
|
||||
is not necessary.
|
||||
|
||||
|
||||
Patches
|
||||
=======
|
||||
|
||||
Patches should also be submitted to bugzilla.gnome.org. If the
|
||||
patch fixes an existing bug, add the patch as an attachment
|
||||
to that bug report.
|
||||
|
||||
Otherwise, enter a new bug report that describes the patch,
|
||||
and attach the patch to that bug report.
|
||||
|
||||
Patches should be in unified diff form. (The -up option to GNU diff)
|
||||
Even better are git-formatted patches. (Use git format-patch)
|
||||
|
||||
|
||||
Release notes
|
||||
=============
|
||||
|
||||
Release notes for releases of GTK+ 3.x are part of the migration
|
||||
guide in the GTK+ documentation. See
|
||||
|
||||
https://developer.gnome.org/gtk3/unstable/gtk-migrating-2-to-3.html
|
||||
70
README.md
Normal file
70
README.md
Normal file
@@ -0,0 +1,70 @@
|
||||
General Information
|
||||
===================
|
||||
|
||||
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.
|
||||
|
||||
GTK is free software and part of the GNU Project. However, the licensing
|
||||
terms for GTK, the GNU LGPL, allow it to be used by all developers,
|
||||
including those developing proprietary software, without any license fees or
|
||||
royalties.
|
||||
|
||||
The official download locations are:
|
||||
|
||||
- http://download.gnome.org/sources/gtk+
|
||||
|
||||
The official web site is:
|
||||
|
||||
- http://www.gtk.org/
|
||||
|
||||
Installation
|
||||
============
|
||||
|
||||
See the file [`INSTALL.md`](./INSTALL.md)
|
||||
|
||||
|
||||
How to report bugs
|
||||
==================
|
||||
|
||||
Bugs should be reported to the [GTK issue
|
||||
tracker](https://gitlab.gnome.org/GNOME/gtk/issues). You will need to create
|
||||
an account for yourself.
|
||||
|
||||
In the bug report please include:
|
||||
|
||||
* Information about your system. For instance:
|
||||
|
||||
- What operating system and version
|
||||
- For Linux, what version of the C library
|
||||
|
||||
And anything else you think is relevant.
|
||||
|
||||
* How to reproduce the bug.
|
||||
|
||||
If you can reproduce it with one of the test programs that are built
|
||||
in the tests/ subdirectory, that will be most convenient. Otherwise,
|
||||
please include a short test program that exhibits the behavior.
|
||||
As a last resort, you can also provide a pointer to a larger piece
|
||||
of software that can be downloaded.
|
||||
|
||||
* If the bug was a crash, the exact text that was printed out
|
||||
when the crash occurred.
|
||||
|
||||
* Further information such as stack traces may be useful, but
|
||||
is not necessary.
|
||||
|
||||
|
||||
Bug fixes and improvements
|
||||
==========================
|
||||
|
||||
Changes should be submitted as merge request to the GTK project. If a merge
|
||||
request fixes an issue, the description should mention the issue number.
|
||||
|
||||
Release notes
|
||||
=============
|
||||
|
||||
Release notes for releases of GTK 3.x are part of the migration
|
||||
guide in the GTK documentation. See
|
||||
|
||||
- https://developer-old.gnome.org/gtk3/3.24/gtk-migrating-3-x-to-y.html
|
||||
386
README.win32.md
386
README.win32.md
@@ -25,293 +25,134 @@ Building GTK+ on Win32
|
||||
===
|
||||
|
||||
First you obviously need developer packages for the compile-time
|
||||
dependencies: GDK-Pixbuf, Pango, atk, glib, gettext-runtime, libiconv at least.
|
||||
See http://ftp.gnome.org/pub/gnome/binaries/win32/dependencies .
|
||||
dependencies: `GDK-Pixbuf`, `Pango`*, `HarfBuzz`**, `atk`, `cairo`* and `glib`.
|
||||
You will also need `libffi`, `gettext-runtime`, `libiconv` and PCRE (or PCRE2
|
||||
for glib-2.74.x and later) and `zlib` for GLib; Cairo with DirectWrite support
|
||||
and/or FontConfig support for best font shaping and display supportin Pango*;
|
||||
and `librsvg`, `libpng`, `libjpeg-turbo` and `libtiff` for loading the
|
||||
various icons via GDK-Pixbuf that are common to GTK. You will need a Rust
|
||||
installation with the appropriate toolchain installed as well, if building
|
||||
librsvg-2.42.x or later.
|
||||
|
||||
(MinGW users should also look at the following section on the dependencies
|
||||
that are required, either built from source or installed using `pacman`.
|
||||
|
||||
Notes on building with Visual Studio
|
||||
===
|
||||
|
||||
You may wish to build the dependencies from the sources (all are required
|
||||
for the best use experience unless noted).
|
||||
|
||||
For Visual Studio, it is possible to build the following with CMake:
|
||||
|
||||
* zlib
|
||||
* libpng
|
||||
* FreeType (used in FontConfig, optionally used in Cairo and HarfBuzz)
|
||||
* libexpat (used in FontConfig)
|
||||
* libxml2 (needed for GResource support during build time and librsvg/libcroco)
|
||||
* libbrotlidec (optional, used in FreeType, requires Visual Studio 2013 or later)
|
||||
* libjpeg-turbo (you also need NASM, unless building for ARM64)
|
||||
* libtiff (requires libjpeg-turbo and zlib)
|
||||
* HarfBuzz** (for pre-2.6.0, using Meson is recommended for 2.6.0 or later)
|
||||
* PCRE (for glib-2.72.x and earlier), or PCRE2 (for glib-2.74.x or later)
|
||||
|
||||
It is possible to build the following items using Meson:
|
||||
* HarfBuzz** (2.6.0 and later)
|
||||
* Cairo (1.17.x or later; for 1.16.x, you need mozilla-build to build from the MSVC Makefiles,
|
||||
building cairo-gobject is required)
|
||||
* FontConfig (needed if PangoFT2 is used. Note building Cairo with FontConfig is required,
|
||||
requires Visual Studio 2015 or later)
|
||||
* fribidi (required for Pango)
|
||||
* GLib, ATK, Pango, GDK-Pixbuf
|
||||
* gobject-introspection (recommended, if using language bindings or gedit is desired, requires GLib and libffi)
|
||||
* pixman (required for Cairo)
|
||||
* libepoxy***
|
||||
|
||||
For Visual Studio, Visual Studio projects or NMake Makefiles are provided with the following:
|
||||
* librsvg (runtime, 2.42.x or later require Visual Studio 2013 or later with a Rust
|
||||
MSVC toolchain installed; requires libxml2)
|
||||
* libcroco (required for librsvg-2.40.x or earlier, requires libxml2)
|
||||
* libbz2 (optional for FreeType)
|
||||
* nasm (needed for building libjpeg-turbo on x86/x64)
|
||||
* adwaita-icon-theme (run-time, after building GTK and librsvg)
|
||||
|
||||
NMake Makefiles are provided as an add-on with patches to build the sources,
|
||||
at https://github.com/fanc999/gtk-deps-msvc/, under $(dependency) / $(dep_version)
|
||||
* libiconv (used by gettext-runtime)
|
||||
* gettext-runtime (and gettext-tools; an alternative is to use proxy-intl during the GLib
|
||||
build, at the cost of not having translations being built, VS2015 or later is required for
|
||||
0.21.1 and later)
|
||||
* libffi (currently, manually adapting the pkg-config .pc.in template is needed; an older
|
||||
x86/x64 version can be built in-place if building GLib without libffi installed)
|
||||
|
||||
You also need a copy of stdint.h and inttypes.h from msinttypes for Visual Studio 2012
|
||||
or earlier (stdint.h is optional on VS2010 or later), as well as an implementation of
|
||||
stdbool.h.
|
||||
|
||||
Bleeding-edge versions of the dependencies may require Visual Studio 2015/2017 or later.
|
||||
|
||||
ARM64 builds are supported in addition to x86 and x64 builds, albeit without SIMD optimizations
|
||||
in pixman and libjpeg-turbo (SIMD support may need to be explicitly disabled). Please see
|
||||
the Meson documentation on how to set up a cross-build from an x86-based Windows system.
|
||||
Introspection support is not supported in this configuration.
|
||||
|
||||
Building just using Meson without the dependencies installed may work if the following
|
||||
conditions are met:
|
||||
|
||||
* Visual Studio 2017 15.9.x or later is installed
|
||||
* `git` is accessible in the `%PATH%`, to pull in the depedencies
|
||||
* The CMake-built dependencies should be pre-built.
|
||||
* Only building for x86/x64 is supported this way, ARM64 builds should at least have
|
||||
pixman and libffi prebuilt.
|
||||
* librsvg and adwaita-icon-theme must be built separately
|
||||
* gettext-runtime and libiconv must also be prebuilt if translations support is desired.
|
||||
|
||||
Notes on certain dependencies:
|
||||
---
|
||||
|
||||
* (*)DirectWrite support in Pango requires pango-1.50.12 or later with Cairo
|
||||
1.17.6 or later. Visual Studio 2015 or later is required to build Pango
|
||||
1.50.x or later.
|
||||
* (**)HarfBuzz is required if using Pango-1.44.x or later, or if building
|
||||
PangoFT2. If using Visual Studio 2013 or earlier, only HarfBuzz 2.4.0
|
||||
or earlier is supported. Visual Studio 2017 15.9.x or later is required
|
||||
for 3.3.0 or later. You may wish to build FreeType prior to building
|
||||
HarfBuzz, and then building FreeType again linking to HarfBuzz for a
|
||||
more comprehensive FreeType build. Font features support is only enabled
|
||||
if PangoFT2 is built or Pango-1.44.x and HarfBuzz 2.2.0 or later are installed.
|
||||
* (***)For building with GLES support (currently supported via libANGLE), you
|
||||
will need to obtain libANGLE from its latest GIT checkout or from QT 5.10.x.
|
||||
You will need to build libepoxy with EGL enabled using `-Degl=yes` when
|
||||
configuring the build.
|
||||
|
||||
Some outdated builds of the dependencies may be found at
|
||||
http://ftp.gnome.org/pub/gnome/binaries/win32/dependencies .
|
||||
|
||||
For people compiling GTK+ with Visual C++, it is recommended that
|
||||
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 and 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, 2019 and 2022 builds
|
||||
should be fine as they use the same CRT (UCRT) DLLs.
|
||||
|
||||
After installing the dependencies, there are two ways to build GTK+
|
||||
for win32.
|
||||
|
||||
GNU tools, ./configure && make install (info here may be out of date,
|
||||
consider using Meson instead)
|
||||
---
|
||||
|
||||
This requires you have mingw and MSYS.
|
||||
|
||||
Use the configure script, and the resulting Makefiles (which use
|
||||
libtool and gcc to do the compilation). I use this myself, but it can
|
||||
be hard to setup correctly.
|
||||
|
||||
The full script I run to build GTK+ 2.16 unpacked from a source
|
||||
distribution is as below. This is from bulding GTK+ 2.16.5. I don't
|
||||
use any script like this to build the development branch, as I don't
|
||||
distribute any binaries from development branches.
|
||||
|
||||
```
|
||||
# This is a shell script that calls functions and scripts from
|
||||
# tml@iki.fi's personal work envíronment. It is not expected to be
|
||||
# usable unmodified by others, and is included only for reference.
|
||||
|
||||
MOD=gtk+
|
||||
VER=2.16.5
|
||||
REV=1
|
||||
ARCH=win32
|
||||
|
||||
THIS=${MOD}_${VER}-${REV}_${ARCH}
|
||||
|
||||
RUNZIP=${MOD}_${VER}-${REV}_${ARCH}.zip
|
||||
DEVZIP=${MOD}-dev_${VER}-${REV}_${ARCH}.zip
|
||||
|
||||
HEX=`echo $THIS | md5sum | cut -d' ' -f1`
|
||||
TARGET=c:/devel/target/$HEX
|
||||
|
||||
usedev
|
||||
usemsvs6
|
||||
|
||||
(
|
||||
|
||||
set -x
|
||||
|
||||
DEPS=`latest --arch=${ARCH} glib atk cairo pango libpng zlib libtiff jpeg`
|
||||
PROXY_LIBINTL=`latest --arch=${ARCH} proxy-libintl`
|
||||
|
||||
PKG_CONFIG_PATH=
|
||||
for D in $DEPS; do
|
||||
PATH=/devel/dist/${ARCH}/$D/bin:$PATH
|
||||
[ -d /devel/dist/${ARCH}/$D/lib/pkgconfig ] && PKG_CONFIG_PATH=/devel/dist/${ARCH}/$D/lib/pkgconfig:$PKG_CONFIG_PATH
|
||||
done
|
||||
|
||||
LIBPNG=`latest --arch=${ARCH} libpng`
|
||||
ZLIB=`latest --arch=${ARCH} zlib`
|
||||
LIBTIFF=`latest --arch=${ARCH} libtiff`
|
||||
JPEG=`latest --arch=${ARCH} jpeg`
|
||||
|
||||
patch -p0 <<'EOF'
|
||||
EOF
|
||||
|
||||
lt_cv_deplibs_check_method='pass_all' \
|
||||
CC='gcc -mtune=pentium3 -mthreads' \
|
||||
CPPFLAGS="-I/devel/dist/${ARCH}/${LIBPNG}/include \
|
||||
-I/devel/dist/${ARCH}/${ZLIB}/include \
|
||||
-I/devel/dist/${ARCH}/${LIBTIFF}/include \
|
||||
-I/devel/dist/${ARCH}/${JPEG}/include \
|
||||
-I/devel/dist/${ARCH}/${PROXY_LIBINTL}/include" \
|
||||
LDFLAGS="-L/devel/dist/${ARCH}/${LIBPNG}/lib \
|
||||
-L/devel/dist/${ARCH}/${ZLIB}/lib \
|
||||
-L/devel/dist/${ARCH}/${LIBTIFF}/lib \
|
||||
-L/devel/dist/${ARCH}/${JPEG}/lib \
|
||||
-L/devel/dist/${ARCH}/${PROXY_LIBINTL}/lib -Wl,--exclude-libs=libintl.a \
|
||||
-Wl,--enable-auto-image-base" \
|
||||
LIBS=-lintl \
|
||||
CFLAGS=-O2 \
|
||||
./configure \
|
||||
--enable-win32-backend \
|
||||
--disable-gdiplus \
|
||||
--with-included-immodules \
|
||||
--without-libjasper \
|
||||
--enable-debug=yes \
|
||||
--enable-explicit-deps=no \
|
||||
--disable-gtk-doc \
|
||||
--disable-static \
|
||||
--prefix=$TARGET &&
|
||||
|
||||
libtoolcacheize &&
|
||||
rm gtk/gtk.def &&
|
||||
(PATH="$PWD/gdk-pixbuf/.libs:/devel/target/$HEX/bin:$PATH" make -j3 install || (rm .libtool-cache* && PATH="/devel/target/$HEX/bin:$PATH" make -j3 install)) &&
|
||||
|
||||
PATH="/devel/target/$HEX/bin:$PATH" gdk-pixbuf-query-loaders >/devel/target/$HEX/etc/gtk-2.0/gdk-pixbuf.loaders &&
|
||||
|
||||
grep -v -E 'Automatically generated|Created by|LoaderDir =' <$TARGET/etc/gtk-2.0/gdk-pixbuf.loaders >$TARGET/etc/gtk-2.0/gdk-pixbuf.loaders.temp &&
|
||||
mv $TARGET/etc/gtk-2.0/gdk-pixbuf.loaders.temp $TARGET/etc/gtk-2.0/gdk-pixbuf.loaders &&
|
||||
grep -v -E 'Automatically generated|Created by|ModulesPath =' <$TARGET/etc/gtk-2.0/gtk.immodules >$TARGET/etc/gtk-2.0/gtk.immodules.temp &&
|
||||
mv $TARGET/etc/gtk-2.0/gtk.immodules.temp $TARGET/etc/gtk-2.0/gtk.immodules &&
|
||||
|
||||
./gtk-zip.sh &&
|
||||
|
||||
mv /tmp/${MOD}-${VER}.zip /tmp/$RUNZIP &&
|
||||
mv /tmp/${MOD}-dev-${VER}.zip /tmp/$DEVZIP
|
||||
|
||||
) 2>&1 | tee /devel/src/tml/packaging/$THIS.log
|
||||
|
||||
(cd /devel && zip /tmp/$DEVZIP src/tml/packaging/$THIS.{sh,log}) &&
|
||||
manifestify /tmp/$RUNZIP /tmp/$DEVZIP
|
||||
```
|
||||
|
||||
You should not just copy the above blindly. There are some things in
|
||||
the script that are very specific to *my* build setup on *my* current
|
||||
machine. For instance the "latest" command, the "usedev" and
|
||||
"usemsvs6" shell functions, the `/devel/dist` folder. The above script
|
||||
is really just meant for reference, to give an idea. You really need
|
||||
to understand what things like `PKG_CONFIG_PATH` are and set them up
|
||||
properly after installing the dependencies before building GTK+.
|
||||
|
||||
As you see above, after running configure, one can just say "make
|
||||
install", like on Unix. A post-build fix is needed, running
|
||||
gdk-pixbuf-query-loaders once more to get a correct `gdk-pixbuf.loaders`
|
||||
file.
|
||||
|
||||
For a 64-bit build you need to remove the `gtk/gtk.def` file and let it
|
||||
be regenerated by the makefilery. This is because the 64-bit GTK dll
|
||||
has a slightly different list of exported function names. This is on
|
||||
purpose and not a bug. The API is the same at the source level, and
|
||||
the same #defines of some function names to actually have a _utf8
|
||||
suffix is used (just to keep the header simpler). But the
|
||||
corresponding non-suffixed function to maintain ABI stability are not
|
||||
needed in the 64-bit case (because there are no older EXEs around that
|
||||
would require such for ABI stability).
|
||||
|
||||
|
||||
Microsoft's tools
|
||||
---
|
||||
|
||||
There are VS 2008~2022 solution and project files to build GTK+, which
|
||||
are maintained by Chun-wei Fan. They should build GTK+ out of the box,
|
||||
provided that the afore-mentioned dependencies are installed. They will
|
||||
build GDK with the Win32 backend, GTK+ itself (with GAIL/a11y built in),
|
||||
the GAIL-Util library and the gtk3-demo program. Please also refer to the
|
||||
README_FEATURES_MSVC.md file that reside in win32 on how to enable
|
||||
additional features that are not enabled by default, such as EGL support
|
||||
via libANGLE, which emulate the GL/EGL calls using Direct3D 9/11.
|
||||
|
||||
Please refer to the following GNOME Live! page for a more detailed ouline
|
||||
on the process of building the GTK+ stack and its dependencies with Visual
|
||||
C++:
|
||||
|
||||
https://wiki.gnome.org/Projects/GTK+/Win32/MSVCCompilationOfGTKStack
|
||||
|
||||
Alternative 1 also generates Microsoft import libraries (.lib), if you
|
||||
have lib.exe available. It might also work for cross-compilation from
|
||||
Unix.
|
||||
|
||||
I (Tor) use method 1 myself. Hans Breuer has been taking care of the MSVC
|
||||
makefiles. At times, we disagree a bit about various issues, and for
|
||||
instance the makefile.msc files might not produce identically named
|
||||
DLLs and import libraries as the "autoconfiscated" makefiles and
|
||||
libtool do. If this bothers you, you will have to fix the makefiles.
|
||||
|
||||
You may need or wish to update `gtk3-build-defines.[vs]props` (under the
|
||||
entry `GenerateRequiredSourcesBase` and/or `GtkIntrospectNMakeCmd` and/or
|
||||
`InstallBuildsBase`) to pass in the variables if they are not in:
|
||||
|
||||
* `$(PREFIX)\bin` (used for generating code for the build):
|
||||
* `GLIB_MKENUMS` (path to your glib-mkenums script)
|
||||
* `GLIB_GENMARSHAL` (path to your glib-genmarshal script)
|
||||
* `GDBUS_CODEGEN` (path to your gdbus-codegen script)
|
||||
* `GLIB_COMPILE_RESOURCES` (path to your glib-compile-resources program)
|
||||
|
||||
* `%PATH%`:
|
||||
* `PYTHON` (path to your Python interpreter, for generating code for
|
||||
the build as well as for introspection; for introspection, this must
|
||||
match the version series and architecture for the Python that is used
|
||||
to build gobject-introspection)
|
||||
* `PKG_CONFIG` (path to your pkg-config or compatible tool, for
|
||||
building introspection files in the `gtk3-introspect` project)
|
||||
* `MSGFMT` (path to your msgfmt program, if building translations
|
||||
during install; append ` install-translations` to `InstallBuildsBase`
|
||||
in `gtk3-build-defines.[vs]props])
|
||||
|
||||
`LIBDIR` and `INCLUDEDIR` can also be passed in if they are not under
|
||||
`$(PREFIX)\lib` and `$(PREFIX)\include` respectively. Note that
|
||||
`$(LIBDIR)` is architecture-dependent.
|
||||
|
||||
If desiring to build binaries for ARM64 (`aarch64`), one needs to use the
|
||||
Visual Studio 2017 or 2019 or 2022 solution files, or use Meson with a
|
||||
cross-compilation file, with a Windows 10 SDK that supports ARM64
|
||||
builds. At this point, building the introspection files is not supported
|
||||
for ARM64 builds, and you will need a Python 3.x interpreter and
|
||||
glib-compile-resources binaries that run on the build machine.
|
||||
|
||||
For Visual Studio 2017 ARM64 builds, do also check the
|
||||
`Directory.Build.props` file in `$(srcroot)/win32/vs15`
|
||||
indicates a Windows 10 SDK version that supports ARM64 builds
|
||||
exists on the build machine.
|
||||
|
||||
For building ARM64 binaries with the Visual Studio projects, prior to the
|
||||
build, you may need to update `gtk3-build-defines.props` to pass in the variables as indicated earlier:
|
||||
|
||||
* GLIB_MKENUMS
|
||||
* GLIB_GENMARSHAL
|
||||
* GDBUS_CODEGEN
|
||||
* GLIB_COMPILE_RESOURCES
|
||||
* PYTHON
|
||||
|
||||
in the nmake command line indicated by `<GenerateRequiredSourcesBase>` so
|
||||
that they point to the respective tools and scripts that will run on the
|
||||
build machine. You may also need to update `gtk3-version-paths.props` to
|
||||
update `<PythonDir>` to the installation of the Python 3.x interpreter
|
||||
that will run on the build machine (or just update `PYTHON=...` in the
|
||||
command line in `<GenerateRequiredSourcesBase>`). To carry out the actual
|
||||
build using the solution files, use the "Configuration Manager" to add the
|
||||
ARM64 build configs by copying the settings from the x64 configs, and then
|
||||
build the solution.
|
||||
The build instructions for such builds otherwise follow the standard Win32
|
||||
(x86) and x64 builds, but you need to ensure that you have ARM64 builds of
|
||||
the various dependencies.
|
||||
|
||||
It may still be possible to carry out the build and build the
|
||||
introspection files with Python 2.7.x using older versions of GLib and
|
||||
GObject-Introspection, but please note that this is not recommended
|
||||
and one is on his/her own by doing so.
|
||||
|
||||
It is now supported to build with the Visual Studio projects directly
|
||||
from a GIT checkout. Run in a Visual Studio command prompt, in
|
||||
$(srcroot)/win32:
|
||||
|
||||
`nmake /f bootstrap-msvc.mak [PYTHON=...] [PERL=...] [FONT_FEATURES_DEMO=1] [FONT_FEATURES_USE_PANGOFT2=1] [USE_EGL=1]`
|
||||
|
||||
where `PYTHON` and `PERL` are the respective paths to the Python and PERL
|
||||
interpreters, if they are not in your `%PATH%`-they are both required to
|
||||
generate the full sets of project files, as well as the auxiliary build
|
||||
files and headers that is not available in a GIT checkout and must be
|
||||
generated prior to opening the project files.
|
||||
|
||||
For `FONT_FEATURES_DEMO`, `FONT_FEATURES_USE_PANGOFT2` and `USE_EGL`,
|
||||
please refer to `win32\README_FEATURES_MSVC.md` for more details, to
|
||||
enable features that is optional and not enabled by default (i.e. in the
|
||||
release tarballs).
|
||||
|
||||
It is also possible to regenerate some or all of the visual studio
|
||||
projects with the following, if necessary:
|
||||
|
||||
`nmake /f generate-msvc.mak [PYTHON=...] [FONT_FEATURES_DEMO=1] [FONT_FEATURES_USE_PANGOFT2=1] [USE_EGL=1] <target>`
|
||||
|
||||
Where target can be (they will update all related VS2008~2022 projects):
|
||||
|
||||
* `regenerate-demos-h-win32`: Regenerate the `gtk3-demo` projects along
|
||||
with `demos.h.win32`, useful to enable or disable the Font Features
|
||||
demo.
|
||||
* `regenerate-gdk-vsproj`: Regenerate all the GDK projects with
|
||||
`broadwayd`, useful to enable or disable EGL on Windows.
|
||||
* `regenerate-gtk-vsproj`: Regenerate the `gtk-3` and `gailutil-3` library
|
||||
projects.
|
||||
* `regenerate-all-msvc-projs`: Re-generate all project files, and re-copy
|
||||
all the Visual Studio 2010 project files for VS 2012~2022.
|
||||
The following describes how one can build GTK with MinGW or Visual Studio
|
||||
2008 or later using Meson.
|
||||
|
||||
Using Meson (for Visual Studio and MinGW builds)
|
||||
---
|
||||
===
|
||||
|
||||
Meson can now be used to build GTK+-3.x with either MinGW or Visual Studio.
|
||||
You will need the following items in addition to all the dependencies
|
||||
listed above:
|
||||
|
||||
* Python 3.5 or later
|
||||
* Meson build system, 0.48.0 or later
|
||||
* Python 3.6.x or later (later Meson versions require Python 3.7.x)
|
||||
* Meson build system, 0.60.0 or later
|
||||
* Ninja (if not using the Visual Studio project generator for
|
||||
Visual Studio 2010 or later)
|
||||
* CMake (optional, used for dependency searching)
|
||||
* pkg-config (optional, or some compatible tool, highly recommended)
|
||||
* CMake (recommended for Visual Studio builds, used for dependency searching)
|
||||
* pkg-config (or some compatible tool, highly recommended)
|
||||
|
||||
For all Windows builds, note that unless `-Dbuiltin_immodules=no` is
|
||||
specified, the input modules (immodules) are built directly into the GTK
|
||||
@@ -324,14 +165,14 @@ For building with Meson using Visual Studio, do the following:
|
||||
matches the build configuration (Visual Studio version and architecture),
|
||||
and run the following:
|
||||
|
||||
* Ensure that both the installation directory of Python 3.5+ and its script
|
||||
* Ensure that both the installation directory of Python 3.6+ and its script
|
||||
directory is in your `%PATH%`, as well as the Ninja, CMake and pkg-config
|
||||
executables (if used). If a pkg-config compatible drop-in replacement
|
||||
tool is being used, ensure that `PKG_CONFIG` is set to point to the
|
||||
executable of that tool as well.
|
||||
|
||||
* For non-GNOME dependencies (such as Cairo and Harfbuzz), where pkg-config
|
||||
files or CMake files could not be properly located, set `%INCLUDE%` and
|
||||
files or CMake files may not be properly located, set `%INCLUDE%` and
|
||||
`%LIB%` to ensure that their header files and .lib files can be found
|
||||
respectively. The DLLs of those dependencies should also be in the
|
||||
`%PATH%` during the build as well, especially if introspection files ar
|
||||
@@ -439,10 +280,9 @@ configured (using the Windows 8.1 SDK is also possible for Visual Studio
|
||||
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
|
||||
* The Windows 8.0/8.1 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) (this is not necessary for the Windows 8.1 or
|
||||
later SDKs):
|
||||
(around lines 55-57):
|
||||
|
||||
```
|
||||
// RegisterActivationFactory/RevokeActivationFactory registration cookie
|
||||
|
||||
79
acinclude.m4
79
acinclude.m4
@@ -1,79 +0,0 @@
|
||||
# autoconf 2.13 / 2.50 compatibility macro
|
||||
|
||||
# GLIB_AC_DIVERT_BEFORE_HELP(STUFF)
|
||||
# ---------------------------------
|
||||
# Put STUFF early enough so that they are available for $ac_help expansion.
|
||||
# Handle both classic (<= v2.13) and modern autoconf
|
||||
AC_DEFUN([GLIB_AC_DIVERT_BEFORE_HELP],
|
||||
[ifdef([m4_divert_text], [m4_divert_text([NOTICE],[$1])],
|
||||
[ifdef([AC_DIVERT], [AC_DIVERT([NOTICE],[$1])],
|
||||
[AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)dnl
|
||||
$1
|
||||
AC_DIVERT_POP()])])])
|
||||
|
||||
# GTK_ADD_LIB(VAR,LIBNAME)
|
||||
# ---------------------------------
|
||||
# Helper macro to add a -lBlah to a variable, avoiding repeats
|
||||
# Note that this needs to be quoted when used in an enclosing macro
|
||||
AC_DEFUN([GTK_ADD_LIB],
|
||||
[ case "$$1 " in
|
||||
*-l$2[[\ \ ]]*) ;;
|
||||
*) $1="-l$2 $$1" ;;
|
||||
esac
|
||||
])
|
||||
|
||||
|
||||
# Checks the location of the XML Catalog
|
||||
# Usage:
|
||||
# JH_PATH_XML_CATALOG([ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
|
||||
# Defines XMLCATALOG and XML_CATALOG_FILE substitutions
|
||||
AC_DEFUN([JH_PATH_XML_CATALOG],
|
||||
[
|
||||
# check for the presence of the XML catalog
|
||||
AC_ARG_WITH([xml-catalog],
|
||||
AC_HELP_STRING([--with-xml-catalog=CATALOG],
|
||||
[path to xml catalog to use]),,
|
||||
[with_xml_catalog=/etc/xml/catalog])
|
||||
jh_found_xmlcatalog=true
|
||||
XML_CATALOG_FILE="$with_xml_catalog"
|
||||
AC_SUBST([XML_CATALOG_FILE])
|
||||
AC_MSG_CHECKING([for XML catalog ($XML_CATALOG_FILE)])
|
||||
if test -f "$XML_CATALOG_FILE"; then
|
||||
AC_MSG_RESULT([found])
|
||||
else
|
||||
jh_found_xmlcatalog=false
|
||||
AC_MSG_RESULT([not found])
|
||||
fi
|
||||
|
||||
# check for the xmlcatalog program
|
||||
AC_PATH_PROG(XMLCATALOG, xmlcatalog, no)
|
||||
if test "x$XMLCATALOG" = xno; then
|
||||
jh_found_xmlcatalog=false
|
||||
fi
|
||||
|
||||
if $jh_found_xmlcatalog; then
|
||||
ifelse([$1],,[:],[$1])
|
||||
else
|
||||
ifelse([$2],,[AC_MSG_ERROR([could not find XML catalog])],[$2])
|
||||
fi
|
||||
])
|
||||
|
||||
# Checks if a particular URI appears in the XML catalog
|
||||
# Usage:
|
||||
# JH_CHECK_XML_CATALOG(URI, [FRIENDLY-NAME], [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
|
||||
AC_DEFUN([JH_CHECK_XML_CATALOG],
|
||||
[
|
||||
AC_REQUIRE([JH_PATH_XML_CATALOG],[JH_PATH_XML_CATALOG(,[:])])dnl
|
||||
AC_MSG_CHECKING([for ifelse([$2],,[$1],[$2]) in XML catalog])
|
||||
if $jh_found_xmlcatalog && \
|
||||
AC_RUN_LOG([$XMLCATALOG --noout "$XML_CATALOG_FILE" "$1" >&2]); then
|
||||
AC_MSG_RESULT([found])
|
||||
ifelse([$3],,,[$3
|
||||
])dnl
|
||||
else
|
||||
AC_MSG_RESULT([not found])
|
||||
ifelse([$4],,
|
||||
[AC_MSG_ERROR([could not find ifelse([$2],,[$1],[$2]) in XML catalog])],
|
||||
[$4])
|
||||
fi
|
||||
])
|
||||
46
autogen.sh
46
autogen.sh
@@ -1,46 +0,0 @@
|
||||
#!/bin/sh
|
||||
# Run this to generate all the initial makefiles, etc.
|
||||
|
||||
test -n "$srcdir" || srcdir=`dirname "$0"`
|
||||
test -n "$srcdir" || srcdir=.
|
||||
|
||||
olddir=`pwd`
|
||||
cd "$srcdir"
|
||||
|
||||
mkdir -p m4
|
||||
|
||||
GTKDOCIZE=`which gtkdocize`
|
||||
if test -z $GTKDOCIZE; then
|
||||
echo "*** No GTK-Doc found, please install it ***"
|
||||
exit 1
|
||||
else
|
||||
gtkdocize || exit $?
|
||||
fi
|
||||
|
||||
PKGCONFIG=`which pkg-config`
|
||||
if test -z "$PKGCONFIG"; then
|
||||
echo "*** pkg-config not found, please install it ***"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
pkg-config --print-errors gobject-introspection-1.0
|
||||
if [ $? != 0 ]; then
|
||||
echo "You probably need to install 'libgirepository1.0-dev'"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# README and INSTALL are required by automake, but may be deleted by clean
|
||||
# up rules. to get automake to work, simply touch these here, they will be
|
||||
# regenerated from their corresponding *.in files by ./configure anyway.
|
||||
touch README INSTALL
|
||||
|
||||
AUTORECONF=`which autoreconf`
|
||||
if test -z $AUTORECONF; then
|
||||
echo "*** No autoreconf found, please install it ***"
|
||||
exit 1
|
||||
else
|
||||
autoreconf --force --install --verbose || exit $?
|
||||
fi
|
||||
|
||||
cd "$olddir"
|
||||
test -n "$NOCONFIGURE" || "$srcdir/configure" "$@"
|
||||
200
check-version.py
200
check-version.py
@@ -1,200 +0,0 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import re
|
||||
import sys
|
||||
|
||||
try:
|
||||
configure_ac = sys.argv[1]
|
||||
except Exception:
|
||||
configure_ac = 'configure.ac'
|
||||
|
||||
try:
|
||||
meson_build = sys.argv[2]
|
||||
except Exception:
|
||||
meson_build = 'meson.build'
|
||||
|
||||
CONFIGURE_MAJOR_VERSION_RE = re.compile(
|
||||
r'''
|
||||
^
|
||||
\s*
|
||||
m4_define\(
|
||||
\s*
|
||||
\[gtk_major_version\]
|
||||
\s*
|
||||
,
|
||||
\s*
|
||||
\[
|
||||
(?P<version>[0-9]+)
|
||||
\]
|
||||
\s*
|
||||
\)
|
||||
$
|
||||
''',
|
||||
re.UNICODE | re.VERBOSE
|
||||
)
|
||||
|
||||
CONFIGURE_MINOR_VERSION_RE = re.compile(
|
||||
r'''
|
||||
^
|
||||
\s*
|
||||
m4_define\(
|
||||
\s*
|
||||
\[gtk_minor_version\]
|
||||
\s*
|
||||
,
|
||||
\s*
|
||||
\[
|
||||
(?P<version>[0-9]+)
|
||||
\]
|
||||
\s*
|
||||
\)
|
||||
$
|
||||
''',
|
||||
re.UNICODE | re.VERBOSE
|
||||
)
|
||||
|
||||
CONFIGURE_MICRO_VERSION_RE = re.compile(
|
||||
r'''
|
||||
^
|
||||
\s*
|
||||
m4_define\(
|
||||
\s*
|
||||
\[gtk_micro_version\]
|
||||
\s*
|
||||
,
|
||||
\s*
|
||||
\[
|
||||
(?P<version>[0-9]+)
|
||||
\]
|
||||
\s*
|
||||
\)
|
||||
$
|
||||
''',
|
||||
re.UNICODE | re.VERBOSE
|
||||
)
|
||||
|
||||
CONFIGURE_INTERFACE_AGE_RE = re.compile(
|
||||
r'''
|
||||
^
|
||||
\s*
|
||||
m4_define\(
|
||||
\s*
|
||||
\[gtk_interface_age\]
|
||||
\s*
|
||||
,
|
||||
\s*
|
||||
\[
|
||||
(?P<age>[0-9]+)
|
||||
\]
|
||||
\s*
|
||||
\)
|
||||
$
|
||||
''',
|
||||
re.UNICODE | re.VERBOSE
|
||||
)
|
||||
|
||||
MESON_VERSION_RE = re.compile(
|
||||
r'''
|
||||
^
|
||||
\s*
|
||||
version
|
||||
\s*
|
||||
:{1}
|
||||
\s*
|
||||
\'{1}
|
||||
(?P<major>[0-9]+)
|
||||
\.{1}
|
||||
(?P<minor>[0-9]+)
|
||||
\.{1}
|
||||
(?P<micro>[0-9]+)
|
||||
\'{1}
|
||||
\s*
|
||||
,?
|
||||
$
|
||||
''',
|
||||
re.UNICODE | re.VERBOSE
|
||||
)
|
||||
|
||||
MESON_INTERFACE_AGE_RE = re.compile(
|
||||
r'''
|
||||
^\s*gtk_interface_age\s*={1}\s*(?P<age>[0-9]+)\s*$
|
||||
''',
|
||||
re.UNICODE | re.VERBOSE
|
||||
)
|
||||
|
||||
version = {}
|
||||
|
||||
with open(configure_ac, 'r') as f:
|
||||
line = f.readline()
|
||||
while line:
|
||||
res = CONFIGURE_MAJOR_VERSION_RE.match(line)
|
||||
if res:
|
||||
if 'major' in version:
|
||||
print(f'Redefinition of major version; version is already set to {version["major"]}')
|
||||
sys.exit(1)
|
||||
version['major'] = res.group('version')
|
||||
line = f.readline()
|
||||
continue
|
||||
res = CONFIGURE_MINOR_VERSION_RE.match(line)
|
||||
if res:
|
||||
if 'minor' in version:
|
||||
print(f'Redefinition of minor version; version is already set to {version["minor"]}')
|
||||
sys.exit(1)
|
||||
version['minor'] = res.group('version')
|
||||
line = f.readline()
|
||||
continue
|
||||
res = CONFIGURE_MICRO_VERSION_RE.match(line)
|
||||
if res:
|
||||
if 'micro' in version:
|
||||
print(f'Redefinition of micro version; version is already set to {version["micro"]}')
|
||||
sys.exit(1)
|
||||
version['micro'] = res.group('version')
|
||||
line = f.readline()
|
||||
continue
|
||||
res = CONFIGURE_INTERFACE_AGE_RE.match(line)
|
||||
if res:
|
||||
if 'age' in version:
|
||||
print(f'Redefinition of interface age; age is already set to {version["age"]}')
|
||||
sys.exit(1)
|
||||
version['age'] = res.group('age')
|
||||
line = f.readline()
|
||||
continue
|
||||
if ('major', 'minor', 'micro', 'age') in version:
|
||||
break
|
||||
line = f.readline()
|
||||
|
||||
print(f'GTK version defined in {configure_ac}: {version["major"]}.{version["minor"]}.{version["micro"]} (age: {version["age"]})')
|
||||
|
||||
configure_version = version
|
||||
version = {}
|
||||
|
||||
with open(meson_build, 'r') as f:
|
||||
line = f.readline()
|
||||
inside_project = False
|
||||
while line:
|
||||
if line.startswith('project('):
|
||||
inside_project = True
|
||||
if inside_project:
|
||||
res = MESON_VERSION_RE.match(line)
|
||||
if res:
|
||||
version['major'] = res.group('major')
|
||||
version['minor'] = res.group('minor')
|
||||
version['micro'] = res.group('micro')
|
||||
if inside_project and line.endswith(')'):
|
||||
inside_project = False
|
||||
res = MESON_INTERFACE_AGE_RE.match(line)
|
||||
if res:
|
||||
version['age'] = res.group('age')
|
||||
if ('major', 'minor', 'micro', 'age') in version:
|
||||
break
|
||||
line = f.readline()
|
||||
|
||||
print(f'GTK version defined in {meson_build}: {version["major"]}.{version["minor"]}.{version["micro"]} (age: {version["age"]})')
|
||||
|
||||
meson_version = version
|
||||
|
||||
if configure_version != meson_version:
|
||||
print('Version mismatch between Autotools and Meson builds')
|
||||
sys.exit(1)
|
||||
|
||||
sys.exit(0)
|
||||
298
config.h.meson
298
config.h.meson
@@ -1,298 +0,0 @@
|
||||
/* config.h. Generated from config.h.in by configure. */
|
||||
/* config.h.in. Generated from configure.ac by autoheader. */
|
||||
|
||||
/* Define to 1 if translation of program messages to the user's native
|
||||
language is requested. */
|
||||
#mesondefine ENABLE_NLS
|
||||
|
||||
/* The prefix for our gettext translation domains. */
|
||||
#mesondefine GETTEXT_PACKAGE
|
||||
|
||||
/* Disable deprecation warnings from glib */
|
||||
#mesondefine GLIB_DISABLE_DEPRECATION_WARNINGS
|
||||
|
||||
/* Define to 1 if you have the `bind_textdomain_codeset' function. */
|
||||
#mesondefine HAVE_BIND_TEXTDOMAIN_CODESET
|
||||
|
||||
/* Define if libcloudproviders is available */
|
||||
#mesondefine HAVE_CLOUDPROVIDERS
|
||||
|
||||
/* define if we have colord */
|
||||
#mesondefine HAVE_COLORD
|
||||
|
||||
/* Define if the GNU dcgettext() function is already present or preinstalled.
|
||||
*/
|
||||
#mesondefine HAVE_DCGETTEXT
|
||||
|
||||
/* Define to 1 if you have the declaration of `isinf', and to 0 if you don't.
|
||||
*/
|
||||
#mesondefine HAVE_DECL_ISINF
|
||||
|
||||
/* Define to 1 if you have the declaration of `isnan', and to 0 if you don't.
|
||||
*/
|
||||
#mesondefine HAVE_DECL_ISNAN
|
||||
|
||||
/* Define to 1 if you have the <dev/evdev/input.h> header file. */
|
||||
#mesondefine HAVE_DEV_EVDEV_INPUT_H
|
||||
|
||||
/* Define to 1 if you have the <dlfcn.h> header file. */
|
||||
#mesondefine HAVE_DLFCN_H
|
||||
|
||||
/* Define to 1 if you have the `exp2' function. */
|
||||
#mesondefine HAVE_EXP2
|
||||
|
||||
/* Define to 1 if you have the `flockfile' function. */
|
||||
#mesondefine HAVE_FLOCKFILE
|
||||
|
||||
/* Define to 1 if you have the `fmin' function. */
|
||||
#mesondefine HAVE_FMIN
|
||||
|
||||
/* Define to 1 if you have the <ftw.h> header file. */
|
||||
#mesondefine HAVE_FTW_H
|
||||
|
||||
/* Define to 1 if you have the `getpagesize' function. */
|
||||
#mesondefine HAVE_GETPAGESIZE
|
||||
|
||||
/* Define to 1 if you have the `getresuid' function. */
|
||||
#mesondefine HAVE_GETRESUID
|
||||
|
||||
/* Define if gio-unix is available */
|
||||
#mesondefine HAVE_GIO_UNIX
|
||||
|
||||
/* defines whether we have HarfBuzz */
|
||||
#mesondefine HAVE_HARFBUZZ
|
||||
|
||||
/* Define to 1 if you have the <inttypes.h> header file. */
|
||||
#mesondefine HAVE_INTTYPES_H
|
||||
|
||||
/* Define to 1 if the system has the type `IPrintDialogCallback'. */
|
||||
#mesondefine HAVE_IPRINTDIALOGCALLBACK
|
||||
|
||||
/* Define to 1 if you have the <linux/input.h> header file. */
|
||||
#mesondefine HAVE_LINUX_INPUT_H
|
||||
|
||||
/* Define to 1 if you have the <linux/memfd.h> header file. */
|
||||
#mesondefine HAVE_LINUX_MEMFD_H
|
||||
|
||||
/* Define to 1 if you have the `localtime_r' function. */
|
||||
#mesondefine HAVE_LOCALTIME_R
|
||||
|
||||
/* Define to 1 if you have the `log2' function. */
|
||||
#mesondefine HAVE_LOG2
|
||||
|
||||
/* Define to 1 if you have the `lstat' function. */
|
||||
#mesondefine HAVE_LSTAT
|
||||
|
||||
/* Define to 1 if you have the `mallinfo' function. */
|
||||
#mesondefine HAVE_MALLINFO
|
||||
|
||||
/* Define to 1 if you have the <memory.h> header file. */
|
||||
#mesondefine HAVE_MEMORY_H
|
||||
|
||||
/* Define to 1 if you have the `mkstemp' function. */
|
||||
#mesondefine HAVE_MKSTEMP
|
||||
|
||||
/* Define to 1 if you have a working `mmap' system call. */
|
||||
#mesondefine HAVE_MMAP
|
||||
|
||||
/* Define to 1 if you have the `nearbyint' function. */
|
||||
#mesondefine HAVE_NEARBYINT
|
||||
|
||||
/* defines whether we have pangoft2 */
|
||||
#mesondefine HAVE_PANGOFT
|
||||
|
||||
/* Define to 1 if libpapi available */
|
||||
#mesondefine HAVE_PAPI
|
||||
|
||||
/* Define to 1 if you have the `posix_fallocate' function. */
|
||||
#mesondefine HAVE_POSIX_FALLOCATE
|
||||
|
||||
/* Have the Xrandr extension library */
|
||||
#mesondefine HAVE_RANDR
|
||||
|
||||
/* Have the Xrandr 1.5 extension library */
|
||||
#mesondefine HAVE_RANDR15
|
||||
|
||||
/* Define to 1 if you have the `rint' function. */
|
||||
#mesondefine HAVE_RINT
|
||||
|
||||
/* Define to 1 if you have the `round' function. */
|
||||
#mesondefine HAVE_ROUND
|
||||
|
||||
/* Define to 1 if SetupDiGetDevicePropertyW() is available */
|
||||
#mesondefine HAVE_SETUP_DI_GET_DEVICE_PROPERTY_W
|
||||
|
||||
/* Define to 1 if you have the `sincos' function. */
|
||||
#mesondefine HAVE_SINCOS
|
||||
|
||||
/* Define to 1 if solaris xinerama is available */
|
||||
#mesondefine HAVE_SOLARIS_XINERAMA
|
||||
|
||||
/* Define to 1 if you have the <stdint.h> header file. */
|
||||
#mesondefine HAVE_STDINT_H
|
||||
|
||||
/* Define to 1 if you have the <stdlib.h> header file. */
|
||||
#mesondefine HAVE_STDLIB_H
|
||||
|
||||
/* Define to 1 if you have the <strings.h> header file. */
|
||||
#mesondefine HAVE_STRINGS_H
|
||||
|
||||
/* Define to 1 if you have the <string.h> header file. */
|
||||
#mesondefine HAVE_STRING_H
|
||||
|
||||
/* Define to 1 if you have the <sys/mman.h> header file. */
|
||||
#mesondefine HAVE_SYS_MMAN_H
|
||||
|
||||
/* Define to 1 if you have the <sys/param.h> header file. */
|
||||
#mesondefine HAVE_SYS_PARAM_H
|
||||
|
||||
/* Have the sysprof-capture library */
|
||||
#mesondefine HAVE_SYSPROF_CAPTURE
|
||||
|
||||
/* Define to 1 if you have the <sys/stat.h> header file. */
|
||||
#mesondefine HAVE_SYS_STAT_H
|
||||
|
||||
/* Define to 1 if sys/sysinfo.h is available */
|
||||
#mesondefine HAVE_SYS_SYSINFO_H
|
||||
|
||||
/* Define to 1 if sys/systeminfo.h is available */
|
||||
#mesondefine HAVE_SYS_SYSTEMINFO_H
|
||||
|
||||
/* Define to 1 if you have the <sys/time.h> header file. */
|
||||
#mesondefine HAVE_SYS_TIME_H
|
||||
|
||||
/* Define to 1 if you have the <sys/types.h> header file. */
|
||||
#mesondefine HAVE_SYS_TYPES_H
|
||||
|
||||
/* Define to 1 if you have the `trunc' function. */
|
||||
#mesondefine HAVE_TRUNC
|
||||
|
||||
/* Define to 1 if you have the <unistd.h> header file. */
|
||||
#mesondefine HAVE_UNISTD_H
|
||||
|
||||
/* Have the XCOMPOSITE X extension */
|
||||
#mesondefine HAVE_XCOMPOSITE
|
||||
|
||||
/* Have the Xcursor library */
|
||||
#mesondefine HAVE_XCURSOR
|
||||
|
||||
/* Have the XDAMAGE X extension */
|
||||
#mesondefine HAVE_XDAMAGE
|
||||
|
||||
/* Have the XFIXES X extension */
|
||||
#mesondefine HAVE_XFIXES
|
||||
|
||||
/* Define to 1 if XFree Xinerama is available */
|
||||
#mesondefine HAVE_XFREE_XINERAMA
|
||||
|
||||
/* Have XGenericEvent */
|
||||
#mesondefine HAVE_XGENERICEVENTS
|
||||
|
||||
/* Define to 1 if xinerama is available */
|
||||
#mesondefine HAVE_XINERAMA
|
||||
|
||||
/* Define to use XKB extension */
|
||||
#mesondefine HAVE_XKB
|
||||
|
||||
/* Have the SYNC extension library */
|
||||
#mesondefine HAVE_XSYNC
|
||||
|
||||
/* Define to 1 if you have the `_lock_file' function. */
|
||||
#mesondefine HAVE__LOCK_FILE
|
||||
|
||||
/* Define if _NL_MEASUREMENT_MEASUREMENT is available */
|
||||
#mesondefine HAVE__NL_MEASUREMENT_MEASUREMENT
|
||||
|
||||
/* Define if _NL_PAPER_HEIGHT is available */
|
||||
#mesondefine HAVE__NL_PAPER_HEIGHT
|
||||
|
||||
/* Define if _NL_PAPER_WIDTH is available */
|
||||
#mesondefine HAVE__NL_PAPER_WIDTH
|
||||
|
||||
/* Define if _NL_TIME_FIRST_WEEKDAY is available */
|
||||
#mesondefine HAVE__NL_TIME_FIRST_WEEKDAY
|
||||
|
||||
/* Define to the address where bug reports for this package should be sent. */
|
||||
#mesondefine PACKAGE_BUGREPORT
|
||||
|
||||
/* Define to the full name of this package. */
|
||||
#mesondefine PACKAGE_NAME
|
||||
|
||||
/* Define to the full name and version of this package. */
|
||||
#mesondefine PACKAGE_STRING
|
||||
|
||||
/* Define to the one symbol short name of this package. */
|
||||
#mesondefine PACKAGE_TARNAME
|
||||
|
||||
/* Define to the home page for this package. */
|
||||
#mesondefine PACKAGE_URL
|
||||
|
||||
/* Define to the version of this package. */
|
||||
#mesondefine PACKAGE_VERSION
|
||||
|
||||
/* Define when building a shared library for Windows */
|
||||
#mesondefine DLL_EXPORT
|
||||
|
||||
/* Use NSBundle functions to determine load paths for libraries, translations,
|
||||
etc. */
|
||||
#mesondefine QUARTZ_RELOCATION
|
||||
|
||||
/* The size of `DISPLAYCONFIG_VIDEO_OUTPUT_TECHNOLOGY', as computed by sizeof.
|
||||
*/
|
||||
#mesondefine SIZEOF_DISPLAYCONFIG_VIDEO_OUTPUT_TECHNOLOGY
|
||||
|
||||
/* Define to 1 if XInput 2.0 is available */
|
||||
#mesondefine XINPUT_2
|
||||
|
||||
/* Define to 1 if XInput 2.2 is available */
|
||||
#mesondefine XINPUT_2_2
|
||||
|
||||
/* Define to 1 if XInput 2.4 is available */
|
||||
#mesondefine XINPUT_2_4
|
||||
|
||||
/* Enable large inode numbers on Mac OS X 10.5. */
|
||||
#ifndef _DARWIN_USE_64_BIT_INODE
|
||||
# define _DARWIN_USE_64_BIT_INODE 1
|
||||
#endif
|
||||
|
||||
/* Number of bits in a file offset, on hosts where this is settable. */
|
||||
#mesondefine _FILE_OFFSET_BITS
|
||||
|
||||
/* defines how to decorate public symbols while building */
|
||||
#mesondefine _GDK_EXTERN
|
||||
|
||||
/* Define for large files, on AIX-style hosts. */
|
||||
#mesondefine _LARGE_FILES
|
||||
|
||||
/* Define to 1 if on MINIX. */
|
||||
#mesondefine _MINIX
|
||||
|
||||
/* Define to 2 if the system does not provide POSIX.1 features except with
|
||||
this defined. */
|
||||
#mesondefine _POSIX_1_SOURCE
|
||||
|
||||
/* Define to 1 if you need to in order for `stat' and other things to work. */
|
||||
#mesondefine _POSIX_SOURCE
|
||||
|
||||
/* Define to `int' if <sys/types.h> doesn't define. */
|
||||
#mesondefine gid_t
|
||||
|
||||
/* Define to `int' if <sys/types.h> doesn't define. */
|
||||
#mesondefine uid_t
|
||||
|
||||
#mesondefine GTK_DATADIR
|
||||
|
||||
#mesondefine GTK_LIBDIR
|
||||
|
||||
#mesondefine GTK_PRINT_BACKENDS
|
||||
|
||||
/* Define the location where the catalogs will be installed */
|
||||
#mesondefine GTK_LOCALEDIR
|
||||
|
||||
#mesondefine ISO_CODES_PREFIX
|
||||
|
||||
/* Define if tracker3 is available */
|
||||
#mesondefine HAVE_TRACKER3
|
||||
|
||||
/* Define if xdg_activation's wl-protocols definition is available */
|
||||
#mesondefine HAVE_XDG_ACTIVATION
|
||||
@@ -1,336 +0,0 @@
|
||||
/* config.h.win32.in. Merged from two versions generated by configure for gcc and MSVC. */
|
||||
/* config.h. Generated from config.h.in by configure. */
|
||||
/* config.h.in. Generated from configure.in by autoheader. */
|
||||
|
||||
/* always defined to indicate that i18n is enabled */
|
||||
#define ENABLE_NLS 1
|
||||
|
||||
/* define to enable packagekit */
|
||||
/* #undef ENABLE_PACKAGEKIT */
|
||||
|
||||
/* The prefix for our gettext translation domains. */
|
||||
#define GETTEXT_PACKAGE "@GETTEXT_PACKAGE@"
|
||||
|
||||
/* Disable deprecation warnings from glib */
|
||||
/* #undef GLIB_DISABLE_DEPRECATION_WARNINGS */
|
||||
|
||||
/* Define if debugging is enabled */
|
||||
#define GTK_COMPILED_WITH_DEBUGGING "yes"
|
||||
|
||||
/* Define the location where the catalogs will be installed */
|
||||
#define GTK_LOCALEDIR "NONE/share/locale"
|
||||
|
||||
/* Define to 1 if you have the `bind_textdomain_codeset' function. */
|
||||
#define HAVE_BIND_TEXTDOMAIN_CODESET 1
|
||||
|
||||
/* define if we have colord */
|
||||
/* #undef HAVE_COLORD */
|
||||
|
||||
/* Define to 1 if you have the `dcgettext' function. */
|
||||
#define HAVE_DCGETTEXT 1
|
||||
|
||||
/* Define to 1 if you have the declaration of `isinf', and to 0 if you don't.
|
||||
*/
|
||||
#if !defined (_MSC_VER) || (_MSC_VER >= 1800)
|
||||
#define HAVE_DECL_ISINF 1
|
||||
#endif
|
||||
|
||||
/* Define to 1 if you have the declaration of `isnan', and to 0 if you don't.
|
||||
*/
|
||||
#if !defined (_MSC_VER) || (_MSC_VER >= 1800)
|
||||
#define HAVE_DECL_ISNAN 1
|
||||
#endif
|
||||
|
||||
/* Define to 1 if you have the <dlfcn.h> header file. */
|
||||
/* #undef HAVE_DLFCN_H */
|
||||
|
||||
/* Define to 1 if you have the `exp2' function. */
|
||||
#if !defined (_MSC_VER) || (_MSC_VER >= 1800)
|
||||
#define HAVE_EXP2 1
|
||||
#endif
|
||||
|
||||
/* Define to 1 if you have the `flockfile' function. */
|
||||
#undef HAVE_FLOCKFILE
|
||||
|
||||
/* Define to 1 if you have the `fmin' function. */
|
||||
#if !defined (_MSC_VER) || (_MSC_VER >= 1800)
|
||||
# define HAVE_FMIN 1
|
||||
#endif
|
||||
|
||||
/* Define to 1 if you have the <ftw.h> header file. */
|
||||
/* #undef HAVE_FTW_H */
|
||||
|
||||
/* Define to 1 if you have the `getpagesize' function. */
|
||||
#ifndef _MSC_VER
|
||||
#define HAVE_GETPAGESIZE 1
|
||||
#else
|
||||
/* #undef HAVE_GETPAGESIZE */
|
||||
#endif
|
||||
|
||||
/* Define to 1 if you have the `getresuid' function. */
|
||||
/* #undef HAVE_GETRESUID */
|
||||
|
||||
/* Define if the GNU gettext() function is already present or preinstalled. */
|
||||
#define HAVE_GETTEXT 1
|
||||
|
||||
/* Define if gio-unix is available */
|
||||
/* #undef HAVE_GIO_UNIX */
|
||||
|
||||
/* Define to 1 if you have the <inttypes.h> header file. */
|
||||
#if !defined (_MSC_VER) || (_MSC_VER >= 1800)
|
||||
#define HAVE_INTTYPES_H 1
|
||||
#else
|
||||
/* #undef HAVE_INTTYPES_H */
|
||||
#endif
|
||||
|
||||
/* Define to 1 if the system has the type `IPrintDialogCallback'. */
|
||||
#define HAVE_IPRINTDIALOGCALLBACK 1
|
||||
|
||||
/* Define if your <locale.h> file defines LC_MESSAGES. */
|
||||
/* #undef HAVE_LC_MESSAGES */
|
||||
|
||||
/* Define to 1 if you have the `m' library (-lm). */
|
||||
#ifndef _MSC_VER
|
||||
#define HAVE_LIBM 1
|
||||
#endif
|
||||
|
||||
/* Define to 1 if you have the <locale.h> header file. */
|
||||
#define HAVE_LOCALE_H 1
|
||||
|
||||
/* Define to 1 if you have the `localtime_r' function. */
|
||||
/* #undef HAVE_LOCALTIME_R */
|
||||
|
||||
/* Define to 1 if you have the `log2' function. */
|
||||
#if !defined (_MSC_VER) || (_MSC_VER >= 1800)
|
||||
#define HAVE_LOG2 1
|
||||
#endif
|
||||
|
||||
/* Define to 1 if you have the `lstat' function. */
|
||||
/* #undef HAVE_LSTAT */
|
||||
|
||||
/* Define to 1 if you have the `mallinfo' function. */
|
||||
/* #undef HAVE_MALLINFO */
|
||||
|
||||
/* Define to 1 if you have the <memory.h> header file. */
|
||||
#define HAVE_MEMORY_H 1
|
||||
|
||||
/* Define to 1 if you have the `mkstemp' function. */
|
||||
/* #undef HAVE_MKSTEMP */
|
||||
|
||||
/* Define to 1 if you have a working `mmap' system call. */
|
||||
/* #undef HAVE_MMAP */
|
||||
|
||||
/* Define to 1 if nearbyint() is available */
|
||||
#if !defined (_MSC_VER) || (_MSC_VER >= 1800)
|
||||
#define HAVE_NEARBYINT 1
|
||||
#endif
|
||||
|
||||
/* Define to 1 if libpapi available */
|
||||
/* #undef HAVE_PAPI */
|
||||
|
||||
/* Define to 1 if you have the <pwd.h> header file. */
|
||||
/* #undef HAVE_PWD_H */
|
||||
|
||||
/* Have the Xrandr extension library */
|
||||
/* #undef HAVE_RANDR */
|
||||
|
||||
/* Define to 1 if rint() is available */
|
||||
#if !defined (_MSC_VER) || (_MSC_VER >= 1800)
|
||||
#define HAVE_RINT 1
|
||||
#endif
|
||||
|
||||
/* Define to 1 if round() is available */
|
||||
#if !defined (_MSC_VER) || (_MSC_VER >= 1800)
|
||||
#define HAVE_ROUND 1
|
||||
#endif
|
||||
|
||||
/* Define to 1 if SetupDiGetDevicePropertyW() is available */
|
||||
#ifdef _MSC_VER
|
||||
#define HAVE_SETUP_DI_GET_DEVICE_PROPERTY_W 1
|
||||
#endif
|
||||
|
||||
/* Define to 1 if sincos() is available */
|
||||
/* #undef HAVE_SINCOS */
|
||||
|
||||
/* Define to 1 if solaris xinerama is available */
|
||||
/* #undef HAVE_SOLARIS_XINERAMA */
|
||||
|
||||
/* Define to 1 if you have the <stdint.h> header file. */
|
||||
#ifndef _MSC_VER
|
||||
#define HAVE_STDINT_H 1
|
||||
#else
|
||||
#if (_MSC_VER >= 1600) /* VS 2010+ ships with stdint.h */
|
||||
#define HAVE_STDINT_H 1
|
||||
#endif
|
||||
/* #undef HAVE_STDINT_H */
|
||||
#endif
|
||||
|
||||
/* Define to 1 if you have the <stdlib.h> header file. */
|
||||
#define HAVE_STDLIB_H 1
|
||||
|
||||
/* Define to 1 if you have the <strings.h> header file. */
|
||||
#ifndef _MSC_VER
|
||||
#define HAVE_STRINGS_H 1
|
||||
#endif
|
||||
|
||||
/* Define to 1 if you have the <string.h> header file. */
|
||||
#define HAVE_STRING_H 1
|
||||
|
||||
/* Define to 1 if you have the <sys/mman.h> header file. */
|
||||
/* #undef HAVE_SYS_MMAN_H */
|
||||
|
||||
/* Define to 1 if you have the <sys/param.h> header file. */
|
||||
/* #undef HAVE_SYS_PARAM_H */
|
||||
|
||||
/* Define to 1 if you have the <sys/stat.h> header file. */
|
||||
#define HAVE_SYS_STAT_H 1
|
||||
|
||||
/* Define to 1 if sys/sysinfo.h is available */
|
||||
/* #undef HAVE_SYS_SYSINFO_H */
|
||||
|
||||
/* Define to 1 if sys/systeminfo.h is available */
|
||||
/* #undef HAVE_SYS_SYSTEMINFO_H */
|
||||
|
||||
/* Define to 1 if you have the <sys/time.h> header file. */
|
||||
#ifndef _MSC_VER
|
||||
#define HAVE_SYS_TIME_H 1
|
||||
#else /* _MSC_VER */
|
||||
/* #undef HAVE_SYS_TIME_H */
|
||||
#endif
|
||||
|
||||
/* Define to 1 if you have the <sys/types.h> header file. */
|
||||
#define HAVE_SYS_TYPES_H 1
|
||||
|
||||
/* Define to 1 if trunc() is available */
|
||||
#if !defined (_MSC_VER) || (_MSC_VER >= 1800)
|
||||
# define HAVE_TRUNC 1
|
||||
#endif
|
||||
|
||||
/* Define to 1 if you have the <unistd.h> header file. */
|
||||
#ifndef _MSC_VER
|
||||
#define HAVE_UNISTD_H 1
|
||||
#else
|
||||
/* #undef HAVE_UNISTD_H */
|
||||
#endif
|
||||
|
||||
/* Have the XCOMPOSITE X extension */
|
||||
/* #undef HAVE_XCOMPOSITE */
|
||||
|
||||
/* Have the Xcursor library */
|
||||
/* #undef HAVE_XCURSOR */
|
||||
|
||||
/* Have the XDAMAGE X extension */
|
||||
/* #undef HAVE_XDAMAGE */
|
||||
|
||||
/* Have the XFIXES X extension */
|
||||
/* #undef HAVE_XFIXES */
|
||||
|
||||
/* Define to 1 if XFree Xinerama is available */
|
||||
/* #undef HAVE_XFREE_XINERAMA */
|
||||
|
||||
/* Have XGenericEvent */
|
||||
/* #undef HAVE_XGENERICEVENTS */
|
||||
|
||||
/* Define to 1 if xinerama is available */
|
||||
/* #undef HAVE_XINERAMA */
|
||||
|
||||
/* Define to use XKB extension */
|
||||
/* #undef HAVE_XKB */
|
||||
|
||||
/* Have the SYNC extension library */
|
||||
/* #undef HAVE_XSYNC */
|
||||
|
||||
/* Define to 1 if you have the `_lock_file' function. */
|
||||
#define HAVE__LOCK_FILE
|
||||
|
||||
/* Define if _NL_MEASUREMENT_MEASUREMENT is available */
|
||||
/* #undef HAVE__NL_MEASUREMENT_MEASUREMENT */
|
||||
|
||||
/* Define if _NL_PAPER_HEIGHT is available */
|
||||
/* #undef HAVE__NL_PAPER_HEIGHT */
|
||||
|
||||
/* Define if _NL_PAPER_WIDTH is available */
|
||||
/* #undef HAVE__NL_PAPER_WIDTH */
|
||||
|
||||
/* Define if _NL_TIME_FIRST_WEEKDAY is available */
|
||||
/* #undef HAVE__NL_TIME_FIRST_WEEKDAY */
|
||||
|
||||
/* Define to the sub-directory in which libtool stores uninstalled libraries.
|
||||
*/
|
||||
#define LT_OBJDIR ".libs/"
|
||||
|
||||
/* Define to 1 if your C compiler doesn't accept -c and -o together. */
|
||||
#ifndef _MSC_VER
|
||||
/* #undef NO_MINUS_C_MINUS_O */
|
||||
#else
|
||||
#define NO_MINUS_C_MINUS_O 1
|
||||
#endif
|
||||
|
||||
/* Define to the address where bug reports for this package should be sent. */
|
||||
#define PACKAGE_BUGREPORT "http://bugzilla.gnome.org/enter_bug.cgi?product=gtk%2B"
|
||||
|
||||
/* Define to the full name of this package. */
|
||||
#define PACKAGE_NAME "gtk+"
|
||||
|
||||
/* Define to the full name and version of this package. */
|
||||
#define PACKAGE_STRING "gtk+ @GTK_MAJOR_VERSION@.@GTK_MINOR_VERSION@.@GTK_MICRO_VERSION@"
|
||||
|
||||
/* Define to the one symbol short name of this package. */
|
||||
#define PACKAGE_TARNAME "gtk+"
|
||||
|
||||
/* Define to the home page for this package. */
|
||||
#define PACKAGE_URL ""
|
||||
|
||||
/* Define to the version of this package. */
|
||||
#define PACKAGE_VERSION "@GTK_MAJOR_VERSION@.@GTK_MINOR_VERSION@.@GTK_MICRO_VERSION@"
|
||||
|
||||
/* Use NSBundle functions to determine load paths for libraries, translations,
|
||||
etc. */
|
||||
/* #undef QUARTZ_RELOCATION */
|
||||
|
||||
/* Define to 1 if you have the ANSI C header files. */
|
||||
#define STDC_HEADERS 1
|
||||
|
||||
/* Define to 1 if gmodule works and should be used */
|
||||
#define USE_GMODULE 1
|
||||
|
||||
/* Define to 1 if XInput 2.0 is available */
|
||||
/* #undef XINPUT_2 */
|
||||
|
||||
/* Define to 1 if XInput 2.2 is available */
|
||||
/* #undef XINPUT_2_2 */
|
||||
|
||||
/* Define to 1 if XInput 2.4 is available */
|
||||
/* #undef XINPUT_2_4 */
|
||||
|
||||
/* Define to 1 if the X Window System is missing or not being used. */
|
||||
/* #undef X_DISPLAY_MISSING */
|
||||
|
||||
/* Enable large inode numbers on Mac OS X 10.5. */
|
||||
#ifndef _DARWIN_USE_64_BIT_INODE
|
||||
/* # define _DARWIN_USE_64_BIT_INODE 1 */
|
||||
#endif
|
||||
|
||||
/* Number of bits in a file offset, on hosts where this is settable. */
|
||||
/* #undef _FILE_OFFSET_BITS */
|
||||
|
||||
/* Define when building a shared library for Windows */
|
||||
#define DLL_EXPORT 1
|
||||
|
||||
/* defines how to decorate public symbols while building */
|
||||
#ifdef DLL_EXPORT
|
||||
# ifdef _MSC_VER
|
||||
# define _GDK_EXTERN __declspec (dllexport) extern
|
||||
# else
|
||||
# define _GDK_EXTERN __attribute__((visibility("default"))) __declspec (dllexport) extern
|
||||
# endif
|
||||
#endif
|
||||
|
||||
/* Define for large files, on AIX-style hosts. */
|
||||
/* #undef _LARGE_FILES */
|
||||
|
||||
/* Define to `int' if <sys/types.h> doesn't define. */
|
||||
#define gid_t int
|
||||
|
||||
/* Define to `int' if <sys/types.h> doesn't define. */
|
||||
#define uid_t int
|
||||
2031
configure.ac
2031
configure.ac
File diff suppressed because it is too large
Load Diff
@@ -1,9 +0,0 @@
|
||||
## Makefile.am for gtk+/demos
|
||||
include $(top_srcdir)/Makefile.decl
|
||||
|
||||
SUBDIRS = gtk-demo widget-factory icon-browser
|
||||
|
||||
EXTRA_DIST += \
|
||||
meson.build
|
||||
|
||||
-include $(top_srcdir)/git.mk
|
||||
2
demos/gtk-demo/.gitignore
vendored
2
demos/gtk-demo/.gitignore
vendored
@@ -1,2 +0,0 @@
|
||||
demos.h.win32
|
||||
demos.h
|
||||
@@ -1,130 +0,0 @@
|
||||
## Makefile.am for gtk+/demos
|
||||
include $(top_srcdir)/Makefile.decl
|
||||
include $(srcdir)/demos-sources.mak
|
||||
|
||||
demos_opt =
|
||||
|
||||
if BUILD_FONT_DEMO
|
||||
demos_opt += $(font_features_demo)
|
||||
endif
|
||||
|
||||
if OS_UNIX
|
||||
demos_opt += $(page_setup_demo)
|
||||
endif
|
||||
|
||||
demos = $(demos_base) $(demos_opt)
|
||||
|
||||
AM_CPPFLAGS = \
|
||||
-I$(top_srcdir) \
|
||||
-I$(top_builddir)/gdk \
|
||||
-DGDK_DISABLE_DEPRECATED \
|
||||
-DGTK_DISABLE_DEPRECATED \
|
||||
$(GTK_DEBUG_FLAGS) \
|
||||
$(GTK_DEP_CFLAGS)
|
||||
|
||||
DEPS = \
|
||||
$(top_builddir)/gtk/libgtk-3.la
|
||||
|
||||
LDADDS = \
|
||||
$(top_builddir)/gtk/libgtk-3.la \
|
||||
$(top_builddir)/gdk/libgdk-3.la \
|
||||
$(GTK_DEP_LIBS) \
|
||||
$(GDK_DEP_LIBS) \
|
||||
-lm
|
||||
|
||||
bin_PROGRAMS = gtk3-demo gtk3-demo-application
|
||||
|
||||
desktopdir = $(datadir)/applications
|
||||
dist_desktop_DATA = gtk3-demo.desktop
|
||||
|
||||
BUILT_SOURCES = demos.h demo_resources.c
|
||||
|
||||
EXTRA_DIST += \
|
||||
data/source.svg \
|
||||
data/symbolic-source.svg \
|
||||
demo.gresource.xml \
|
||||
$(resource_files) \
|
||||
makefile.msc.in \
|
||||
org.gtk.Demo.gschema.xml \
|
||||
demos.h.win32 \
|
||||
meson.build \
|
||||
geninclude.py
|
||||
|
||||
gsettings_SCHEMAS = \
|
||||
org.gtk.Demo.gschema.xml
|
||||
|
||||
@GSETTINGS_RULES@
|
||||
|
||||
demos.h: $(demos) geninclude.pl
|
||||
$(AM_V_GEN) (here=`pwd` ; cd $(srcdir) && $(PERL) $$here/geninclude.pl $(demos)) > demos.h
|
||||
|
||||
demos.h.win32: $(demos_base) geninclude.pl
|
||||
$(AM_V_GEN) (here=`pwd` ; cd $(srcdir) && $(PERL) $$here/geninclude.pl $(demos_base)) > demos.h.win32
|
||||
|
||||
nodist_gtk3_demo_SOURCES = demos.h demo_resources.c
|
||||
|
||||
gtk3_demo_SOURCES = \
|
||||
$(demos) \
|
||||
gtkfishbowl.c \
|
||||
gtkfishbowl.h \
|
||||
main.c
|
||||
|
||||
gtk3_demo_DEPENDENCIES = $(DEPS)
|
||||
gtk3_demo_LDADD = $(LDADDS)
|
||||
gtk3_demo_LDFLAGS = -export-dynamic
|
||||
|
||||
nodist_gtk3_demo_application_SOURCES = demo_resources.c
|
||||
|
||||
gtk3_demo_application_SOURCES = application.c
|
||||
|
||||
gtk3_demo_application_LDADD = $(LDADDS)
|
||||
|
||||
resource_files = $(shell $(GLIB_COMPILE_RESOURCES) --sourcedir=$(srcdir) --generate-dependencies $(srcdir)/demo.gresource.xml)
|
||||
|
||||
demo_resources.c: demo.gresource.xml $(resource_files)
|
||||
$(AM_V_GEN) $(GLIB_COMPILE_RESOURCES) --target=$@ --sourcedir=$(srcdir) --generate-source $(srcdir)/demo.gresource.xml
|
||||
|
||||
iconthemedir = $(datadir)/icons/hicolor
|
||||
|
||||
appsicon16dir = $(iconthemedir)/16x16/apps
|
||||
appsicon22dir = $(iconthemedir)/22x22/apps
|
||||
appsicon24dir = $(iconthemedir)/24x24/apps
|
||||
appsicon32dir = $(iconthemedir)/32x32/apps
|
||||
appsicon48dir = $(iconthemedir)/48x48/apps
|
||||
appsicon256dir = $(iconthemedir)/256x256/apps
|
||||
appsiconscalabledir = $(iconthemedir)/scalable/apps
|
||||
|
||||
dist_appsicon16_DATA = data/16x16/gtk3-demo.png data/16x16/gtk3-demo-symbolic.symbolic.png
|
||||
dist_appsicon22_DATA = data/22x22/gtk3-demo.png data/22x22/gtk3-demo-symbolic.symbolic.png
|
||||
dist_appsicon24_DATA = data/24x24/gtk3-demo.png data/24x24/gtk3-demo-symbolic.symbolic.png
|
||||
dist_appsicon32_DATA = data/32x32/gtk3-demo.png data/32x32/gtk3-demo-symbolic.symbolic.png
|
||||
dist_appsicon48_DATA = data/48x48/gtk3-demo.png data/48x48/gtk3-demo-symbolic.symbolic.png
|
||||
dist_appsicon256_DATA = data/256x256/gtk3-demo.png data/256x256/gtk3-demo-symbolic.symbolic.png
|
||||
|
||||
update_icon_cache = $(top_builddir)/gtk/gtk-update-icon-cache$(EXEEXT) --ignore-theme-index --force
|
||||
|
||||
install-data-hook: install-update-icon-cache
|
||||
uninstall-hook: uninstall-update-icon-cache
|
||||
|
||||
install-update-icon-cache:
|
||||
$(AM_V_at)$(POST_INSTALL)
|
||||
test -n "$(DESTDIR)" || $(update_icon_cache) "$(iconthemedir)"
|
||||
|
||||
uninstall-update-icon-cache:
|
||||
$(AM_V_at)$(POST_UNINSTALL)
|
||||
test -n "$(DESTDIR)" || $(update_icon_cache) "$(iconthemedir)"
|
||||
|
||||
# ------------------- MSVC Build Items ----------------
|
||||
MSVCPROJS = gtk3-demo
|
||||
|
||||
gtk3_demo_FILES = $(gtk3_demo_SOURCES)
|
||||
gtk3_demo_EXCLUDES = font_features.c|pagesetup.c
|
||||
|
||||
include $(top_srcdir)/win32/Makefile.msvcproj
|
||||
|
||||
dist-hook: \
|
||||
$(top_builddir)/win32/vs9/gtk3-demo.vcproj
|
||||
|
||||
DISTCLEANFILES = demos.h demos.h.win32 demo_resources.c
|
||||
|
||||
-include $(top_srcdir)/git.mk
|
||||
@@ -1,43 +0,0 @@
|
||||
AM_CPPFLAGS = \
|
||||
-I$(top_srcdir) \
|
||||
-I$(top_srcdir)/gdk \
|
||||
-I$(top_builddir)/gdk \
|
||||
$(GTK_DEBUG_FLAGS) \
|
||||
$(GTK_DEP_CFLAGS)
|
||||
|
||||
LDADD = \
|
||||
$(top_builddir)/gtk/libgtk-3.la \
|
||||
$(top_builddir)/gdk/libgdk-3.la \
|
||||
$(GTK_DEP_LIBS)
|
||||
|
||||
|
||||
bin_PROGRAMS = gtk3-icon-browser
|
||||
|
||||
desktopdir = $(datadir)/applications
|
||||
dist_desktop_DATA = gtk3-icon-browser.desktop
|
||||
|
||||
nodist_gtk3_icon_browser_SOURCES = resources.c
|
||||
|
||||
gtk3_icon_browser_SOURCES = \
|
||||
main.c \
|
||||
iconbrowserapp.c iconbrowserapp.h \
|
||||
iconbrowserwin.c iconbrowserwin.h \
|
||||
iconstore.c iconstore.h
|
||||
|
||||
BUILT_SOURCES = \
|
||||
resources.c
|
||||
|
||||
DISTCLEANFILES = resources.c
|
||||
|
||||
resources.c: iconbrowser.gresource.xml $(shell $(GLIB_COMPILE_RESOURCES) --sourcedir=$(srcdir) --generate-dependencies $(srcdir)/iconbrowser.gresource.xml)
|
||||
$(AM_V_GEN) $(GLIB_COMPILE_RESOURCES) $(srcdir)/iconbrowser.gresource.xml \
|
||||
--target=$@ --sourcedir=$(srcdir) --generate-source
|
||||
|
||||
EXTRA_DIST = \
|
||||
menus.ui \
|
||||
iconbrowser.gresource.xml \
|
||||
window.ui \
|
||||
icon.list \
|
||||
meson.build
|
||||
|
||||
-include $(top_srcdir)/git.mk
|
||||
@@ -1,74 +0,0 @@
|
||||
include $(top_srcdir)/Makefile.decl
|
||||
|
||||
bin_PROGRAMS = gtk3-widget-factory
|
||||
|
||||
desktopdir = $(datadir)/applications
|
||||
dist_desktop_DATA = gtk3-widget-factory.desktop
|
||||
|
||||
nodist_gtk3_widget_factory_SOURCES = widget_factory_resources.c
|
||||
|
||||
gtk3_widget_factory_SOURCES = widget-factory.c
|
||||
|
||||
BUILT_SOURCES = \
|
||||
widget_factory_resources.c
|
||||
|
||||
gtk3_widget_factory_DEPENDENCIES = \
|
||||
$(top_builddir)/gtk/libgtk-3.la
|
||||
|
||||
gtk3_widget_factory_CPPFLAGS = \
|
||||
-I$(top_srcdir) \
|
||||
$(GTK_DEBUG_FLAGS) \
|
||||
$(GTK_DEP_CFLAGS) \
|
||||
$(NULL)
|
||||
|
||||
gtk3_widget_factory_LDADD = \
|
||||
$(top_builddir)/gdk/libgdk-3.la \
|
||||
$(top_builddir)/gtk/libgtk-3.la \
|
||||
$(GTK_DEP_LIBS) \
|
||||
$(NULL)
|
||||
|
||||
widget_factory_resources.c: widget-factory.gresource.xml $(shell $(GLIB_COMPILE_RESOURCES) --sourcedir=$(srcdir) --generate-dependencies $(srcdir)/widget-factory.gresource.xml)
|
||||
$(AM_V_GEN) $(GLIB_COMPILE_RESOURCES) --target=$@ --sourcedir=$(srcdir) --generate-source $<
|
||||
|
||||
|
||||
iconthemedir = $(datadir)/icons/hicolor
|
||||
|
||||
appsicon16dir = $(iconthemedir)/16x16/apps
|
||||
appsicon22dir = $(iconthemedir)/22x22/apps
|
||||
appsicon24dir = $(iconthemedir)/24x24/apps
|
||||
appsicon32dir = $(iconthemedir)/32x32/apps
|
||||
appsicon48dir = $(iconthemedir)/48x48/apps
|
||||
appsicon256dir = $(iconthemedir)/256x256/apps
|
||||
|
||||
dist_appsicon16_DATA = data/16x16/gtk3-widget-factory.png data/16x16/gtk3-widget-factory-symbolic.symbolic.png
|
||||
dist_appsicon22_DATA = data/22x22/gtk3-widget-factory.png data/22x22/gtk3-widget-factory-symbolic.symbolic.png
|
||||
dist_appsicon24_DATA = data/24x24/gtk3-widget-factory.png data/24x24/gtk3-widget-factory-symbolic.symbolic.png
|
||||
dist_appsicon32_DATA = data/32x32/gtk3-widget-factory.png data/32x32/gtk3-widget-factory-symbolic.symbolic.png
|
||||
dist_appsicon48_DATA = data/48x48/gtk3-widget-factory.png data/48x48/gtk3-widget-factory-symbolic.symbolic.png
|
||||
dist_appsicon256_DATA = data/256x256/gtk3-widget-factory.png data/256x256/gtk3-widget-factory-symbolic.symbolic.png
|
||||
|
||||
update_icon_cache = $(top_builddir)/gtk/gtk-update-icon-cache$(EXEEXT) --ignore-theme-index --force
|
||||
|
||||
install-data-hook: install-update-icon-cache
|
||||
uninstall-hook: uninstall-update-icon-cache
|
||||
|
||||
install-update-icon-cache:
|
||||
$(AM_V_at)$(POST_INSTALL)
|
||||
test -n "$(DESTDIR)" || $(update_icon_cache) "$(iconthemedir)"
|
||||
|
||||
uninstall-update-icon-cache:
|
||||
$(AM_V_at)$(POST_UNINSTALL)
|
||||
test -n "$(DESTDIR)" || $(update_icon_cache) "$(iconthemedir)"
|
||||
|
||||
EXTRA_DIST += \
|
||||
widget-factory.ui \
|
||||
widget-factory.css \
|
||||
help-overlay.ui \
|
||||
widget-factory.gresource.xml \
|
||||
data/source.svg \
|
||||
data/symbolic-source.svg \
|
||||
meson.build
|
||||
|
||||
DISTCLEANFILES = widget_factory_resources.c
|
||||
|
||||
-include $(top_srcdir)/git.mk
|
||||
@@ -1,21 +0,0 @@
|
||||
## Process this file with automake to produce Makefile.in
|
||||
include $(top_srcdir)/Makefile.decl
|
||||
|
||||
SUBDIRS = reference tools
|
||||
|
||||
EXTRA_DIST += \
|
||||
CODING-STYLE \
|
||||
developers.txt \
|
||||
dnd_internals.txt \
|
||||
focus_tracking.txt \
|
||||
iconcache.txt \
|
||||
RELEASE-HOWTO \
|
||||
sizing-test.txt \
|
||||
styles.txt \
|
||||
text_widget_internals.txt \
|
||||
tree-column-sizing.png \
|
||||
tree-column-sizing.txt \
|
||||
widget_geometry.txt \
|
||||
widget_system.txt
|
||||
|
||||
-include $(top_srcdir)/git.mk
|
||||
@@ -1,11 +0,0 @@
|
||||
## Process this file with automake to produce Makefile.in
|
||||
include $(top_srcdir)/Makefile.decl
|
||||
|
||||
SUBDIRS = gdk gtk libgail-util
|
||||
|
||||
GITIGNOREFILES = */*.1
|
||||
|
||||
EXTRA_DIST += \
|
||||
meson.build
|
||||
|
||||
-include $(top_srcdir)/git.mk
|
||||
@@ -1,212 +0,0 @@
|
||||
## Process this file with automake to produce Makefile.in
|
||||
|
||||
AUTOMAKE_OPTIONS = 1.6
|
||||
|
||||
# The name of the module.
|
||||
DOC_MODULE=gdk3
|
||||
|
||||
# The top-level SGML file.
|
||||
DOC_MAIN_SGML_FILE=gdk-docs.sgml
|
||||
|
||||
# Extra options to supply to gtkdoc-scan
|
||||
SCAN_OPTIONS=--deprecated-guards=GDK_DISABLE_DEPRECATED \
|
||||
--ignore-decorators=G_GNUC_WARN_UNUSED_RESULT
|
||||
|
||||
# The directory containing the source code. Relative to $(srcdir)
|
||||
DOC_SOURCE_DIR=$(top_srcdir)/gdk $(top_srcdir)/gdk/x11
|
||||
|
||||
# Used for dependencies
|
||||
HFILE_GLOB=$(top_srcdir)/gdk/*.h $(top_srcdir)/gdk/x11/gdkx.h
|
||||
CFILE_GLOB=$(top_srcdir)/gdk/*.c
|
||||
|
||||
# Header files to ignore when scanning
|
||||
IGNORE_HFILES= \
|
||||
gdkintl.h \
|
||||
gdkmarshalers.h \
|
||||
gdkkeysyms.h \
|
||||
gdkinternals.h \
|
||||
gdkprivate.h \
|
||||
gdk-private.h \
|
||||
gdkapplaunchcontextprivate.h \
|
||||
gdkcursorprivate.h \
|
||||
gdkdevicemanagerprivate.h \
|
||||
gdkdeviceprivate.h \
|
||||
gdkdisplaymanagerprivate.h \
|
||||
gdkdisplayprivate.h \
|
||||
gdkdndprivate.h \
|
||||
gdkframeclockprivate.h \
|
||||
gdkglcontextprivate.h \
|
||||
gdkkeysprivate.h \
|
||||
gdkscreenprivate.h \
|
||||
gdkseatdefaultprivate.h \
|
||||
gdkseatprivate.h \
|
||||
gdkvisualprivate.h \
|
||||
keyname-table.h \
|
||||
win32 \
|
||||
x11 \
|
||||
quartz \
|
||||
broadway \
|
||||
wayland
|
||||
|
||||
# Extra files to add when scanning
|
||||
EXTRA_HFILES= \
|
||||
$(top_srcdir)/gdk/x11/gdkx.h
|
||||
|
||||
# CFLAGS and LDFLAGS for compiling scan program. Only needed
|
||||
# if $(DOC_MODULE).types is non-empty.
|
||||
AM_CPPFLAGS = \
|
||||
-I$(top_srcdir) \
|
||||
-I$(top_builddir) \
|
||||
-I$(top_builddir)/gdk \
|
||||
$(GTK_DEBUG_FLAGS) \
|
||||
$(GDK_DEP_CFLAGS)
|
||||
|
||||
GTKDOC_LIBS = $(top_builddir)/gdk/libgdk-3.la $(GDK_DEP_LIBS)
|
||||
|
||||
# Extra options to supply to gtkdoc-mkdb
|
||||
MKDB_OPTIONS=--output-format=xml --name-space=gdk
|
||||
|
||||
# Extra SGML files that are included by DOC_MAIN_SGML_FILE
|
||||
content_files = \
|
||||
version.xml
|
||||
|
||||
# Images to copy into HTML directory
|
||||
HTML_IMAGES = \
|
||||
images/rotated-text.png \
|
||||
images/X_cursor.png \
|
||||
images/arrow.png \
|
||||
images/based_arrow_down.png \
|
||||
images/based_arrow_up.png \
|
||||
images/boat.png \
|
||||
images/bogosity.png \
|
||||
images/bottom_left_corner.png \
|
||||
images/bottom_right_corner.png \
|
||||
images/bottom_side.png \
|
||||
images/bottom_tee.png \
|
||||
images/box_spiral.png \
|
||||
images/center_ptr.png \
|
||||
images/circle.png \
|
||||
images/clock.png \
|
||||
images/coffee_mug.png \
|
||||
images/cross.png \
|
||||
images/cross_reverse.png \
|
||||
images/crosshair.png \
|
||||
images/diamond_cross.png \
|
||||
images/dot.png \
|
||||
images/dotbox.png \
|
||||
images/double_arrow.png \
|
||||
images/draft_large.png \
|
||||
images/draft_small.png \
|
||||
images/draped_box.png \
|
||||
images/exchange.png \
|
||||
images/fleur.png \
|
||||
images/gobbler.png \
|
||||
images/gumby.png \
|
||||
images/hand1.png \
|
||||
images/hand2.png \
|
||||
images/heart.png \
|
||||
images/icon.png \
|
||||
images/iron_cross.png \
|
||||
images/left_ptr.png \
|
||||
images/left_side.png \
|
||||
images/left_tee.png \
|
||||
images/leftbutton.png \
|
||||
images/ll_angle.png \
|
||||
images/lr_angle.png \
|
||||
images/man.png \
|
||||
images/middlebutton.png \
|
||||
images/mouse.png \
|
||||
images/pencil.png \
|
||||
images/pirate.png \
|
||||
images/plus.png \
|
||||
images/question_arrow.png \
|
||||
images/right_ptr.png \
|
||||
images/right_side.png \
|
||||
images/right_tee.png \
|
||||
images/rightbutton.png \
|
||||
images/rtl_logo.png \
|
||||
images/sailboat.png \
|
||||
images/sb_down_arrow.png \
|
||||
images/sb_h_double_arrow.png \
|
||||
images/sb_left_arrow.png \
|
||||
images/sb_right_arrow.png \
|
||||
images/sb_up_arrow.png \
|
||||
images/sb_v_double_arrow.png \
|
||||
images/shuttle.png \
|
||||
images/sizing.png \
|
||||
images/spider.png \
|
||||
images/spraycan.png \
|
||||
images/star.png \
|
||||
images/target.png \
|
||||
images/tcross.png \
|
||||
images/top_left_arrow.png \
|
||||
images/top_left_corner.png \
|
||||
images/top_right_corner.png \
|
||||
images/top_side.png \
|
||||
images/top_tee.png \
|
||||
images/trek.png \
|
||||
images/ul_angle.png \
|
||||
images/umbrella.png \
|
||||
images/ur_angle.png \
|
||||
images/watch.png \
|
||||
images/xterm.png \
|
||||
images/alias_cursor.png \
|
||||
images/all_scroll_cursor.png \
|
||||
images/cell_cursor.png \
|
||||
images/col_resize_cursor.png \
|
||||
images/copy_cursor.png \
|
||||
images/crosshair_cursor.png \
|
||||
images/default_cursor.png \
|
||||
images/e_resize_cursor.png \
|
||||
images/ew_resize_cursor.png \
|
||||
images/grabbing_cursor.png \
|
||||
images/grab_cursor.png \
|
||||
images/hand_cursor.png \
|
||||
images/context_menu_cursor.png \
|
||||
images/help_cursor.png \
|
||||
images/move_cursor.png \
|
||||
images/ne_resize_cursor.png \
|
||||
images/nesw_resize_cursor.png \
|
||||
images/no_drop_cursor.png \
|
||||
images/not_allowed_cursor.png \
|
||||
images/n_resize_cursor.png \
|
||||
images/ns_resize_cursor.png \
|
||||
images/nw_resize_cursor.png \
|
||||
images/nwse_resize_cursor.png \
|
||||
images/pointer_cursor.png \
|
||||
images/progress_cursor.png \
|
||||
images/row_resize_cursor.png \
|
||||
images/se_resize_cursor.png \
|
||||
images/s_resize_cursor.png \
|
||||
images/sw_resize_cursor.png \
|
||||
images/text_cursor.png \
|
||||
images/vertical_text_cursor.png \
|
||||
images/wait_cursor.png \
|
||||
images/w_resize_cursor.png \
|
||||
images/X_cursor.png \
|
||||
images/zoom_in_cursor.png \
|
||||
images/zoom_out_cursor.png
|
||||
|
||||
if ENABLE_DOC_CROSS_REFERENCES
|
||||
# Extra options to supply to gtkdoc-fixref
|
||||
FIXXREF_OPTIONS= \
|
||||
--extra-dir=$(GLIB_PREFIX)/share/gtk-doc/html/gobject \
|
||||
--extra-dir=$(GLIB_PREFIX)/share/gtk-doc/html/glib \
|
||||
--extra-dir=$(CAIRO_PREFIX)/share/gtk-doc/html/cairo
|
||||
endif
|
||||
|
||||
include $(top_srcdir)/gtk-doc.make
|
||||
|
||||
# Other files to distribute
|
||||
EXTRA_DIST += \
|
||||
version.xml.in \
|
||||
meson.build
|
||||
|
||||
if ENABLE_GTK_DOC
|
||||
TESTS_ENVIRONMENT = cd $(srcdir) && \
|
||||
DOC_MODULE=$(DOC_MODULE) DOC_MAIN_SGML_FILE=$(DOC_MAIN_SGML_FILE) \
|
||||
SRCDIR=$(abs_srcdir) BUILDDIR=$(abs_builddir)
|
||||
#TESTS = $(GTKDOC_CHECK)
|
||||
endif
|
||||
|
||||
-include $(top_srcdir)/git.mk
|
||||
@@ -1,562 +0,0 @@
|
||||
## Process this file with automake to produce Makefile.in
|
||||
|
||||
AUTOMAKE_OPTIONS = 1.6
|
||||
|
||||
# The name of the module.
|
||||
DOC_MODULE=gtk3
|
||||
|
||||
# The top-level SGML file.
|
||||
DOC_MAIN_SGML_FILE=gtk-docs.sgml
|
||||
|
||||
# Extra options to supply to gtkdoc-scan
|
||||
SCAN_OPTIONS=--deprecated-guards="GTK_ENABLE_BROKEN|GTK_DISABLE_DEPRECATED"
|
||||
|
||||
# The directory containing the source code. Relative to $(srcdir)
|
||||
DOC_SOURCE_DIR=$(top_srcdir)/gtk
|
||||
|
||||
# Used for dependencies
|
||||
HFILE_GLOB=$(top_srcdir)/gtk/*.h
|
||||
CFILE_GLOB=$(top_srcdir)/gtk/*.c
|
||||
|
||||
# Header files to ignore when scanning
|
||||
IGNORE_HFILES = \
|
||||
inspector \
|
||||
a11y \
|
||||
gtkaccelgroupprivate.h \
|
||||
gtkaccelmapprivate.h \
|
||||
gtkadjustmentprivate.h \
|
||||
gtkallocatedbitmaskprivate.h \
|
||||
gtkappchooserprivate.h \
|
||||
gtkapplicationaccelsprivate.h \
|
||||
gtkapplicationprivate.h \
|
||||
gtkbindingsprivate.h \
|
||||
gtkbitmaskprivate.h \
|
||||
gtkboxprivate.h \
|
||||
gtkbuilderprivate.h \
|
||||
gtkbuttonprivate.h \
|
||||
gtkcairoblurprivate.h \
|
||||
gtkcellareaboxcontextprivate.h \
|
||||
gtkclipboardprivate.h \
|
||||
gtkcolorchooserprivate.h \
|
||||
gtkcoloreditorprivate.h \
|
||||
gtkcolorplaneprivate.h \
|
||||
gtkcolorscaleprivate.h \
|
||||
gtkcolorswatchprivate.h \
|
||||
gtkcomboboxprivate.h \
|
||||
gtkcontainerprivate.h \
|
||||
gtkcssanimatedstyleprivate.h \
|
||||
gtkcssanimationprivate.h \
|
||||
gtkcssarrayvalueprivate.h \
|
||||
gtkcssbgsizevalueprivate.h \
|
||||
gtkcssbordervalueprivate.h \
|
||||
gtkcsscolorvalueprivate.h \
|
||||
gtkcsscornervalueprivate.h \
|
||||
gtkcsscustompropertyprivate.h \
|
||||
gtkcsseasevalueprivate.h \
|
||||
gtkcssenginevalueprivate.h \
|
||||
gtkcssenumvalueprivate.h \
|
||||
gtkcssiconthemevalueprivate.h \
|
||||
gtkcssimagebuiltinprivate.h \
|
||||
gtkcssimagecrossfadeprivate.h \
|
||||
gtkcssimagegradientprivate.h \
|
||||
gtkcssimageiconthemeprivate.h \
|
||||
gtkcssimagelinearprivate.h \
|
||||
gtkcssimageprivate.h \
|
||||
gtkcssimagescaledprivate.h \
|
||||
gtkcssimagesurfaceprivate.h \
|
||||
gtkcssimageurlprivate.h \
|
||||
gtkcssimagevalueprivate.h \
|
||||
gtkcssimagewin32private.h \
|
||||
gtkcssinheritvalueprivate.h \
|
||||
gtkcssinitialvalueprivate.h \
|
||||
gtkcsskeyframesprivate.h \
|
||||
gtkcsslookupprivate.h \
|
||||
gtkcssmatcherprivate.h \
|
||||
gtkcssnodeprivate.h \
|
||||
gtkcssnodedeclarationprivate.h \
|
||||
gtkcssnumbervalueprivate.h \
|
||||
gtkcsspathnodeprivate.h \
|
||||
gtkcssparserprivate.h \
|
||||
gtkcsspositionvalueprivate.h \
|
||||
gtkcssproviderprivate.h \
|
||||
gtkcssrepeatvalueprivate.h \
|
||||
gtkcssrgbavalueprivate.h \
|
||||
gtkcsssectionprivate.h \
|
||||
gtkcssselectorprivate.h \
|
||||
gtkcssshadowsvalueprivate.h \
|
||||
gtkcssshadowvalueprivate.h \
|
||||
gtkcssshorthandpropertyprivate.h\
|
||||
gtkcssstaticstyleprivate.h \
|
||||
gtkcssstringvalueprivate.h \
|
||||
gtkcssstylefuncsprivate.h \
|
||||
gtkcssstyleprivate.h \
|
||||
gtkcssstylepropertyprivate.h \
|
||||
gtkcsstransformvalueprivate.h \
|
||||
gtkcsstransientnodeprivate.h \
|
||||
gtkcsstransitionprivate.h \
|
||||
gtkcsstypedvalueprivate.h \
|
||||
gtkcsstypesprivate.h \
|
||||
gtkcssunsetvalueprivate.h \
|
||||
gtkcssvalueprivate.h \
|
||||
gtkcsswidgetnodeprivate.h \
|
||||
gtkdialogprivate.h \
|
||||
gtkentryprivate.h \
|
||||
gtkeventcontrollerprivate.h \
|
||||
gtkfilechooserprivate.h \
|
||||
gtkfilechooserwidgetprivate.h \
|
||||
gtkfontchooserprivate.h \
|
||||
gtkgesturedragprivate.h \
|
||||
gtkgesturelongpressprivate.h \
|
||||
gtkgesturemultipressprivate.h \
|
||||
gtkgesturepanprivate.h \
|
||||
gtkgestureprivate.h \
|
||||
gtkgesturerotateprivate.h \
|
||||
gtkgesturesingleprivate.h \
|
||||
gtkgestureswipeprivate.h \
|
||||
gtkgesturezoomprivate.h \
|
||||
gtkheaderbarprivate.h \
|
||||
gtkhslaprivate.h \
|
||||
gtkiconhelperprivate.h \
|
||||
gtkiconviewprivate.h \
|
||||
gtkimageprivate.h \
|
||||
gtkimmoduleprivate.h \
|
||||
gtklabelprivate.h \
|
||||
gtklockbuttonprivate.h \
|
||||
gtkmagnifierprivate.h \
|
||||
gtkmenubuttonprivate.h \
|
||||
gtkmenuitemprivate.h \
|
||||
gtkmenuprivate.h \
|
||||
gtkmenushellprivate.h \
|
||||
gtkmodulesprivate.h \
|
||||
gtkmountoperationprivate.h \
|
||||
gtkorientableprivate.h \
|
||||
gtkpixelcacheprivate.h \
|
||||
gtkplacessidebarprivate.h \
|
||||
gtkplacesviewprivate.h \
|
||||
gtkplacesviewrowprivate.h \
|
||||
gtkpopoverprivate.h \
|
||||
gtkprinter-private.h \
|
||||
gtkprintoperation-private.h \
|
||||
gtkprivate.h \
|
||||
gtkrangeprivate.h \
|
||||
gtkrecentchooserprivate.h \
|
||||
gtkrenderbackgroundprivate.h \
|
||||
gtkrenderborderprivate.h \
|
||||
gtkrendericonprivate.h \
|
||||
gtkrenderprivate.h \
|
||||
gtkroundedboxprivate.h \
|
||||
gtkscaleprivate.h \
|
||||
gtksearchengine.h \
|
||||
gtksearchenginemodel.h \
|
||||
gtksearchenginequartz.h \
|
||||
gtksearchenginesimple.h \
|
||||
gtksearchenginetracker.h \
|
||||
gtksearchentryprivate.h \
|
||||
gtkselectionprivate.h \
|
||||
gtksettingsprivate.h \
|
||||
gtksidebarrowprivate.h \
|
||||
gtksizegroup-private.h \
|
||||
gtksizerequestcacheprivate.h \
|
||||
gtksocketprivate.h \
|
||||
gtkstyleanimationprivate.h \
|
||||
gtkstylecascadeprivate.h \
|
||||
gtkstylecontextprivate.h \
|
||||
gtkstylepropertyprivate.h \
|
||||
gtkstyleproviderprivate.h \
|
||||
gtktextattributesprivate.h \
|
||||
gtktextchildprivate.h \
|
||||
gtktexthandleprivate.h \
|
||||
gtktextiterprivate.h \
|
||||
gtktextmarkprivate.h \
|
||||
gtktexttagprivate.h \
|
||||
gtktogglebuttonprivate.h \
|
||||
gtktoolbarprivate.h \
|
||||
gtktoolpaletteprivate.h \
|
||||
gtktooltipprivate.h \
|
||||
gtktooltipwindowprivate.h \
|
||||
gtktreeprivate.h \
|
||||
gtkwidgetprivate.h \
|
||||
gtkwin32themeprivate.h \
|
||||
gtkwindowprivate.h \
|
||||
fnmatch.h \
|
||||
gtkactionmuxer.h \
|
||||
gtkactionobserver.h \
|
||||
gtkactionobservable.h \
|
||||
gtk9slice.h \
|
||||
gtkanimationdescription.h \
|
||||
gtkbitmaskprivateimpl.h \
|
||||
gtkbookmarksmanager.h \
|
||||
gtkdbusgenerated.c \
|
||||
gtkdbusgenerated.h \
|
||||
gtkdebug.h \
|
||||
gtkactionhelper.h \
|
||||
gtkdndcursors.h \
|
||||
gtkfilechooserdefault.h \
|
||||
gtkfilechooserembed.h \
|
||||
gtkfilechooserentry.h \
|
||||
gtkfilechoosersettings.h \
|
||||
gtkfilechooserutils.h \
|
||||
gtkfilesystem.h \
|
||||
gtkfilesystemmodel.h \
|
||||
gtkfilesystemunix.h \
|
||||
gtkfilesystemwin32.h \
|
||||
gtkfontchooserutils.h \
|
||||
gtkiconcache.h \
|
||||
gtkiconcachevalidator.h \
|
||||
gtkiconthemeparser.h \
|
||||
gtkintl.h \
|
||||
gtkkeyhash.h \
|
||||
gtkkineticscrolling.h \
|
||||
gtkmarshal.h \
|
||||
gtkmnemonichash.h \
|
||||
gtkmenutracker.h \
|
||||
gtkmenutrackeritem.h \
|
||||
gtkmenusectionbox.h \
|
||||
gtkmodelmenu.h \
|
||||
gtkmodelmenuitem.h \
|
||||
gtkmodifierstyle.h \
|
||||
gtkpathbar.h \
|
||||
gtkprintbackend.h \
|
||||
gtkprinteroption.h \
|
||||
gtkprinteroptionset.h \
|
||||
gtkprinteroptionwidget.h \
|
||||
gtkprint-win32.h \
|
||||
gtkprintutils.h \
|
||||
gtkprivate.h \
|
||||
gtkprivatetypebuiltins.h \
|
||||
gtkquery.h \
|
||||
gtkrbtree.h \
|
||||
gtkrecentchooserdefault.h \
|
||||
gtkrecentchooserutils.h \
|
||||
gtksearchengine.h \
|
||||
gtksearchenginetracker.h \
|
||||
gtksearchenginesimple.h \
|
||||
gtksearchenginequartz.h \
|
||||
gtksequence.h \
|
||||
gtksocketprivate.h \
|
||||
gtktextbtree.h \
|
||||
gtktextbufferserialize.h \
|
||||
gtktextdisplay.h \
|
||||
gtktextlayout.h \
|
||||
gtktextsegment.h \
|
||||
gtktexttypes.h \
|
||||
gtktextutil.h \
|
||||
gtktimeline.h \
|
||||
gtkthemes.h \
|
||||
gtktrashmonitor.h \
|
||||
gtktrayicon.h \
|
||||
gtktreedatalist.h \
|
||||
gtktreemenu.h \
|
||||
gtktypebuiltins.h \
|
||||
gtkxembed.h \
|
||||
gtkwin32embed.h \
|
||||
gtkwin32embedwidget.h \
|
||||
gtkwindow-decorate.h \
|
||||
xdgmime \
|
||||
xembed.h
|
||||
|
||||
# CFLAGS and LDFLAGS for compiling scan program. Only needed
|
||||
# if $(DOC_MODULE).types is non-empty.
|
||||
AM_CPPFLAGS = \
|
||||
-I$(top_srcdir) \
|
||||
-I$(top_builddir) \
|
||||
-I$(top_builddir)/gdk \
|
||||
-DGTK_ENABLE_BROKEN \
|
||||
-Wno-deprecated-declarations \
|
||||
$(GTK_DEBUG_FLAGS) \
|
||||
$(GTK_DEP_CFLAGS)
|
||||
|
||||
CPPFLAGS += \
|
||||
-UGTK_DISABLE_SINGLE_INCLUDES
|
||||
|
||||
GTKDOC_LIBS = \
|
||||
$(top_builddir)/gdk/libgdk-3.la \
|
||||
$(top_builddir)/gtk/libgtk-3.la \
|
||||
$(GTK_DEP_LIBS)
|
||||
|
||||
|
||||
# Extra options to supply to gtkdoc-mkdb
|
||||
MKDB_OPTIONS=--output-format=xml --name-space=gtk --default-includes=gtk/gtk.h
|
||||
|
||||
# Extra SGML files that are included by $(DOC_MAIN_SGML_FILE)
|
||||
content_files = \
|
||||
broadway.xml \
|
||||
broadwayd.xml \
|
||||
building.sgml \
|
||||
compiling.sgml \
|
||||
css-overview.xml \
|
||||
css-properties.xml \
|
||||
drawing-model.xml \
|
||||
$(builddir)/getting_started.xml \
|
||||
glossary.xml \
|
||||
gtk3-demo-application.xml \
|
||||
gtk3-demo.xml \
|
||||
gtk3-icon-browser.xml \
|
||||
gtk3-widget-factory.xml \
|
||||
gtk-builder-tool.xml \
|
||||
gtk-encode-symbolic-svg.xml \
|
||||
gtk-launch.xml \
|
||||
gtk-query-immodules-3.0.xml \
|
||||
gtk-query-settings.xml \
|
||||
gtk-update-icon-cache.xml \
|
||||
input-handling.xml \
|
||||
migrating-2to3.xml \
|
||||
migrating-3xtoy.xml \
|
||||
migrating-checklist.sgml \
|
||||
migrating-GtkGrid.xml \
|
||||
migrating-GtkStyleContext.xml \
|
||||
migrating-smclient-GtkApplication.xml \
|
||||
migrating-unique-GtkApplication.xml \
|
||||
osx.sgml \
|
||||
overview.xml \
|
||||
question_index.sgml \
|
||||
resources.sgml \
|
||||
running.sgml \
|
||||
text_widget.sgml \
|
||||
tree_widget.sgml \
|
||||
version.xml \
|
||||
visual_index.xml \
|
||||
wayland.xml \
|
||||
windows.sgml \
|
||||
x11.sgml
|
||||
|
||||
expand_content_files = \
|
||||
compiling.sgml \
|
||||
drawing-model.xml \
|
||||
$(builddir)/getting_started.xml \
|
||||
glossary.xml \
|
||||
input-handling.xml \
|
||||
migrating-2to3.xml \
|
||||
migrating-3xtoy.xml \
|
||||
migrating-checklist.sgml \
|
||||
migrating-GtkGrid.xml \
|
||||
migrating-GtkStyleContext.xml \
|
||||
migrating-smclient-GtkApplication.xml \
|
||||
migrating-unique-GtkApplication.xml \
|
||||
question_index.sgml \
|
||||
text_widget.sgml \
|
||||
tree_widget.sgml
|
||||
|
||||
# Images to copy into HTML directory
|
||||
HTML_IMAGES = \
|
||||
$(srcdir)/images/aboutdialog.png \
|
||||
$(srcdir)/images/accel-label.png \
|
||||
$(srcdir)/images/action-bar.png \
|
||||
$(srcdir)/images/appchooserbutton.png \
|
||||
$(srcdir)/images/appchooserdialog.png \
|
||||
$(srcdir)/images/assistant.png \
|
||||
$(srcdir)/images/box-packing.png \
|
||||
$(srcdir)/images/box-expand.png \
|
||||
$(srcdir)/images/button.png \
|
||||
$(srcdir)/images/check-button.png \
|
||||
$(srcdir)/images/color-button.png \
|
||||
$(srcdir)/images/colorchooser.png \
|
||||
$(srcdir)/images/combo-box.png \
|
||||
$(srcdir)/images/combo-box-entry.png \
|
||||
$(srcdir)/images/combo-box-text.png \
|
||||
$(srcdir)/images/entry.png \
|
||||
$(srcdir)/images/figure-hierarchical-drawing.png \
|
||||
$(srcdir)/images/figure-windowed-label.png \
|
||||
$(srcdir)/images/file-button.png \
|
||||
$(srcdir)/images/filechooser.png \
|
||||
$(srcdir)/images/font-button.png \
|
||||
$(srcdir)/images/fontchooser.png \
|
||||
$(srcdir)/images/frame.png \
|
||||
$(srcdir)/images/glarea.png \
|
||||
$(srcdir)/images/headerbar.png \
|
||||
$(srcdir)/images/icon-view.png \
|
||||
$(srcdir)/images/image.png \
|
||||
$(srcdir)/images/info-bar.png \
|
||||
$(srcdir)/images/label.png \
|
||||
$(srcdir)/images/levelbar.png \
|
||||
$(srcdir)/images/link-button.png \
|
||||
$(srcdir)/images/list-and-tree.png \
|
||||
$(srcdir)/images/lock-button.png \
|
||||
$(srcdir)/images/lockbutton.png \
|
||||
$(srcdir)/images/lockbutton-locked.png \
|
||||
$(srcdir)/images/lockbutton-unlocked.png \
|
||||
$(srcdir)/images/lockbutton-sorry.png \
|
||||
$(srcdir)/images/menubar.png \
|
||||
$(srcdir)/images/menu-button.png \
|
||||
$(srcdir)/images/messagedialog.png \
|
||||
$(srcdir)/images/multiline-text.png \
|
||||
$(srcdir)/images/notebook.png \
|
||||
$(srcdir)/images/panes.png \
|
||||
$(srcdir)/images/pagesetupdialog.png \
|
||||
$(srcdir)/images/placessidebar.png \
|
||||
$(srcdir)/images/popup-anchors.png \
|
||||
$(srcdir)/images/popup-at.svg \
|
||||
$(srcdir)/images/popup-flip.png \
|
||||
$(srcdir)/images/popup-slide.png \
|
||||
$(srcdir)/images/printdialog.png \
|
||||
$(srcdir)/images/progressbar.png \
|
||||
$(srcdir)/images/radio-group.png \
|
||||
$(srcdir)/images/recentchooserdialog.png \
|
||||
$(srcdir)/images/scales.png \
|
||||
$(srcdir)/images/scrollbar.png \
|
||||
$(srcdir)/images/scrolledwindow.png \
|
||||
$(srcdir)/images/search-bar.png \
|
||||
$(srcdir)/images/search-entry.png \
|
||||
$(srcdir)/images/separator.png \
|
||||
$(srcdir)/images/sidebar.png \
|
||||
$(srcdir)/images/spinbutton.png \
|
||||
$(srcdir)/images/spinner.png \
|
||||
$(srcdir)/images/stack.png \
|
||||
$(srcdir)/images/stackswitcher.png \
|
||||
$(srcdir)/images/statusbar.png \
|
||||
$(srcdir)/images/toggle-button.png \
|
||||
$(srcdir)/images/toolbar.png \
|
||||
$(srcdir)/images/toolpalette.png \
|
||||
$(srcdir)/images/tree-view-coordinates.png \
|
||||
$(srcdir)/images/volumebutton.png \
|
||||
$(srcdir)/images/window.png \
|
||||
$(srcdir)/images/layout-btlr.png \
|
||||
$(srcdir)/images/layout-btrl.png \
|
||||
$(srcdir)/images/layout-lrbt.png \
|
||||
$(srcdir)/images/layout-lrtb.png \
|
||||
$(srcdir)/images/layout-rlbt.png \
|
||||
$(srcdir)/images/layout-rltb.png \
|
||||
$(srcdir)/images/layout-tblr.png \
|
||||
$(srcdir)/images/layout-tbrl.png \
|
||||
$(srcdir)/images/widget-hvalign.png \
|
||||
$(srcdir)/images/window-default.png \
|
||||
$(srcdir)/images/hello-world.png \
|
||||
$(srcdir)/images/grid-packing.png \
|
||||
$(srcdir)/images/drawing.png \
|
||||
$(srcdir)/images/switch.png \
|
||||
$(srcdir)/images/linear.png \
|
||||
$(srcdir)/images/ease.png \
|
||||
$(srcdir)/images/ease-in-out.png \
|
||||
$(srcdir)/images/ease-in.png \
|
||||
$(srcdir)/images/ease-out.png \
|
||||
$(srcdir)/images/gradient1.png \
|
||||
$(srcdir)/images/gradient2.png \
|
||||
$(srcdir)/images/gradient3.png \
|
||||
$(srcdir)/images/gradient4.png \
|
||||
$(srcdir)/images/border1.png \
|
||||
$(srcdir)/images/border2.png \
|
||||
$(srcdir)/images/border3.png \
|
||||
$(srcdir)/images/slices.png \
|
||||
$(srcdir)/images/checks.png \
|
||||
$(srcdir)/images/options.png \
|
||||
$(srcdir)/images/arrows.png \
|
||||
$(srcdir)/images/expanders.png \
|
||||
$(srcdir)/images/background.png \
|
||||
$(srcdir)/images/frames.png \
|
||||
$(srcdir)/images/frame-gap.png \
|
||||
$(srcdir)/images/sliders.png \
|
||||
$(srcdir)/images/focus.png \
|
||||
$(srcdir)/images/handles.png \
|
||||
$(srcdir)/images/extensions.png \
|
||||
$(srcdir)/images/numerableicon.png \
|
||||
$(srcdir)/images/numerableicon2.png \
|
||||
$(srcdir)/images/bloatpad-osx.png \
|
||||
$(srcdir)/images/bloatpad-gnome.png \
|
||||
$(srcdir)/images/bloatpad-xfce.png \
|
||||
$(srcdir)/images/down-center.png \
|
||||
$(srcdir)/images/down-end.png \
|
||||
$(srcdir)/images/down-start.png \
|
||||
$(srcdir)/images/left-center.png \
|
||||
$(srcdir)/images/left-end.png \
|
||||
$(srcdir)/images/left-start.png \
|
||||
$(srcdir)/images/right-center.png \
|
||||
$(srcdir)/images/right-end.png \
|
||||
$(srcdir)/images/right-start.png \
|
||||
$(srcdir)/images/up-center.png \
|
||||
$(srcdir)/images/up-end.png \
|
||||
$(srcdir)/images/up-start.png \
|
||||
$(srcdir)/images/list-box.png \
|
||||
$(srcdir)/images/getting-started-app1.png \
|
||||
$(srcdir)/images/getting-started-app2.png \
|
||||
$(srcdir)/images/getting-started-app3.png \
|
||||
$(srcdir)/images/getting-started-app4.png \
|
||||
$(srcdir)/images/getting-started-app6.png \
|
||||
$(srcdir)/images/getting-started-app7.png \
|
||||
$(srcdir)/images/getting-started-app8.png \
|
||||
$(srcdir)/images/getting-started-app9.png \
|
||||
$(srcdir)/images/getting-started-app10.png \
|
||||
$(srcdir)/images/exampleapp.png \
|
||||
$(srcdir)/images/flow-box.png \
|
||||
$(srcdir)/images/inspector.png \
|
||||
$(srcdir)/images/gedit-shortcuts.png \
|
||||
$(srcdir)/images/clocks-shortcuts.png \
|
||||
$(srcdir)/images/builder-shortcuts.png
|
||||
|
||||
if ENABLE_DOC_CROSS_REFERENCES
|
||||
# Extra options to supply to gtkdoc-fixref
|
||||
FIXXREF_OPTIONS=--extra-dir=../gdk/html \
|
||||
--extra-dir=$(GLIB_PREFIX)/share/gtk-doc/html/gobject \
|
||||
--extra-dir=$(GLIB_PREFIX)/share/gtk-doc/html/glib \
|
||||
--extra-dir=$(GLIB_PREFIX)/share/gtk-doc/html/gio \
|
||||
--extra-dir=$(ATK_PREFIX)/share/gtk-doc/html/atk \
|
||||
--extra-dir=$(PANGO_PREFIX)/share/gtk-doc/html/pango \
|
||||
--extra-dir=$(CAIRO_PREFIX)/share/gtk-doc/html/cairo
|
||||
endif
|
||||
|
||||
include $(top_srcdir)/gtk-doc.make
|
||||
|
||||
# Other files to distribute
|
||||
EXTRA_DIST += version.xml.in gtk3.types.in getting_started.xml.in
|
||||
|
||||
########################################################################
|
||||
|
||||
man_MANS = \
|
||||
gtk-query-immodules-3.0.1 \
|
||||
gtk-update-icon-cache.1 \
|
||||
gtk-encode-symbolic-svg.1 \
|
||||
gtk-launch.1 \
|
||||
gtk3-demo.1 \
|
||||
gtk3-demo-application.1 \
|
||||
gtk3-widget-factory.1 \
|
||||
gtk3-icon-browser.1 \
|
||||
broadwayd.1 \
|
||||
gtk-builder-tool.1 \
|
||||
gtk-query-settings.1
|
||||
|
||||
if ENABLE_MAN
|
||||
|
||||
XSLTPROC_FLAGS = \
|
||||
--nonet \
|
||||
--stringparam man.output.quietly 1 \
|
||||
--stringparam funcsynopsis.style ansi \
|
||||
--stringparam man.th.extra1.suppress 1 \
|
||||
--stringparam man.authors.section.enabled 0 \
|
||||
--stringparam man.copyright.section.enabled 0
|
||||
|
||||
.xml.1:
|
||||
$(AM_V_GEN) $(XSLTPROC) $(XSLTPROC_FLAGS) http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl $<
|
||||
|
||||
dist-local-check-mans-enabled:
|
||||
if grep "Man generation disabled" $(man_MANS) >/dev/null; then $(RM) $(man_MANS); fi
|
||||
|
||||
else
|
||||
|
||||
$(man_MANS):
|
||||
echo Man generation disabled. Creating dummy $@. Configure with --enable-man to enable it.
|
||||
echo Man generation disabled. Remove this file, configure with --enable-man, and rebuild > $@
|
||||
|
||||
dist-local-check-mans-enabled:
|
||||
echo "*** --enable-man must be used in order to make dist"
|
||||
false
|
||||
|
||||
endif
|
||||
|
||||
MAINTAINERCLEANFILES = $(man_MANS) $(BUILT_SOURCES)
|
||||
|
||||
EXTRA_DIST += \
|
||||
$(man_MANS) \
|
||||
meson.build
|
||||
|
||||
if ENABLE_GTK_DOC
|
||||
TESTS_ENVIRONMENT = cd $(srcdir) && \
|
||||
DOC_MODULE=$(DOC_MODULE) DOC_MAIN_SGML_FILE=$(DOC_MAIN_SGML_FILE) \
|
||||
SRCDIR=$(abs_srcdir) BUILDDIR=$(abs_builddir)
|
||||
#TESTS = $(GTKDOC_CHECK)
|
||||
endif
|
||||
|
||||
dist-hook-local: dist-local-check-mans-enabled all-local
|
||||
|
||||
gtk-docs-clean: clean
|
||||
cd $(srcdir) && rm -rf xml html
|
||||
|
||||
-include $(top_srcdir)/git.mk
|
||||
@@ -35,64 +35,37 @@ How to compile GTK+ itself
|
||||
already.
|
||||
</para>
|
||||
<para>
|
||||
On UNIX-like systems GTK+ uses the standard GNU build system,
|
||||
using <application>autoconf</application> for package
|
||||
configuration and resolving portability issues,
|
||||
<application>automake</application> for building makefiles that
|
||||
comply with the GNU Coding Standards, and
|
||||
<application>libtool</application> for building shared libraries
|
||||
on multiple platforms.
|
||||
</para>
|
||||
<para>
|
||||
If you are building GTK+ from the distributed source packages,
|
||||
then you won't need these tools installed; the necessary pieces
|
||||
of the tools are already included in the source packages. But
|
||||
it's useful to know a bit about how packages that use these
|
||||
tools work. A source package is distributed as a
|
||||
<literal>tar.bz2</literal> or <literal>tar.xz</literal> file
|
||||
which you unpack into a directory full of the source files as follows:
|
||||
On all supported platforms, GTK+ uses the Meson build system.
|
||||
</para>
|
||||
<programlisting>
|
||||
tar xvfj gtk+-3.2.0.tar.bz2
|
||||
tar xvfJ gtk+-3.2.0.tar.xz
|
||||
tar xvfJ gtk+-3.24.0.tar.xz
|
||||
</programlisting>
|
||||
<para>
|
||||
In the toplevel directory that is created, there will be
|
||||
a shell script called <filename>configure</filename> which
|
||||
you then run to take the template makefiles called
|
||||
<filename>Makefile.in</filename> in the package and create
|
||||
makefiles customized for your operating system.
|
||||
The <filename>configure</filename> script can be passed
|
||||
various command line arguments to determine how the package
|
||||
is built and installed. The most commonly useful argument is
|
||||
the <systemitem>--prefix</systemitem> argument which
|
||||
determines where the package is installed. To install a package
|
||||
in <filename>/opt/gtk</filename> you would run configure as:
|
||||
Once you have extracted the files from the release archive, and
|
||||
you entered the source directory, you can use the <command>meson</command>
|
||||
command to configure the project.
|
||||
</para>
|
||||
<programlisting>
|
||||
./configure --prefix=/opt/gtk
|
||||
meson setup --prefix=/opt/gtk _builddir .
|
||||
</programlisting>
|
||||
<para>
|
||||
A full list of options can be found by running
|
||||
<filename>configure</filename> with the
|
||||
<systemitem>--help</systemitem> argument. In general, the defaults are
|
||||
right and should be trusted. After you've run
|
||||
<filename>configure</filename>, you then run the
|
||||
<command>make</command> command to build the package and install
|
||||
it.
|
||||
<command>meson configure</command> from within the build directory.
|
||||
In general, the defaults are right and should be trusted.
|
||||
</para>
|
||||
<para>
|
||||
After you've run <command>meson setup</command>, you then run the
|
||||
<command>meson compile</command> command to build the project and
|
||||
install it.
|
||||
</para>
|
||||
<programlisting>
|
||||
make
|
||||
make install
|
||||
meson compile -C _builddir
|
||||
meson install -C _builddir
|
||||
</programlisting>
|
||||
<para>
|
||||
If you don't have permission to write to the directory you are
|
||||
installing in, you may have to change to root temporarily before
|
||||
running <literal>make install</literal>. Also, if you are
|
||||
installing in a system directory, on some systems (such as
|
||||
Linux), you will need to run <command>ldconfig</command> after
|
||||
<literal>make install</literal> so that the newly installed
|
||||
libraries will be found.
|
||||
running <command>meson install</command>.
|
||||
</para>
|
||||
<para>
|
||||
Several environment variables are useful to pass to set before
|
||||
@@ -131,10 +104,10 @@ How to compile GTK+ itself
|
||||
<para>
|
||||
Before you can compile the GTK+ widget toolkit, you need to have
|
||||
various other tools and libraries installed on your
|
||||
system. The two tools needed during the build process (as
|
||||
system. The main tool needed during the build process (as
|
||||
differentiated from the tools used in when creating GTK+
|
||||
mentioned above such as <application>autoconf</application>)
|
||||
are <command>pkg-config</command> and GNU make.
|
||||
mentioned above such as <application>meson</application>)
|
||||
is <command>pkg-config</command>.
|
||||
</para>
|
||||
<itemizedlist>
|
||||
<listitem>
|
||||
@@ -148,17 +121,6 @@ How to compile GTK+ itself
|
||||
needed for that library along with version number information.)
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
The GTK+ makefiles will mostly work with different versions
|
||||
of <command>make</command>, however, there tends to be
|
||||
a few incompatibilities, so the GTK+ team recommends
|
||||
installing <ulink url="https://www.gnu.org/software/make">GNU
|
||||
make</ulink> if you don't already have it on your system
|
||||
and using it. (It may be called <command>gmake</command>
|
||||
rather than <command>make</command>.)
|
||||
</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
<para>
|
||||
Some of the libraries that GTK+ depends on are maintained by
|
||||
@@ -168,17 +130,15 @@ How to compile GTK+ itself
|
||||
<itemizedlist>
|
||||
<listitem>
|
||||
<para>
|
||||
The GLib library provides core non-graphical functionality
|
||||
such as high level data types, Unicode manipulation, and
|
||||
an object and type system to C programs. It is available
|
||||
from the <ulink url="https://ftp.gtk.org/pub/glib/">GTK+
|
||||
FTP site</ulink> or
|
||||
<ulink url="https://download.gnome.org/sources/glib/">here</ulink>.
|
||||
The <ulink url="https://gitlab.gnome.org/GNOME/glib">GLib library</ulink>
|
||||
provides core non-graphical functionality such as high level data types,
|
||||
Unicode manipulation, and an object and type system to C programs. It is
|
||||
available <ulink url="https://download.gnome.org/sources/glib/">here</ulink>.
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
The <ulink url="https://git.gnome.org/browse/gdk-pixbuf/">GdkPixbuf library</ulink>
|
||||
The <ulink url="https://gitlab.gnome.org/GNOME/gdk-pixbuf/">GdkPixbuf library</ulink>
|
||||
provides facilities for loading images in a variety of file formats.
|
||||
It is available
|
||||
<ulink url="https://download.gnome.org/sources/gdk-pixbuf/">here</ulink>.
|
||||
@@ -186,14 +146,15 @@ How to compile GTK+ itself
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
<ulink url="http://www.pango.org">Pango</ulink> is a library
|
||||
<ulink url="https://gitlab.gnome.org/GNOME/pango">Pango</ulink> is a library
|
||||
for internationalized text handling. It is available
|
||||
<ulink url="https://download.gnome.org/sources/pango/">here</ulink>.
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
ATK is the Accessibility Toolkit. It provides a set of generic
|
||||
<ulink url="https://gitlab.gnome.org/GNOME/atk">ATK</ulink> is the
|
||||
Accessibility Toolkit. It provides a set of generic
|
||||
interfaces allowing accessibility technologies such as
|
||||
screen readers to interact with a graphical user interface.
|
||||
It is available
|
||||
@@ -202,7 +163,7 @@ How to compile GTK+ itself
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
<ulink url="https://wiki.gnome.org/Projects/GObjectIntrospection">Gobject Introspection</ulink>
|
||||
<ulink url="https://gitlab.gnome.org/GNOME/gobject-introspection">Gobject Introspection</ulink>
|
||||
is a framework for making introspection data available to
|
||||
language bindings. It is available
|
||||
<ulink url="https://download.gnome.org/sources/gobject-introspection/">here</ulink>.
|
||||
@@ -304,244 +265,80 @@ How to compile GTK+ itself
|
||||
GTK+ installs.
|
||||
</para>
|
||||
<para>
|
||||
If one of the <filename>configure</filename> scripts fails or running
|
||||
<command>make</command> fails, look closely at the error
|
||||
messages printed; these will often provide useful information
|
||||
as to what went wrong. When <filename>configure</filename>
|
||||
fails, extra information, such as errors that a test compilation
|
||||
ran into, is found in the file <filename>config.log</filename>.
|
||||
Looking at the last couple of hundred lines in this file will
|
||||
frequently make clear what went wrong. If all else fails, you
|
||||
can ask for help on the gtk-list mailing list.
|
||||
See <xref linkend="gtk-resources"/> for more information.
|
||||
If either the <command>meson setup</command> or the
|
||||
<command>meson compile</command> commands fail, look closely
|
||||
at the error messages printed; these will often provide useful
|
||||
information as to what went wrong.
|
||||
</para>
|
||||
</refsect1>
|
||||
<refsect1 id="extra-configuration-options">
|
||||
|
||||
<refsect1 id="extra-configuration-options">
|
||||
<title>Extra Configuration Options</title>
|
||||
|
||||
<para>
|
||||
In addition to the normal options, the
|
||||
<command>configure</command> script for the GTK+ library
|
||||
supports a number of additional arguments. (Command line
|
||||
arguments for the other GTK+ libraries are described in
|
||||
the documentation distributed with the those libraries.)
|
||||
In addition to the standard <command>meson</command> options
|
||||
when configuring the GTK+ project, you have a number of
|
||||
additional arguments. (Command line arguments for the other
|
||||
libraries are described in the documentation distributed with
|
||||
the those libraries.)
|
||||
|
||||
<cmdsynopsis>
|
||||
<command>configure</command>
|
||||
<command>meson setup</command>
|
||||
<sbr/>
|
||||
<group>
|
||||
<arg choice="plain">--disable-modules</arg>
|
||||
<arg choice="plain">--enable-modules</arg>
|
||||
<arg choice="plain">-Dxinerama=[yes/no/auto]</arg>
|
||||
</group>
|
||||
<sbr/>
|
||||
<group>
|
||||
<arg>--with-included-immodules=MODULE1,MODULE2,...</arg>
|
||||
<arg choice="plain">-Dgtk_doc=[false/true]</arg>
|
||||
</group>
|
||||
<sbr/>
|
||||
<group>
|
||||
<arg choice="plain">--enable-debug=[no/minimum/yes]</arg>
|
||||
<arg choice="plain">-Dprint_backends=["cups,file,lpr,papi,test,auto"]</arg>
|
||||
</group>
|
||||
<sbr/>
|
||||
<group>
|
||||
<arg choice="plain">--disable-Bsymbolic</arg>
|
||||
<arg choice="plain">--enable-Bsymbolic</arg>
|
||||
<arg choice="plain">-Dx11_backend=[false/true]</arg>
|
||||
</group>
|
||||
<sbr/>
|
||||
<group>
|
||||
<arg choice="plain">--disable-xkb</arg>
|
||||
<arg choice="plain">--enable-xkb</arg>
|
||||
<arg choice="plain">-Dwin32_backend=[false/true]</arg>
|
||||
</group>
|
||||
<sbr/>
|
||||
<group>
|
||||
<arg choice="plain">--disable-xinerama</arg>
|
||||
<arg choice="plain">--enable-xinerama</arg>
|
||||
<arg choice="plain">-Dquartz_backend=[false/true]</arg>
|
||||
</group>
|
||||
<sbr/>
|
||||
<group>
|
||||
<arg choice="plain">--disable-gtk-doc</arg>
|
||||
<arg choice="plain">--enable-gtk-doc</arg>
|
||||
<arg choice="plain">-Dbroadway_backend=[false/true]</arg>
|
||||
</group>
|
||||
<sbr/>
|
||||
<group>
|
||||
<arg choice="plain">--disable-cups</arg>
|
||||
<arg choice="plain">--enable-cups</arg>
|
||||
<arg choice="plain">-Dwayland_backend=[false/true]</arg>
|
||||
</group>
|
||||
<sbr/>
|
||||
<group>
|
||||
<arg choice="plain">--disable-papi</arg>
|
||||
<arg choice="plain">--enable-papi</arg>
|
||||
<arg choice="plain">-Dintrospection=[false/true]</arg>
|
||||
</group>
|
||||
<sbr/>
|
||||
<group>
|
||||
<arg choice="plain">--enable-xinput</arg>
|
||||
<arg choice="plain">--disable-xinput</arg>
|
||||
</group>
|
||||
<sbr/>
|
||||
<group>
|
||||
<arg choice="plain">--enable-packagekit</arg>
|
||||
<arg choice="plain">--disable-packagekit</arg>
|
||||
</group>
|
||||
<sbr/>
|
||||
<group>
|
||||
<arg choice="plain">--enable-x11-backend</arg>
|
||||
<arg choice="plain">--disable-x11-backend</arg>
|
||||
</group>
|
||||
<sbr/>
|
||||
<group>
|
||||
<arg choice="plain">--enable-win32-backend</arg>
|
||||
<arg choice="plain">--disable-win32-backend</arg>
|
||||
</group>
|
||||
<sbr/>
|
||||
<group>
|
||||
<arg choice="plain">--enable-quartz-backend</arg>
|
||||
<arg choice="plain">--disable-quartz-backend</arg>
|
||||
</group>
|
||||
<sbr/>
|
||||
<group>
|
||||
<arg choice="plain">--enable-broadway-backend</arg>
|
||||
<arg choice="plain">--disable-broadway-backend</arg>
|
||||
</group>
|
||||
<sbr/>
|
||||
<group>
|
||||
<arg choice="plain">--enable-wayland-backend</arg>
|
||||
<arg choice="plain">--disable-wayland-backend</arg>
|
||||
</group>
|
||||
<sbr/>
|
||||
<group>
|
||||
<arg choice="plain">--enable-introspection=[no/auto/yes]</arg>
|
||||
</group>
|
||||
<sbr/>
|
||||
<group>
|
||||
<arg choice="plain">--enable-installed-tests</arg>
|
||||
<arg choice="plain">--disable-installed-tests</arg>
|
||||
<arg choice="plain">-Dinstalled_tests=[false/true]</arg>
|
||||
</group>
|
||||
</cmdsynopsis>
|
||||
</para>
|
||||
|
||||
<formalpara>
|
||||
<title><systemitem>--disable-modules</systemitem> and
|
||||
<systemitem>--enable-modules</systemitem></title>
|
||||
<title><systemitem>-Dxinerama</systemitem></title>
|
||||
|
||||
<para>
|
||||
Normally GTK+ will try to build the input method modules
|
||||
as little shared libraries that are loaded on demand.
|
||||
The <systemitem>--disable-modules</systemitem> argument
|
||||
indicates that they should all be built statically
|
||||
into the GTK+ library instead. This is useful for
|
||||
people who need to produce statically-linked binaries.
|
||||
If neither <systemitem>--disable-modules</systemitem> nor
|
||||
<systemitem>--enable-modules</systemitem> is specified,
|
||||
then the <command>configure</command> script will try to
|
||||
auto-detect whether shared modules work on your system.
|
||||
By default GTK will try to link against the Xinerama libraries
|
||||
if they are found. This option can be used to explicitly control
|
||||
whether Xinerama should be used.
|
||||
</para>
|
||||
</formalpara>
|
||||
|
||||
<formalpara>
|
||||
<title><systemitem>--with-included-immodules</systemitem></title>
|
||||
|
||||
<para>
|
||||
This option allows you to specify which input method modules you
|
||||
want to include directly into the GTK+ shared library, as opposed
|
||||
to building them as loadable modules.
|
||||
</para>
|
||||
</formalpara>
|
||||
|
||||
<formalpara>
|
||||
<title><systemitem>--enable-debug</systemitem></title>
|
||||
|
||||
<para>
|
||||
Turns on various amounts of debugging support. Setting this to
|
||||
'no' disables g_assert(), g_return_if_fail(), g_return_val_if_fail() and all cast checks between different object types. Setting it
|
||||
to 'minimum' disables only cast checks. Setting it to 'yes' enables
|
||||
<link linkend="GTK-Debug-Options">runtime debugging</link>.
|
||||
The default is 'minimum'.
|
||||
Note that 'no' is fast, but dangerous as it tends to destabilize
|
||||
even mostly bug-free software by changing the effect of many bugs
|
||||
from simple warnings into fatal crashes. Thus
|
||||
<option>--enable-debug=no</option> should <emphasis>not</emphasis>
|
||||
be used for stable releases of GTK+.
|
||||
</para>
|
||||
</formalpara>
|
||||
|
||||
<formalpara>
|
||||
<title><systemitem>--disable-Bsymbolic</systemitem> and
|
||||
<systemitem>--enable-Bsymbolic</systemitem></title>
|
||||
<para>
|
||||
The option <systemitem>--disable-Bsymbolic</systemitem>
|
||||
turns off the use of the -Bsymbolic-functions linker flag.
|
||||
This is only necessary if you want to override GTK+ functions
|
||||
by using <envar>LD_PRELOAD</envar>.
|
||||
</para>
|
||||
</formalpara>
|
||||
|
||||
<formalpara>
|
||||
<title><systemitem>--enable-explicit-deps</systemitem> and
|
||||
<systemitem>--disable-explicit-deps</systemitem></title>
|
||||
<para>
|
||||
If <systemitem>--enable-explicit-deps</systemitem> is
|
||||
specified then GTK+ will write the full set of libraries
|
||||
that GTK+ depends upon into its <literal>.pc</literal> files to be used when
|
||||
programs depending on GTK+ are linked. Otherwise, GTK+
|
||||
only will include the GTK+ libraries themselves, and
|
||||
will depend on system library dependency facilities to
|
||||
bring in the other libraries.
|
||||
By default GTK+ will disable explicit dependencies unless
|
||||
it detects that they are needed on the system. (If you
|
||||
specify <systemitem>--enable-static</systemitem> to force
|
||||
building of static libraries, then explicit dependencies
|
||||
will be written since library dependencies don't work
|
||||
for static libraries.) Specifying
|
||||
<systemitem>--enable-explicit-deps</systemitem> or
|
||||
<systemitem>--enable-static</systemitem> can cause
|
||||
compatibility
|
||||
problems when libraries that GTK+ depends upon change
|
||||
their versions, and should be avoided if possible.
|
||||
</para>
|
||||
</formalpara>
|
||||
|
||||
<formalpara>
|
||||
<title><systemitem>--disable-xkb</systemitem> and
|
||||
<systemitem>--enable-xkb</systemitem></title>
|
||||
|
||||
<para>
|
||||
By default the <command>configure</command> script will try
|
||||
to auto-detect whether the XKB extension is supported by
|
||||
the X libraries GTK+ is linked with.
|
||||
These options can be used to explicitly control whether
|
||||
GTK+ will support the XKB extension.
|
||||
</para>
|
||||
</formalpara>
|
||||
|
||||
<formalpara>
|
||||
<title><systemitem>--disable-xinerama</systemitem> and
|
||||
<systemitem>--enable-xinerama</systemitem></title>
|
||||
|
||||
<para>
|
||||
By default the <command>configure</command> script will try
|
||||
to link against the Xinerama libraries if they are found.
|
||||
These options can be used to explicitly control whether
|
||||
Xinerama should be used.
|
||||
</para>
|
||||
</formalpara>
|
||||
|
||||
<formalpara>
|
||||
<title><systemitem>--disable-xinput</systemitem> and
|
||||
<systemitem>--enable-xinput</systemitem></title>
|
||||
<para>
|
||||
Controls whether GTK+ is built with support for the XInput
|
||||
or XInput2 extension. These extensions provide an extended
|
||||
interface to input devices such as graphics tablets.
|
||||
When this support is compiled in, specially written
|
||||
GTK+ programs can get access to subpixel positions,
|
||||
multiple simultaneous input devices, and extra "axes"
|
||||
provided by the device such as pressure and tilt
|
||||
information.
|
||||
</para>
|
||||
</formalpara>
|
||||
|
||||
<formalpara>
|
||||
<title><systemitem>--disable-gtk-doc</systemitem> and
|
||||
<systemitem>--enable-gtk-doc</systemitem></title>
|
||||
<title><systemitem>-Dgtk_doc</systemitem></title>
|
||||
|
||||
<para>
|
||||
The <application>gtk-doc</application> package is
|
||||
@@ -552,88 +349,57 @@ How to compile GTK+ itself
|
||||
<application>gtk-doc</application> installed and
|
||||
are modifying GTK+, you may want to enable
|
||||
<application>gtk-doc</application> support by passing
|
||||
in <systemitem>--enable-gtk-doc</systemitem>. If not
|
||||
in <systemitem>-Dgtk_doc=true</systemitem>. If not
|
||||
enabled, pre-generated HTML files distributed with GTK+
|
||||
will be installed.
|
||||
</para>
|
||||
</formalpara>
|
||||
|
||||
<formalpara>
|
||||
<title><systemitem>--disable-cups</systemitem> and
|
||||
<systemitem>--enable-cups</systemitem></title>
|
||||
<title><systemitem>-Dprint_backends</systemitem></title>
|
||||
|
||||
<para>
|
||||
By default the <command>configure</command> script will try
|
||||
to build the cups print backend if the cups libraries are found.
|
||||
These options can be used to explicitly control whether
|
||||
the cups print backend should be built.
|
||||
By default GTK will try to build the appropriate print backend
|
||||
for the system. You can specify the print backends manually to
|
||||
explicitly control which backends should be build.
|
||||
</para>
|
||||
</formalpara>
|
||||
|
||||
<formalpara>
|
||||
<title><systemitem>--disable-papi</systemitem> and
|
||||
<systemitem>--enable-papi</systemitem></title>
|
||||
<title><systemitem>-Dx11_backend</systemitem>,
|
||||
<systemitem>-Dwin32_backend</systemitem>,
|
||||
<systemitem>-Dquartz_backend</systemitem>,
|
||||
<systemitem>-Dbroadway_backend</systemitem>,
|
||||
<systemitem>-Dwayland_backend</systemitem></title>
|
||||
|
||||
<para>
|
||||
By default the <command>configure</command> script will try
|
||||
to build the papi print backend if the papi libraries are found.
|
||||
These options can be used to explicitly control whether
|
||||
the papi print backend should be built.
|
||||
</para>
|
||||
</formalpara>
|
||||
|
||||
<formalpara>
|
||||
<title><systemitem>--disable-packagekit</systemitem> and
|
||||
<systemitem>--enable-packagekit</systemitem></title>
|
||||
<para>
|
||||
By default the <command>configure</command> script will try
|
||||
to build the PackageKit support for the open-with dialog if
|
||||
the PackageKit libraries are found.
|
||||
These options can be used to explicitly control whether
|
||||
PackageKit support should be built.
|
||||
</para>
|
||||
</formalpara>
|
||||
|
||||
<formalpara>
|
||||
<title><systemitem>--enable-x11-backend</systemitem>,
|
||||
<systemitem>--disable-x11-backend</systemitem>,
|
||||
<systemitem>--enable-win32-backend</systemitem>,
|
||||
<systemitem>--disable-win32-backend</systemitem>,
|
||||
<systemitem>--enable-quartz-backend</systemitem>,
|
||||
<systemitem>--disable-quartz-backend</systemitem>,
|
||||
<systemitem>--enable-broadway-backend</systemitem>,
|
||||
<systemitem>--disable-broadway-backend</systemitem>,
|
||||
<systemitem>--enable-wayland-backend</systemitem>,
|
||||
<systemitem>--disable-wayland-backend</systemitem></title>
|
||||
|
||||
<para>
|
||||
Enables specific backends for GDK. If none of these options
|
||||
Enable specific backends for GDK. If none of these options
|
||||
are given, the x11 backend will be enabled by default,
|
||||
unless the platform is Windows, in which case the default is
|
||||
win32. If any backend is explicitly enabled or disabled, no
|
||||
other platform will be enabled automatically. Other
|
||||
supported backends are the quartz backend for OS X.
|
||||
supported backends are the quartz backend for macOS, and the
|
||||
HTML-based Broadway backend.
|
||||
</para>
|
||||
</formalpara>
|
||||
|
||||
<formalpara>
|
||||
<title><systemitem>--enable-introspection</systemitem></title>
|
||||
<title><systemitem>-Dintrospection</systemitem></title>
|
||||
|
||||
<para>
|
||||
Build with or without introspection support.
|
||||
The default is 'auto'.
|
||||
The default is 'true'.
|
||||
</para>
|
||||
</formalpara>
|
||||
|
||||
<formalpara>
|
||||
<title><systemitem>--enable-installed-tests</systemitem> or
|
||||
<systemitem>--disable-installed-tests</systemitem></title>
|
||||
<title><systemitem>-Dinstalled-tests</systemitem></title>
|
||||
|
||||
<para>
|
||||
Whether to install tests on the system. If enabled, tests
|
||||
and their data are installed in <filename>${libexecdir}/gtk+/installed-tests</filename>.
|
||||
Metadata for the tests is installed in <filename>${prefix}/share/installed-tests/gtk+</filename>.
|
||||
To run the installed tests, gnome-desktop-testing-runner
|
||||
To run the installed tests, <command>gnome-desktop-testing-runner</command>
|
||||
can be used.
|
||||
</para>
|
||||
</formalpara>
|
||||
|
||||
@@ -450,7 +450,7 @@ example_app_window_class_init (ExampleAppWindowClass *class)
|
||||
|
||||
...
|
||||
]]></programlisting>
|
||||
<para>(<ulink url="https://gitlab.gnome.org/GNOME/gtk/blob/gtk-3-22/examples/application2/exampleappwin.c">full source</ulink>)</para>
|
||||
<para>(<ulink url="https://gitlab.gnome.org/GNOME/gtk/blob/gtk-3-24/examples/application2/exampleappwin.c">full source</ulink>)</para>
|
||||
</informalexample>
|
||||
|
||||
<para>You may have noticed that we used the <literal>_from_resource(<!-- -->)</literal> variant
|
||||
@@ -518,7 +518,7 @@ example_app_window_class_init (ExampleAppWindowClass *class)
|
||||
|
||||
...
|
||||
]]></programlisting>
|
||||
<para>(<ulink url="https://gitlab.gnome.org/GNOME/gtk/blob/gtk-3-22/examples/application3/exampleappwin.c">full source</ulink>)</para>
|
||||
<para>(<ulink url="https://gitlab.gnome.org/GNOME/gtk/blob/gtk-3-24/examples/application3/exampleappwin.c">full source</ulink>)</para>
|
||||
</informalexample>
|
||||
|
||||
<para>Now we revisit the example_app_window_open() function that
|
||||
@@ -567,7 +567,7 @@ example_app_window_open (ExampleAppWindow *win,
|
||||
|
||||
...
|
||||
]]></programlisting>
|
||||
<para>(<ulink url="https://gitlab.gnome.org/GNOME/gtk/blob/gtk-3-22/examples/application3/exampleappwin.c">full source</ulink>)</para>
|
||||
<para>(<ulink url="https://gitlab.gnome.org/GNOME/gtk/blob/gtk-3-24/examples/application3/exampleappwin.c">full source</ulink>)</para>
|
||||
</informalexample>
|
||||
|
||||
<para>Note that we did not have to touch the stack switcher
|
||||
@@ -665,7 +665,7 @@ example_app_class_init (ExampleAppClass *class)
|
||||
|
||||
...
|
||||
</programlisting>
|
||||
<para>(<ulink url="https://gitlab.gnome.org/GNOME/gtk/blob/gtk-3-22/examples/application4/exampleapp.c">full source</ulink>)</para>
|
||||
<para>(<ulink url="https://gitlab.gnome.org/GNOME/gtk/blob/gtk-3-24/examples/application4/exampleapp.c">full source</ulink>)</para>
|
||||
</informalexample>
|
||||
|
||||
<para>Our preferences menu item does not do anything yet,
|
||||
@@ -731,7 +731,7 @@ example_app_window_init (ExampleAppWindow *win)
|
||||
|
||||
...
|
||||
]]></programlisting>
|
||||
<para>(<ulink url="https://gitlab.gnome.org/GNOME/gtk/blob/gtk-3-22/examples/application5/exampleappwin.c">full source</ulink>)</para>
|
||||
<para>(<ulink url="https://gitlab.gnome.org/GNOME/gtk/blob/gtk-3-24/examples/application5/exampleappwin.c">full source</ulink>)</para>
|
||||
</informalexample>
|
||||
|
||||
<para>The code to connect the font setting is a little more involved,
|
||||
@@ -780,7 +780,7 @@ preferences_activated (GSimpleAction *action,
|
||||
|
||||
...
|
||||
]]></programlisting>
|
||||
<para>(<ulink url="https://gitlab.gnome.org/GNOME/gtk/blob/gtk-3-22/examples/application6/exampleapp.c">full source</ulink>)</para>
|
||||
<para>(<ulink url="https://gitlab.gnome.org/GNOME/gtk/blob/gtk-3-24/examples/application6/exampleapp.c">full source</ulink>)</para>
|
||||
</informalexample>
|
||||
|
||||
<para>After all this work, our application can now show
|
||||
@@ -866,7 +866,7 @@ example_app_window_init (ExampleAppWindow *win)
|
||||
|
||||
...
|
||||
]]></programlisting>
|
||||
<para>(<ulink url="https://gitlab.gnome.org/GNOME/gtk/blob/gtk-3-22/examples/application7/exampleappwin.c">full source</ulink>)</para>
|
||||
<para>(<ulink url="https://gitlab.gnome.org/GNOME/gtk/blob/gtk-3-24/examples/application7/exampleappwin.c">full source</ulink>)</para>
|
||||
</informalexample>
|
||||
|
||||
<para>With the search bar, our application now looks like this:</para>
|
||||
@@ -926,7 +926,7 @@ example_app_window_init (ExampleAppWindow *win)
|
||||
|
||||
...
|
||||
]]></programlisting>
|
||||
<para>(<ulink url="https://gitlab.gnome.org/GNOME/gtk/blob/gtk-3-22/examples/application8/exampleappwin.c">full source</ulink>)</para>
|
||||
<para>(<ulink url="https://gitlab.gnome.org/GNOME/gtk/blob/gtk-3-24/examples/application8/exampleappwin.c">full source</ulink>)</para>
|
||||
</informalexample>
|
||||
|
||||
<para>What our application looks like now:</para>
|
||||
@@ -989,12 +989,12 @@ example_app_window_init (ExampleAppWindow *win)
|
||||
|
||||
...
|
||||
</programlisting>
|
||||
<para>(<ulink url="https://gitlab.gnome.org/GNOME/gtk/blob/gtk-3-22/examples/application9/exampleappwin.c">full source</ulink>)</para>
|
||||
<para>(<ulink url="https://gitlab.gnome.org/GNOME/gtk/blob/gtk-3-24/examples/application9/exampleappwin.c">full source</ulink>)</para>
|
||||
</informalexample>
|
||||
|
||||
<para>We also need a function that counts the lines of the currently
|
||||
active tab, and updates the @lines label. See the
|
||||
<ulink url="https://gitlab.gnome.org/GNOME/gtk/blob/gtk-3-22/examples/application9/exampleappwin.c">full source</ulink>
|
||||
<ulink url="https://gitlab.gnome.org/GNOME/gtk/blob/gtk-3-24/examples/application9/exampleappwin.c">full source</ulink>
|
||||
if you are interested in the details.</para>
|
||||
|
||||
<para>This brings our example application to this appearance:</para>
|
||||
|
||||
@@ -51,7 +51,7 @@ questions will be directed to Discourse.
|
||||
|
||||
<para>
|
||||
Please, follow the instructions outlined in the
|
||||
<ulink url="https://gitlab.gnome.org/GNOME/gtk/-/blob/master/CONTRIBUTING.md">Contribution Guide</ulink> available in the GTK
|
||||
<ulink url="https://gitlab.gnome.org/GNOME/gtk/-/blob/main/CONTRIBUTING.md">Contribution Guide</ulink> available in the GTK
|
||||
source code repository.
|
||||
</para>
|
||||
|
||||
|
||||
@@ -1,41 +0,0 @@
|
||||
## Process this file with automake to produce Makefile.in
|
||||
|
||||
AUTOMAKE_OPTIONS = 1.7
|
||||
|
||||
# The name of the module.
|
||||
DOC_MODULE=gail-libgail-util3
|
||||
|
||||
# The top-level SGML file.
|
||||
DOC_MAIN_SGML_FILE=gail-libgail-util-docs.sgml
|
||||
|
||||
# The directory containing the source code (if it contains documentation).
|
||||
DOC_SOURCE_DIR=$(top_srcdir)/libgail-util
|
||||
|
||||
# Used for dependencies
|
||||
HFILE_GLOB = $(top_srcdir)/libgail-util/*.h
|
||||
CFILE_GLOB = $(top_srcdir)/libgail-util/*.c
|
||||
|
||||
# CFLAGS and LDFLAGS for compiling scan program. Only needed
|
||||
# if $(DOC_MODULE).types is non-empty.
|
||||
AM_CPPFLAGS = \
|
||||
-I$(top_srcdir) \
|
||||
-I$(top_builddir) \
|
||||
$(DEP_CFLAGS)
|
||||
|
||||
GTKDOC_LIBS = $(top_builddir)/libgail-util/libgailutil-3.la
|
||||
|
||||
# gtkdoc-mkdb related varaibles
|
||||
MKDB_OPTIONS =
|
||||
content_files = \
|
||||
version.xml
|
||||
|
||||
HTML_IMAGES =
|
||||
|
||||
include $(top_srcdir)/gtk-doc.make
|
||||
|
||||
# Other files to distribute
|
||||
EXTRA_DIST += \
|
||||
version.xml.in \
|
||||
meson.build
|
||||
|
||||
-include $(top_srcdir)/git.mk
|
||||
@@ -1,11 +1,11 @@
|
||||
if get_option('gtk_doc')
|
||||
glib_prefix = dependency('glib-2.0').get_pkgconfig_variable('prefix')
|
||||
glib_prefix = dependency('glib-2.0').get_variable(pkgconfig: 'prefix')
|
||||
glib_docpath = join_paths(glib_prefix, 'share', 'gtk-doc', 'html')
|
||||
|
||||
cairo_prefix = dependency('cairo-gobject').get_pkgconfig_variable('prefix')
|
||||
cairo_prefix = dependency('cairo-gobject').get_variable(pkgconfig: 'prefix')
|
||||
cairo_docpath = join_paths(cairo_prefix, 'share', 'gtk-doc', 'html', 'cairo')
|
||||
|
||||
gdkpixbuf_prefix = dependency('gdk-pixbuf-2.0').get_pkgconfig_variable('prefix')
|
||||
gdkpixbuf_prefix = dependency('gdk-pixbuf-2.0').get_variable(pkgconfig: 'prefix')
|
||||
gdkpixbuf_docpath = join_paths(gdkpixbuf_prefix, 'share', 'gtk-doc', 'html', 'gdk-pixbuf')
|
||||
|
||||
docpath = join_paths(gtk_datadir, 'gtk-doc', 'html')
|
||||
|
||||
@@ -1,48 +0,0 @@
|
||||
include $(top_srcdir)/Makefile.decl
|
||||
|
||||
AM_CPPFLAGS = \
|
||||
-I$(top_srcdir) \
|
||||
-I$(top_builddir)/gdk \
|
||||
-I$(top_srcdir)/gdk \
|
||||
-I$(top_srcdir)/gdk/x11 \
|
||||
-I$(top_srcdir)/tests \
|
||||
$(GTK_DEBUG_FLAGS) \
|
||||
$(GTK_DEP_CFLAGS)
|
||||
|
||||
DEPS = \
|
||||
$(top_builddir)/gtk/libgtk-3.la
|
||||
|
||||
LDADDS = \
|
||||
$(top_builddir)/gtk/libgtk-3.la \
|
||||
$(top_builddir)/gdk/libgdk-3.la \
|
||||
$(top_builddir)/tests/gtkgears.o \
|
||||
$(GTK_DEP_LIBS) \
|
||||
$(GDK_DEP_LIBS) \
|
||||
-lm
|
||||
|
||||
EXTRA_DIST += \
|
||||
meson.build
|
||||
|
||||
if USE_X11
|
||||
noinst_PROGRAMS = \
|
||||
doc-shooter
|
||||
endif
|
||||
|
||||
doc_shooter_DEPENDENCIES = $(DEPS)
|
||||
doc_shooter_LDADD = $(LDADDS)
|
||||
doc_shooter_SOURCES = \
|
||||
shadow.c \
|
||||
shadow.h \
|
||||
shooter.c \
|
||||
widgets.c \
|
||||
widgets.h
|
||||
|
||||
clean-local:
|
||||
for file in *.png; do \
|
||||
case "$$file" in \
|
||||
folder.png|gnome.png) ;; \
|
||||
*) rm -f $$file ;; \
|
||||
esac ; \
|
||||
done
|
||||
|
||||
-include $(top_srcdir)/git.mk
|
||||
@@ -1,38 +0,0 @@
|
||||
SUBDIRS = \
|
||||
bp \
|
||||
application1 application2 application3 \
|
||||
application4 application5 application6 \
|
||||
application7 application8 application9 \
|
||||
application10
|
||||
|
||||
AM_CPPFLAGS = \
|
||||
-I$(top_srcdir) \
|
||||
-I$(top_srcdir)/gdk \
|
||||
-I$(top_builddir)/gdk \
|
||||
-DGDK_DISABLE_DEPRECATED \
|
||||
-DGTK_DISABLE_DEPRECATED \
|
||||
$(GTK_DEBUG_FLAGS) \
|
||||
$(GTK_DEP_CFLAGS)
|
||||
|
||||
LDADD = \
|
||||
$(top_builddir)/gtk/libgtk-3.la \
|
||||
$(top_builddir)/gdk/libgdk-3.la \
|
||||
$(GTK_DEP_LIBS)
|
||||
|
||||
noinst_PROGRAMS = \
|
||||
hello-world \
|
||||
window-default \
|
||||
plugman \
|
||||
sunny \
|
||||
action-namespace \
|
||||
grid-packing \
|
||||
drawing \
|
||||
builder \
|
||||
search-bar \
|
||||
listbox-dnd
|
||||
|
||||
EXTRA_DIST = \
|
||||
builder.ui \
|
||||
meson.build
|
||||
|
||||
-include $(top_srcdir)/git.mk
|
||||
@@ -1,24 +0,0 @@
|
||||
GTK_CFLAGS = \
|
||||
-I$(top_srcdir) \
|
||||
$(GTK_DEP_CFLAGS)
|
||||
|
||||
GTK_LIBS = \
|
||||
$(top_builddir)/gtk/libgtk-3.la \
|
||||
$(top_builddir)/gdk/libgdk-3.la \
|
||||
$(GTK_DEP_LIBS)
|
||||
|
||||
|
||||
noinst_PROGRAMS = exampleapp
|
||||
|
||||
exampleapp_CFLAGS = $(GTK_CFLAGS)
|
||||
exampleapp_LDADD = $(GTK_LIBS)
|
||||
exampleapp_SOURCES = \
|
||||
main.c \
|
||||
exampleapp.c exampleapp.h \
|
||||
exampleappwin.c exampleappwin.h
|
||||
|
||||
EXTRA_DIST = \
|
||||
exampleapp.desktop \
|
||||
meson.build
|
||||
|
||||
-include $(top_srcdir)/git.mk
|
||||
@@ -1,50 +0,0 @@
|
||||
GTK_CFLAGS = \
|
||||
-I$(top_srcdir) \
|
||||
$(GTK_DEP_CFLAGS)
|
||||
|
||||
GTK_LIBS = \
|
||||
$(top_builddir)/gtk/libgtk-3.la \
|
||||
$(top_builddir)/gdk/libgdk-3.la \
|
||||
$(GTK_DEP_LIBS)
|
||||
|
||||
|
||||
noinst_PROGRAMS = exampleapp
|
||||
|
||||
exampleapp_CFLAGS = $(GTK_CFLAGS)
|
||||
exampleapp_LDADD = $(GTK_LIBS)
|
||||
exampleapp_SOURCES = \
|
||||
main.c \
|
||||
exampleapp.c exampleapp.h \
|
||||
exampleappwin.c exampleappwin.h \
|
||||
exampleappprefs.c exampleappprefs.h \
|
||||
resources.c
|
||||
|
||||
BUILT_SOURCES = \
|
||||
resources.c \
|
||||
gschemas.compiled
|
||||
|
||||
resources.c: exampleapp.gresource.xml $(shell $(GLIB_COMPILE_RESOURCES) --sourcedir=$(srcdir) --generate-dependencies $(srcdir)/exampleapp.gresource.xml)
|
||||
$(AM_V_GEN) $(GLIB_COMPILE_RESOURCES) $(srcdir)/exampleapp.gresource.xml \
|
||||
--target=$@ --sourcedir=$(srcdir) --generate-source
|
||||
|
||||
gsettings_SCHEMAS = \
|
||||
org.gtk.exampleapp.gschema.xml
|
||||
|
||||
@GSETTINGS_RULES@
|
||||
|
||||
gschemas.compiled: org.gtk.exampleapp.gschema.xml
|
||||
$(GLIB_COMPILE_SCHEMAS) .
|
||||
|
||||
EXTRA_DIST = \
|
||||
window.ui \
|
||||
app-menu.ui \
|
||||
prefs.ui \
|
||||
gears-menu.ui \
|
||||
exampleapp.gresource.xml \
|
||||
org.gtk.exampleapp.gschema.xml \
|
||||
meson.build
|
||||
|
||||
CLEANFILES = \
|
||||
gschemas.compiled
|
||||
|
||||
-include $(top_srcdir)/git.mk
|
||||
@@ -1,32 +0,0 @@
|
||||
GTK_CFLAGS = \
|
||||
-I$(top_srcdir) \
|
||||
$(GTK_DEP_CFLAGS)
|
||||
|
||||
GTK_LIBS = \
|
||||
$(top_builddir)/gtk/libgtk-3.la \
|
||||
$(top_builddir)/gdk/libgdk-3.la \
|
||||
$(GTK_DEP_LIBS)
|
||||
|
||||
|
||||
noinst_PROGRAMS = exampleapp
|
||||
|
||||
exampleapp_CFLAGS = $(GTK_CFLAGS)
|
||||
exampleapp_LDADD = $(GTK_LIBS)
|
||||
exampleapp_SOURCES = \
|
||||
main.c \
|
||||
exampleapp.c exampleapp.h \
|
||||
exampleappwin.c exampleappwin.h \
|
||||
resources.c
|
||||
|
||||
BUILT_SOURCES = resources.c
|
||||
|
||||
resources.c: exampleapp.gresource.xml window.ui
|
||||
$(AM_V_GEN) $(GLIB_COMPILE_RESOURCES) $(srcdir)/exampleapp.gresource.xml \
|
||||
--target=$@ --sourcedir=$(srcdir) --generate-source
|
||||
|
||||
EXTRA_DIST = \
|
||||
window.ui \
|
||||
exampleapp.gresource.xml \
|
||||
meson.build
|
||||
|
||||
-include $(top_srcdir)/git.mk
|
||||
@@ -1,32 +0,0 @@
|
||||
GTK_CFLAGS = \
|
||||
-I$(top_srcdir) \
|
||||
$(GTK_DEP_CFLAGS)
|
||||
|
||||
GTK_LIBS = \
|
||||
$(top_builddir)/gtk/libgtk-3.la \
|
||||
$(top_builddir)/gdk/libgdk-3.la \
|
||||
$(GTK_DEP_LIBS)
|
||||
|
||||
|
||||
noinst_PROGRAMS = exampleapp
|
||||
|
||||
exampleapp_CFLAGS = $(GTK_CFLAGS)
|
||||
exampleapp_LDADD = $(GTK_LIBS)
|
||||
exampleapp_SOURCES = \
|
||||
main.c \
|
||||
exampleapp.c exampleapp.h \
|
||||
exampleappwin.c exampleappwin.h \
|
||||
resources.c
|
||||
|
||||
BUILT_SOURCES = resources.c
|
||||
|
||||
resources.c: exampleapp.gresource.xml window.ui
|
||||
$(AM_V_GEN) $(GLIB_COMPILE_RESOURCES) $(srcdir)/exampleapp.gresource.xml \
|
||||
--target=$@ --sourcedir=$(srcdir) --generate-source
|
||||
|
||||
EXTRA_DIST = \
|
||||
window.ui \
|
||||
exampleapp.gresource.xml \
|
||||
meson.build
|
||||
|
||||
-include $(top_srcdir)/git.mk
|
||||
@@ -1,33 +0,0 @@
|
||||
GTK_CFLAGS = \
|
||||
-I$(top_srcdir) \
|
||||
$(GTK_DEP_CFLAGS)
|
||||
|
||||
GTK_LIBS = \
|
||||
$(top_builddir)/gtk/libgtk-3.la \
|
||||
$(top_builddir)/gdk/libgdk-3.la \
|
||||
$(GTK_DEP_LIBS)
|
||||
|
||||
|
||||
noinst_PROGRAMS = exampleapp
|
||||
|
||||
exampleapp_CFLAGS = $(GTK_CFLAGS)
|
||||
exampleapp_LDADD = $(GTK_LIBS)
|
||||
exampleapp_SOURCES = \
|
||||
main.c \
|
||||
exampleapp.c exampleapp.h \
|
||||
exampleappwin.c exampleappwin.h \
|
||||
resources.c
|
||||
|
||||
BUILT_SOURCES = resources.c
|
||||
|
||||
resources.c: exampleapp.gresource.xml window.ui app-menu.ui
|
||||
$(AM_V_GEN) $(GLIB_COMPILE_RESOURCES) $(srcdir)/exampleapp.gresource.xml \
|
||||
--target=$@ --sourcedir=$(srcdir) --generate-source
|
||||
|
||||
EXTRA_DIST = \
|
||||
window.ui \
|
||||
app-menu.ui \
|
||||
exampleapp.gresource.xml \
|
||||
meson.build
|
||||
|
||||
-include $(top_srcdir)/git.mk
|
||||
@@ -1,47 +0,0 @@
|
||||
GTK_CFLAGS = \
|
||||
-I$(top_srcdir) \
|
||||
$(GTK_DEP_CFLAGS)
|
||||
|
||||
GTK_LIBS = \
|
||||
$(top_builddir)/gtk/libgtk-3.la \
|
||||
$(top_builddir)/gdk/libgdk-3.la \
|
||||
$(GTK_DEP_LIBS)
|
||||
|
||||
|
||||
noinst_PROGRAMS = exampleapp
|
||||
|
||||
exampleapp_CFLAGS = $(GTK_CFLAGS)
|
||||
exampleapp_LDADD = $(GTK_LIBS)
|
||||
exampleapp_SOURCES = \
|
||||
main.c \
|
||||
exampleapp.c exampleapp.h \
|
||||
exampleappwin.c exampleappwin.h \
|
||||
resources.c
|
||||
|
||||
BUILT_SOURCES = \
|
||||
resources.c \
|
||||
gschemas.compiled
|
||||
|
||||
resources.c: exampleapp.gresource.xml window.ui app-menu.ui
|
||||
$(AM_V_GEN) $(GLIB_COMPILE_RESOURCES) $(srcdir)/exampleapp.gresource.xml \
|
||||
--target=$@ --sourcedir=$(srcdir) --generate-source
|
||||
|
||||
gsettings_SCHEMAS = \
|
||||
org.gtk.exampleapp.gschema.xml
|
||||
|
||||
@GSETTINGS_RULES@
|
||||
|
||||
gschemas.compiled: org.gtk.exampleapp.gschema.xml
|
||||
$(GLIB_COMPILE_SCHEMAS) .
|
||||
|
||||
EXTRA_DIST = \
|
||||
window.ui \
|
||||
app-menu.ui \
|
||||
exampleapp.gresource.xml \
|
||||
org.gtk.exampleapp.gschema.xml \
|
||||
meson.build
|
||||
|
||||
CLEANFILES = \
|
||||
gschemas.compiled
|
||||
|
||||
-include $(top_srcdir)/git.mk
|
||||
@@ -1,49 +0,0 @@
|
||||
GTK_CFLAGS = \
|
||||
-I$(top_srcdir) \
|
||||
$(GTK_DEP_CFLAGS)
|
||||
|
||||
GTK_LIBS = \
|
||||
$(top_builddir)/gtk/libgtk-3.la \
|
||||
$(top_builddir)/gdk/libgdk-3.la \
|
||||
$(GTK_DEP_LIBS)
|
||||
|
||||
|
||||
noinst_PROGRAMS = exampleapp
|
||||
|
||||
exampleapp_CFLAGS = $(GTK_CFLAGS)
|
||||
exampleapp_LDADD = $(GTK_LIBS)
|
||||
exampleapp_SOURCES = \
|
||||
main.c \
|
||||
exampleapp.c exampleapp.h \
|
||||
exampleappwin.c exampleappwin.h \
|
||||
exampleappprefs.c exampleappprefs.h \
|
||||
resources.c
|
||||
|
||||
BUILT_SOURCES = \
|
||||
resources.c \
|
||||
gschemas.compiled
|
||||
|
||||
resources.c: exampleapp.gresource.xml $(shell $(GLIB_COMPILE_RESOURCES) --sourcedir=$(srcdir) --generate-dependencies $(srcdir)/exampleapp.gresource.xml)
|
||||
$(AM_V_GEN) $(GLIB_COMPILE_RESOURCES) $(srcdir)/exampleapp.gresource.xml \
|
||||
--target=$@ --sourcedir=$(srcdir) --generate-source
|
||||
|
||||
gsettings_SCHEMAS = \
|
||||
org.gtk.exampleapp.gschema.xml
|
||||
|
||||
@GSETTINGS_RULES@
|
||||
|
||||
gschemas.compiled: org.gtk.exampleapp.gschema.xml
|
||||
$(GLIB_COMPILE_SCHEMAS) .
|
||||
|
||||
EXTRA_DIST = \
|
||||
window.ui \
|
||||
app-menu.ui \
|
||||
prefs.ui \
|
||||
exampleapp.gresource.xml \
|
||||
org.gtk.exampleapp.gschema.xml \
|
||||
meson.build
|
||||
|
||||
CLEANFILES = \
|
||||
gschemas.compiled
|
||||
|
||||
-include $(top_srcdir)/git.mk
|
||||
@@ -1,49 +0,0 @@
|
||||
GTK_CFLAGS = \
|
||||
-I$(top_srcdir) \
|
||||
$(GTK_DEP_CFLAGS)
|
||||
|
||||
GTK_LIBS = \
|
||||
$(top_builddir)/gtk/libgtk-3.la \
|
||||
$(top_builddir)/gdk/libgdk-3.la \
|
||||
$(GTK_DEP_LIBS)
|
||||
|
||||
|
||||
noinst_PROGRAMS = exampleapp
|
||||
|
||||
exampleapp_CFLAGS = $(GTK_CFLAGS)
|
||||
exampleapp_LDADD = $(GTK_LIBS)
|
||||
exampleapp_SOURCES = \
|
||||
main.c \
|
||||
exampleapp.c exampleapp.h \
|
||||
exampleappwin.c exampleappwin.h \
|
||||
exampleappprefs.c exampleappprefs.h \
|
||||
resources.c
|
||||
|
||||
BUILT_SOURCES = \
|
||||
resources.c \
|
||||
gschemas.compiled
|
||||
|
||||
resources.c: exampleapp.gresource.xml $(shell $(GLIB_COMPILE_RESOURCES) --sourcedir=$(srcdir) --generate-dependencies $(srcdir)/exampleapp.gresource.xml)
|
||||
$(AM_V_GEN) $(GLIB_COMPILE_RESOURCES) $(srcdir)/exampleapp.gresource.xml \
|
||||
--target=$@ --sourcedir=$(srcdir) --generate-source
|
||||
|
||||
gsettings_SCHEMAS = \
|
||||
org.gtk.exampleapp.gschema.xml
|
||||
|
||||
@GSETTINGS_RULES@
|
||||
|
||||
gschemas.compiled: org.gtk.exampleapp.gschema.xml
|
||||
$(GLIB_COMPILE_SCHEMAS) .
|
||||
|
||||
EXTRA_DIST = \
|
||||
window.ui \
|
||||
app-menu.ui \
|
||||
prefs.ui \
|
||||
exampleapp.gresource.xml \
|
||||
org.gtk.exampleapp.gschema.xml \
|
||||
meson.build
|
||||
|
||||
CLEANFILES = \
|
||||
gschemas.compiled
|
||||
|
||||
-include $(top_srcdir)/git.mk
|
||||
@@ -1,50 +0,0 @@
|
||||
GTK_CFLAGS = \
|
||||
-I$(top_srcdir) \
|
||||
$(GTK_DEP_CFLAGS)
|
||||
|
||||
GTK_LIBS = \
|
||||
$(top_builddir)/gtk/libgtk-3.la \
|
||||
$(top_builddir)/gdk/libgdk-3.la \
|
||||
$(GTK_DEP_LIBS)
|
||||
|
||||
|
||||
noinst_PROGRAMS = exampleapp
|
||||
|
||||
exampleapp_CFLAGS = $(GTK_CFLAGS)
|
||||
exampleapp_LDADD = $(GTK_LIBS)
|
||||
exampleapp_SOURCES = \
|
||||
main.c \
|
||||
exampleapp.c exampleapp.h \
|
||||
exampleappwin.c exampleappwin.h \
|
||||
exampleappprefs.c exampleappprefs.h \
|
||||
resources.c
|
||||
|
||||
BUILT_SOURCES = \
|
||||
resources.c \
|
||||
gschemas.compiled
|
||||
|
||||
resources.c: exampleapp.gresource.xml $(shell $(GLIB_COMPILE_RESOURCES) --sourcedir=$(srcdir) --generate-dependencies $(srcdir)/exampleapp.gresource.xml)
|
||||
$(AM_V_GEN) $(GLIB_COMPILE_RESOURCES) $(srcdir)/exampleapp.gresource.xml \
|
||||
--target=$@ --sourcedir=$(srcdir) --generate-source
|
||||
|
||||
gsettings_SCHEMAS = \
|
||||
org.gtk.exampleapp.gschema.xml
|
||||
|
||||
@GSETTINGS_RULES@
|
||||
|
||||
gschemas.compiled: org.gtk.exampleapp.gschema.xml
|
||||
$(GLIB_COMPILE_SCHEMAS) .
|
||||
|
||||
EXTRA_DIST = \
|
||||
window.ui \
|
||||
app-menu.ui \
|
||||
prefs.ui \
|
||||
gears-menu.ui \
|
||||
exampleapp.gresource.xml \
|
||||
org.gtk.exampleapp.gschema.xml \
|
||||
meson.build
|
||||
|
||||
CLEANFILES = \
|
||||
gschemas.compiled
|
||||
|
||||
-include $(top_srcdir)/git.mk
|
||||
@@ -1,50 +0,0 @@
|
||||
GTK_CFLAGS = \
|
||||
-I$(top_srcdir) \
|
||||
$(GTK_DEP_CFLAGS)
|
||||
|
||||
GTK_LIBS = \
|
||||
$(top_builddir)/gtk/libgtk-3.la \
|
||||
$(top_builddir)/gdk/libgdk-3.la \
|
||||
$(GTK_DEP_LIBS)
|
||||
|
||||
|
||||
noinst_PROGRAMS = exampleapp
|
||||
|
||||
exampleapp_CFLAGS = $(GTK_CFLAGS)
|
||||
exampleapp_LDADD = $(GTK_LIBS)
|
||||
exampleapp_SOURCES = \
|
||||
main.c \
|
||||
exampleapp.c exampleapp.h \
|
||||
exampleappwin.c exampleappwin.h \
|
||||
exampleappprefs.c exampleappprefs.h \
|
||||
resources.c
|
||||
|
||||
BUILT_SOURCES = \
|
||||
resources.c \
|
||||
gschemas.compiled
|
||||
|
||||
resources.c: exampleapp.gresource.xml $(shell $(GLIB_COMPILE_RESOURCES) --sourcedir=$(srcdir) --generate-dependencies $(srcdir)/exampleapp.gresource.xml)
|
||||
$(AM_V_GEN) $(GLIB_COMPILE_RESOURCES) $(srcdir)/exampleapp.gresource.xml \
|
||||
--target=$@ --sourcedir=$(srcdir) --generate-source
|
||||
|
||||
gsettings_SCHEMAS = \
|
||||
org.gtk.exampleapp.gschema.xml
|
||||
|
||||
@GSETTINGS_RULES@
|
||||
|
||||
gschemas.compiled: org.gtk.exampleapp.gschema.xml
|
||||
$(GLIB_COMPILE_SCHEMAS) .
|
||||
|
||||
EXTRA_DIST = \
|
||||
window.ui \
|
||||
app-menu.ui \
|
||||
prefs.ui \
|
||||
gears-menu.ui \
|
||||
exampleapp.gresource.xml \
|
||||
org.gtk.exampleapp.gschema.xml \
|
||||
meson.build
|
||||
|
||||
CLEANFILES = \
|
||||
gschemas.compiled
|
||||
|
||||
-include $(top_srcdir)/git.mk
|
||||
@@ -1,34 +0,0 @@
|
||||
AM_CPPFLAGS = \
|
||||
-DSRCDIR=\"$(abs_srcdir)\" \
|
||||
-I$(top_srcdir) \
|
||||
-I$(top_srcdir)/gdk \
|
||||
-I$(top_builddir)/gdk \
|
||||
$(GTK_DEBUG_FLAGS) \
|
||||
$(GTK_DEP_CFLAGS)
|
||||
|
||||
LDADD = \
|
||||
$(top_builddir)/gtk/libgtk-3.la \
|
||||
$(top_builddir)/gdk/libgdk-3.la \
|
||||
$(GTK_DEP_LIBS)
|
||||
|
||||
noinst_PROGRAMS = bloatpad
|
||||
|
||||
|
||||
bloatpad_SOURCES = bloatpad.c
|
||||
nodist_bloatpad_SOURCES = bloatpad-gresources.c
|
||||
|
||||
resource_files = \
|
||||
bloatpad.gresources.xml \
|
||||
gtk/menus.ui \
|
||||
gtk/help-overlay.ui
|
||||
|
||||
bloatpad-gresources.c: $(resource_files)
|
||||
$(AM_V_GEN) $(GLIB_COMPILE_RESOURCES) --target=$@ --sourcedir=$(srcdir) --generate-source $<
|
||||
|
||||
CLEANFILES = bloatpad-gresources.c
|
||||
|
||||
EXTRA_DIST = \
|
||||
$(resource_files) \
|
||||
meson.build
|
||||
|
||||
-include $(top_srcdir)/git.mk
|
||||
319
gdk/Makefile.am
319
gdk/Makefile.am
@@ -1,319 +0,0 @@
|
||||
## Makefile.am for gtk+/gdk
|
||||
include $(top_srcdir)/Makefile.decl
|
||||
include gdk-sources.inc
|
||||
|
||||
-include $(INTROSPECTION_MAKEFILE)
|
||||
INTROSPECTION_GIRS =
|
||||
INTROSPECTION_SCANNER_ENV = \
|
||||
CC="$(CC)"
|
||||
INTROSPECTION_SCANNER_ARGS = \
|
||||
--add-include-path=../gdk \
|
||||
--warn-all
|
||||
INTROSPECTION_COMPILER_ARGS = \
|
||||
--includedir=$(srcdir) \
|
||||
--includedir=.
|
||||
|
||||
SUBDIRS = $(GDK_BACKENDS) .
|
||||
|
||||
DIST_SUBDIRS = win32 x11 quartz broadway wayland
|
||||
|
||||
CLEANFILES =
|
||||
|
||||
EXTRA_DIST += \
|
||||
keynames.txt \
|
||||
keynames-translate.txt \
|
||||
keyname-table.h \
|
||||
gdkkeynames.c \
|
||||
gen-keyname-table.pl \
|
||||
gdkconfig.h.win32 \
|
||||
gdkconfig.h.win32_broadway \
|
||||
gdkkeysyms-update.pl \
|
||||
gdkmarshalers.list \
|
||||
gdkwindowimpl.h \
|
||||
makefile.msc \
|
||||
gdkenumtypes.c.template \
|
||||
gdkenumtypes.h.template \
|
||||
gdkversionmacros.h.in \
|
||||
meson.build \
|
||||
gen-gdk-gresources-xml.py \
|
||||
gdkconfig.h.meson
|
||||
|
||||
GDK_CFLAGS_DEFINES = \
|
||||
-DG_LOG_USE_STRUCTURED=1 \
|
||||
-DGDK_COMPILATION
|
||||
|
||||
|
||||
AM_CPPFLAGS = \
|
||||
-DG_LOG_DOMAIN=\"Gdk\" \
|
||||
$(GDK_CFLAGS_DEFINES) \
|
||||
-I$(top_builddir) \
|
||||
-I$(top_builddir)/gdk \
|
||||
-I$(top_srcdir) \
|
||||
$(GTK_DEBUG_FLAGS) \
|
||||
$(GDK_DEP_CFLAGS)
|
||||
|
||||
# libtool stuff: set version and export symbols for resolving
|
||||
# since automake doesn't support conditionalized libsomething_la_LDFLAGS
|
||||
# we use the general approach here
|
||||
LDADD = \
|
||||
$(GTK_LINK_FLAGS) \
|
||||
-version-info $(LT_VERSION_INFO) \
|
||||
-export-dynamic \
|
||||
-rpath $(libdir) \
|
||||
$(no_undefined)
|
||||
|
||||
#
|
||||
# setup GDK sources and their dependencies
|
||||
#
|
||||
|
||||
gdkincludedir = $(includedir)/gtk-3.0/gdk
|
||||
gdkinclude_HEADERS = $(gdk_public_h_sources)
|
||||
nodist_gdkinclude_HEADERS = gdkconfig.h gdkenumtypes.h gdkversionmacros.h
|
||||
|
||||
deprecatedincludedir = $(includedir)/gtk-3.0/gdk/deprecated
|
||||
deprecatedinclude_HEADERS = $(gdk_deprecated_h_sources)
|
||||
|
||||
common_sources = \
|
||||
$(gdk_private_headers) \
|
||||
$(gdk_c_sources) \
|
||||
gdkenumtypes.c \
|
||||
gdkmarshalers.c \
|
||||
gdkmarshalers.h \
|
||||
gdkresources.h \
|
||||
gdkresources.c
|
||||
|
||||
libgdk_3_la_SOURCES = $(common_sources)
|
||||
libgdk_3_la_CFLAGS = $(AM_CFLAGS) $(GDK_HIDDEN_VISIBILITY_CFLAGS)
|
||||
libgdk_3_la_LIBADD = $(GDK_DEP_LIBS) $(SHM_LIBS)
|
||||
libgdk_3_la_LDFLAGS = $(LDADD)
|
||||
|
||||
if USE_X11
|
||||
libgdk_3_la_LIBADD += x11/libgdk-x11.la
|
||||
endif # USE_X11
|
||||
|
||||
if USE_QUARTZ
|
||||
libgdk_3_la_LIBADD += quartz/libgdk-quartz.la
|
||||
endif # USE_QUARTZ
|
||||
|
||||
if USE_WIN32
|
||||
libgdk_3_la_LIBADD += win32/libgdk-win32.la
|
||||
libgdk_3_la_DEPENDENCIES = win32/libgdk-win32.la win32/rc/gdk-win32-res.o
|
||||
libgdk_3_la_LDFLAGS += -Wl,win32/rc/gdk-win32-res.o
|
||||
endif # USE_WIN32
|
||||
|
||||
if USE_BROADWAY
|
||||
libgdk_3_la_LIBADD += broadway/libgdk-broadway.la
|
||||
endif # USE_BROADWAY
|
||||
|
||||
if USE_WAYLAND
|
||||
libgdk_3_la_LIBADD += wayland/libgdk-wayland.la
|
||||
endif
|
||||
|
||||
if HAVE_INTROSPECTION
|
||||
|
||||
introspection_files = \
|
||||
$(filter-out gdkkeysyms-compat.h, $(gdk_h_sources)) \
|
||||
$(gdk_c_sources) \
|
||||
$(gdk_built_sources)
|
||||
|
||||
Gdk-3.0.gir: libgdk-3.la Makefile
|
||||
Gdk_3_0_gir_SCANNERFLAGS = \
|
||||
--c-include="gdk/gdk.h"
|
||||
Gdk_3_0_gir_INCLUDES = Gio-2.0 GdkPixbuf-2.0 Pango-1.0 cairo-1.0
|
||||
Gdk_3_0_gir_LIBS = libgdk-3.la
|
||||
Gdk_3_0_gir_FILES = $(introspection_files)
|
||||
Gdk_3_0_gir_CFLAGS = $(AM_CPPFLAGS)
|
||||
Gdk_3_0_gir_EXPORT_PACKAGES = gdk-3.0
|
||||
INTROSPECTION_GIRS += Gdk-3.0.gir
|
||||
if OS_WIN32
|
||||
Gdk_3_0_gir_CFLAGS += -I$(srcdir)/win32 -I$(srcdir)
|
||||
endif
|
||||
if USE_X11
|
||||
GdkX11-3.0.gir: libgdk-3.la Gdk-3.0.gir Makefile
|
||||
GdkX11_3_0_gir_SCANNERFLAGS = \
|
||||
--identifier-prefix=Gdk \
|
||||
--c-include="gdk/gdkx.h" \
|
||||
--include-uninstalled=$(top_builddir)/gdk/Gdk-3.0.gir
|
||||
GdkX11_3_0_gir_INCLUDES = Gio-2.0 GdkPixbuf-2.0 Pango-1.0 xlib-2.0
|
||||
GdkX11_3_0_gir_LIBS = libgdk-3.la
|
||||
GdkX11_3_0_gir_FILES = $(x11_introspection_files)
|
||||
GdkX11_3_0_gir_CFLAGS = $(AM_CPPFLAGS) -L$(top_builddir)/gdk
|
||||
GdkX11_3_0_gir_EXPORT_PACKAGES = gdk-x11-3.0
|
||||
INTROSPECTION_GIRS += GdkX11-3.0.gir
|
||||
|
||||
endif # USE_X11
|
||||
|
||||
if OS_WIN32
|
||||
GdkWin32-3.0.gir: libgdk-3.la Gdk-3.0.gir Makefile
|
||||
GdkWin32_3_0_gir_SCANNERFLAGS = \
|
||||
--identifier-prefix=Gdk \
|
||||
--c-include="gdk/gdkwin32.h" \
|
||||
--include-uninstalled=$(top_builddir)/gdk/Gdk-3.0.gir
|
||||
GdkWin32_3_0_gir_INCLUDES = Gio-2.0 GdkPixbuf-2.0 Pango-1.0
|
||||
GdkWin32_3_0_gir_LIBS = libgdk-3.la
|
||||
GdkWin32_3_0_gir_FILES = $(w32_introspection_files)
|
||||
GdkWin32_3_0_gir_CFLAGS = $(AM_CPPFLAGS) -L$(top_builddir)/gdk -I$(srcdir)/win32 -I$(srcdir)
|
||||
INTROSPECTION_GIRS += GdkWin32-3.0.gir
|
||||
|
||||
endif # OS_WIN32
|
||||
|
||||
girdir = $(datadir)/gir-1.0
|
||||
gir_DATA = $(INTROSPECTION_GIRS)
|
||||
|
||||
typelibsdir = $(libdir)/girepository-1.0
|
||||
typelibs_DATA = $(INTROSPECTION_GIRS:.gir=.typelib)
|
||||
|
||||
CLEANFILES += $(gir_DATA) $(typelibs_DATA)
|
||||
|
||||
endif # HAVE_INTROSPECTION
|
||||
|
||||
if OS_WIN32
|
||||
gdk.def: libgdk-3.la
|
||||
echo "LIBRARY libgdk-$(GTK_MAJOR_VERSION)-@LT_CURRENT_MINUS_AGE@" >$@
|
||||
echo "EXPORTS" >>$@
|
||||
objdump -p .libs/libgdk-$(GTK_MAJOR_VERSION)-@LT_CURRENT_MINUS_AGE@.dll | sed -n -e 's/\t\[\s\+\([0-9]\+\)\]\s\([A-Za-z_][A-Za-z0-9_]\)/\2/p' >>$@
|
||||
install-def-file: gdk.def
|
||||
mkdir -p $(DESTDIR)$(libdir)
|
||||
$(INSTALL) gdk.def $(DESTDIR)$(libdir)/gdk-win32-3.0.def
|
||||
uninstall-def-file:
|
||||
-rm $(DESTDIR)$(libdir)/gdk-win32-3.0.def
|
||||
else
|
||||
install-def-file:
|
||||
uninstall-def-file:
|
||||
endif
|
||||
|
||||
if MS_LIB_AVAILABLE
|
||||
noinst_DATA = gdk-win32-$(GTK_API_VERSION).lib
|
||||
|
||||
gdk-win32-$(GTK_API_VERSION).lib: libgdk-3.la gdk.def
|
||||
lib -machine:@LIB_EXE_MACHINE_FLAG@ -name:libgdk-win32-$(GTK_API_VERSION)-@LT_CURRENT_MINUS_AGE@.dll -def:gdk.def -out:$@
|
||||
|
||||
install-ms-lib:
|
||||
mkdir -p $(DESTDIR)$(libdir)
|
||||
$(INSTALL) gdk-win32-$(GTK_API_VERSION).lib $(DESTDIR)$(libdir)
|
||||
|
||||
uninstall-ms-lib:
|
||||
-rm $(DESTDIR)$(libdir)/gdk-win32-$(GTK_API_VERSION).lib
|
||||
else
|
||||
install-ms-lib:
|
||||
uninstall-ms-lib:
|
||||
endif
|
||||
|
||||
lib_LTLIBRARIES = libgdk-3.la
|
||||
|
||||
MAINTAINERCLEANFILES = $(gdk_built_sources) stamp-gdkenumtypes.h
|
||||
EXTRA_DIST += \
|
||||
fallback-c89.c
|
||||
|
||||
install-exec-hook:
|
||||
if DISABLE_EXPLICIT_DEPS
|
||||
$(SHELL) $(top_srcdir)/sanitize-la.sh $(DESTDIR)$(libdir)/libgdk-3.la
|
||||
endif
|
||||
|
||||
BUILT_SOURCES = \
|
||||
$(gdk_built_sources) \
|
||||
gdkconfig.h
|
||||
|
||||
gdkenumtypes.h: stamp-gdkenumtypes.h
|
||||
@true
|
||||
stamp-gdkenumtypes.h: $(gdk_h_sources) gdkenumtypes.h.template
|
||||
$(AM_V_GEN) ( cd $(srcdir) && $(GLIB_MKENUMS) --template gdkenumtypes.h.template \
|
||||
$(gdk_h_sources) ) >> xgen-geth \
|
||||
&& (cmp -s xgen-geth gdkenumtypes.h || cp xgen-geth gdkenumtypes.h ) \
|
||||
&& rm -f xgen-geth \
|
||||
&& echo timestamp > $(@F)
|
||||
gdkenumtypes.c: $(gdk_h_sources) gdkenumtypes.c.template
|
||||
$(AM_V_GEN) ( cd $(srcdir) && $(GLIB_MKENUMS) --template gdkenumtypes.c.template \
|
||||
$(gdk_h_sources) ) > xgen-getc \
|
||||
&& cp xgen-getc gdkenumtypes.c \
|
||||
&& rm -f xgen-getc
|
||||
|
||||
#
|
||||
# Marshaller generation
|
||||
#
|
||||
gdkmarshalers.h: gdkmarshalers.list
|
||||
$(AM_V_GEN) $(GLIB_GENMARSHAL) \
|
||||
--prefix=_gdk_marshal \
|
||||
--valist-marshallers \
|
||||
--header \
|
||||
$(srcdir)/gdkmarshalers.list > gdkmarshalers-h.tmp \
|
||||
&& mv gdkmarshalers-h.tmp gdkmarshalers.h \
|
||||
|| ( rm -f gdkmarshalers-h.tmp && exit 1)
|
||||
gdkmarshalers.c: gdkmarshalers.list
|
||||
$(AM_V_GEN) $(GLIB_GENMARSHAL) \
|
||||
--prefix=_gdk_marshal \
|
||||
--valist-marshallers \
|
||||
--body \
|
||||
$(srcdir)/gdkmarshalers.list > gdkmarshalers-c.tmp \
|
||||
&& mv gdkmarshalers-c.tmp gdkmarshalers.c \
|
||||
|| ( rm -f gdkmarshalers-c.tmp && exit 1 )
|
||||
|
||||
gdkconfig.h: stamp-gc-h
|
||||
$(AM_V_GEN) if test -f gdkconfig.h; then :; \
|
||||
else rm -f stamp-gc-h; $(MAKE) stamp-gc-h; fi
|
||||
stamp-gc-h: $(top_builddir)/config.status
|
||||
$(AM_V_at) cd $(top_builddir) && $(SHELL) ./config.status gdk/gdkconfig.h \
|
||||
&& echo timestamp > gdk/$(@F)
|
||||
|
||||
#
|
||||
# Resources
|
||||
#
|
||||
|
||||
glsl_sources := $(sort $(wildcard $(srcdir)/resources/glsl/*.glsl))
|
||||
|
||||
gdk.gresource.xml: Makefile.am
|
||||
$(AM_V_GEN) echo "<?xml version='1.0' encoding='UTF-8'?>" > $@; \
|
||||
echo "<gresources>" >> $@; \
|
||||
echo " <gresource prefix='/org/gtk/libgdk'>" >> $@; \
|
||||
for f in $(glsl_sources); do \
|
||||
n=`basename $$f`; \
|
||||
echo " <file alias='glsl/$$n'>resources/glsl/$$n</file>" >> $@; \
|
||||
done; \
|
||||
echo " </gresource>" >> $@; \
|
||||
echo "</gresources>" >> $@;
|
||||
|
||||
EXTRA_DIST += $(glsl_sources)
|
||||
CLEANFILES += gdk.gresource.xml
|
||||
|
||||
resource_files = $(shell $(GLIB_COMPILE_RESOURCES) --sourcedir=$(srcdir) --generate-dependencies $(builddir)/gdk.gresource.xml)
|
||||
|
||||
gdkresources.h: gdk.gresource.xml
|
||||
$(AM_V_GEN) $(GLIB_COMPILE_RESOURCES) $< --target=$@ \
|
||||
--sourcedir=$(srcdir) --c-name _gdk --generate-header --manual-register --internal
|
||||
gdkresources.c: gdk.gresource.xml $(resource_files)
|
||||
$(AM_V_GEN) $(GLIB_COMPILE_RESOURCES) $< --target=$@ \
|
||||
--sourcedir=$(srcdir) --c-name _gdk --generate-source --manual-register --internal
|
||||
|
||||
# ------------------- MSVC Build Items ----------------
|
||||
MSVCPROJS = gdk-3
|
||||
|
||||
gdk_3_FILES = $(gdk_c_sources)
|
||||
gdk_3_EXCLUDES = dummy
|
||||
|
||||
include $(top_srcdir)/win32/Makefile.msvcproj
|
||||
|
||||
dist-hook: \
|
||||
$(top_builddir)/win32/vs9/gdk-3.vcproj
|
||||
|
||||
DISTCLEANFILES = gdkconfig.h stamp-gc-h
|
||||
|
||||
install-data-local: install-ms-lib install-def-file
|
||||
|
||||
uninstall-local: uninstall-ms-lib uninstall-def-file
|
||||
rm -f $(DESTDIR)$(configexecincludedir)/gdkconfig.h
|
||||
|
||||
# if srcdir!=builddir, clean out maintainer-clean files from builddir
|
||||
# this allows dist to pass.
|
||||
distclean-local:
|
||||
if test $(srcdir) != .; then \
|
||||
rm -f $(MAINTAINERCLEANFILES); \
|
||||
fi
|
||||
|
||||
.PHONY: files
|
||||
|
||||
files:
|
||||
@files=`ls $(DISTFILES) 2> /dev/null `; for p in $$files; do \
|
||||
echo $$p; \
|
||||
done
|
||||
|
||||
-include $(top_srcdir)/git.mk
|
||||
@@ -1,85 +0,0 @@
|
||||
## Process this file with automake to produce Makefile.in
|
||||
include $(top_srcdir)/Makefile.decl
|
||||
include gdk-broadway-sources.inc
|
||||
NULL =
|
||||
|
||||
libgdkincludedir = $(includedir)/gtk-3.0/gdk
|
||||
libgdkbroadwayincludedir = $(includedir)/gtk-3.0/gdk/broadway
|
||||
|
||||
AM_CPPFLAGS = \
|
||||
-DG_LOG_DOMAIN=\"Gdk\" \
|
||||
-DG_LOG_USE_STRUCTURED=1 \
|
||||
-DGDK_COMPILATION \
|
||||
-DGDK_DISABLE_DEPRECATION_WARNINGS \
|
||||
-I$(top_srcdir) \
|
||||
-I$(top_srcdir)/gdk \
|
||||
-I$(top_builddir)/gdk \
|
||||
$(GDK_HIDDEN_VISIBILITY_CFLAGS) \
|
||||
$(GTK_DEBUG_FLAGS) \
|
||||
$(GDK_DEP_CFLAGS)
|
||||
|
||||
LDADDS = $(GDK_DEP_LIBS) -lrt
|
||||
|
||||
noinst_LTLIBRARIES = libgdk-broadway.la
|
||||
|
||||
bin_PROGRAMS = broadwayd
|
||||
|
||||
libgdkinclude_HEADERS = $(GDK_PUBLIC_H_SRCS_BROADWAY)
|
||||
|
||||
EXTRA_DIST += toarray.pl
|
||||
|
||||
clienthtml.h: client.html
|
||||
$(AM_V_GEN) $(PERL) $(srcdir)/toarray.pl client_html $(srcdir)/client.html > $@
|
||||
|
||||
EXTRA_DIST += client.html
|
||||
|
||||
broadwayjs.h: broadway.js rawinflate.min.js
|
||||
$(AM_V_GEN) $(PERL) $(srcdir)/toarray.pl broadway_js $(srcdir)/broadway.js $(srcdir)/rawinflate.min.js > $@
|
||||
|
||||
EXTRA_DIST += broadway.js rawinflate.min.js
|
||||
|
||||
# built headers that don't get installed
|
||||
broadway_built_sources = \
|
||||
$(broadway_built_private_headers)
|
||||
|
||||
libgdk_broadway_la_SOURCES = \
|
||||
$(broadway_built_private_headers)\
|
||||
$(GDK_BROADWAY_NON_GENERATED_SOURCES)
|
||||
|
||||
if OS_UNIX
|
||||
libgdk_broadway_la_LIBADD = \
|
||||
$(SHM_LIBS) \
|
||||
$(NULL)
|
||||
endif
|
||||
|
||||
if OS_WIN32
|
||||
broadwayd_LDADD = $(GDK_DEP_LIBS) -lws2_32
|
||||
else
|
||||
broadwayd_LDADD = $(GDK_DEP_LIBS) @SHM_LIBS@
|
||||
endif
|
||||
|
||||
MAINTAINERCLEANFILES = $(broadway_built_sources)
|
||||
EXTRA_DIST += $(broadway_built_sources)
|
||||
|
||||
BUILT_SOURCES = $(broadway_built_sources)
|
||||
|
||||
EXTRA_DIST += \
|
||||
meson.build \
|
||||
gen-c-array.py
|
||||
|
||||
# ------------------- MSVC Build Items ----------------
|
||||
MSVCPROJS = gdk3-broadway broadwayd
|
||||
|
||||
gdk3_broadway_FILES = $(libgdk_broadway_la_SOURCES)
|
||||
gdk3_broadway_EXCLUDES = dummy
|
||||
|
||||
broadwayd_FILES = $(broadwayd_SOURCES)
|
||||
broadwayd_EXCLUDES = dummy
|
||||
|
||||
include $(top_srcdir)/win32/Makefile.msvcproj
|
||||
|
||||
dist-hook: \
|
||||
$(top_builddir)/win32/vs9/gdk3-broadway.vcproj \
|
||||
$(top_builddir)/win32/vs9/broadwayd.vcproj
|
||||
|
||||
-include $(top_srcdir)/git.mk
|
||||
@@ -157,7 +157,8 @@ typedef enum {
|
||||
BROADWAY_REQUEST_GRAB_POINTER,
|
||||
BROADWAY_REQUEST_UNGRAB_POINTER,
|
||||
BROADWAY_REQUEST_FOCUS_WINDOW,
|
||||
BROADWAY_REQUEST_SET_SHOW_KEYBOARD
|
||||
BROADWAY_REQUEST_SET_SHOW_KEYBOARD,
|
||||
BROADWAY_REQUEST_SET_MODAL_HINT
|
||||
} BroadwayRequestType;
|
||||
|
||||
typedef struct {
|
||||
@@ -231,6 +232,12 @@ typedef struct {
|
||||
guint32 show_keyboard;
|
||||
} BroadwayRequestSetShowKeyboard;
|
||||
|
||||
typedef struct {
|
||||
BroadwayRequestBase base;
|
||||
guint32 id;
|
||||
gboolean modal_hint;
|
||||
} BroadwayRequestSetModalHint;
|
||||
|
||||
typedef union {
|
||||
BroadwayRequestBase base;
|
||||
BroadwayRequestNewWindow new_window;
|
||||
@@ -248,6 +255,7 @@ typedef union {
|
||||
BroadwayRequestTranslate translate;
|
||||
BroadwayRequestFocusWindow focus_window;
|
||||
BroadwayRequestSetShowKeyboard set_show_keyboard;
|
||||
BroadwayRequestSetModalHint set_modal_hint;
|
||||
} BroadwayRequest;
|
||||
|
||||
typedef enum {
|
||||
|
||||
@@ -113,6 +113,7 @@ struct BroadwayWindow {
|
||||
gboolean is_temp;
|
||||
gboolean visible;
|
||||
gint32 transient_for;
|
||||
gboolean modal_hint;
|
||||
|
||||
BroadwayBuffer *buffer;
|
||||
gboolean buffer_synced;
|
||||
@@ -276,6 +277,14 @@ update_event_state (BroadwayServer *server,
|
||||
{
|
||||
window->x = message->configure_notify.x;
|
||||
window->y = message->configure_notify.y;
|
||||
|
||||
if (server->focused_window_id != message->configure_notify.id &&
|
||||
server->pointer_grab_window_id == -1 && window->modal_hint)
|
||||
{
|
||||
broadway_server_window_raise (server, message->configure_notify.id);
|
||||
broadway_server_focus_window (server, message->configure_notify.id);
|
||||
broadway_server_flush (server);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case BROADWAY_EVENT_DELETE_NOTIFY:
|
||||
@@ -1435,6 +1444,7 @@ broadway_server_destroy_window (BroadwayServer *server,
|
||||
gint id)
|
||||
{
|
||||
BroadwayWindow *window;
|
||||
gint transient_for = -1;
|
||||
|
||||
if (server->mouse_in_toplevel_id == id)
|
||||
{
|
||||
@@ -1453,6 +1463,9 @@ broadway_server_destroy_window (BroadwayServer *server,
|
||||
GINT_TO_POINTER (id));
|
||||
if (window != NULL)
|
||||
{
|
||||
if (server->focused_window_id == id)
|
||||
transient_for = window->transient_for;
|
||||
|
||||
server->toplevels = g_list_remove (server->toplevels, window);
|
||||
g_hash_table_remove (server->id_ht,
|
||||
GINT_TO_POINTER (id));
|
||||
@@ -1463,6 +1476,17 @@ broadway_server_destroy_window (BroadwayServer *server,
|
||||
|
||||
g_free (window);
|
||||
}
|
||||
|
||||
if (transient_for != -1)
|
||||
{
|
||||
window = g_hash_table_lookup (server->id_ht,
|
||||
GINT_TO_POINTER (transient_for));
|
||||
if (window != NULL)
|
||||
{
|
||||
broadway_server_focus_window (server, transient_for);
|
||||
broadway_server_flush (server);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
gboolean
|
||||
@@ -1588,6 +1612,20 @@ broadway_server_window_set_transient_for (BroadwayServer *server,
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
broadway_server_window_set_modal_hint (BroadwayServer *server,
|
||||
gint id, gboolean modal_hint)
|
||||
{
|
||||
BroadwayWindow *window;
|
||||
|
||||
window = g_hash_table_lookup (server->id_ht,
|
||||
GINT_TO_POINTER (id));
|
||||
if (window == NULL)
|
||||
return;
|
||||
|
||||
window->modal_hint = modal_hint;
|
||||
}
|
||||
|
||||
gboolean
|
||||
broadway_server_has_client (BroadwayServer *server)
|
||||
{
|
||||
|
||||
@@ -95,5 +95,8 @@ cairo_surface_t * broadway_server_open_surface (BroadwayServer *server,
|
||||
char *name,
|
||||
int width,
|
||||
int height);
|
||||
void broadway_server_window_set_modal_hint (BroadwayServer *server,
|
||||
gint id,
|
||||
gboolean modal_hint);
|
||||
|
||||
#endif /* __BROADWAY_SERVER__ */
|
||||
|
||||
@@ -301,6 +301,11 @@ client_handle_request (BroadwayClient *client,
|
||||
case BROADWAY_REQUEST_SET_SHOW_KEYBOARD:
|
||||
broadway_server_set_show_keyboard (server, request->set_show_keyboard.show_keyboard);
|
||||
break;
|
||||
case BROADWAY_REQUEST_SET_MODAL_HINT:
|
||||
broadway_server_window_set_modal_hint (server,
|
||||
request->set_modal_hint.id,
|
||||
request->set_modal_hint.modal_hint);
|
||||
break;
|
||||
default:
|
||||
g_warning ("Unknown request of type %d", request->base.type);
|
||||
}
|
||||
|
||||
@@ -1,55 +0,0 @@
|
||||
# Public header list for GdkBroadway
|
||||
|
||||
GDK_PUBLIC_H_SRCS_BROADWAY = \
|
||||
gdkbroadway.h
|
||||
|
||||
libgdkbroadwayinclude_HEADERS = \
|
||||
gdkbroadwaydisplay.h \
|
||||
gdkbroadwaywindow.h \
|
||||
gdkbroadwaycursor.h \
|
||||
gdkbroadwaymonitor.h \
|
||||
gdkbroadwayvisual.h
|
||||
|
||||
# built headers that don't get installed
|
||||
|
||||
broadway_built_private_headers = \
|
||||
clienthtml.h \
|
||||
broadwayjs.h
|
||||
|
||||
# Other non-generated sources
|
||||
GDK_BROADWAY_NON_GENERATED_SOURCES = \
|
||||
gdkcursor-broadway.c \
|
||||
gdkdevice-broadway.h \
|
||||
gdkdevice-broadway.c \
|
||||
gdkdevicemanager-broadway.h \
|
||||
gdkdevicemanager-broadway.c \
|
||||
gdkdisplay-broadway.c \
|
||||
gdkdisplay-broadway.h \
|
||||
gdkdnd-broadway.c \
|
||||
gdkeventsource.c \
|
||||
gdkeventsource.h \
|
||||
gdkglobals-broadway.c \
|
||||
gdkkeys-broadway.c \
|
||||
gdkmonitor-broadway.c \
|
||||
gdkmonitor-broadway.h \
|
||||
gdkproperty-broadway.c \
|
||||
gdkscreen-broadway.c \
|
||||
gdkscreen-broadway.h \
|
||||
gdkselection-broadway.c \
|
||||
gdktestutils-broadway.c \
|
||||
gdkvisual-broadway.c \
|
||||
gdkwindow-broadway.c \
|
||||
gdkwindow-broadway.h \
|
||||
gdkprivate-broadway.h \
|
||||
gdkbroadway-server.h \
|
||||
gdkbroadway-server.c
|
||||
|
||||
broadwayd_SOURCES = \
|
||||
broadway-protocol.h \
|
||||
broadwayd.c \
|
||||
broadway-server.h \
|
||||
broadway-server.c \
|
||||
broadway-buffer.c \
|
||||
broadway-buffer.h \
|
||||
broadway-output.h \
|
||||
broadway-output.c
|
||||
@@ -523,6 +523,18 @@ _gdk_broadway_server_window_set_transient_for (GdkBroadwayServer *server,
|
||||
BROADWAY_REQUEST_SET_TRANSIENT_FOR);
|
||||
}
|
||||
|
||||
void
|
||||
_gdk_broadway_server_window_set_modal_hint (GdkBroadwayServer *server,
|
||||
gint id, gboolean modal_hint)
|
||||
{
|
||||
BroadwayRequestSetModalHint msg;
|
||||
|
||||
msg.id = id;
|
||||
msg.modal_hint = modal_hint;
|
||||
gdk_broadway_server_send_message (server, msg,
|
||||
BROADWAY_REQUEST_SET_MODAL_HINT);
|
||||
}
|
||||
|
||||
static void *
|
||||
map_named_shm (char *name, gsize size, gboolean *is_shm)
|
||||
{
|
||||
|
||||
@@ -71,5 +71,8 @@ gboolean _gdk_broadway_server_window_move_resize (GdkBroadwaySer
|
||||
int y,
|
||||
int width,
|
||||
int height);
|
||||
void _gdk_broadway_server_window_set_modal_hint (GdkBroadwayServer *server,
|
||||
gint id,
|
||||
gboolean modal_hint);
|
||||
|
||||
#endif /* __GDK_BROADWAY_SERVER__ */
|
||||
|
||||
@@ -1,46 +0,0 @@
|
||||
/* gdkbroadwaydisplaymanager.h
|
||||
*
|
||||
* Copyright (C) 2005-2007 Imendio AB
|
||||
* Copyright 2010 Red Hat, 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/>.
|
||||
*/
|
||||
|
||||
#ifndef __GDK_BROADWAY_DISPLAY_MANAGER_H__
|
||||
#define __GDK_BROADWAY_DISPLAY_MANAGER_H__
|
||||
|
||||
#if !defined(__GDKBROADWAY_H_INSIDE__) && !defined (GDK_COMPILATION)
|
||||
#error "Only <gdk/gdkbroadway.h> can be included directly."
|
||||
#endif
|
||||
|
||||
#include <gdk/gdk.h>
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
#define GDK_TYPE_BROADWAY_DISPLAY_MANAGER (gdk_broadway_display_manager_get_type ())
|
||||
#define GDK_BROADWAY_DISPLAY_MANAGER(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), GDK_TYPE_BROADWAY_DISPLAY_MANAGER, GdkBroadwayDisplayManager))
|
||||
|
||||
#ifdef GDK_COMPILATION
|
||||
typedef struct _GdkBroadwayDisplayManager GdkBroadwayDisplayManager;
|
||||
#else
|
||||
typedef GdkDisplayManager _GdkBroadwayDisplayManager;
|
||||
#endif
|
||||
typedef struct _GdkDisplayManagerClass GdkBroadwayDisplayManagerClass;
|
||||
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
GType gdk_broadway_display_manager_get_type (void);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#endif /* __GDK_BROADWAY_DISPLAY_MANAGER_H__ */
|
||||
@@ -89,6 +89,24 @@ gdk_event_source_check (GSource *source)
|
||||
return retval;
|
||||
}
|
||||
|
||||
static void
|
||||
handle_focus_change (GdkEventCrossing *event)
|
||||
{
|
||||
gboolean focus_in = (event->type != GDK_ENTER_NOTIFY);
|
||||
GdkEvent *focus_event;
|
||||
|
||||
if (event->window->parent) {
|
||||
focus_event = gdk_event_new (GDK_FOCUS_CHANGE);
|
||||
focus_event->focus_change.window = g_object_ref (event->window->parent);
|
||||
focus_event->focus_change.send_event = FALSE;
|
||||
focus_event->focus_change.in = focus_in;
|
||||
gdk_event_set_device (focus_event, gdk_event_get_device ((GdkEvent *) event));
|
||||
|
||||
gdk_event_put (focus_event);
|
||||
gdk_event_free (focus_event);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
_gdk_broadway_events_got_input (BroadwayInputMsg *message)
|
||||
{
|
||||
@@ -160,6 +178,8 @@ _gdk_broadway_events_got_input (BroadwayInputMsg *message)
|
||||
gdk_event_set_device (event, device_manager->core_pointer);
|
||||
gdk_event_set_seat (event, gdk_device_get_seat (device_manager->core_pointer));
|
||||
|
||||
handle_focus_change (&event->crossing);
|
||||
|
||||
node = _gdk_event_queue_append (display, event);
|
||||
_gdk_windowing_got_event (display, node, event, message->base.serial);
|
||||
}
|
||||
|
||||
@@ -584,6 +584,15 @@ static void
|
||||
gdk_broadway_window_set_modal_hint (GdkWindow *window,
|
||||
gboolean modal)
|
||||
{
|
||||
GdkBroadwayDisplay *display;
|
||||
GdkWindowImplBroadway *impl;
|
||||
|
||||
impl = GDK_WINDOW_IMPL_BROADWAY (window->impl);
|
||||
|
||||
impl->modal_hint = modal;
|
||||
|
||||
display = GDK_BROADWAY_DISPLAY (gdk_window_get_display (impl->wrapper));
|
||||
_gdk_broadway_server_window_set_modal_hint (display->server, impl->id, impl->modal_hint);
|
||||
}
|
||||
|
||||
static void
|
||||
|
||||
@@ -73,6 +73,7 @@ struct _GdkWindowImplBroadway
|
||||
|
||||
GdkGeometry geometry_hints;
|
||||
GdkWindowHints geometry_hints_mask;
|
||||
gboolean modal_hint;
|
||||
};
|
||||
|
||||
struct _GdkWindowImplBroadwayClass
|
||||
|
||||
@@ -1,213 +0,0 @@
|
||||
#
|
||||
# GDK header files for public installation (non-generated)
|
||||
#
|
||||
|
||||
#
|
||||
# setup source file variables
|
||||
#
|
||||
|
||||
gdk_public_h_sources = \
|
||||
gdk.h \
|
||||
gdk-autocleanup.h \
|
||||
gdkapplaunchcontext.h \
|
||||
gdkcairo.h \
|
||||
gdkcursor.h \
|
||||
gdkdevice.h \
|
||||
gdkdevicepad.h \
|
||||
gdkdevicetool.h \
|
||||
gdkdevicemanager.h \
|
||||
gdkdisplay.h \
|
||||
gdkdisplaymanager.h \
|
||||
gdkdnd.h \
|
||||
gdkdrawingcontext.h \
|
||||
gdkevents.h \
|
||||
gdkframetimings.h \
|
||||
gdkglcontext.h \
|
||||
gdkkeys.h \
|
||||
gdkkeysyms.h \
|
||||
gdkkeysyms-compat.h \
|
||||
gdkmain.h \
|
||||
gdkmonitor.h \
|
||||
gdkpango.h \
|
||||
gdkframeclock.h \
|
||||
gdkpixbuf.h \
|
||||
gdkprivate.h \
|
||||
gdkproperty.h \
|
||||
gdkrectangle.h \
|
||||
gdkrgba.h \
|
||||
gdkscreen.h \
|
||||
gdkseat.h \
|
||||
gdkselection.h \
|
||||
gdktestutils.h \
|
||||
gdkthreads.h \
|
||||
gdktypes.h \
|
||||
gdkvisual.h \
|
||||
gdkwindow.h
|
||||
|
||||
gdk_deprecated_h_sources = \
|
||||
deprecated/gdkcolor.h
|
||||
|
||||
gdk_h_sources = \
|
||||
$(gdk_public_h_sources) \
|
||||
$(gdk_deprecated_h_sources)
|
||||
|
||||
gdk_private_headers = \
|
||||
gdk-private.h \
|
||||
gdkapplaunchcontextprivate.h \
|
||||
gdkconstructor.h \
|
||||
gdkcursorprivate.h \
|
||||
gdkdevicemanagerprivate.h \
|
||||
gdkdeviceprivate.h \
|
||||
gdkdevicepadprivate.h \
|
||||
gdkdevicetoolprivate.h \
|
||||
gdkdisplaymanagerprivate.h \
|
||||
gdkdisplayprivate.h \
|
||||
gdkdndprivate.h \
|
||||
gdkdrawingcontextprivate.h \
|
||||
gdkframeclockidle.h \
|
||||
gdkframeclockprivate.h \
|
||||
gdkglcontextprivate.h \
|
||||
gdkmonitorprivate.h \
|
||||
gdkprofilerprivate.h \
|
||||
gdkscreenprivate.h \
|
||||
gdkseatprivate.h \
|
||||
gdkseatdefaultprivate.h \
|
||||
gdkinternals.h \
|
||||
gdkintl.h \
|
||||
gdkkeysprivate.h \
|
||||
gdkvisualprivate.h \
|
||||
gdkx.h
|
||||
|
||||
gdk_deprecated_c_sources = \
|
||||
deprecated/gdkcolor.c
|
||||
|
||||
gdk_c_sources = \
|
||||
$(gdk_deprecated_c_sources) \
|
||||
gdk-private.c \
|
||||
gdk.c \
|
||||
gdkapplaunchcontext.c \
|
||||
gdkcairo.c \
|
||||
gdkcursor.c \
|
||||
gdkdeprecated.c \
|
||||
gdkdevice.c \
|
||||
gdkdevicepad.c \
|
||||
gdkdevicetool.c \
|
||||
gdkdevicemanager.c \
|
||||
gdkdisplay.c \
|
||||
gdkdisplaymanager.c \
|
||||
gdkdnd.c \
|
||||
gdkdrawingcontext.c \
|
||||
gdkevents.c \
|
||||
gdkframetimings.c \
|
||||
gdkgl.c \
|
||||
gdkglcontext.c \
|
||||
gdkglobals.c \
|
||||
gdkkeys.c \
|
||||
gdkkeyuni.c \
|
||||
gdkmonitor.c \
|
||||
gdkoffscreenwindow.c \
|
||||
gdkframeclock.c \
|
||||
gdkframeclockidle.c \
|
||||
gdkpango.c \
|
||||
gdkpixbuf-drawable.c \
|
||||
gdkprofiler.c \
|
||||
gdkproperty.c \
|
||||
gdkrectangle.c \
|
||||
gdkrgba.c \
|
||||
gdkscreen.c \
|
||||
gdkseat.c \
|
||||
gdkseatdefault.c \
|
||||
gdkselection.c \
|
||||
gdkvisual.c \
|
||||
gdkwindow.c \
|
||||
gdkwindowimpl.c
|
||||
|
||||
gdk_built_sources = \
|
||||
gdkenumtypes.h \
|
||||
gdkenumtypes.c \
|
||||
gdkmarshalers.h \
|
||||
gdkmarshalers.c \
|
||||
gdkresources.h \
|
||||
gdkresources.c \
|
||||
gdkversionmacros.h
|
||||
|
||||
x11_introspection_files = \
|
||||
x11/gdkapplaunchcontext-x11.c \
|
||||
x11/gdkasync.c \
|
||||
x11/gdkcursor-x11.c \
|
||||
x11/gdkdevice-core-x11.c \
|
||||
x11/gdkdevicemanager-core-x11.c \
|
||||
x11/gdkdevicemanager-x11.c \
|
||||
x11/gdkdevicemanager-xi2.c \
|
||||
x11/gdkdevice-xi2.c \
|
||||
x11/gdkdisplay-x11.c \
|
||||
x11/gdkdisplaymanager-x11.c \
|
||||
x11/gdkdnd-x11.c \
|
||||
x11/gdkeventsource.c \
|
||||
x11/gdkeventtranslator.c \
|
||||
x11/gdkgeometry-x11.c \
|
||||
x11/gdkglcontext-x11.c \
|
||||
x11/gdkkeys-x11.c \
|
||||
x11/gdkmain-x11.c \
|
||||
x11/gdkmonitor-x11.c \
|
||||
x11/gdkproperty-x11.c \
|
||||
x11/gdkscreen-x11.c \
|
||||
x11/gdkselection-x11.c \
|
||||
x11/gdksettings.c \
|
||||
x11/gdktestutils-x11.c \
|
||||
x11/gdkvisual-x11.c \
|
||||
x11/gdkwindow-x11.c \
|
||||
x11/gdkxftdefaults.c \
|
||||
x11/gdkxid.c \
|
||||
x11/xsettings-client.c \
|
||||
x11/gdkx.h \
|
||||
x11/gdkx11applaunchcontext.h \
|
||||
x11/gdkx11cursor.h \
|
||||
x11/gdkx11device.h \
|
||||
x11/gdkx11device-core.h \
|
||||
x11/gdkx11device-xi2.h \
|
||||
x11/gdkx11devicemanager.h \
|
||||
x11/gdkx11devicemanager-core.h \
|
||||
x11/gdkx11devicemanager-xi2.h \
|
||||
x11/gdkx11display.h \
|
||||
x11/gdkx11displaymanager.h \
|
||||
x11/gdkx11dnd.h \
|
||||
x11/gdkx11glcontext.h \
|
||||
x11/gdkx11keys.h \
|
||||
x11/gdkx11monitor.h \
|
||||
x11/gdkx11property.h \
|
||||
x11/gdkx11screen.h \
|
||||
x11/gdkx11selection.h \
|
||||
x11/gdkx11utils.h \
|
||||
x11/gdkx11visual.h \
|
||||
x11/gdkx11window.h
|
||||
|
||||
w32_introspection_files = \
|
||||
win32/gdkcursor-win32.c \
|
||||
win32/gdkdevicemanager-win32.c \
|
||||
win32/gdkdevice-virtual.c \
|
||||
win32/gdkdevice-win32.c \
|
||||
win32/gdkdevice-wintab.c \
|
||||
win32/gdkdisplaymanager-win32.c \
|
||||
win32/gdkdisplay-win32.c \
|
||||
win32/gdkdnd-win32.c \
|
||||
win32/gdkevents-win32.c \
|
||||
win32/gdkgeometry-win32.c \
|
||||
win32/gdkglobals-win32.c \
|
||||
win32/gdkkeys-win32.c \
|
||||
win32/gdkmain-win32.c \
|
||||
win32/gdkproperty-win32.c \
|
||||
win32/gdkscreen-win32.c \
|
||||
win32/gdkselection-win32.c \
|
||||
win32/gdktestutils-win32.c \
|
||||
win32/gdkwin32.h \
|
||||
win32/gdkwin32cursor.h \
|
||||
win32/gdkwin32display.h \
|
||||
win32/gdkwin32displaymanager.h \
|
||||
win32/gdkwin32dnd.h \
|
||||
win32/gdkwin32id.c \
|
||||
win32/gdkwin32keys.h \
|
||||
win32/gdkwin32misc.h \
|
||||
win32/gdkwin32screen.h \
|
||||
win32/gdkwin32window.h \
|
||||
win32/gdkwindow-win32.c
|
||||
@@ -5,14 +5,14 @@
|
||||
/*** END file-header ***/
|
||||
|
||||
/*** BEGIN file-production ***/
|
||||
/* enumerations from "@filename@" */
|
||||
/* enumerations from "@basename@" */
|
||||
/*** END file-production ***/
|
||||
|
||||
/*** BEGIN value-header ***/
|
||||
GType
|
||||
@enum_name@_get_type (void)
|
||||
{
|
||||
static volatile gsize g_define_type_id__volatile = 0;
|
||||
static gsize g_define_type_id__volatile = 0;
|
||||
|
||||
if (g_once_init_enter (&g_define_type_id__volatile))
|
||||
{
|
||||
|
||||
12
gdk/gdkgl.c
12
gdk/gdkgl.c
@@ -352,6 +352,7 @@ gdk_cairo_draw_from_gl (cairo_t *cr,
|
||||
int alpha_size = 0;
|
||||
cairo_region_t *clip_region;
|
||||
GdkGLContextPaintData *paint_data;
|
||||
GLsync sync = NULL;
|
||||
|
||||
impl_window = window->impl_window;
|
||||
|
||||
@@ -366,7 +367,18 @@ gdk_cairo_draw_from_gl (cairo_t *cr,
|
||||
|
||||
clip_region = gdk_cairo_region_from_clip (cr);
|
||||
|
||||
if ((gdk_gl_context_get_current () != NULL) && (gdk_gl_context_get_current () != paint_context))
|
||||
sync = glFenceSync (GL_SYNC_GPU_COMMANDS_COMPLETE, 0);
|
||||
|
||||
gdk_gl_context_make_current (paint_context);
|
||||
|
||||
if (sync)
|
||||
{
|
||||
glWaitSync (sync, 0, GL_TIMEOUT_IGNORED);
|
||||
glDeleteSync (sync);
|
||||
sync = NULL;
|
||||
}
|
||||
|
||||
paint_data = gdk_gl_context_get_paint_data (paint_context);
|
||||
|
||||
if (paint_data->tmp_framebuffer == 0)
|
||||
|
||||
@@ -51,9 +51,11 @@
|
||||
* @height: Height in pixels of region to get
|
||||
*
|
||||
* Transfers image data from a #GdkWindow and converts it to an RGB(A)
|
||||
* representation inside a #GdkPixbuf. In other words, copies
|
||||
* image data from a server-side drawable to a client-side RGB(A) buffer.
|
||||
* This allows you to efficiently read individual pixels on the client side.
|
||||
* representation inside a #GdkPixbuf.
|
||||
*
|
||||
* In other words, copies image data from a server-side drawable to a
|
||||
* client-side RGB(A) buffer. This allows you to efficiently read
|
||||
* individual pixels on the client side.
|
||||
*
|
||||
* This function will create an RGB pixbuf with 8 bits per channel with
|
||||
* the size specified by the @width and @height arguments scaled by the
|
||||
@@ -62,7 +64,8 @@
|
||||
*
|
||||
* If the window is off the screen, then there is no image data in the
|
||||
* obscured/offscreen regions to be placed in the pixbuf. The contents of
|
||||
* portions of the pixbuf corresponding to the offscreen region are undefined.
|
||||
* portions of the pixbuf corresponding to the offscreen region are
|
||||
* undefined.
|
||||
*
|
||||
* If the window you’re obtaining data from is partially obscured by
|
||||
* other windows, then the contents of the pixbuf areas corresponding
|
||||
@@ -74,11 +77,13 @@
|
||||
* If memory can’t be allocated for the return value, %NULL will be returned
|
||||
* instead.
|
||||
*
|
||||
* (In short, there are several ways this function can fail, and if it fails
|
||||
* it returns %NULL; so check the return value.)
|
||||
* In short, there are several ways this function can fail, and if it fails
|
||||
* it returns %NULL; so check the return value.
|
||||
*
|
||||
* You should rarely, if ever, need to call this function.
|
||||
*
|
||||
* Returns: (nullable) (transfer full): A newly-created pixbuf with a
|
||||
* reference count of 1, or %NULL on error
|
||||
* reference count of 1, or %NULL on error
|
||||
*/
|
||||
GdkPixbuf *
|
||||
gdk_pixbuf_get_from_window (GdkWindow *src,
|
||||
@@ -102,8 +107,20 @@ gdk_pixbuf_get_from_window (GdkWindow *src,
|
||||
/* We do not know what happened to this surface outside of GDK.
|
||||
* Especially for foreign windows, they will have been modified
|
||||
* by external applications.
|
||||
*
|
||||
* So be on the safe side and:
|
||||
* - flush the Cairo state
|
||||
* - mark the surface as dirty, in case the GdkWindow was
|
||||
* created from a foreign X11 surface
|
||||
*
|
||||
* THE ORDER IS IMPORTANT. DO NOT CHANGE IT.
|
||||
*
|
||||
* For reference, see:
|
||||
* - https://bugzilla.gnome.org/show_bug.cgi?id=754952
|
||||
* - https://gitlab.gnome.org/GNOME/gtk/-/issues/4456
|
||||
* - https://gitlab.gnome.org/GNOME/gtk/-/issues/5691
|
||||
*/
|
||||
cairo_surface_flush (surface);
|
||||
cairo_surface_mark_dirty (surface);
|
||||
|
||||
if (cairo_surface_get_content (surface) & CAIRO_CONTENT_ALPHA)
|
||||
|
||||
175
gdk/makefile.msc
175
gdk/makefile.msc
@@ -1,175 +0,0 @@
|
||||
## Makefile for building the GDK DLL with Microsoft C
|
||||
## Use: nmake -f makefile.msc
|
||||
|
||||
## You must first build the Win32-dependent sources in the win32 subdirectory.
|
||||
|
||||
## There is no install target, you have to decide where and
|
||||
## how to install for yourself.
|
||||
|
||||
TOP = ..\..
|
||||
!INCLUDE $(TOP)/glib/build/win32/make.msc
|
||||
|
||||
# Location of the Wintab toolkit. Downloadable from http://www.pointing.com.
|
||||
# definition should possibly go to build/win32/module.def, too.
|
||||
!IFNDEF WTKIT
|
||||
WTKIT = $(TOP)\wtkit126
|
||||
!ENDIF
|
||||
|
||||
###############################################################
|
||||
|
||||
# Nothing much configurable below
|
||||
# overwrite version?
|
||||
GTK_VER=3.0
|
||||
|
||||
!IFNDEF PERL
|
||||
PERL = perl
|
||||
!ENDIF
|
||||
|
||||
INCLUDES = -FImsvc_recommended_pragmas.h \
|
||||
-I . -I .. \
|
||||
$(GLIB_CFLAGS) $(PANGO_CFLAGS) $(CAIRO_CFLAGS) $(GDK_PIXBUF_CFLAGS) \
|
||||
|
||||
DEFINES = \
|
||||
-DHAVE_CONFIG_H \
|
||||
-DGDK_VERSION=\"$(GTK_VER)\" \
|
||||
-DG_LOG_DOMAIN=\"Gdk\" \
|
||||
-DGDK_COMPILATION -DG_LOG_DOMAIN=\"Gdk\"
|
||||
|
||||
EXTRALIBS = \
|
||||
$(WTKIT)\lib\i386\wntab32x.lib \
|
||||
$(GLIB_LIBS) $(GDK_PIXBUF_LIBS) \
|
||||
$(CAIRO_LIBS) $(CAIRO_GOBJECT_LIBS) \
|
||||
$(PANGOWIN32_LIBS) $(PANGOCAIRO_LIBS) $(INTL_LIBS)
|
||||
|
||||
gdk-win32-backend :
|
||||
cd win32
|
||||
nmake -nologo -f makefile.msc
|
||||
cd ..
|
||||
|
||||
all: \
|
||||
..\config.h \
|
||||
gdkconfig.h \
|
||||
gdkenumtypes.h \
|
||||
gdkenumtypes.c \
|
||||
gdkmarshalers.h \
|
||||
gdkmarshalers.c \
|
||||
gdk-win32-backend \
|
||||
libgdk-win32-$(GTK_VER)-0.dll \
|
||||
# testgdk.exe \
|
||||
# gdk-win32-$(GTK_VER)s.lib \
|
||||
# gdk-x11-$(GTK_VER).dll \
|
||||
|
||||
gdk_OBJECTS = \
|
||||
gdk.obj \
|
||||
gdkapplaunchcontext.obj \
|
||||
gdkcairo.obj \
|
||||
gdkcolor.obj \
|
||||
gdkcursor.obj \
|
||||
gdkdevice.obj \
|
||||
gdkdevicemanager.obj \
|
||||
gdkdisplay.obj \
|
||||
gdkdisplaymanager.obj \
|
||||
gdkdnd.obj \
|
||||
gdkenumtypes.obj \
|
||||
gdkevents.obj \
|
||||
gdkglobals.obj \
|
||||
gdkkeynames.obj \
|
||||
gdkkeys.obj \
|
||||
gdkkeyuni.obj \
|
||||
gdkmarshalers.obj \
|
||||
gdkoffscreenwindow.obj \
|
||||
gdkpango.obj \
|
||||
gdkpixbuf-drawable.obj \
|
||||
gdkrectangle.obj \
|
||||
gdkrgba.obj \
|
||||
gdkscreen.obj \
|
||||
gdkselection.obj \
|
||||
gdkvisual.obj \
|
||||
gdkwindow.obj \
|
||||
gdkwindowimpl.obj \
|
||||
|
||||
gdk_public_h_sources = \
|
||||
gdk.h \
|
||||
gdkapplaunchcontext.h \
|
||||
gdkcairo.h \
|
||||
gdkcolor.h \
|
||||
gdkcursor.h \
|
||||
gdkdevice.h \
|
||||
gdkdevicemanager.h \
|
||||
gdkdisplay.h \
|
||||
gdkdisplaymanager.h \
|
||||
gdkdnd.h \
|
||||
gdkevents.h \
|
||||
gdkkeys.h \
|
||||
gdkkeysyms.h \
|
||||
gdkkeysyms-compat.h \
|
||||
gdkmain.h \
|
||||
gdkpango.h \
|
||||
gdkpixbuf.h \
|
||||
gdkprivate.h \
|
||||
gdkproperty.h \
|
||||
gdkrectangle.h \
|
||||
gdkrgba.h \
|
||||
gdkscreen.h \
|
||||
gdkselection.h \
|
||||
gdktestutils.h \
|
||||
gdkthreads.h \
|
||||
gdktypes.h \
|
||||
gdkvisual.h \
|
||||
gdkwindow.h
|
||||
|
||||
# private marshalers
|
||||
gdkmarshalers.h : gdkmarshalers.list
|
||||
$(GLIB)\gobject\glib-genmarshal --prefix=_gdk_marshal gdkmarshalers.list --header >>gdkmarshalers.h
|
||||
|
||||
gdkmarshalers.c : gdkmarshalers.list
|
||||
$(GLIB)\gobject\glib-genmarshal --prefix=_gdk_marshal gdkmarshalers.list --body >gdkmarshalers.c
|
||||
|
||||
gdkenumtypes.h: $(gdk_public_h_sources) gdkenumtypes.h.template
|
||||
$(PERL) $(GLIB)\gobject\glib-mkenums --template gdkenumtypes.h.template \
|
||||
$(gdk_public_h_sources) > gdkenumtypes.h
|
||||
|
||||
gdkenumtypes.c: $(gdk_public_h_sources) gdkenumtypes.c.template
|
||||
$(PERL) $(GLIB)\gobject\glib-mkenums --template gdkenumtypes.c.template \
|
||||
$(gdk_public_h_sources) > gdkenumtypes.c
|
||||
|
||||
..\config.h : ..\config.h.win32
|
||||
copy ..\config.h.win32 ..\config.h
|
||||
|
||||
gdkconfig.h : gdkconfig.h.win32
|
||||
copy gdkconfig.h.win32 gdkconfig.h
|
||||
|
||||
gdk.def: gdk.symbols
|
||||
echo EXPORTS > gdk.def
|
||||
cl /EP -DG_OS_WIN32 -DGDK_WINDOWING_WIN32 \
|
||||
-DG_GNUC_CONST= \
|
||||
gdk.symbols >> gdk.def
|
||||
|
||||
# /force /verbose:lib
|
||||
libgdk-win32-$(GTK_VER)-0.dll : $(gdk_OBJECTS) gdk.def win32\gdk-win32.lib
|
||||
$(CC) $(CFLAGS) -LD -Fe$@ $(gdk_OBJECTS) win32\gdk-win32.lib $(EXTRALIBS) \
|
||||
gdi32.lib user32.lib imm32.lib shell32.lib ole32.lib uuid.lib win32\gdk.res \
|
||||
$(LDFLAGS) /implib:gdk-win32-$(GTK_VER).lib /def:gdk.def
|
||||
|
||||
gdk-win32-$(GTK_VER)s.lib : $(gdk_OBJECTS)
|
||||
lib /out:gdk-win32-$(GTK_VER)s.lib $(gdk_OBJECTS) win32\gdk-win32.lib
|
||||
|
||||
gdk-x11-$(GTK_VER).dll : $(gdk_OBJECTS) gdk.def x11\gdk-x11.lib
|
||||
$(CC) $(CFLAGS) -LD -Fegdk-x11-$(GTK_VER).dll $(gdk_OBJECTS) \
|
||||
$(PANGO)\pango\pangox-$(PANGO_VER).lib \
|
||||
x11\gdk-x11.lib $(X11_LIBS) $(EXTRALIBS) user32.lib $(LDFLAGS) /def:gdk.def
|
||||
|
||||
testgdk.exe : libgdk-win32-$(GTK_VER)-0.dll testgdk.obj
|
||||
$(CC) -Fetestgdk.exe testgdk.obj gdk-win32-$(GTK_VER).lib $(EXTRALIBS) $(LDFLAGS)
|
||||
|
||||
clean::
|
||||
cd win32
|
||||
nmake -f makefile.msc clean
|
||||
cd ..
|
||||
del gdkmarshalers.c
|
||||
del gdkmarshalers.h
|
||||
del *.dll
|
||||
del *.obj
|
||||
del *.lib
|
||||
del *.err
|
||||
del *.res
|
||||
@@ -229,6 +229,9 @@
|
||||
GdkWindow *window = [[self contentView] gdkWindow];
|
||||
GdkEvent *event;
|
||||
gboolean maximized = gdk_window_get_state (window) & GDK_WINDOW_STATE_MAXIMIZED;
|
||||
/* Alignment to 4 pixels is on scaled pixels and these are unscaled pixels so divide by scale to compensate. */
|
||||
const gint scale = gdk_window_get_scale_factor (window);
|
||||
const guint align = GDK_WINDOW_QUARTZ_ALIGNMENT / scale;
|
||||
|
||||
/* see same in windowDidMove */
|
||||
if (maximized && !inMaximizeTransition && !NSEqualRects (lastMaximizedFrame, [self frame]))
|
||||
@@ -241,13 +244,21 @@
|
||||
window->width = content_rect.size.width;
|
||||
window->height = content_rect.size.height;
|
||||
|
||||
if(window->width % align)
|
||||
{
|
||||
window->width += align - window->width % align;
|
||||
content_rect.size.width = window->width;
|
||||
}
|
||||
|
||||
content_rect.origin.x = 0;
|
||||
content_rect.origin.y = 0;
|
||||
|
||||
[[self contentView] setFrame:content_rect];
|
||||
|
||||
/* Certain resize operations (e.g. going fullscreen), also move the
|
||||
* origin of the window.
|
||||
*/
|
||||
_gdk_quartz_window_update_position (window);
|
||||
|
||||
[[self contentView] setFrame:NSMakeRect (0, 0, window->width, window->height)];
|
||||
|
||||
_gdk_window_update_size (window);
|
||||
|
||||
/* Synthesize a configure event */
|
||||
|
||||
@@ -266,6 +266,9 @@
|
||||
if (trackingRect)
|
||||
{
|
||||
[self removeTrackingRect: trackingRect];
|
||||
#if MAC_OS_X_VERSION_MIN_REQUIRED >= 10500
|
||||
[(NSTrackingArea*)trackingRect release];
|
||||
#endif
|
||||
trackingRect = 0;
|
||||
}
|
||||
|
||||
@@ -326,18 +329,16 @@
|
||||
[super viewWillDraw];
|
||||
}
|
||||
|
||||
#if MAC_OS_X_VERSION_MIN_REQUIRED >= 10900
|
||||
-(BOOL)wantsUpdateLayer
|
||||
{
|
||||
return YES;
|
||||
}
|
||||
#endif
|
||||
|
||||
static void
|
||||
nsrect_from_cairo_rect (NSRect *nsrect, cairo_rectangle_int_t *rect)
|
||||
-(BOOL)wantsLayer
|
||||
{
|
||||
nsrect->origin.x = (CGFloat)rect->x;
|
||||
nsrect->origin.y = (CGFloat)rect->y;
|
||||
nsrect->size.width = (CGFloat)rect->width;
|
||||
nsrect->size.height = (CGFloat)rect->height;
|
||||
return YES;
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -414,8 +415,7 @@ copy_rectangle_argb32 (cairo_surface_t *dest, cairo_surface_t *source,
|
||||
return;
|
||||
|
||||
++impl->in_paint_rect_count;
|
||||
cairo_rect_from_nsrect (&bounds_rect, &backing_bounds);
|
||||
bounds_region = cairo_region_create_rectangle (&bounds_rect);
|
||||
|
||||
if (impl->needs_display_region)
|
||||
{
|
||||
cairo_region_t *region = impl->needs_display_region;
|
||||
@@ -429,7 +429,7 @@ copy_rectangle_argb32 (cairo_surface_t *dest, cairo_surface_t *source,
|
||||
cairo_region_t *region;
|
||||
|
||||
cairo_rect_from_nsrect (&bounds, &layer_bounds);
|
||||
region = cairo_region_create_rectangle (&bounds);
|
||||
region = cairo_region_create_rectangle(&bounds);
|
||||
_gdk_window_process_updates_recurse (gdk_window, region);
|
||||
cairo_region_destroy (region);
|
||||
}
|
||||
@@ -437,8 +437,6 @@ copy_rectangle_argb32 (cairo_surface_t *dest, cairo_surface_t *source,
|
||||
if (!impl || !impl->cairo_surface)
|
||||
return;
|
||||
|
||||
impl_rect.width = cairo_image_surface_get_width (impl->cairo_surface);
|
||||
impl_rect.height = cairo_image_surface_get_height (impl->cairo_surface);
|
||||
CVPixelBufferLockBaseAddress (pixels, 0);
|
||||
cvpb_surface =
|
||||
cairo_image_surface_create_for_data (CVPixelBufferGetBaseAddress (pixels),
|
||||
@@ -448,6 +446,12 @@ copy_rectangle_argb32 (cairo_surface_t *dest, cairo_surface_t *source,
|
||||
(int)CVPixelBufferGetBytesPerRow (pixels));
|
||||
|
||||
|
||||
cairo_rect_from_nsrect (&bounds_rect, &backing_bounds);
|
||||
bounds_region = cairo_region_create_rectangle (&bounds_rect);
|
||||
|
||||
impl_rect.width = cairo_image_surface_get_width (impl->cairo_surface);
|
||||
impl_rect.height = cairo_image_surface_get_height (impl->cairo_surface);
|
||||
|
||||
cairo_region_intersect_rectangle (bounds_region, &impl_rect);
|
||||
copy_rectangle_argb32 (cvpb_surface, impl->cairo_surface, bounds_region);
|
||||
|
||||
@@ -455,7 +459,9 @@ copy_rectangle_argb32 (cairo_surface_t *dest, cairo_surface_t *source,
|
||||
cairo_region_destroy (bounds_region);
|
||||
_gdk_quartz_unref_cairo_surface (gdk_window); // reffed in gdk_window_impl_quartz_begin_paint
|
||||
CVPixelBufferUnlockBaseAddress (pixels, 0);
|
||||
|
||||
--impl->in_paint_rect_count;
|
||||
|
||||
self.layer.contents = NULL;
|
||||
self.layer.contents = (id)CVPixelBufferGetIOSurface (pixels);
|
||||
}
|
||||
@@ -472,13 +478,19 @@ copy_rectangle_argb32 (cairo_surface_t *dest, cairo_surface_t *source,
|
||||
{
|
||||
GdkWindowImplQuartz *impl = GDK_WINDOW_IMPL_QUARTZ (gdk_window->impl);
|
||||
NSRect rect;
|
||||
|
||||
#if MAC_OS_X_VERSION_MIN_REQUIRED >= 10500
|
||||
NSTrackingArea *trackingArea;
|
||||
#endif
|
||||
|
||||
if (!impl || !impl->toplevel)
|
||||
return;
|
||||
|
||||
if (trackingRect)
|
||||
{
|
||||
[self removeTrackingRect: trackingRect];
|
||||
#if MAC_OS_X_VERSION_MIN_REQUIRED >= 10500
|
||||
[(NSTrackingArea*)trackingRect release];
|
||||
#endif
|
||||
trackingRect = 0;
|
||||
}
|
||||
|
||||
@@ -490,10 +502,19 @@ copy_rectangle_argb32 (cairo_surface_t *dest, cairo_surface_t *source,
|
||||
*/
|
||||
|
||||
rect = [self bounds];
|
||||
#if MAC_OS_X_VERSION_MIN_REQUIRED >= 10500
|
||||
trackingArea = [[NSTrackingArea alloc] initWithRect: rect
|
||||
options: NSTrackingMouseEnteredAndExited | NSTrackingMouseMoved | NSTrackingCursorUpdate | NSTrackingActiveInActiveApp | NSTrackingInVisibleRect | NSTrackingEnabledDuringMouseDrag
|
||||
owner: self
|
||||
userInfo: nil];
|
||||
[self addTrackingArea: trackingArea];
|
||||
trackingRect = (NSInteger)[trackingArea retain];
|
||||
#else
|
||||
trackingRect = [self addTrackingRect: rect
|
||||
owner: self
|
||||
userData: nil
|
||||
assumeInside: NO];
|
||||
#endif
|
||||
}
|
||||
|
||||
-(void)viewDidMoveToWindow
|
||||
@@ -509,21 +530,27 @@ copy_rectangle_argb32 (cairo_surface_t *dest, cairo_surface_t *source,
|
||||
if (newWindow == nil && trackingRect)
|
||||
{
|
||||
[self removeTrackingRect: trackingRect];
|
||||
#if MAC_OS_X_VERSION_MIN_REQUIRED >= 10500
|
||||
[(NSTrackingArea*)trackingRect release];
|
||||
#endif
|
||||
trackingRect = 0;
|
||||
}
|
||||
}
|
||||
|
||||
-(void)createBackingStoreWithWidth: (CGFloat) width andHeight: (CGFloat) height
|
||||
{
|
||||
CVReturn rv;
|
||||
IOSurfaceRef surface;
|
||||
|
||||
g_return_if_fail (width && height);
|
||||
|
||||
CVPixelBufferRelease (pixels);
|
||||
rv = CVPixelBufferCreate (NULL, width, height,
|
||||
kCVPixelFormatType_32BGRA,
|
||||
cfpb_props, &pixels);
|
||||
CVPixelBufferCreate (NULL, width, height,
|
||||
kCVPixelFormatType_32BGRA,
|
||||
cfpb_props, &pixels);
|
||||
|
||||
surface = CVPixelBufferGetIOSurface (pixels);
|
||||
IOSurfaceSetValue(surface, CFSTR("IOSurfaceColorSpace"),
|
||||
kCGColorSpaceSRGB);
|
||||
}
|
||||
|
||||
#if MAC_OS_X_VERSION_MIN_REQUIRED >= 10700
|
||||
|
||||
@@ -1,84 +0,0 @@
|
||||
include $(top_srcdir)/Makefile.decl
|
||||
|
||||
libgdkincludedir = $(includedir)/gtk-3.0/gdk
|
||||
libgdkquartzincludedir = $(includedir)/gtk-3.0/gdk/quartz
|
||||
|
||||
AM_CPPFLAGS = \
|
||||
-DG_LOG_DOMAIN=\"Gdk\" \
|
||||
-DG_LOG_USE_STRUCTURED=1 \
|
||||
-DGDK_COMPILATION \
|
||||
-I$(top_srcdir) \
|
||||
-I$(top_srcdir)/gdk \
|
||||
-I$(top_builddir)/gdk \
|
||||
$(GDK_HIDDEN_VISIBILITY_CFLAGS) \
|
||||
$(GTK_DEBUG_FLAGS) \
|
||||
$(GDK_DEP_CFLAGS) \
|
||||
"-xobjective-c"
|
||||
|
||||
LDADDS = $(GDK_DEP_LIBS)
|
||||
|
||||
noinst_LTLIBRARIES = libgdk-quartz.la
|
||||
|
||||
libgdk_quartz_la_SOURCES = \
|
||||
GdkQuartzView.c \
|
||||
GdkQuartzView.h \
|
||||
GdkQuartzNSWindow.c \
|
||||
GdkQuartzNSWindow.h \
|
||||
gdkcursor-quartz.c \
|
||||
gdkdevice-core-quartz.c \
|
||||
gdkdevicemanager-core-quartz.c \
|
||||
gdkdevicemanager-core-quartz.h \
|
||||
gdkdisplay-quartz.c \
|
||||
gdkdisplay-quartz.h \
|
||||
gdkdisplaylinksource.c \
|
||||
gdkdisplaylinksource.h \
|
||||
gdkdisplaymanager-quartz.c \
|
||||
gdkdnd-quartz.c \
|
||||
gdkdnd-quartz.h \
|
||||
gdkevents-quartz.c \
|
||||
gdkeventloop-quartz.c \
|
||||
gdkglcontext-quartz.c \
|
||||
gdkglcontext-quartz.h \
|
||||
gdkglobals-quartz.c \
|
||||
gdkinternal-quartz.h \
|
||||
gdkkeys-quartz.c \
|
||||
gdkkeys-quartz.h \
|
||||
gdkmonitor-quartz.c \
|
||||
gdkmonitor-quartz.h \
|
||||
gdkprivate-quartz.h \
|
||||
gdkproperty-quartz.c \
|
||||
gdkquartz.h \
|
||||
gdkscreen-quartz.c \
|
||||
gdkscreen-quartz.h \
|
||||
gdkselection-quartz.c \
|
||||
gdktestutils-quartz.c \
|
||||
gdkutils-quartz.c \
|
||||
gdkvisual-quartz.c \
|
||||
gdkwindow-quartz.c \
|
||||
gdkwindow-quartz.h \
|
||||
xcursors.h
|
||||
|
||||
libgdkinclude_HEADERS = \
|
||||
gdkquartz.h
|
||||
|
||||
libgdkquartzinclude_HEADERS = \
|
||||
gdkquartz-cocoa-access.h \
|
||||
gdkquartz-gtk-only.h \
|
||||
gdkquartzcursor.h \
|
||||
gdkquartzdevice-core.h \
|
||||
gdkquartzdevicemanager-core.h \
|
||||
gdkquartzdisplay.h \
|
||||
gdkquartzdisplaymanager.h \
|
||||
gdkquartzdnd.h \
|
||||
gdkquartzglcontext.h \
|
||||
gdkquartzkeys.h \
|
||||
gdkquartzmonitor.h \
|
||||
gdkquartzscreen.h \
|
||||
gdkquartzutils.h \
|
||||
gdkquartzvisual.h \
|
||||
gdkquartzwindow.h
|
||||
|
||||
EXTRA_DIST += \
|
||||
meson.build
|
||||
|
||||
-include $(top_srcdir)/git.mk
|
||||
@@ -96,7 +96,6 @@ _gdk_quartz_display_add_frame_callback (GdkDisplay *display,
|
||||
display_quartz = GDK_QUARTZ_DISPLAY (display);
|
||||
|
||||
impl->frame_link.data = window;
|
||||
impl->frame_link.prev = NULL;
|
||||
impl->frame_link.next = display_quartz->windows_awaiting_frame;
|
||||
|
||||
display_quartz->windows_awaiting_frame = &impl->frame_link;
|
||||
@@ -110,14 +109,14 @@ _gdk_quartz_display_remove_frame_callback (GdkDisplay *display,
|
||||
GdkWindow *window)
|
||||
{
|
||||
GdkQuartzDisplay *display_quartz = GDK_QUARTZ_DISPLAY (display);
|
||||
GList *link;
|
||||
GSList *link;
|
||||
|
||||
link = g_list_find (display_quartz->windows_awaiting_frame, window);
|
||||
link = g_slist_find (display_quartz->windows_awaiting_frame, window);
|
||||
|
||||
if (link != NULL)
|
||||
{
|
||||
display_quartz->windows_awaiting_frame =
|
||||
g_list_remove_link (display_quartz->windows_awaiting_frame, link);
|
||||
g_slist_remove_link (display_quartz->windows_awaiting_frame, link);
|
||||
}
|
||||
|
||||
if (display_quartz->windows_awaiting_frame == NULL)
|
||||
@@ -129,9 +128,8 @@ gdk_quartz_display_frame_cb (gpointer data)
|
||||
{
|
||||
GdkDisplayLinkSource *source;
|
||||
GdkQuartzDisplay *display_quartz = data;
|
||||
GList *iter;
|
||||
GSList *iter, **last_next = NULL;
|
||||
gint64 presentation_time;
|
||||
gint64 now;
|
||||
|
||||
source = (GdkDisplayLinkSource *)display_quartz->frame_source;
|
||||
|
||||
@@ -145,7 +143,6 @@ gdk_quartz_display_frame_cb (gpointer data)
|
||||
}
|
||||
|
||||
presentation_time = source->presentation_time;
|
||||
now = g_source_get_time (display_quartz->frame_source);
|
||||
|
||||
for (; iter != NULL; iter = iter->next)
|
||||
{
|
||||
@@ -154,6 +151,12 @@ gdk_quartz_display_frame_cb (gpointer data)
|
||||
GdkFrameClock *frame_clock = gdk_window_get_frame_clock (window);
|
||||
GdkFrameTimings *timings;
|
||||
|
||||
/* Clear the frame_link */
|
||||
iter->data = NULL;
|
||||
if (last_next && *last_next)
|
||||
*last_next = NULL;
|
||||
last_next = &iter->next;
|
||||
|
||||
if (frame_clock == NULL)
|
||||
continue;
|
||||
|
||||
|
||||
@@ -39,7 +39,7 @@ struct _GdkQuartzDisplay
|
||||
GPtrArray *monitors;
|
||||
/* This structure is not allocated. It points to an embedded
|
||||
* GList in the GdkWindow. */
|
||||
GList *windows_awaiting_frame;
|
||||
GSList *windows_awaiting_frame;
|
||||
GSource *frame_source;
|
||||
};
|
||||
|
||||
|
||||
@@ -388,7 +388,7 @@ get_window_point_from_screen_point (GdkWindow *window,
|
||||
NSPoint point;
|
||||
GdkQuartzNSWindow *nswindow;
|
||||
|
||||
nswindow = gdk_quartz_window_get_nswindow (window);
|
||||
nswindow = (GdkQuartzNSWindow*)gdk_quartz_window_get_nswindow (window);
|
||||
point = [nswindow convertPointFromScreen:screen_point];
|
||||
*x = point.x;
|
||||
*y = window->height - point.y;
|
||||
@@ -793,12 +793,7 @@ find_toplevel_for_mouse_event (NSEvent *nsevent,
|
||||
if (toplevel_under_pointer
|
||||
&& WINDOW_IS_TOPLEVEL (toplevel_under_pointer))
|
||||
{
|
||||
GdkWindowImplQuartz *toplevel_impl;
|
||||
|
||||
toplevel = toplevel_under_pointer;
|
||||
|
||||
toplevel_impl = GDK_WINDOW_IMPL_QUARTZ (toplevel->impl);
|
||||
|
||||
*x = x_tmp;
|
||||
*y = y_tmp;
|
||||
}
|
||||
@@ -855,10 +850,43 @@ find_window_for_ns_event (NSEvent *nsevent,
|
||||
/* Only handle our own entered/exited events, not the ones for the
|
||||
* titlebar buttons.
|
||||
*/
|
||||
if ([view trackingRect] == [nsevent trackingNumber])
|
||||
return toplevel;
|
||||
else
|
||||
return NULL;
|
||||
if ([view trackingRect] == nsevent.trackingNumber)
|
||||
return toplevel;
|
||||
|
||||
/* MacOS 13 isn't sending the trackingArea events so we have to
|
||||
* rely on the cursorRect events that we discarded in earlier
|
||||
* macOS versions. These trigger 4 pixels out from the window's
|
||||
* frame so we obtain that rect and adjust it for hit testing.
|
||||
*/
|
||||
if (!nsevent.trackingArea && gdk_quartz_osx_version() >= GDK_OSX_VENTURA)
|
||||
{
|
||||
static const int border_width = 4;
|
||||
NSRect frame = nsevent.window.frame;
|
||||
gboolean inside, at_edge;
|
||||
|
||||
frame.origin.x -= border_width;
|
||||
frame.origin.y -= border_width;
|
||||
frame.size.width += 2 * border_width;
|
||||
frame.size.height += 2 * border_width;
|
||||
inside =
|
||||
screen_point.x >= frame.origin.x &&
|
||||
screen_point.x <= frame.origin.x + frame.size.width &&
|
||||
screen_point.y >= frame.origin.y &&
|
||||
screen_point.y <= frame.origin.y + frame.size.height;
|
||||
at_edge =
|
||||
screen_point.x >= frame.origin.x - 1 &&
|
||||
screen_point.x <= frame.origin.x + frame.size.width + 1 &&
|
||||
screen_point.y >= frame.origin.y - 1 &&
|
||||
screen_point.y <= frame.origin.y + frame.size.height + 1;
|
||||
|
||||
if ((event_type == GDK_QUARTZ_MOUSE_ENTERED && inside) ||
|
||||
at_edge)
|
||||
return toplevel;
|
||||
else
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
|
||||
case GDK_QUARTZ_KEY_DOWN:
|
||||
case GDK_QUARTZ_KEY_UP:
|
||||
@@ -1140,9 +1168,6 @@ fill_scroll_event (GdkWindow *window,
|
||||
GdkScrollDirection direction)
|
||||
{
|
||||
GdkSeat *seat = gdk_display_get_default_seat (_gdk_display);
|
||||
NSPoint point;
|
||||
|
||||
point = [nsevent locationInWindow];
|
||||
|
||||
event->any.type = GDK_SCROLL;
|
||||
event->scroll.window = window;
|
||||
|
||||
@@ -27,7 +27,8 @@
|
||||
#include "config.h"
|
||||
|
||||
#define GDK_WINDOW_IS_QUARTZ(win) (GDK_IS_WINDOW_IMPL_QUARTZ (((GdkWindow *)win)->impl))
|
||||
|
||||
/* Cairo surface widths must be 4-pixel byte aligned so that the image will transfer to the CPU. */
|
||||
#define GDK_WINDOW_QUARTZ_ALIGNMENT 16
|
||||
|
||||
/* Display */
|
||||
|
||||
|
||||
@@ -25,7 +25,11 @@
|
||||
|
||||
#include <AppKit/AppKit.h>
|
||||
#include <gdk/gdk.h>
|
||||
#if (defined (GTK_COMPILATION) || defined (GDK_COMPILATION))
|
||||
#include "gdkquartz.h"
|
||||
#else
|
||||
#include <gdk/gdkquartz.h>
|
||||
#endif
|
||||
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
NSEvent *gdk_quartz_event_get_nsevent (GdkEvent *event);
|
||||
|
||||
@@ -43,7 +43,8 @@ typedef enum
|
||||
GDK_OSX_CATALINA = 15,
|
||||
GDK_OSX_BIGSUR = 16,
|
||||
GDK_OSX_MONTEREY = 17,
|
||||
GDK_OSX_CURRENT = 17,
|
||||
GDK_OSX_VENTURA = 18,
|
||||
GDK_OSX_CURRENT = 18,
|
||||
GDK_OSX_NEW = 99
|
||||
} GdkOSXVersion;
|
||||
|
||||
|
||||
@@ -142,7 +142,7 @@ gdk_window_get_quartz_impl (GdkWindow* window)
|
||||
|
||||
g_return_val_if_fail (GDK_IS_WINDOW_IMPL_QUARTZ (window->impl), NULL);
|
||||
|
||||
return window->impl;
|
||||
return GDK_WINDOW_IMPL_QUARTZ (window->impl);
|
||||
}
|
||||
|
||||
NSView *
|
||||
@@ -306,9 +306,10 @@ gdk_quartz_ref_cairo_surface (GdkWindow *window)
|
||||
gint height = gdk_window_get_height (impl->wrapper);
|
||||
gint scale = gdk_window_get_scale_factor (impl->wrapper);
|
||||
gint scaled_width = width * scale;
|
||||
const gint align = GDK_WINDOW_QUARTZ_ALIGNMENT;
|
||||
|
||||
if (scaled_width % 16)
|
||||
scaled_width += 16 - scaled_width % 16; // Surface widths must be 4-pixel aligned
|
||||
if (scaled_width % align)
|
||||
scaled_width += align - scaled_width % align; // Surface widths must be 4-pixel aligned
|
||||
|
||||
impl->cairo_surface = gdk_quartz_create_cairo_surface (impl,
|
||||
scaled_width,
|
||||
@@ -929,6 +930,8 @@ _gdk_quartz_display_create_window_impl (GdkDisplay *display,
|
||||
NSUInteger style_mask;
|
||||
int nx, ny;
|
||||
const char *title;
|
||||
const gint scale = gdk_window_get_scale_factor (window);
|
||||
const guint align = GDK_WINDOW_QUARTZ_ALIGNMENT / scale;
|
||||
|
||||
/* initWithContentRect will place on the mainScreen by default.
|
||||
* We want to select the screen to place on ourselves. We need
|
||||
@@ -942,6 +945,9 @@ _gdk_quartz_display_create_window_impl (GdkDisplay *display,
|
||||
nx -= screen_rect.origin.x;
|
||||
ny -= screen_rect.origin.y;
|
||||
|
||||
if (window->width % align)
|
||||
window->width += align - window->width % align;
|
||||
|
||||
content_rect = NSMakeRect (nx, ny - window->height,
|
||||
window->width,
|
||||
window->height);
|
||||
|
||||
@@ -66,7 +66,7 @@ struct _GdkWindowImplQuartz
|
||||
gint shadow_max;
|
||||
|
||||
gboolean use_cg_context;
|
||||
GList frame_link;
|
||||
GSList frame_link;
|
||||
gint pending_frame_counter;
|
||||
};
|
||||
|
||||
|
||||
@@ -1,134 +0,0 @@
|
||||
## Process this file with automake to produce Makefile.in
|
||||
include $(top_srcdir)/Makefile.decl
|
||||
|
||||
libgdkincludedir = $(includedir)/gtk-3.0/gdk
|
||||
libgdkwaylandincludedir = $(includedir)/gtk-3.0/gdk/wayland
|
||||
|
||||
AM_CPPFLAGS = \
|
||||
-DG_LOG_DOMAIN=\"Gdk\" \
|
||||
-DG_LOG_USE_STRUCTURED=1 \
|
||||
-DGDK_COMPILATION \
|
||||
-I$(top_srcdir) \
|
||||
-I$(top_srcdir)/gdk \
|
||||
-I$(top_srcdir)/gdk/wayland/cursor \
|
||||
-I$(top_builddir)/gdk \
|
||||
$(GDK_HIDDEN_VISIBILITY_CFLAGS) \
|
||||
$(GTK_DEBUG_FLAGS) \
|
||||
$(GDK_DEP_CFLAGS)
|
||||
|
||||
LDADDS = $(GDK_DEP_LIBS) $(SHM_LIBS)
|
||||
|
||||
noinst_LTLIBRARIES = \
|
||||
libgdk-wayland.la
|
||||
|
||||
BUILT_SOURCES = \
|
||||
pointer-gestures-unstable-v1-client-protocol.h \
|
||||
pointer-gestures-unstable-v1-protocol.c \
|
||||
xdg-shell-client-protocol.h \
|
||||
xdg-shell-protocol.c \
|
||||
xdg-shell-unstable-v6-client-protocol.h \
|
||||
xdg-shell-unstable-v6-protocol.c \
|
||||
xdg-foreign-unstable-v1-client-protocol.h \
|
||||
xdg-foreign-unstable-v1-protocol.c \
|
||||
gtk-primary-selection-client-protocol.h \
|
||||
gtk-primary-selection-protocol.c \
|
||||
tablet-unstable-v2-client-protocol.h \
|
||||
tablet-unstable-v2-protocol.c \
|
||||
xdg-output-unstable-v1-protocol.c \
|
||||
xdg-output-unstable-v1-client-protocol.h \
|
||||
keyboard-shortcuts-inhibit-unstable-v1-client-protocol.h \
|
||||
keyboard-shortcuts-inhibit-unstable-v1-protocol.c \
|
||||
server-decoration-client-protocol.h \
|
||||
server-decoration-protocol.c \
|
||||
gtk-shell-client-protocol.h \
|
||||
gtk-shell-protocol.c \
|
||||
primary-selection-unstable-v1-client-protocol.h \
|
||||
primary-selection-unstable-v1-protocol.c
|
||||
if USE_XDG_ACTIVATION
|
||||
BUILT_SOURCES += \
|
||||
xdg-activation-v1-client-protocol.h \
|
||||
xdg-activation-v1-protocol.c
|
||||
endif
|
||||
|
||||
nodist_libgdk_wayland_la_SOURCES = \
|
||||
$(BUILT_SOURCES)
|
||||
|
||||
DISTCLEANFILES = \
|
||||
$(BUILT_SOURCES)
|
||||
|
||||
libgdk_wayland_la_SOURCES = \
|
||||
gdkapplaunchcontext-wayland.c \
|
||||
gdkcursor-wayland.c \
|
||||
gdkdevice-wayland.c \
|
||||
gdkdisplay-wayland.c \
|
||||
gdkdisplay-wayland.h \
|
||||
gdkdnd-wayland.c \
|
||||
gdkeventsource.c \
|
||||
gdkkeys-wayland.c \
|
||||
gdkglcontext-wayland.c \
|
||||
gdkglcontext-wayland.h \
|
||||
gdkmonitor-wayland.c \
|
||||
gdkmonitor-wayland.h \
|
||||
gdkscreen-wayland.c \
|
||||
gdkseat-wayland.h \
|
||||
gdkselection-wayland.c \
|
||||
gdkwindow-wayland.c \
|
||||
gdkwayland.h \
|
||||
gdkprivate-wayland.h \
|
||||
wm-button-layout-translation.c \
|
||||
wm-button-layout-translation.h
|
||||
|
||||
libgdk_wayland_la_SOURCES += \
|
||||
cursor/os-compatibility.c \
|
||||
cursor/os-compatibility.h \
|
||||
cursor/wayland-cursor.c \
|
||||
cursor/wayland-cursor.h \
|
||||
cursor/xcursor.c \
|
||||
cursor/xcursor.h
|
||||
|
||||
libgdkinclude_HEADERS = \
|
||||
gdkwayland.h
|
||||
|
||||
libgdkwaylandinclude_HEADERS = \
|
||||
gdkwaylanddevice.h \
|
||||
gdkwaylanddisplay.h \
|
||||
gdkwaylandglcontext.h \
|
||||
gdkwaylandmonitor.h \
|
||||
gdkwaylandselection.h \
|
||||
gdkwaylandwindow.h
|
||||
|
||||
.SECONDEXPANSION:
|
||||
|
||||
define protostability
|
||||
$(if $(findstring unstable,$1),unstable,stable)
|
||||
endef
|
||||
|
||||
define protoname
|
||||
$(shell echo $1 | sed 's/\([a-z\-]\{1,\}\)-[a-z]\{1,\}-v[0-9]\{1,\}/\1/')
|
||||
endef
|
||||
|
||||
%-protocol.c : $(WAYLAND_PROTOCOLS_DATADIR)/$$(call protostability,$$*)/$$(call protoname,$$*)/$$*.xml
|
||||
$(AM_V_GEN)$(WAYLAND_SCANNER) private-code < $< > $@
|
||||
%-client-protocol.h : $(WAYLAND_PROTOCOLS_DATADIR)/$$(call protostability,$$*)/$$(call protoname,$$*)/$$*.xml
|
||||
$(AM_V_GEN)$(WAYLAND_SCANNER) client-header < $< > $@
|
||||
|
||||
xdg-activation-v1-protocol.c : $(WAYLAND_PROTOCOLS_DATADIR)/staging/xdg-activation/xdg-activation-v1.xml
|
||||
$(AM_V_GEN)$(WAYLAND_SCANNER) private-code < $< > $@
|
||||
xdg-activation-v1-client-protocol.h : $(WAYLAND_PROTOCOLS_DATADIR)/staging/xdg-activation/xdg-activation-v1.xml
|
||||
$(AM_V_GEN)$(WAYLAND_SCANNER) client-header < $< > $@
|
||||
|
||||
%-protocol.c : $(srcdir)/protocol/%.xml
|
||||
$(AM_V_GEN)$(WAYLAND_SCANNER) private-code < $< > $@
|
||||
|
||||
%-server-protocol.h : $(srcdir)/protocol/%.xml
|
||||
$(AM_V_GEN)$(WAYLAND_SCANNER) server-header < $< > $@
|
||||
%-client-protocol.h : $(srcdir)/protocol/%.xml
|
||||
$(AM_V_GEN)$(WAYLAND_SCANNER) client-header < $< > $@
|
||||
|
||||
EXTRA_DIST += \
|
||||
protocol/gtk-primary-selection.xml \
|
||||
protocol/gtk-shell.xml \
|
||||
protocol/server-decoration.xml \
|
||||
meson.build
|
||||
|
||||
-include $(top_srcdir)/git.mk
|
||||
@@ -1,12 +0,0 @@
|
||||
wayland_cursor_sources = files([
|
||||
'wayland-cursor.c',
|
||||
'xcursor.c',
|
||||
'os-compatibility.c'
|
||||
])
|
||||
|
||||
libwayland_cursor = static_library('wayland+cursor',
|
||||
sources: wayland_cursor_sources,
|
||||
include_directories: [ confinc, ],
|
||||
dependencies: [ glib_dep, wlclientdep, ],
|
||||
c_args: common_cflags,
|
||||
)
|
||||
@@ -1,172 +0,0 @@
|
||||
/*
|
||||
* Copyright © 2012 Collabora, Ltd.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining
|
||||
* a copy of this software and associated documentation files (the
|
||||
* "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish,
|
||||
* distribute, sublicense, and/or sell copies of the Software, and to
|
||||
* permit persons to whom the Software is furnished to do so, subject to
|
||||
* the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice (including the
|
||||
* next paragraph) shall be included in all copies or substantial
|
||||
* portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
|
||||
* BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
|
||||
* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <unistd.h>
|
||||
#include <fcntl.h>
|
||||
#include <errno.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#ifdef HAVE_MEMFD_CREATE
|
||||
#include <sys/mman.h>
|
||||
#endif
|
||||
|
||||
#include "os-compatibility.h"
|
||||
|
||||
#ifndef HAVE_MKOSTEMP
|
||||
static int
|
||||
set_cloexec_or_close(int fd)
|
||||
{
|
||||
long flags;
|
||||
|
||||
if (fd == -1)
|
||||
return -1;
|
||||
|
||||
flags = fcntl(fd, F_GETFD);
|
||||
if (flags == -1)
|
||||
goto err;
|
||||
|
||||
if (fcntl(fd, F_SETFD, flags | FD_CLOEXEC) == -1)
|
||||
goto err;
|
||||
|
||||
return fd;
|
||||
|
||||
err:
|
||||
close(fd);
|
||||
return -1;
|
||||
}
|
||||
#endif
|
||||
|
||||
static int
|
||||
create_tmpfile_cloexec(char *tmpname)
|
||||
{
|
||||
int fd;
|
||||
|
||||
#ifdef HAVE_MKOSTEMP
|
||||
fd = mkostemp(tmpname, O_CLOEXEC);
|
||||
if (fd >= 0)
|
||||
unlink(tmpname);
|
||||
#else
|
||||
fd = mkstemp(tmpname);
|
||||
if (fd >= 0) {
|
||||
fd = set_cloexec_or_close(fd);
|
||||
unlink(tmpname);
|
||||
}
|
||||
#endif
|
||||
|
||||
return fd;
|
||||
}
|
||||
|
||||
/*
|
||||
* Create a new, unique, anonymous file of the given size, and
|
||||
* return the file descriptor for it. The file descriptor is set
|
||||
* CLOEXEC. The file is immediately suitable for mmap()'ing
|
||||
* the given size at offset zero.
|
||||
*
|
||||
* The file should not have a permanent backing store like a disk,
|
||||
* but may have if XDG_RUNTIME_DIR is not properly implemented in OS.
|
||||
*
|
||||
* The file name is deleted from the file system.
|
||||
*
|
||||
* The file is suitable for buffer sharing between processes by
|
||||
* transmitting the file descriptor over Unix sockets using the
|
||||
* SCM_RIGHTS methods.
|
||||
*
|
||||
* If the C library implements posix_fallocate(), it is used to
|
||||
* guarantee that disk space is available for the file at the
|
||||
* given size. If disk space is insufficient, errno is set to ENOSPC.
|
||||
* If posix_fallocate() is not supported, program may receive
|
||||
* SIGBUS on accessing mmap()'ed file contents instead.
|
||||
*
|
||||
* If the C library implements memfd_create(), it is used to create the
|
||||
* file purely in memory, without any backing file name on the file
|
||||
* system, and then sealing off the possibility of shrinking it. This
|
||||
* can then be checked before accessing mmap()'ed file contents, to
|
||||
* make sure SIGBUS can't happen. It also avoids requiring
|
||||
* XDG_RUNTIME_DIR.
|
||||
*/
|
||||
int
|
||||
os_create_anonymous_file(off_t size)
|
||||
{
|
||||
static const char template[] = "/wayland-cursor-shared-XXXXXX";
|
||||
const char *path;
|
||||
char *name;
|
||||
int fd;
|
||||
int ret;
|
||||
|
||||
#ifdef HAVE_MEMFD_CREATE
|
||||
fd = memfd_create("wayland-cursor", MFD_CLOEXEC | MFD_ALLOW_SEALING);
|
||||
if (fd >= 0) {
|
||||
/* We can add this seal before calling posix_fallocate(), as
|
||||
* the file is currently zero-sized anyway.
|
||||
*
|
||||
* There is also no need to check for the return value, we
|
||||
* couldn't do anything with it anyway.
|
||||
*/
|
||||
fcntl(fd, F_ADD_SEALS, F_SEAL_SHRINK | F_SEAL_SEAL);
|
||||
} else
|
||||
#endif
|
||||
{
|
||||
path = getenv("XDG_RUNTIME_DIR");
|
||||
if (!path) {
|
||||
errno = ENOENT;
|
||||
return -1;
|
||||
}
|
||||
|
||||
name = malloc(strlen(path) + sizeof(template));
|
||||
if (!name)
|
||||
return -1;
|
||||
|
||||
strcpy(name, path);
|
||||
strcat(name, template);
|
||||
|
||||
fd = create_tmpfile_cloexec(name);
|
||||
|
||||
free(name);
|
||||
|
||||
if (fd < 0)
|
||||
return -1;
|
||||
}
|
||||
|
||||
#ifdef HAVE_POSIX_FALLOCATE
|
||||
ret = posix_fallocate(fd, 0, size);
|
||||
if (ret != 0) {
|
||||
close(fd);
|
||||
errno = ret;
|
||||
return -1;
|
||||
}
|
||||
#else
|
||||
ret = ftruncate(fd, size);
|
||||
if (ret < 0) {
|
||||
close(fd);
|
||||
return -1;
|
||||
}
|
||||
#endif
|
||||
|
||||
return fd;
|
||||
}
|
||||
@@ -1,34 +0,0 @@
|
||||
/*
|
||||
* Copyright © 2012 Collabora, Ltd.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining
|
||||
* a copy of this software and associated documentation files (the
|
||||
* "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish,
|
||||
* distribute, sublicense, and/or sell copies of the Software, and to
|
||||
* permit persons to whom the Software is furnished to do so, subject to
|
||||
* the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice (including the
|
||||
* next paragraph) shall be included in all copies or substantial
|
||||
* portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
|
||||
* BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
|
||||
* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
#ifndef OS_COMPATIBILITY_H
|
||||
#define OS_COMPATIBILITY_H
|
||||
|
||||
#include <sys/types.h>
|
||||
|
||||
int
|
||||
os_create_anonymous_file(off_t size);
|
||||
|
||||
#endif /* OS_COMPATIBILITY_H */
|
||||
@@ -1,423 +0,0 @@
|
||||
/*
|
||||
* Copyright © 2012 Intel Corporation
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining
|
||||
* a copy of this software and associated documentation files (the
|
||||
* "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish,
|
||||
* distribute, sublicense, and/or sell copies of the Software, and to
|
||||
* permit persons to whom the Software is furnished to do so, subject to
|
||||
* the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice (including the
|
||||
* next paragraph) shall be included in all copies or substantial
|
||||
* portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
|
||||
* BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
|
||||
* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
#include "xcursor.h"
|
||||
#include "wayland-cursor.h"
|
||||
#include "wayland-client.h"
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdint.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
#include <sys/mman.h>
|
||||
#include <fcntl.h>
|
||||
#include <errno.h>
|
||||
#include <os-compatibility.h>
|
||||
#include <glib.h>
|
||||
|
||||
#define ARRAY_LENGTH(a) (sizeof (a) / sizeof (a)[0])
|
||||
|
||||
struct shm_pool {
|
||||
struct wl_shm_pool *pool;
|
||||
int fd;
|
||||
unsigned int size;
|
||||
unsigned int used;
|
||||
char *data;
|
||||
};
|
||||
|
||||
static struct shm_pool *
|
||||
shm_pool_create(struct wl_shm *shm, int size)
|
||||
{
|
||||
struct shm_pool *pool;
|
||||
|
||||
pool = malloc(sizeof *pool);
|
||||
if (!pool)
|
||||
return NULL;
|
||||
|
||||
pool->fd = os_create_anonymous_file (size);
|
||||
if (pool->fd < 0)
|
||||
goto err_free;
|
||||
|
||||
pool->data = mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_SHARED,
|
||||
pool->fd, 0);
|
||||
|
||||
if (pool->data == MAP_FAILED)
|
||||
goto err_close;
|
||||
|
||||
pool->pool = wl_shm_create_pool(shm, pool->fd, size);
|
||||
pool->size = size;
|
||||
pool->used = 0;
|
||||
|
||||
return pool;
|
||||
|
||||
err_close:
|
||||
close(pool->fd);
|
||||
err_free:
|
||||
free(pool);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static int
|
||||
shm_pool_resize(struct shm_pool *pool, int size)
|
||||
{
|
||||
if (ftruncate(pool->fd, size) < 0)
|
||||
return 0;
|
||||
|
||||
#ifdef HAVE_POSIX_FALLOCATE
|
||||
errno = posix_fallocate(pool->fd, 0, size);
|
||||
if (errno != 0)
|
||||
return 0;
|
||||
#endif
|
||||
|
||||
wl_shm_pool_resize(pool->pool, size);
|
||||
|
||||
munmap(pool->data, pool->size);
|
||||
|
||||
pool->data = mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_SHARED,
|
||||
pool->fd, 0);
|
||||
if (pool->data == (void *)-1)
|
||||
return 0;
|
||||
pool->size = size;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int
|
||||
shm_pool_allocate(struct shm_pool *pool, int size)
|
||||
{
|
||||
int offset;
|
||||
|
||||
if (pool->used + size > pool->size)
|
||||
if (!shm_pool_resize(pool, 2 * pool->size + size))
|
||||
return -1;
|
||||
|
||||
offset = pool->used;
|
||||
pool->used += size;
|
||||
|
||||
return offset;
|
||||
}
|
||||
|
||||
static void
|
||||
shm_pool_destroy(struct shm_pool *pool)
|
||||
{
|
||||
munmap(pool->data, pool->size);
|
||||
wl_shm_pool_destroy(pool->pool);
|
||||
close(pool->fd);
|
||||
free(pool);
|
||||
}
|
||||
|
||||
|
||||
struct wl_cursor_theme {
|
||||
unsigned int cursor_count;
|
||||
struct wl_cursor **cursors;
|
||||
struct wl_shm *shm;
|
||||
struct shm_pool *pool;
|
||||
int size;
|
||||
char *path;
|
||||
};
|
||||
|
||||
struct cursor_image {
|
||||
struct wl_cursor_image image;
|
||||
struct wl_cursor_theme *theme;
|
||||
struct wl_buffer *buffer;
|
||||
int offset; /* data offset of this image in the shm pool */
|
||||
};
|
||||
|
||||
struct cursor {
|
||||
struct wl_cursor cursor;
|
||||
uint32_t total_delay; /* length of the animation in ms */
|
||||
};
|
||||
|
||||
/** Get an shm buffer for a cursor image
|
||||
*
|
||||
* \param image The cursor image
|
||||
* \return An shm buffer for the cursor image. The user should not destroy
|
||||
* the returned buffer.
|
||||
*/
|
||||
struct wl_buffer *
|
||||
wl_cursor_image_get_buffer(struct wl_cursor_image *_img)
|
||||
{
|
||||
struct cursor_image *image = (struct cursor_image *) _img;
|
||||
struct wl_cursor_theme *theme = image->theme;
|
||||
|
||||
if (!image->buffer) {
|
||||
image->buffer =
|
||||
wl_shm_pool_create_buffer(theme->pool->pool,
|
||||
image->offset,
|
||||
_img->width, _img->height,
|
||||
_img->width * 4,
|
||||
WL_SHM_FORMAT_ARGB8888);
|
||||
};
|
||||
|
||||
return image->buffer;
|
||||
}
|
||||
|
||||
static void
|
||||
wl_cursor_image_destroy(struct wl_cursor_image *_img)
|
||||
{
|
||||
struct cursor_image *image = (struct cursor_image *) _img;
|
||||
|
||||
if (image->buffer)
|
||||
wl_buffer_destroy(image->buffer);
|
||||
|
||||
free(image);
|
||||
}
|
||||
|
||||
static void
|
||||
wl_cursor_destroy(struct wl_cursor *cursor)
|
||||
{
|
||||
unsigned int i;
|
||||
|
||||
for (i = 0; i < cursor->image_count; i++)
|
||||
wl_cursor_image_destroy(cursor->images[i]);
|
||||
|
||||
free(cursor->images);
|
||||
free(cursor->name);
|
||||
free(cursor);
|
||||
}
|
||||
|
||||
static struct wl_cursor *
|
||||
wl_cursor_create_from_xcursor_images(struct wl_cursor_theme *theme,
|
||||
const char *name,
|
||||
unsigned int size,
|
||||
unsigned int scale)
|
||||
{
|
||||
char *path;
|
||||
XcursorImages *images;
|
||||
struct cursor *cursor;
|
||||
struct cursor_image *image;
|
||||
int i, nbytes;
|
||||
unsigned int load_size;
|
||||
int load_scale = 1;
|
||||
|
||||
load_size = size * scale;
|
||||
|
||||
path = g_strconcat (theme->path, "/", name, NULL);
|
||||
images = xcursor_load_images (path, load_size);
|
||||
|
||||
if (!images)
|
||||
{
|
||||
g_free (path);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (images->images[0]->width != load_size ||
|
||||
images->images[0]->height != load_size)
|
||||
{
|
||||
xcursor_images_destroy (images);
|
||||
images = xcursor_load_images (path, size);
|
||||
load_scale = scale;
|
||||
}
|
||||
|
||||
g_free (path);
|
||||
|
||||
cursor = malloc(sizeof *cursor);
|
||||
if (!cursor) {
|
||||
xcursor_images_destroy (images);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
cursor->cursor.images =
|
||||
malloc(images->nimage * sizeof cursor->cursor.images[0]);
|
||||
if (!cursor->cursor.images) {
|
||||
free(cursor);
|
||||
xcursor_images_destroy (images);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
cursor->cursor.name = strdup(name);
|
||||
cursor->cursor.size = load_size;
|
||||
cursor->total_delay = 0;
|
||||
|
||||
for (i = 0; i < images->nimage; i++) {
|
||||
image = malloc(sizeof *image);
|
||||
if (image == NULL)
|
||||
break;
|
||||
|
||||
image->theme = theme;
|
||||
image->buffer = NULL;
|
||||
|
||||
image->image.width = images->images[i]->width * load_scale;
|
||||
image->image.height = images->images[i]->height * load_scale;
|
||||
image->image.hotspot_x = images->images[i]->xhot * load_scale;
|
||||
image->image.hotspot_y = images->images[i]->yhot * load_scale;
|
||||
image->image.delay = images->images[i]->delay;
|
||||
|
||||
nbytes = image->image.width * image->image.height * 4;
|
||||
image->offset = shm_pool_allocate(theme->pool, nbytes);
|
||||
if (image->offset < 0) {
|
||||
free(image);
|
||||
break;
|
||||
}
|
||||
|
||||
if (load_scale == 1) {
|
||||
/* copy pixels to shm pool */
|
||||
memcpy(theme->pool->data + image->offset,
|
||||
images->images[i]->pixels, nbytes);
|
||||
}
|
||||
else {
|
||||
/* scale image up while copying it */
|
||||
for (int y = 0; y < image->image.height; y++) {
|
||||
char *p = theme->pool->data + image->offset + y * image->image.width * 4;
|
||||
char *q = ((char *)images->images[i]->pixels) + (y / load_scale) * images->images[i]->width * 4;
|
||||
for (int x = 0; x < image->image.width; x++) {
|
||||
p[4 * x] = q[4 * (x/load_scale)];
|
||||
p[4 * x + 1] = q[4 * (x/load_scale) + 1];
|
||||
p[4 * x + 2] = q[4 * (x/load_scale) + 2];
|
||||
p[4 * x + 3] = q[4 * (x/load_scale) + 3];
|
||||
}
|
||||
}
|
||||
}
|
||||
cursor->total_delay += image->image.delay;
|
||||
cursor->cursor.images[i] = (struct wl_cursor_image *) image;
|
||||
}
|
||||
cursor->cursor.image_count = i;
|
||||
|
||||
if (cursor->cursor.image_count == 0) {
|
||||
free(cursor->cursor.name);
|
||||
free(cursor->cursor.images);
|
||||
free(cursor);
|
||||
xcursor_images_destroy (images);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
xcursor_images_destroy (images);
|
||||
|
||||
return &cursor->cursor;
|
||||
}
|
||||
|
||||
static void
|
||||
load_cursor(struct wl_cursor_theme *theme,
|
||||
const char *name,
|
||||
unsigned int size,
|
||||
unsigned int scale)
|
||||
{
|
||||
struct wl_cursor *cursor;
|
||||
|
||||
cursor = wl_cursor_create_from_xcursor_images(theme, name, size, scale);
|
||||
|
||||
if (cursor) {
|
||||
theme->cursor_count++;
|
||||
theme->cursors =
|
||||
realloc(theme->cursors,
|
||||
theme->cursor_count * sizeof theme->cursors[0]);
|
||||
|
||||
if (theme->cursors == NULL) {
|
||||
theme->cursor_count--;
|
||||
free(cursor);
|
||||
} else {
|
||||
theme->cursors[theme->cursor_count - 1] = cursor;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/** Load a cursor theme to memory shared with the compositor
|
||||
*
|
||||
* \param name The name of the cursor theme to load. If %NULL, the default
|
||||
* theme will be loaded.
|
||||
* \param size Desired size of the cursor images.
|
||||
* \param shm The compositor's shm interface.
|
||||
*
|
||||
* \return An object representing the theme that should be destroyed with
|
||||
* wl_cursor_theme_destroy() or %NULL on error. If no theme with the given
|
||||
* name exists, a default theme will be loaded.
|
||||
*/
|
||||
struct wl_cursor_theme *
|
||||
wl_cursor_theme_create(const char *path, int size, struct wl_shm *shm)
|
||||
{
|
||||
struct wl_cursor_theme *theme;
|
||||
|
||||
theme = malloc(sizeof *theme);
|
||||
if (!theme)
|
||||
return NULL;
|
||||
|
||||
theme->path = strdup (path);
|
||||
theme->size = size;
|
||||
theme->cursor_count = 0;
|
||||
theme->cursors = NULL;
|
||||
|
||||
theme->pool = shm_pool_create(shm, size * size * 4);
|
||||
if (!theme->pool) {
|
||||
free (theme->path);
|
||||
free (theme);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return theme;
|
||||
}
|
||||
|
||||
/** Destroys a cursor theme object
|
||||
*
|
||||
* \param theme The cursor theme to be destroyed
|
||||
*/
|
||||
void
|
||||
wl_cursor_theme_destroy(struct wl_cursor_theme *theme)
|
||||
{
|
||||
unsigned int i;
|
||||
|
||||
for (i = 0; i < theme->cursor_count; i++)
|
||||
wl_cursor_destroy(theme->cursors[i]);
|
||||
|
||||
shm_pool_destroy(theme->pool);
|
||||
|
||||
free(theme->cursors);
|
||||
free(theme->path);
|
||||
free(theme);
|
||||
}
|
||||
|
||||
/** Get the cursor for a given name from a cursor theme
|
||||
*
|
||||
* \param theme The cursor theme
|
||||
* \param name Name of the desired cursor
|
||||
* \return The theme's cursor of the given name or %NULL if there is no
|
||||
* such cursor
|
||||
*/
|
||||
struct wl_cursor *
|
||||
wl_cursor_theme_get_cursor(struct wl_cursor_theme *theme,
|
||||
const char *name,
|
||||
unsigned int scale)
|
||||
{
|
||||
unsigned int i;
|
||||
unsigned int size;
|
||||
|
||||
size = theme->size * scale;
|
||||
|
||||
for (i = 0; i < theme->cursor_count; i++) {
|
||||
if (size == theme->cursors[i]->size &&
|
||||
strcmp(name, theme->cursors[i]->name) == 0)
|
||||
return theme->cursors[i];
|
||||
}
|
||||
|
||||
load_cursor (theme, name, theme->size, scale);
|
||||
|
||||
if (i < theme->cursor_count) {
|
||||
if (size == theme->cursors[i]->size &&
|
||||
strcmp (name, theme->cursors[theme->cursor_count - 1]->name) == 0)
|
||||
return theme->cursors[theme->cursor_count - 1];
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
@@ -1,72 +0,0 @@
|
||||
/*
|
||||
* Copyright © 2012 Intel Corporation
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining
|
||||
* a copy of this software and associated documentation files (the
|
||||
* "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish,
|
||||
* distribute, sublicense, and/or sell copies of the Software, and to
|
||||
* permit persons to whom the Software is furnished to do so, subject to
|
||||
* the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice (including the
|
||||
* next paragraph) shall be included in all copies or substantial
|
||||
* portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
|
||||
* BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
|
||||
* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
#ifndef WAYLAND_CURSOR_H
|
||||
#define WAYLAND_CURSOR_H
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
struct wl_cursor_theme;
|
||||
struct wl_buffer;
|
||||
struct wl_shm;
|
||||
|
||||
struct wl_cursor_image {
|
||||
uint32_t width; /* actual width */
|
||||
uint32_t height; /* actual height */
|
||||
uint32_t hotspot_x; /* hot spot x (must be inside image) */
|
||||
uint32_t hotspot_y; /* hot spot y (must be inside image) */
|
||||
uint32_t delay; /* animation delay to next frame (ms) */
|
||||
};
|
||||
|
||||
struct wl_cursor {
|
||||
unsigned int image_count;
|
||||
struct wl_cursor_image **images;
|
||||
char *name;
|
||||
unsigned int size;
|
||||
};
|
||||
|
||||
struct wl_cursor_theme *
|
||||
wl_cursor_theme_create(const char *name, int size, struct wl_shm *shm);
|
||||
|
||||
void
|
||||
wl_cursor_theme_destroy(struct wl_cursor_theme *theme);
|
||||
|
||||
struct wl_cursor *
|
||||
wl_cursor_theme_get_cursor(struct wl_cursor_theme *theme,
|
||||
const char *name,
|
||||
unsigned int scale);
|
||||
|
||||
struct wl_buffer *
|
||||
wl_cursor_image_get_buffer(struct wl_cursor_image *image);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -1,612 +0,0 @@
|
||||
/*
|
||||
* Copyright © 2002 Keith Packard
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining
|
||||
* a copy of this software and associated documentation files (the
|
||||
* "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish,
|
||||
* distribute, sublicense, and/or sell copies of the Software, and to
|
||||
* permit persons to whom the Software is furnished to do so, subject to
|
||||
* the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice (including the
|
||||
* next paragraph) shall be included in all copies or substantial
|
||||
* portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
|
||||
* BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
|
||||
* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
#include "xcursor.h"
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <dirent.h>
|
||||
|
||||
/*
|
||||
* From libXcursor/include/X11/extensions/Xcursor.h
|
||||
*/
|
||||
|
||||
#define XcursorTrue 1
|
||||
#define XcursorFalse 0
|
||||
|
||||
/*
|
||||
* Cursor files start with a header. The header
|
||||
* contains a magic number, a version number and a
|
||||
* table of contents which has type and offset information
|
||||
* for the remaining tables in the file.
|
||||
*
|
||||
* File minor versions increment for compatible changes
|
||||
* File major versions increment for incompatible changes (never, we hope)
|
||||
*
|
||||
* Chunks of the same type are always upward compatible. Incompatible
|
||||
* changes are made with new chunk types; the old data can remain under
|
||||
* the old type. Upward compatible changes can add header data as the
|
||||
* header lengths are specified in the file.
|
||||
*
|
||||
* File:
|
||||
* FileHeader
|
||||
* LISTofChunk
|
||||
*
|
||||
* FileHeader:
|
||||
* CARD32 magic magic number
|
||||
* CARD32 header bytes in file header
|
||||
* CARD32 version file version
|
||||
* CARD32 ntoc number of toc entries
|
||||
* LISTofFileToc toc table of contents
|
||||
*
|
||||
* FileToc:
|
||||
* CARD32 type entry type
|
||||
* CARD32 subtype entry subtype (size for images)
|
||||
* CARD32 position absolute file position
|
||||
*/
|
||||
|
||||
#define XCURSOR_MAGIC 0x72756358 /* "Xcur" LSBFirst */
|
||||
|
||||
/*
|
||||
* Current Xcursor version number. Will be substituted by configure
|
||||
* from the version in the libXcursor configure.ac file.
|
||||
*/
|
||||
|
||||
#define XCURSOR_LIB_MAJOR 1
|
||||
#define XCURSOR_LIB_MINOR 1
|
||||
#define XCURSOR_LIB_REVISION 13
|
||||
#define XCURSOR_LIB_VERSION ((XCURSOR_LIB_MAJOR * 10000) + \
|
||||
(XCURSOR_LIB_MINOR * 100) + \
|
||||
(XCURSOR_LIB_REVISION))
|
||||
|
||||
/*
|
||||
* This version number is stored in cursor files; changes to the
|
||||
* file format require updating this version number
|
||||
*/
|
||||
#define XCURSOR_FILE_MAJOR 1
|
||||
#define XCURSOR_FILE_MINOR 0
|
||||
#define XCURSOR_FILE_VERSION ((XCURSOR_FILE_MAJOR << 16) | (XCURSOR_FILE_MINOR))
|
||||
#define XCURSOR_FILE_HEADER_LEN (4 * 4)
|
||||
#define XCURSOR_FILE_TOC_LEN (3 * 4)
|
||||
|
||||
typedef struct _XcursorFileToc {
|
||||
XcursorUInt type; /* chunk type */
|
||||
XcursorUInt subtype; /* subtype (size for images) */
|
||||
XcursorUInt position; /* absolute position in file */
|
||||
} XcursorFileToc;
|
||||
|
||||
typedef struct _XcursorFileHeader {
|
||||
XcursorUInt magic; /* magic number */
|
||||
XcursorUInt header; /* byte length of header */
|
||||
XcursorUInt version; /* file version number */
|
||||
XcursorUInt ntoc; /* number of toc entries */
|
||||
XcursorFileToc *tocs; /* table of contents */
|
||||
} XcursorFileHeader;
|
||||
|
||||
/*
|
||||
* The rest of the file is a list of chunks, each tagged by type
|
||||
* and version.
|
||||
*
|
||||
* Chunk:
|
||||
* ChunkHeader
|
||||
* <extra type-specific header fields>
|
||||
* <type-specific data>
|
||||
*
|
||||
* ChunkHeader:
|
||||
* CARD32 header bytes in chunk header + type header
|
||||
* CARD32 type chunk type
|
||||
* CARD32 subtype chunk subtype
|
||||
* CARD32 version chunk type version
|
||||
*/
|
||||
|
||||
#define XCURSOR_CHUNK_HEADER_LEN (4 * 4)
|
||||
|
||||
typedef struct _XcursorChunkHeader {
|
||||
XcursorUInt header; /* bytes in chunk header */
|
||||
XcursorUInt type; /* chunk type */
|
||||
XcursorUInt subtype; /* chunk subtype (size for images) */
|
||||
XcursorUInt version; /* version of this type */
|
||||
} XcursorChunkHeader;
|
||||
|
||||
/*
|
||||
* Here's a list of the known chunk types
|
||||
*/
|
||||
|
||||
/*
|
||||
* Comments consist of a 4-byte length field followed by
|
||||
* UTF-8 encoded text
|
||||
*
|
||||
* Comment:
|
||||
* ChunkHeader header chunk header
|
||||
* CARD32 length bytes in text
|
||||
* LISTofCARD8 text UTF-8 encoded text
|
||||
*/
|
||||
|
||||
#define XCURSOR_COMMENT_TYPE 0xfffe0001
|
||||
#define XCURSOR_COMMENT_VERSION 1
|
||||
#define XCURSOR_COMMENT_HEADER_LEN (XCURSOR_CHUNK_HEADER_LEN + (1 *4))
|
||||
#define XCURSOR_COMMENT_COPYRIGHT 1
|
||||
#define XCURSOR_COMMENT_LICENSE 2
|
||||
#define XCURSOR_COMMENT_OTHER 3
|
||||
#define XCURSOR_COMMENT_MAX_LEN 0x100000
|
||||
|
||||
typedef struct _XcursorComment {
|
||||
XcursorUInt version;
|
||||
XcursorUInt comment_type;
|
||||
char *comment;
|
||||
} XcursorComment;
|
||||
|
||||
/*
|
||||
* Each cursor image occupies a separate image chunk.
|
||||
* The length of the image header follows the chunk header
|
||||
* so that future versions can extend the header without
|
||||
* breaking older applications
|
||||
*
|
||||
* Image:
|
||||
* ChunkHeader header chunk header
|
||||
* CARD32 width actual width
|
||||
* CARD32 height actual height
|
||||
* CARD32 xhot hot spot x
|
||||
* CARD32 yhot hot spot y
|
||||
* CARD32 delay animation delay
|
||||
* LISTofCARD32 pixels ARGB pixels
|
||||
*/
|
||||
|
||||
#define XCURSOR_IMAGE_TYPE 0xfffd0002
|
||||
#define XCURSOR_IMAGE_VERSION 1
|
||||
#define XCURSOR_IMAGE_HEADER_LEN (XCURSOR_CHUNK_HEADER_LEN + (5*4))
|
||||
#define XCURSOR_IMAGE_MAX_SIZE 0x7fff /* 32767x32767 max cursor size */
|
||||
|
||||
typedef struct _XcursorFile XcursorFile;
|
||||
|
||||
struct _XcursorFile {
|
||||
void *closure;
|
||||
int (*read) (XcursorFile *file, unsigned char *buf, int len);
|
||||
int (*write) (XcursorFile *file, unsigned char *buf, int len);
|
||||
int (*seek) (XcursorFile *file, long offset, int whence);
|
||||
};
|
||||
|
||||
typedef struct _XcursorComments {
|
||||
int ncomment; /* number of comments */
|
||||
XcursorComment **comments; /* array of XcursorComment pointers */
|
||||
} XcursorComments;
|
||||
|
||||
/*
|
||||
* From libXcursor/src/file.c
|
||||
*/
|
||||
|
||||
static XcursorImage *
|
||||
XcursorImageCreate (int width, int height)
|
||||
{
|
||||
XcursorImage *image;
|
||||
|
||||
if (width < 0 || height < 0)
|
||||
return NULL;
|
||||
if (width > XCURSOR_IMAGE_MAX_SIZE || height > XCURSOR_IMAGE_MAX_SIZE)
|
||||
return NULL;
|
||||
|
||||
image = malloc (sizeof (XcursorImage) +
|
||||
width * height * sizeof (XcursorPixel));
|
||||
if (!image)
|
||||
return NULL;
|
||||
image->version = XCURSOR_IMAGE_VERSION;
|
||||
image->pixels = (XcursorPixel *) (image + 1);
|
||||
image->size = width > height ? width : height;
|
||||
image->width = width;
|
||||
image->height = height;
|
||||
image->delay = 0;
|
||||
return image;
|
||||
}
|
||||
|
||||
static void
|
||||
XcursorImageDestroy (XcursorImage *image)
|
||||
{
|
||||
free (image);
|
||||
}
|
||||
|
||||
static XcursorImages *
|
||||
XcursorImagesCreate (int size)
|
||||
{
|
||||
XcursorImages *images;
|
||||
|
||||
images = malloc (sizeof (XcursorImages) +
|
||||
size * sizeof (XcursorImage *));
|
||||
if (!images)
|
||||
return NULL;
|
||||
images->nimage = 0;
|
||||
images->images = (XcursorImage **) (images + 1);
|
||||
images->name = NULL;
|
||||
return images;
|
||||
}
|
||||
|
||||
static void
|
||||
XcursorImagesDestroy (XcursorImages *images)
|
||||
{
|
||||
int n;
|
||||
|
||||
if (!images)
|
||||
return;
|
||||
|
||||
for (n = 0; n < images->nimage; n++)
|
||||
XcursorImageDestroy (images->images[n]);
|
||||
if (images->name)
|
||||
free (images->name);
|
||||
free (images);
|
||||
}
|
||||
|
||||
static XcursorBool
|
||||
_XcursorReadUInt (XcursorFile *file, XcursorUInt *u)
|
||||
{
|
||||
unsigned char bytes[4];
|
||||
|
||||
if (!file || !u)
|
||||
return XcursorFalse;
|
||||
|
||||
if ((*file->read) (file, bytes, 4) != 4)
|
||||
return XcursorFalse;
|
||||
*u = ((bytes[0] << 0) |
|
||||
(bytes[1] << 8) |
|
||||
(bytes[2] << 16) |
|
||||
(bytes[3] << 24));
|
||||
return XcursorTrue;
|
||||
}
|
||||
|
||||
static void
|
||||
_XcursorFileHeaderDestroy (XcursorFileHeader *fileHeader)
|
||||
{
|
||||
free (fileHeader);
|
||||
}
|
||||
|
||||
static XcursorFileHeader *
|
||||
_XcursorFileHeaderCreate (int ntoc)
|
||||
{
|
||||
XcursorFileHeader *fileHeader;
|
||||
|
||||
if (ntoc > 0x10000)
|
||||
return NULL;
|
||||
fileHeader = malloc (sizeof (XcursorFileHeader) +
|
||||
ntoc * sizeof (XcursorFileToc));
|
||||
if (!fileHeader)
|
||||
return NULL;
|
||||
fileHeader->magic = XCURSOR_MAGIC;
|
||||
fileHeader->header = XCURSOR_FILE_HEADER_LEN;
|
||||
fileHeader->version = XCURSOR_FILE_VERSION;
|
||||
fileHeader->ntoc = ntoc;
|
||||
fileHeader->tocs = (XcursorFileToc *) (fileHeader + 1);
|
||||
return fileHeader;
|
||||
}
|
||||
|
||||
static XcursorFileHeader *
|
||||
_XcursorReadFileHeader (XcursorFile *file)
|
||||
{
|
||||
XcursorFileHeader head, *fileHeader;
|
||||
XcursorUInt skip;
|
||||
unsigned int n;
|
||||
|
||||
if (!file)
|
||||
return NULL;
|
||||
|
||||
if (!_XcursorReadUInt (file, &head.magic))
|
||||
return NULL;
|
||||
if (head.magic != XCURSOR_MAGIC)
|
||||
return NULL;
|
||||
if (!_XcursorReadUInt (file, &head.header))
|
||||
return NULL;
|
||||
if (!_XcursorReadUInt (file, &head.version))
|
||||
return NULL;
|
||||
if (!_XcursorReadUInt (file, &head.ntoc))
|
||||
return NULL;
|
||||
skip = head.header - XCURSOR_FILE_HEADER_LEN;
|
||||
if (skip)
|
||||
if ((*file->seek) (file, skip, SEEK_CUR) == EOF)
|
||||
return NULL;
|
||||
fileHeader = _XcursorFileHeaderCreate (head.ntoc);
|
||||
if (!fileHeader)
|
||||
return NULL;
|
||||
fileHeader->magic = head.magic;
|
||||
fileHeader->header = head.header;
|
||||
fileHeader->version = head.version;
|
||||
fileHeader->ntoc = head.ntoc;
|
||||
for (n = 0; n < fileHeader->ntoc; n++)
|
||||
{
|
||||
if (!_XcursorReadUInt (file, &fileHeader->tocs[n].type))
|
||||
break;
|
||||
if (!_XcursorReadUInt (file, &fileHeader->tocs[n].subtype))
|
||||
break;
|
||||
if (!_XcursorReadUInt (file, &fileHeader->tocs[n].position))
|
||||
break;
|
||||
}
|
||||
if (n != fileHeader->ntoc)
|
||||
{
|
||||
_XcursorFileHeaderDestroy (fileHeader);
|
||||
return NULL;
|
||||
}
|
||||
return fileHeader;
|
||||
}
|
||||
|
||||
static XcursorBool
|
||||
_XcursorSeekToToc (XcursorFile *file,
|
||||
XcursorFileHeader *fileHeader,
|
||||
int toc)
|
||||
{
|
||||
if (!file || !fileHeader || \
|
||||
(*file->seek) (file, fileHeader->tocs[toc].position, SEEK_SET) == EOF)
|
||||
return XcursorFalse;
|
||||
return XcursorTrue;
|
||||
}
|
||||
|
||||
static XcursorBool
|
||||
_XcursorFileReadChunkHeader (XcursorFile *file,
|
||||
XcursorFileHeader *fileHeader,
|
||||
int toc,
|
||||
XcursorChunkHeader *chunkHeader)
|
||||
{
|
||||
if (!file || !fileHeader || !chunkHeader)
|
||||
return XcursorFalse;
|
||||
if (!_XcursorSeekToToc (file, fileHeader, toc))
|
||||
return XcursorFalse;
|
||||
if (!_XcursorReadUInt (file, &chunkHeader->header))
|
||||
return XcursorFalse;
|
||||
if (!_XcursorReadUInt (file, &chunkHeader->type))
|
||||
return XcursorFalse;
|
||||
if (!_XcursorReadUInt (file, &chunkHeader->subtype))
|
||||
return XcursorFalse;
|
||||
if (!_XcursorReadUInt (file, &chunkHeader->version))
|
||||
return XcursorFalse;
|
||||
/* sanity check */
|
||||
if (chunkHeader->type != fileHeader->tocs[toc].type ||
|
||||
chunkHeader->subtype != fileHeader->tocs[toc].subtype)
|
||||
return XcursorFalse;
|
||||
return XcursorTrue;
|
||||
}
|
||||
|
||||
#define dist(a,b) ((a) > (b) ? (a) - (b) : (b) - (a))
|
||||
|
||||
static XcursorDim
|
||||
_XcursorFindBestSize (XcursorFileHeader *fileHeader,
|
||||
XcursorDim size,
|
||||
int *nsizesp)
|
||||
{
|
||||
unsigned int n;
|
||||
int nsizes = 0;
|
||||
XcursorDim bestSize = 0;
|
||||
XcursorDim thisSize;
|
||||
|
||||
if (!fileHeader || !nsizesp)
|
||||
return 0;
|
||||
|
||||
for (n = 0; n < fileHeader->ntoc; n++)
|
||||
{
|
||||
if (fileHeader->tocs[n].type != XCURSOR_IMAGE_TYPE)
|
||||
continue;
|
||||
thisSize = fileHeader->tocs[n].subtype;
|
||||
if (!bestSize || dist (thisSize, size) < dist (bestSize, size))
|
||||
{
|
||||
bestSize = thisSize;
|
||||
nsizes = 1;
|
||||
}
|
||||
else if (thisSize == bestSize)
|
||||
nsizes++;
|
||||
}
|
||||
*nsizesp = nsizes;
|
||||
return bestSize;
|
||||
}
|
||||
|
||||
static int
|
||||
_XcursorFindImageToc (XcursorFileHeader *fileHeader,
|
||||
XcursorDim size,
|
||||
int count)
|
||||
{
|
||||
unsigned int toc;
|
||||
XcursorDim thisSize;
|
||||
|
||||
if (!fileHeader)
|
||||
return 0;
|
||||
|
||||
for (toc = 0; toc < fileHeader->ntoc; toc++)
|
||||
{
|
||||
if (fileHeader->tocs[toc].type != XCURSOR_IMAGE_TYPE)
|
||||
continue;
|
||||
thisSize = fileHeader->tocs[toc].subtype;
|
||||
if (thisSize != size)
|
||||
continue;
|
||||
if (!count)
|
||||
break;
|
||||
count--;
|
||||
}
|
||||
if (toc == fileHeader->ntoc)
|
||||
return -1;
|
||||
return toc;
|
||||
}
|
||||
|
||||
static XcursorImage *
|
||||
_XcursorReadImage (XcursorFile *file,
|
||||
XcursorFileHeader *fileHeader,
|
||||
int toc)
|
||||
{
|
||||
XcursorChunkHeader chunkHeader;
|
||||
XcursorImage head;
|
||||
XcursorImage *image;
|
||||
int n;
|
||||
XcursorPixel *p;
|
||||
|
||||
if (!file || !fileHeader)
|
||||
return NULL;
|
||||
|
||||
if (!_XcursorFileReadChunkHeader (file, fileHeader, toc, &chunkHeader))
|
||||
return NULL;
|
||||
if (!_XcursorReadUInt (file, &head.width))
|
||||
return NULL;
|
||||
if (!_XcursorReadUInt (file, &head.height))
|
||||
return NULL;
|
||||
if (!_XcursorReadUInt (file, &head.xhot))
|
||||
return NULL;
|
||||
if (!_XcursorReadUInt (file, &head.yhot))
|
||||
return NULL;
|
||||
if (!_XcursorReadUInt (file, &head.delay))
|
||||
return NULL;
|
||||
/* sanity check data */
|
||||
if (head.width > XCURSOR_IMAGE_MAX_SIZE ||
|
||||
head.height > XCURSOR_IMAGE_MAX_SIZE)
|
||||
return NULL;
|
||||
if (head.width == 0 || head.height == 0)
|
||||
return NULL;
|
||||
if (head.xhot > head.width || head.yhot > head.height)
|
||||
return NULL;
|
||||
|
||||
/* Create the image and initialize it */
|
||||
image = XcursorImageCreate (head.width, head.height);
|
||||
if (image == NULL)
|
||||
return NULL;
|
||||
if (chunkHeader.version < image->version)
|
||||
image->version = chunkHeader.version;
|
||||
image->size = chunkHeader.subtype;
|
||||
image->xhot = head.xhot;
|
||||
image->yhot = head.yhot;
|
||||
image->delay = head.delay;
|
||||
n = image->width * image->height;
|
||||
p = image->pixels;
|
||||
while (n--)
|
||||
{
|
||||
if (!_XcursorReadUInt (file, p))
|
||||
{
|
||||
XcursorImageDestroy (image);
|
||||
return NULL;
|
||||
}
|
||||
p++;
|
||||
}
|
||||
return image;
|
||||
}
|
||||
|
||||
static XcursorImages *
|
||||
XcursorXcFileLoadImages (XcursorFile *file, int size)
|
||||
{
|
||||
XcursorFileHeader *fileHeader;
|
||||
XcursorDim bestSize;
|
||||
int nsize;
|
||||
XcursorImages *images;
|
||||
int n;
|
||||
int toc;
|
||||
|
||||
if (!file || size < 0)
|
||||
return NULL;
|
||||
fileHeader = _XcursorReadFileHeader (file);
|
||||
if (!fileHeader)
|
||||
return NULL;
|
||||
bestSize = _XcursorFindBestSize (fileHeader, (XcursorDim) size, &nsize);
|
||||
if (!bestSize)
|
||||
{
|
||||
_XcursorFileHeaderDestroy (fileHeader);
|
||||
return NULL;
|
||||
}
|
||||
images = XcursorImagesCreate (nsize);
|
||||
if (!images)
|
||||
{
|
||||
_XcursorFileHeaderDestroy (fileHeader);
|
||||
return NULL;
|
||||
}
|
||||
for (n = 0; n < nsize; n++)
|
||||
{
|
||||
toc = _XcursorFindImageToc (fileHeader, bestSize, n);
|
||||
if (toc < 0)
|
||||
break;
|
||||
images->images[images->nimage] = _XcursorReadImage (file, fileHeader,
|
||||
toc);
|
||||
if (!images->images[images->nimage])
|
||||
break;
|
||||
images->nimage++;
|
||||
}
|
||||
_XcursorFileHeaderDestroy (fileHeader);
|
||||
if (images->nimage != nsize)
|
||||
{
|
||||
XcursorImagesDestroy (images);
|
||||
images = NULL;
|
||||
}
|
||||
return images;
|
||||
}
|
||||
|
||||
static int
|
||||
_XcursorStdioFileRead (XcursorFile *file, unsigned char *buf, int len)
|
||||
{
|
||||
FILE *f = file->closure;
|
||||
return fread (buf, 1, len, f);
|
||||
}
|
||||
|
||||
static int
|
||||
_XcursorStdioFileWrite (XcursorFile *file, unsigned char *buf, int len)
|
||||
{
|
||||
FILE *f = file->closure;
|
||||
return fwrite (buf, 1, len, f);
|
||||
}
|
||||
|
||||
static int
|
||||
_XcursorStdioFileSeek (XcursorFile *file, long offset, int whence)
|
||||
{
|
||||
FILE *f = file->closure;
|
||||
return fseek (f, offset, whence);
|
||||
}
|
||||
|
||||
static void
|
||||
_XcursorStdioFileInitialize (FILE *stdfile, XcursorFile *file)
|
||||
{
|
||||
file->closure = stdfile;
|
||||
file->read = _XcursorStdioFileRead;
|
||||
file->write = _XcursorStdioFileWrite;
|
||||
file->seek = _XcursorStdioFileSeek;
|
||||
}
|
||||
|
||||
static XcursorImages *
|
||||
XcursorFileLoadImages (FILE *file, int size)
|
||||
{
|
||||
XcursorFile f;
|
||||
|
||||
if (!file)
|
||||
return NULL;
|
||||
|
||||
_XcursorStdioFileInitialize (file, &f);
|
||||
return XcursorXcFileLoadImages (&f, size);
|
||||
}
|
||||
|
||||
XcursorImages *
|
||||
xcursor_load_images (const char *path, int size)
|
||||
{
|
||||
FILE *f;
|
||||
XcursorImages *images;
|
||||
|
||||
f = fopen (path, "r");
|
||||
if (!f)
|
||||
return NULL;
|
||||
|
||||
images = XcursorFileLoadImages (f, size);
|
||||
fclose (f);
|
||||
|
||||
return images;
|
||||
}
|
||||
|
||||
void
|
||||
xcursor_images_destroy (XcursorImages *images)
|
||||
{
|
||||
XcursorImagesDestroy (images);
|
||||
}
|
||||
@@ -1,61 +0,0 @@
|
||||
/*
|
||||
* Copyright © 2002 Keith Packard
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining
|
||||
* a copy of this software and associated documentation files (the
|
||||
* "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish,
|
||||
* distribute, sublicense, and/or sell copies of the Software, and to
|
||||
* permit persons to whom the Software is furnished to do so, subject to
|
||||
* the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice (including the
|
||||
* next paragraph) shall be included in all copies or substantial
|
||||
* portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
|
||||
* BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
|
||||
* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
#ifndef XCURSOR_H
|
||||
#define XCURSOR_H
|
||||
|
||||
typedef int XcursorBool;
|
||||
typedef unsigned int XcursorUInt;
|
||||
|
||||
typedef XcursorUInt XcursorDim;
|
||||
typedef XcursorUInt XcursorPixel;
|
||||
|
||||
typedef struct _XcursorImage {
|
||||
XcursorUInt version; /* version of the image data */
|
||||
XcursorDim size; /* nominal size for matching */
|
||||
XcursorDim width; /* actual width */
|
||||
XcursorDim height; /* actual height */
|
||||
XcursorDim xhot; /* hot spot x (must be inside image) */
|
||||
XcursorDim yhot; /* hot spot y (must be inside image) */
|
||||
XcursorUInt delay; /* animation delay to next frame (ms) */
|
||||
XcursorPixel *pixels; /* pointer to pixels */
|
||||
} XcursorImage;
|
||||
|
||||
/*
|
||||
* Other data structures exposed by the library API
|
||||
*/
|
||||
typedef struct _XcursorImages {
|
||||
int nimage; /* number of images */
|
||||
XcursorImage **images; /* array of XcursorImage pointers */
|
||||
char *name; /* name used to load images */
|
||||
} XcursorImages;
|
||||
|
||||
void
|
||||
xcursor_images_destroy (XcursorImages *images);
|
||||
|
||||
XcursorImages *
|
||||
xcursor_load_images (const char *path, int size);
|
||||
|
||||
#endif
|
||||
@@ -34,7 +34,7 @@
|
||||
#include "gdkwayland.h"
|
||||
#include <gdk-pixbuf/gdk-pixbuf.h>
|
||||
|
||||
#include <cursor/wayland-cursor.h>
|
||||
#include <wayland-cursor.h>
|
||||
|
||||
#define GDK_TYPE_WAYLAND_CURSOR (_gdk_wayland_cursor_get_type ())
|
||||
#define GDK_WAYLAND_CURSOR(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), GDK_TYPE_WAYLAND_CURSOR, GdkWaylandCursor))
|
||||
@@ -149,8 +149,9 @@ _gdk_wayland_cursor_update (GdkWaylandDisplay *display_wayland,
|
||||
if (cursor->name == NULL)
|
||||
return FALSE;
|
||||
|
||||
theme = _gdk_wayland_display_get_cursor_theme (display_wayland);
|
||||
c = wl_cursor_theme_get_cursor (theme, cursor->name, cursor->scale);
|
||||
theme = _gdk_wayland_display_get_scaled_cursor_theme (display_wayland,
|
||||
cursor->scale);
|
||||
c = wl_cursor_theme_get_cursor (theme, cursor->name);
|
||||
if (!c)
|
||||
{
|
||||
const char *fallback;
|
||||
@@ -158,9 +159,9 @@ _gdk_wayland_cursor_update (GdkWaylandDisplay *display_wayland,
|
||||
fallback = name_fallback (cursor->name);
|
||||
if (fallback)
|
||||
{
|
||||
c = wl_cursor_theme_get_cursor (theme, fallback, cursor->scale);
|
||||
c = wl_cursor_theme_get_cursor (theme, name_fallback (cursor->name));
|
||||
if (!c)
|
||||
c = wl_cursor_theme_get_cursor (theme, "left_ptr", cursor->scale);
|
||||
c = wl_cursor_theme_get_cursor (theme, "left_ptr");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -222,6 +223,7 @@ _gdk_wayland_cursor_get_buffer (GdkCursor *cursor,
|
||||
if (wayland_cursor->wl_cursor)
|
||||
{
|
||||
struct wl_cursor_image *image;
|
||||
int cursor_scale;
|
||||
|
||||
if (image_index >= wayland_cursor->wl_cursor->image_count)
|
||||
{
|
||||
@@ -233,12 +235,22 @@ _gdk_wayland_cursor_get_buffer (GdkCursor *cursor,
|
||||
|
||||
image = wayland_cursor->wl_cursor->images[image_index];
|
||||
|
||||
*hotspot_x = image->hotspot_x / wayland_cursor->scale;
|
||||
*hotspot_y = image->hotspot_y / wayland_cursor->scale;
|
||||
cursor_scale = wayland_cursor->scale;
|
||||
if ((image->width % cursor_scale != 0) ||
|
||||
(image->height % cursor_scale != 0))
|
||||
{
|
||||
g_warning (G_STRLOC " cursor image size (%dx%d) not an integer"
|
||||
"multiple of scale (%d)", image->width, image->height,
|
||||
cursor_scale);
|
||||
cursor_scale = 1;
|
||||
}
|
||||
|
||||
*w = image->width / wayland_cursor->scale;
|
||||
*h = image->height / wayland_cursor->scale;
|
||||
*scale = wayland_cursor->scale;
|
||||
*hotspot_x = image->hotspot_x / cursor_scale;
|
||||
*hotspot_y = image->hotspot_y / cursor_scale;
|
||||
|
||||
*w = image->width / cursor_scale;
|
||||
*h = image->height / cursor_scale;
|
||||
*scale = cursor_scale;
|
||||
|
||||
return wl_cursor_image_get_buffer (image);
|
||||
}
|
||||
@@ -304,6 +316,12 @@ _gdk_wayland_cursor_set_scale (GdkCursor *cursor,
|
||||
GDK_WAYLAND_DISPLAY (gdk_cursor_get_display (cursor));
|
||||
GdkWaylandCursor *wayland_cursor = GDK_WAYLAND_CURSOR (cursor);
|
||||
|
||||
if (scale > GDK_WAYLAND_MAX_THEME_SCALE)
|
||||
{
|
||||
g_warning (G_STRLOC ": cursor theme size %u too large", scale);
|
||||
scale = GDK_WAYLAND_MAX_THEME_SCALE;
|
||||
}
|
||||
|
||||
if (wayland_cursor->scale == scale)
|
||||
return;
|
||||
|
||||
|
||||
@@ -720,6 +720,7 @@ static void
|
||||
gdk_wayland_display_finalize (GObject *object)
|
||||
{
|
||||
GdkWaylandDisplay *display_wayland = GDK_WAYLAND_DISPLAY (object);
|
||||
guint i;
|
||||
|
||||
_gdk_wayland_display_finalize_cursors (display_wayland);
|
||||
|
||||
@@ -729,10 +730,13 @@ gdk_wayland_display_finalize (GObject *object)
|
||||
g_free (display_wayland->cursor_theme_name);
|
||||
xkb_context_unref (display_wayland->xkb_context);
|
||||
|
||||
if (display_wayland->cursor_theme)
|
||||
for (i = 0; i < GDK_WAYLAND_THEME_SCALES_COUNT; i++)
|
||||
{
|
||||
wl_cursor_theme_destroy (display_wayland->cursor_theme);
|
||||
display_wayland->cursor_theme = NULL;
|
||||
if (display_wayland->scaled_cursor_themes[i])
|
||||
{
|
||||
wl_cursor_theme_destroy (display_wayland->scaled_cursor_themes[i]);
|
||||
display_wayland->scaled_cursor_themes[i] = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
g_ptr_array_free (display_wayland->monitors, TRUE);
|
||||
@@ -1112,33 +1116,6 @@ gdk_wayland_display_init (GdkWaylandDisplay *display)
|
||||
display->monitors = g_ptr_array_new_with_free_func (g_object_unref);
|
||||
}
|
||||
|
||||
static struct wl_cursor_theme *
|
||||
get_cursor_theme (GdkWaylandDisplay *display_wayland,
|
||||
const char *name,
|
||||
int size)
|
||||
{
|
||||
const char * const *xdg_data_dirs;
|
||||
struct wl_cursor_theme *theme = NULL;
|
||||
int i;
|
||||
|
||||
xdg_data_dirs = g_get_system_data_dirs ();
|
||||
for (i = 0; xdg_data_dirs[i]; i++)
|
||||
{
|
||||
char *path = g_build_filename (xdg_data_dirs[i], "icons", name, "cursors", NULL);
|
||||
|
||||
if (g_file_test (path, G_FILE_TEST_IS_DIR))
|
||||
theme = wl_cursor_theme_create (path, size, display_wayland->shm);
|
||||
|
||||
g_free (path);
|
||||
|
||||
if (theme)
|
||||
return theme;
|
||||
}
|
||||
|
||||
/* This may fall back to builtin cursors */
|
||||
return wl_cursor_theme_create ("/usr/share/icons/default/cursors", size, display_wayland->shm);
|
||||
}
|
||||
|
||||
void
|
||||
gdk_wayland_display_set_cursor_theme (GdkDisplay *display,
|
||||
const gchar *name,
|
||||
@@ -1146,29 +1123,34 @@ gdk_wayland_display_set_cursor_theme (GdkDisplay *display,
|
||||
{
|
||||
GdkWaylandDisplay *display_wayland = GDK_WAYLAND_DISPLAY(display);
|
||||
struct wl_cursor_theme *theme;
|
||||
int i;
|
||||
|
||||
g_assert (display_wayland);
|
||||
g_assert (display_wayland->shm);
|
||||
|
||||
if (size == 0)
|
||||
size = 24;
|
||||
|
||||
if (g_strcmp0 (name, display_wayland->cursor_theme_name) == 0 &&
|
||||
display_wayland->cursor_theme_size == size)
|
||||
return;
|
||||
|
||||
theme = get_cursor_theme (display_wayland, name, size);
|
||||
theme = wl_cursor_theme_load (name, size, display_wayland->shm);
|
||||
if (theme == NULL)
|
||||
{
|
||||
g_warning ("Failed to load cursor theme %s", name);
|
||||
return;
|
||||
}
|
||||
|
||||
if (display_wayland->cursor_theme)
|
||||
for (i = 0; i < GDK_WAYLAND_THEME_SCALES_COUNT; i++)
|
||||
{
|
||||
wl_cursor_theme_destroy (display_wayland->cursor_theme);
|
||||
display_wayland->cursor_theme = NULL;
|
||||
if (display_wayland->scaled_cursor_themes[i])
|
||||
{
|
||||
wl_cursor_theme_destroy (display_wayland->scaled_cursor_themes[i]);
|
||||
display_wayland->scaled_cursor_themes[i] = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
display_wayland->cursor_theme = theme;
|
||||
|
||||
display_wayland->scaled_cursor_themes[0] = theme;
|
||||
if (display_wayland->cursor_theme_name != NULL)
|
||||
g_free (display_wayland->cursor_theme_name);
|
||||
display_wayland->cursor_theme_name = g_strdup (name);
|
||||
@@ -1178,11 +1160,31 @@ gdk_wayland_display_set_cursor_theme (GdkDisplay *display,
|
||||
}
|
||||
|
||||
struct wl_cursor_theme *
|
||||
_gdk_wayland_display_get_cursor_theme (GdkWaylandDisplay *display_wayland)
|
||||
_gdk_wayland_display_get_scaled_cursor_theme (GdkWaylandDisplay *display_wayland,
|
||||
guint scale)
|
||||
{
|
||||
g_assert (display_wayland->cursor_theme_name);
|
||||
struct wl_cursor_theme *theme;
|
||||
|
||||
return display_wayland->cursor_theme;
|
||||
g_assert (display_wayland->cursor_theme_name);
|
||||
g_assert (scale <= GDK_WAYLAND_MAX_THEME_SCALE);
|
||||
g_assert (scale >= 1);
|
||||
|
||||
theme = display_wayland->scaled_cursor_themes[scale - 1];
|
||||
if (!theme)
|
||||
{
|
||||
theme = wl_cursor_theme_load (display_wayland->cursor_theme_name,
|
||||
display_wayland->cursor_theme_size * scale,
|
||||
display_wayland->shm);
|
||||
if (theme == NULL)
|
||||
{
|
||||
g_warning ("Failed to load cursor theme %s with scale %u",
|
||||
display_wayland->cursor_theme_name, scale);
|
||||
return NULL;
|
||||
}
|
||||
display_wayland->scaled_cursor_themes[scale - 1] = theme;
|
||||
}
|
||||
|
||||
return theme;
|
||||
}
|
||||
|
||||
static void
|
||||
|
||||
@@ -25,6 +25,7 @@
|
||||
#include <config.h>
|
||||
#include <stdint.h>
|
||||
#include <wayland-client.h>
|
||||
#include <wayland-cursor.h>
|
||||
#include <wayland-egl.h>
|
||||
#include <gdk/wayland/tablet-unstable-v2-client-protocol.h>
|
||||
#include <gdk/wayland/gtk-shell-client-protocol.h>
|
||||
@@ -38,7 +39,6 @@
|
||||
#ifdef HAVE_XDG_ACTIVATION
|
||||
#include <gdk/wayland/xdg-activation-v1-client-protocol.h>
|
||||
#endif
|
||||
#include <gdk/wayland/cursor/wayland-cursor.h>
|
||||
|
||||
#include <glib.h>
|
||||
#include <gdk/gdkkeys.h>
|
||||
@@ -52,6 +52,9 @@
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
#define GDK_WAYLAND_MAX_THEME_SCALE 4
|
||||
#define GDK_WAYLAND_THEME_SCALES_COUNT GDK_WAYLAND_MAX_THEME_SCALE
|
||||
|
||||
#define GDK_ZWP_POINTER_GESTURES_V1_VERSION 1
|
||||
|
||||
typedef struct _GdkWaylandSelection GdkWaylandSelection;
|
||||
@@ -116,7 +119,7 @@ struct _GdkWaylandDisplay
|
||||
|
||||
GList *current_popups;
|
||||
|
||||
struct wl_cursor_theme *cursor_theme;
|
||||
struct wl_cursor_theme *scaled_cursor_themes[GDK_WAYLAND_THEME_SCALES_COUNT];
|
||||
gchar *cursor_theme_name;
|
||||
int cursor_theme_size;
|
||||
GHashTable *cursor_cache;
|
||||
|
||||
@@ -296,7 +296,7 @@ get_gdk_modifiers (struct xkb_keymap *xkb_keymap,
|
||||
if (mods & (1 << xkb_keymap_mod_get_index (xkb_keymap, "Mod3")))
|
||||
state |= GDK_MOD3_MASK;
|
||||
if (mods & (1 << xkb_keymap_mod_get_index (xkb_keymap, XKB_MOD_NAME_LOGO)))
|
||||
state |= GDK_MOD4_MASK;
|
||||
state |= GDK_MOD4_MASK | GDK_SUPER_MASK;
|
||||
if (mods & (1 << xkb_keymap_mod_get_index (xkb_keymap, "Mod5")))
|
||||
state |= GDK_MOD5_MASK;
|
||||
if (mods & (1 << xkb_keymap_mod_get_index (xkb_keymap, "Super")))
|
||||
@@ -384,7 +384,7 @@ gdk_wayland_keymap_add_virtual_modifiers (GdkKeymap *keymap,
|
||||
xkb_mod_index_t idx;
|
||||
uint32_t mods, real;
|
||||
struct { const char *name; GdkModifierType mask; } vmods[] = {
|
||||
{ "Super", GDK_SUPER_MASK },
|
||||
{ "Super", GDK_SUPER_MASK | GDK_MOD4_MASK },
|
||||
{ "Hyper", GDK_HYPER_MASK },
|
||||
{ "Meta", GDK_META_MASK },
|
||||
{ NULL, 0 }
|
||||
|
||||
@@ -60,7 +60,8 @@ void _gdk_wayland_display_init_cursors (GdkWaylandDisplay *display);
|
||||
void _gdk_wayland_display_finalize_cursors (GdkWaylandDisplay *display);
|
||||
void _gdk_wayland_display_update_cursors (GdkWaylandDisplay *display);
|
||||
|
||||
struct wl_cursor_theme * _gdk_wayland_display_get_cursor_theme (GdkWaylandDisplay *display_wayland);
|
||||
struct wl_cursor_theme * _gdk_wayland_display_get_scaled_cursor_theme (GdkWaylandDisplay *display_wayland,
|
||||
guint scale);
|
||||
|
||||
GdkCursor *_gdk_wayland_display_get_cursor_for_type (GdkDisplay *display,
|
||||
GdkCursorType cursor_type);
|
||||
|
||||
@@ -1337,6 +1337,7 @@ fontconfig_dbus_proxy_open_cb (GObject *object,
|
||||
g_free (screen_wayland->dbus_settings.modules);
|
||||
|
||||
screen_wayland->dbus_settings.modules = g_variant_dup_string (value, NULL);
|
||||
notify_setting (GDK_SCREEN (screen_wayland), "gtk-modules");
|
||||
}
|
||||
|
||||
if (value != NULL)
|
||||
|
||||
@@ -348,7 +348,7 @@ stored_selection_new (GdkWaylandSelection *wayland_selection,
|
||||
static void
|
||||
stored_selection_add_data (StoredSelection *stored_selection,
|
||||
GdkPropMode mode,
|
||||
guchar *data,
|
||||
const guchar *data,
|
||||
gsize data_len)
|
||||
{
|
||||
if (mode == GDK_PROP_MODE_REPLACE)
|
||||
@@ -941,20 +941,41 @@ gdk_wayland_selection_lookup_requestor_buffer (GdkWindow *requestor)
|
||||
|
||||
static gboolean
|
||||
gdk_wayland_selection_source_handles_target (GdkWaylandSelection *wayland_selection,
|
||||
GdkAtom target)
|
||||
GdkAtom *target)
|
||||
{
|
||||
GdkAtom atom;
|
||||
GdkAtom string_atom, utf8_string_atom;
|
||||
GdkAtom string_mimetype, utf8_string_mimetype;
|
||||
guint i;
|
||||
|
||||
if (target == GDK_NONE)
|
||||
if (*target == GDK_NONE)
|
||||
return FALSE;
|
||||
|
||||
string_atom = gdk_atom_intern ("STRING", FALSE);
|
||||
utf8_string_atom = gdk_atom_intern ("UTF8_STRING", FALSE);
|
||||
string_mimetype = gdk_atom_intern (STRING_MIMETYPE, FALSE);
|
||||
utf8_string_mimetype = gdk_atom_intern (UTF8_STRING_MIMETYPE, FALSE);
|
||||
|
||||
for (i = 0; i < wayland_selection->source_targets->len; i++)
|
||||
{
|
||||
atom = g_array_index (wayland_selection->source_targets, GdkAtom, i);
|
||||
|
||||
if (atom == target)
|
||||
if (atom == *target)
|
||||
return TRUE;
|
||||
|
||||
/* We might have converted (UTF8_)STRING to mimetypes when issuing
|
||||
* the source.target requests, convert them back if needed.
|
||||
*/
|
||||
if (atom == string_atom && *target == string_mimetype)
|
||||
{
|
||||
*target = string_atom;
|
||||
return TRUE;
|
||||
}
|
||||
else if (atom == utf8_string_atom && *target == utf8_string_mimetype)
|
||||
{
|
||||
*target = utf8_string_atom;
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
@@ -993,7 +1014,7 @@ gdk_wayland_selection_request_target (GdkWaylandSelection *wayland_selection,
|
||||
AsyncWriteData *write_data;
|
||||
|
||||
if (!window ||
|
||||
!gdk_wayland_selection_source_handles_target (wayland_selection, target))
|
||||
!gdk_wayland_selection_source_handles_target (wayland_selection, &target))
|
||||
{
|
||||
close (fd);
|
||||
return FALSE;
|
||||
|
||||
@@ -3850,6 +3850,8 @@ gdk_wayland_window_focus (GdkWindow *window,
|
||||
{
|
||||
struct xdg_activation_token_v1 *token;
|
||||
struct wl_event_queue *event_queue;
|
||||
struct wl_surface *wl_surface = NULL;
|
||||
GdkWindow *focus_window;
|
||||
|
||||
event_queue = wl_display_create_queue (display_wayland->wl_display);
|
||||
|
||||
@@ -3862,8 +3864,13 @@ gdk_wayland_window_focus (GdkWindow *window,
|
||||
xdg_activation_token_v1_set_serial (token,
|
||||
_gdk_wayland_seat_get_last_implicit_grab_serial (seat, NULL),
|
||||
gdk_wayland_seat_get_wl_seat (seat));
|
||||
xdg_activation_token_v1_set_surface (token,
|
||||
gdk_wayland_window_get_wl_surface (window));
|
||||
|
||||
focus_window = gdk_wayland_device_get_focus (gdk_seat_get_keyboard (seat));
|
||||
if (focus_window)
|
||||
wl_surface = gdk_wayland_window_get_wl_surface (focus_window);
|
||||
if (wl_surface)
|
||||
xdg_activation_token_v1_set_surface (token, wl_surface);
|
||||
|
||||
xdg_activation_token_v1_commit (token);
|
||||
|
||||
while (startup_id == NULL)
|
||||
@@ -4160,6 +4167,27 @@ static void
|
||||
gdk_wayland_window_set_startup_id (GdkWindow *window,
|
||||
const gchar *startup_id)
|
||||
{
|
||||
GdkWindowImplWayland *impl = GDK_WINDOW_IMPL_WAYLAND (window->impl);
|
||||
GdkDisplay *display = gdk_window_get_display (window);
|
||||
GdkWaylandDisplay *display_wayland = GDK_WAYLAND_DISPLAY (display);
|
||||
gchar *free_me = NULL;
|
||||
|
||||
if (!startup_id)
|
||||
{
|
||||
free_me = g_steal_pointer (&display_wayland->startup_notification_id);
|
||||
startup_id = free_me;
|
||||
}
|
||||
|
||||
#ifdef HAVE_XDG_ACTIVATION
|
||||
if (display_wayland->xdg_activation && startup_id)
|
||||
{
|
||||
xdg_activation_v1_activate (display_wayland->xdg_activation,
|
||||
startup_id,
|
||||
impl->display_server.wl_surface);
|
||||
}
|
||||
#endif
|
||||
|
||||
g_free (free_me);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
|
||||
@@ -1,5 +1,3 @@
|
||||
subdir('cursor')
|
||||
|
||||
gdk_wayland_sources = files(
|
||||
'gdkapplaunchcontext-wayland.c',
|
||||
'gdkcursor-wayland.c',
|
||||
@@ -33,12 +31,13 @@ gdk_wayland_deps = [
|
||||
xkbdep,
|
||||
wlclientdep,
|
||||
wlprotocolsdep,
|
||||
wlcursordep,
|
||||
wlegldep,
|
||||
]
|
||||
|
||||
# wayland protocols
|
||||
wlprotocolsdep = dependency('wayland-protocols')
|
||||
proto_dir = wlprotocolsdep.get_pkgconfig_variable('pkgdatadir')
|
||||
proto_dir = wlprotocolsdep.get_variable(pkgconfig: 'pkgdatadir')
|
||||
assert(proto_dir != '', 'Could not get pkgdatadir from wayland-protocols.pc')
|
||||
|
||||
wayland_scanner = find_program('wayland-scanner')
|
||||
@@ -113,5 +112,4 @@ libgdk_wayland = static_library('gdk-wayland',
|
||||
'-DG_LOG_DOMAIN="Gdk"',
|
||||
] + common_cflags,
|
||||
link_args: common_ldflags,
|
||||
link_with: [libwayland_cursor, ],
|
||||
dependencies: [ gdk_deps, gdk_wayland_deps, ])
|
||||
|
||||
@@ -1,56 +0,0 @@
|
||||
## Process this file with automake to produce Makefile.in
|
||||
include $(top_srcdir)/Makefile.decl
|
||||
include gdk-win32-sources.inc
|
||||
|
||||
libgdkincludedir = $(includedir)/gtk-3.0/gdk
|
||||
libgdkwin32includedir = $(includedir)/gtk-3.0/gdk/win32
|
||||
|
||||
AM_CPPFLAGS = \
|
||||
-DG_LOG_DOMAIN=\"Gdk\" \
|
||||
-DG_LOG_USE_STRUCTURED=1 \
|
||||
-DINSIDE_GDK_WIN32 \
|
||||
-I$(top_srcdir) \
|
||||
-I$(top_srcdir)/gdk \
|
||||
-I$(top_builddir)/gdk \
|
||||
$(GDK_HIDDEN_VISIBILITY_CFLAGS) \
|
||||
$(GTK_DEBUG_FLAGS) \
|
||||
$(GDK_DEP_CFLAGS) \
|
||||
$(GDK_WIN32_EXTRA_CFLAGS) \
|
||||
-DGDK_COMPILATION
|
||||
|
||||
if WIN32_GLES
|
||||
AM_CPPFLAGS += "-DGDK_WIN32_ENABLE_EGL=1"
|
||||
endif #WIN32_GLES
|
||||
|
||||
libgdk_win32_DEP_LIBS = \
|
||||
-lhid
|
||||
|
||||
LDADDS = $(libgdk_win32_DEP_LIBS) $(GDK_DEP_LIBS)
|
||||
|
||||
noinst_LTLIBRARIES = libgdk-win32.la
|
||||
|
||||
SUBDIRS=rc
|
||||
|
||||
EXTRA_DIST += \
|
||||
bdfcursor.c \
|
||||
makefile.msc \
|
||||
meson.build
|
||||
|
||||
libgdk_win32_la_LIBADD = \
|
||||
$(LDADDS) \
|
||||
$(NULL)
|
||||
|
||||
libgdkinclude_HEADERS = $(GDK_PUBLIC_H_SRCS_WIN32)
|
||||
|
||||
# ------------------- MSVC Build Items ----------------
|
||||
MSVCPROJS = gdk3-win32
|
||||
|
||||
gdk3_win32_FILES = $(libgdk_win32_la_SOURCES)
|
||||
gdk3_win32_EXCLUDES = dummy
|
||||
|
||||
include $(top_srcdir)/win32/Makefile.msvcproj
|
||||
|
||||
dist-hook: \
|
||||
$(top_builddir)/win32/vs9/gdk3-win32.vcproj
|
||||
|
||||
-include $(top_srcdir)/git.mk
|
||||
@@ -1,72 +0,0 @@
|
||||
# Public header list for GdkWin32
|
||||
|
||||
GDK_PUBLIC_H_SRCS_WIN32 = \
|
||||
gdkwin32.h
|
||||
|
||||
libgdkwin32include_HEADERS = \
|
||||
gdkwin32cursor.h \
|
||||
gdkwin32display.h \
|
||||
gdkwin32displaymanager.h\
|
||||
gdkwin32dnd.h \
|
||||
gdkwin32glcontext.h \
|
||||
gdkwin32keys.h \
|
||||
gdkwin32misc.h \
|
||||
gdkwin32monitor.h \
|
||||
gdkwin32screen.h \
|
||||
gdkwin32window.h
|
||||
|
||||
# Sources list for GdkWin32
|
||||
libgdk_win32_la_SOURCES = \
|
||||
gdkcursor-win32.c \
|
||||
gdkdevicemanager-win32.c \
|
||||
gdkdevicemanager-win32.h \
|
||||
gdkdevice-virtual.c \
|
||||
gdkdevice-virtual.h \
|
||||
gdkdevice-win32.c \
|
||||
gdkdevice-win32.h \
|
||||
gdkdevice-winpointer.c \
|
||||
gdkdevice-winpointer.h \
|
||||
gdkdevice-wintab.c \
|
||||
gdkdevice-wintab.h \
|
||||
gdkdisplay-win32.c \
|
||||
gdkdisplay-win32.h \
|
||||
gdkdisplaymanager-win32.c \
|
||||
gdkdnd-win32.c \
|
||||
gdkevents-win32.c \
|
||||
gdkgeometry-win32.c \
|
||||
gdkglcontext-win32.c \
|
||||
gdkglcontext-win32.h \
|
||||
gdkglobals-win32.c \
|
||||
gdkkeys-win32.c \
|
||||
gdkkeys-win32.h \
|
||||
gdkkeys-win32-impl.c \
|
||||
gdkkeys-win32-impl-wow64.c \
|
||||
gdkmain-win32.c \
|
||||
gdkmonitor-win32.c \
|
||||
gdkmonitor-win32.h \
|
||||
gdkprivate-win32.h \
|
||||
gdkproperty-win32.c \
|
||||
gdkscreen-win32.c \
|
||||
gdkselection-win32.c \
|
||||
gdkselection-win32.h \
|
||||
gdktestutils-win32.c \
|
||||
gdkwin32cursor.h \
|
||||
gdkwin32display.h \
|
||||
gdkwin32displaymanager.h \
|
||||
gdkwin32dnd.h \
|
||||
gdkwin32dnd-private.h \
|
||||
gdkwin32glcontext.h \
|
||||
gdkwin32langnotification.c \
|
||||
gdkwin32langnotification.h \
|
||||
gdkwin32.h \
|
||||
gdkwin32id.c \
|
||||
gdkwin32keys.h \
|
||||
gdkwin32monitor.h \
|
||||
gdkwin32screen.h \
|
||||
gdkwin32window.h \
|
||||
gdkwindow-win32.c \
|
||||
gdkwindow-win32.h \
|
||||
pktdef.h \
|
||||
winpointer.h \
|
||||
wintab.h \
|
||||
xcursors.h
|
||||
@@ -2152,7 +2152,9 @@ _gdk_win32_dnd_do_dragdrop (void)
|
||||
g_strdup_printf ("%#.8lx", hr))))));
|
||||
|
||||
/* Delete dnd selection after successful move */
|
||||
if (hr == DRAGDROP_S_DROP && dwEffect == DROPEFFECT_MOVE)
|
||||
if (hr == DRAGDROP_S_DROP &&
|
||||
dwEffect == DROPEFFECT_MOVE &&
|
||||
(drag_ctx->actions & GDK_ACTION_MOVE))
|
||||
{
|
||||
GdkWin32Selection *win32_sel = _gdk_win32_selection_get ();
|
||||
GdkEvent tmp_event;
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user