Compare commits
588 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| e2efc165d1 | |||
| 9156908a3a | |||
| 934b40f4f3 | |||
| 7dbd3da2dd | |||
| 848a524d95 | |||
| 7f91af2516 | |||
| 3f48bba79b | |||
| b1997c96ea | |||
| 4c61ff2a3a | |||
| 0a37b564d4 | |||
| 5265514c66 | |||
| 3ebcc5a7d5 | |||
| 380ec086eb | |||
| 004b24a818 | |||
| 70d035ae95 | |||
| 055c1b2faa | |||
| 01d1bc3c75 | |||
| defbbb95e9 | |||
| aa76abbbeb | |||
| a0b0cbe98d | |||
| f23bfc6b69 | |||
| 61f37b2b0d | |||
| c0ba041c73 | |||
| 2c8b95a518 | |||
| f62ee9f74a | |||
| a7eb696314 | |||
| f7cee65268 | |||
| 81878617c7 | |||
| 5591076361 | |||
| 37ec227dc1 | |||
| c3737ca316 | |||
| a1ef678ee7 | |||
| 3200c0390d | |||
| 7e0b9704ed | |||
| daecee75b4 | |||
| 700d167b9e | |||
| f6a0dfeb4d | |||
| 8500b1209a | |||
| 018be97e30 | |||
| 9b3c745fc4 | |||
| 91748d1aa3 | |||
| c7168f48d5 | |||
| 51aa16346e | |||
| dfe04d0c9a | |||
| 71acf23697 | |||
| 19b9659cce | |||
| 83159ffabf | |||
| d4feb8929e | |||
| 7951f0e9a9 | |||
| 1f37cbfbfd | |||
| f595791492 | |||
| 09e3529d0e | |||
| 65bb238a3f | |||
| 7e9ae85dd4 | |||
| d0f7364260 | |||
| a628e03042 | |||
| f1d9ccd6c7 | |||
| d6a29e1b8c | |||
| 1918fefbd4 | |||
| cbc8d39887 | |||
| 866050d015 | |||
| 9ac7f906aa | |||
| e0206cafcd | |||
| 7e0db63601 | |||
| a73fa04e92 | |||
| 929a19ca89 | |||
| 83c53369a1 | |||
| f040918ffa | |||
| f888b4958e | |||
| 38b796d2c3 | |||
| 8a9d78ccc5 | |||
| eac2f9b622 | |||
| bd82962e21 | |||
| 6ff7fdfdc4 | |||
| 2d12660916 | |||
| cc4dd0d343 | |||
| c8b0a0dea5 | |||
| 3bb6670f9c | |||
| d354000680 | |||
| a7cd20823d | |||
| abcc477317 | |||
| 6b30de9487 | |||
| f3fa34e850 | |||
| 4c39e06f45 | |||
| 87f454ebd3 | |||
| f30ecaa22f | |||
| 6271326718 | |||
| d60cd1f49f | |||
| b57e10ad60 | |||
| cc35a35752 | |||
| 90c9a4ba05 | |||
| 2f58c7c060 | |||
| 08f31f8f4a | |||
| f2868f5cf3 | |||
| 0caa3dbccf | |||
| d219596212 | |||
| 26b6071db8 | |||
| 7886c645c4 | |||
| a8363a9887 | |||
| 87aed887be | |||
| 0dde06124e | |||
| 1d02739992 | |||
| a8262c7581 | |||
| 1517acee55 | |||
| 7b3129ad4f | |||
| 95e6a0650b | |||
| 7edd465f6d | |||
| cd5502ddf4 | |||
| 828f634d5c | |||
| 85fa6ba631 | |||
| 893fc1dec4 | |||
| 96774e8b5c | |||
| f443dbe8c1 | |||
| 133e8fc03f | |||
| 2ce63a86ba | |||
| 609cb85f3a | |||
| cb56bbe430 | |||
| 8fc72c902d | |||
| a9f0704ae1 | |||
| 33bec5a4fb | |||
| 279d7bb2f5 | |||
| c926b28d96 | |||
| ff47cb0c51 | |||
| b9bb63b1ab | |||
| 9ca3bacddf | |||
| f5482e6954 | |||
| fff08fa319 | |||
| d20101e878 | |||
| af350b20b1 | |||
| 8535e2e417 | |||
| 88b08c05c0 | |||
| dad773b129 | |||
| 07124b5e99 | |||
| ba883b55ee | |||
| d35ecbb5a4 | |||
| a3cb26cad7 | |||
| 1ee80fa4c6 | |||
| db85e888c7 | |||
| 2ba118c961 | |||
| 476d3ea170 | |||
| 8cdee69a82 | |||
| 2c2ea83333 | |||
| c2672b4f05 | |||
| 2d02854685 | |||
| 9ae6d09234 | |||
| 21fddc3994 | |||
| ecc612b1a2 | |||
| 1945c7a1a8 | |||
| 2ee5aee4a9 | |||
| cfbbcf5fc4 | |||
| 7ff9222600 | |||
| 9b011081c5 | |||
| 0c46d94ec3 | |||
| a7a4a459ea | |||
| 30405ee68c | |||
| b5cc0d8fcd | |||
| a53bdcd222 | |||
| 1d1405edd8 | |||
| 8e24626c49 | |||
| bcc539ca07 | |||
| 60b4a3869a | |||
| 7f846ce7d8 | |||
| 2e21a2256e | |||
| bbcfc261e0 | |||
| 4ccbe10571 | |||
| b48fbcbb7c | |||
| c2da6fc299 | |||
| 2ba6dcbce5 | |||
| b19c524a83 | |||
| 16a6c39a9b | |||
| 8da5111edd | |||
| 2e7ac262be | |||
| cb71d083ab | |||
| b47bdda271 | |||
| 9e926f9a28 | |||
| 5a0759bc1b | |||
| d92df4ff2c | |||
| 22fd5b5766 | |||
| b685eb1779 | |||
| 5ee381a596 | |||
| 59136773b8 | |||
| 7a75b89efe | |||
| b2caaaa3f9 | |||
| b7e5a2dd10 | |||
| e52aa73b36 | |||
| 2d415d9354 | |||
| e6e306ae8e | |||
| 79d8c9dff0 | |||
| ba307aa35e | |||
| fa520c5769 | |||
| e193cd1cf1 | |||
| 1bf354aec8 | |||
| 31cb0fee9c | |||
| b0b2992165 | |||
| 48e40762c7 | |||
| fa6994d033 | |||
| 209f908a03 | |||
| 8e74e515c7 | |||
| 46dac1aba4 | |||
| 4b95d74068 | |||
| 34bcc71f4e | |||
| 7751001ff1 | |||
| e42d8598ca | |||
| 7a11fcf054 | |||
| 154fa9817d | |||
| 6e8cc589f2 | |||
| 56d44fd10c | |||
| 0102e0f914 | |||
| f12b44d697 | |||
| b5e959b6ff | |||
| 314531640f | |||
| a0f273465e | |||
| 3dbeab2b4a | |||
| f38d8f8c1b | |||
| a36c564b54 | |||
| 323d86b6e4 | |||
| 3a7fbb3b30 | |||
| a09df57a5f | |||
| b0f8426c29 | |||
| dbaaa701ad | |||
| ef3fe9ead3 | |||
| 6551ddd8e0 | |||
| 332d41792d | |||
| 240cb0bb5a | |||
| 5c8bb51a58 | |||
| 68fce76faf | |||
| b88bffac23 | |||
| 4f78abddfc | |||
| 6e2d14037c | |||
| 9781ffae51 | |||
| d65a4c2e0a | |||
| 92bef46b4c | |||
| f4bb394d60 | |||
| e0befe02fa | |||
| 3e68abddbc | |||
| 84ff404a17 | |||
| 9604eb5c53 | |||
| 9c8e53b968 | |||
| eb01ba8573 | |||
| 7fd9f2d31e | |||
| 3bd7b379c8 | |||
| 0454a1cace | |||
| a46bc8b5a3 | |||
| 5d27915aa4 | |||
| cac2845bd6 | |||
| 3ee7604d6e | |||
| 0fa391cc24 | |||
| 0a0323813e | |||
| fcfabb2fd3 | |||
| bb16f1a0ff | |||
| c179d5eb6e | |||
| ba83a2c46b | |||
| fc9a71abae | |||
| 600003e83f | |||
| b485cf91b5 | |||
| 577f1a992e | |||
| a2efd3f3dc | |||
| 98afaed718 | |||
| 491e696226 | |||
| 9f6deab88c | |||
| 0f3396d742 | |||
| 9d8fadee97 | |||
| 0e01668683 | |||
| bcd920c288 | |||
| 6c4261338a | |||
| a2f81d83bb | |||
| cbb22b2916 | |||
| 41f6c469e3 | |||
| e4e2b7687d | |||
| f08eeecae6 | |||
| f7a47a632c | |||
| 1122508e1c | |||
| 6b4d95e86d | |||
| e9d84e2653 | |||
| 45aa018839 | |||
| f0bea1ab1d | |||
| 04ff9b58f1 | |||
| 72ed0c9539 | |||
| 4e2f59ad23 | |||
| cc967849f7 | |||
| add3592809 | |||
| b202c44fd8 | |||
| 8c09b3994a | |||
| b9b2f7711b | |||
| d465d790f0 | |||
| 46828f8e0a | |||
| 23b91856e1 | |||
| e36b629c36 | |||
| fa47667df9 | |||
| bb498ba554 | |||
| 5fc27126f5 | |||
| cccb66afb4 | |||
| 5d258bf314 | |||
| 464888a2da | |||
| 91498c7db3 | |||
| 119d8f996f | |||
| 81c4fa5d50 | |||
| 5ca21f6dbb | |||
| 7a15bf56a0 | |||
| 3000384b90 | |||
| fd71badf16 | |||
| ead2c3f38f | |||
| 3059df0d4d | |||
| f0d5b9561b | |||
| b13362b369 | |||
| b68256f7a1 | |||
| 342aee304a | |||
| abc171c93a | |||
| 5c0d242ea3 | |||
| d76c7c82fc | |||
| 5d3ccfe21e | |||
| 44e7df2a14 | |||
| 9f84e9a2c5 | |||
| 9112ca7f88 | |||
| 4c43e8468a | |||
| d41dfcab35 | |||
| 80458ff586 | |||
| 4fe6cba27a | |||
| 5b328804ec | |||
| f3f75f62e8 | |||
| 68eb897900 | |||
| 5cd21e5579 | |||
| bc3a939f90 | |||
| 2246a1e3c9 | |||
| af9f458bc9 | |||
| e3fb265b90 | |||
| 57f6f8307d | |||
| ab628e365d | |||
| 4107e670d0 | |||
| 57a4558691 | |||
| 796245ca30 | |||
| 146b1e0d42 | |||
| c96be5a00b | |||
| 92711d7f79 | |||
| 8f82b06676 | |||
| 2946ca859c | |||
| 49e3c10575 | |||
| 8e540f2f62 | |||
| 5aa939dc93 | |||
| bd13a5a5ce | |||
| d2a4febfa7 | |||
| 688426f57f | |||
| 9bf8449a2e | |||
| b6343a1f4d | |||
| c830834170 | |||
| 2760b020a8 | |||
| ff40208857 | |||
| c60ea284c5 | |||
| 238239c00d | |||
| fb79115314 | |||
| 8cc04e8337 | |||
| 9f142161e4 | |||
| 463ee95136 | |||
| e8bffe0c56 | |||
| 3146f29d3a | |||
| c6901a8b95 | |||
| 3274f3a6cc | |||
| f82a6421f4 | |||
| 97f3a4397a | |||
| 7ea53087ca | |||
| af2d039717 | |||
| af8b247b45 | |||
| cbf118c285 | |||
| 4b1c02560f | |||
| 8dc234717e | |||
| 79995748e0 | |||
| 12913d1a35 | |||
| ade22d00f2 | |||
| c03ce68c38 | |||
| 4e5ef1a377 | |||
| 81c0e7af0e | |||
| 3067fb8c24 | |||
| 382d6c1bcb | |||
| 299a91bd46 | |||
| 9c6ae95ece | |||
| 855e4cb88e | |||
| c229716796 | |||
| 80e5f28ca0 | |||
| 2de14479b2 | |||
| d219bd4d5a | |||
| 255e2dd704 | |||
| 10d2e44ae2 | |||
| 25afe278e3 | |||
| 4f962c6dbf | |||
| 6e4c6ce6c3 | |||
| 7130656d37 | |||
| 5c85f2cccc | |||
| 0e5964ce27 | |||
| ff43627167 | |||
| 6c36eaea98 | |||
| cacd8e6254 | |||
| 08f60dbcf6 | |||
| 63f534f4b3 | |||
| 6ff326a82f | |||
| 8af082f3c7 | |||
| 07324131b3 | |||
| 67274f7d9d | |||
| 9b69fe7a7e | |||
| c94993e29b | |||
| 60750b3ffd | |||
| 136b88534c | |||
| 4c8f7c4aca | |||
| 0cbf45a663 | |||
| b8e2430486 | |||
| 814c55d473 | |||
| beed1f660e | |||
| e6be9a2a4d | |||
| 51220e3a31 | |||
| 5ab5a5166e | |||
| 5b19d6b1b8 | |||
| ef72f3cbce | |||
| 5f675181ce | |||
| e10f616065 | |||
| 6b85162f43 | |||
| 53bc2566b3 | |||
| e1aeb73a62 | |||
| bb844e44b6 | |||
| 9e3b814580 | |||
| bcd3c42b92 | |||
| b5e4a9d716 | |||
| fe220402cb | |||
| e75d91e7b1 | |||
| b68e55ecce | |||
| 2a8e1745cf | |||
| 8ed4b48b4c | |||
| d96a7c9e87 | |||
| 856486fea8 | |||
| a9499dbe48 | |||
| 081488f8f2 | |||
| 7de01b31ef | |||
| d15fbee353 | |||
| fda98ba562 | |||
| c006c2fdbc | |||
| 6e197ffac9 | |||
| e00de3814e | |||
| a443b525c3 | |||
| 456ca1062b | |||
| e5240de5bc | |||
| a65ae5fb40 | |||
| af1d5362ab | |||
| 9cf48ec3f8 | |||
| 6f26d0dc0c | |||
| 43433f3ccd | |||
| 01c349995c | |||
| cb935d947c | |||
| 31f7b55306 | |||
| 1e7982212f | |||
| 9b2e487a7f | |||
| 4a371de393 | |||
| 084db132e9 | |||
| 489d0db6d1 | |||
| 352f678ac1 | |||
| ce79fac68d | |||
| ceec7e9cb8 | |||
| 46b38c00ad | |||
| ad536f333b | |||
| bdb3a4d505 | |||
| 7dfb99c2ca | |||
| 53eb42338a | |||
| b4b9aa1e5f | |||
| 5fef3ff971 | |||
| 308796628a | |||
| bd9ed01839 | |||
| 176c1046cb | |||
| 6fa63bd92c | |||
| 87e1615610 | |||
| ed0600e8c0 | |||
| 0e338d31a4 | |||
| 4d18a346c1 | |||
| 09c94c27e1 | |||
| 5f022cbc12 | |||
| a41e0ce4a4 | |||
| b49502c167 | |||
| 0eaa76a032 | |||
| 32332b3a03 | |||
| f44af2e6ae | |||
| 7d23b33ac5 | |||
| 11bfce3f36 | |||
| e834a2b089 | |||
| 7e253f4bd3 | |||
| c9a54ba1c2 | |||
| 4e0adbc8dc | |||
| d69f998c26 | |||
| 05e4e7fe87 | |||
| c4ff07025b | |||
| 75768a4d00 | |||
| 492469a94a | |||
| ecc9946566 | |||
| 25dc32c1a1 | |||
| dee5142c91 | |||
| 279b81d202 | |||
| 86dd1e37a7 | |||
| 6d0b0cb99b | |||
| 4c2f3e3105 | |||
| 3c40b217b9 | |||
| e7e047fc3f | |||
| 8df7f88b66 | |||
| c329940cf1 | |||
| 3fd23fcfd1 | |||
| 56074fbf3c | |||
| 6ab1ab9f46 | |||
| 706c80be51 | |||
| 7d18f2fd3c | |||
| 8af29e3756 | |||
| beb2caacb9 | |||
| 91ef88f77f | |||
| 9ce824d360 | |||
| 8397f22762 | |||
| 2b6f3f7867 | |||
| b0fb67eabc | |||
| 03f2eaf23a | |||
| f95cecba2d | |||
| f3328330b6 | |||
| 3a1a7135a2 | |||
| c6c13bd66b | |||
| 934ac3f6ef | |||
| 7b6efc29cc | |||
| 0ee453a45b | |||
| 8caba9536c | |||
| 41026987be | |||
| 022cf4252f | |||
| 2cc7a9c034 | |||
| 87103b9a14 | |||
| 87673af98c | |||
| 30ddb3e1a4 | |||
| 2c9072314a | |||
| f922aee5e2 | |||
| bd56e0d918 | |||
| 42c3b91fa7 | |||
| c490ac4ed8 | |||
| f1b812731d | |||
| 260a6aaa71 | |||
| 55e8736613 | |||
| d3eacaf840 | |||
| 6b126a70e2 | |||
| f301b7874e | |||
| 19670f9fe6 | |||
| 65457e6d12 | |||
| f8cb3fc3a8 | |||
| 38e68815c6 | |||
| 4de0e4b1ed | |||
| 29d2a45641 | |||
| 29a590014d | |||
| 6675451cea | |||
| 47435d0e6b | |||
| 2157b69f1f | |||
| 4ffdf917bb | |||
| e3f84e9bf4 | |||
| 20c2d6c992 | |||
| 4c44ffda17 | |||
| 7e49a02acf | |||
| e672c02441 | |||
| b654130bd7 | |||
| d46c072c4d | |||
| 15acb4c340 | |||
| efaa6524ac | |||
| b2877605cf | |||
| a4e1d01649 | |||
| e09c103187 | |||
| 5835cb2bc2 | |||
| 77a4e2ec37 | |||
| 4ac7db34f7 | |||
| 8e84eff355 | |||
| d42559bf2f | |||
| 4bc58f03b6 | |||
| 0ba60b7703 | |||
| 5a86b78493 | |||
| 01b29a16ff | |||
| ab4cc2540b | |||
| 4c5279c956 | |||
| a12ae1411a | |||
| e57891fd6b | |||
| bb1e8e47f5 | |||
| 14cda4839a | |||
| f7f4ecf006 | |||
| 7f6365cf9f | |||
| d38a148f0e | |||
| 46459f66f9 | |||
| 40302a5268 | |||
| a03a3c3af9 | |||
| 55210ae464 | |||
| f3408d89d5 | |||
| a0327e521e | |||
| 58c0418418 | |||
| 2b509a34d4 | |||
| 5b8a3bac70 | |||
| c255ba68fc | |||
| 72a45366e2 |
@@ -0,0 +1,18 @@
|
||||
image: registry.gitlab.gnome.org/gnome/gtk/gtk-3-24:v1
|
||||
|
||||
stages:
|
||||
- build
|
||||
|
||||
before_script:
|
||||
- mkdir -p _ccache
|
||||
- export CCACHE_BASEDIR=${PWD}
|
||||
- export CCACHE_DIR=${PWD}/_ccache
|
||||
|
||||
cache:
|
||||
paths:
|
||||
- _ccache/
|
||||
|
||||
build:
|
||||
stage: build
|
||||
script:
|
||||
- bash -x ./.gitlab-ci/test-docker.sh
|
||||
@@ -0,0 +1,60 @@
|
||||
FROM fedora:28
|
||||
|
||||
RUN dnf -y install \
|
||||
adwaita-icon-theme \
|
||||
atk-devel \
|
||||
at-spi2-atk-devel \
|
||||
avahi-gobject-devel \
|
||||
cairo-devel \
|
||||
cairo-gobject-devel \
|
||||
ccache \
|
||||
colord-devel \
|
||||
cups-devel \
|
||||
fribidi-devel \
|
||||
gcc \
|
||||
gcc-c++ \
|
||||
gdk-pixbuf2-devel \
|
||||
gdk-pixbuf2-modules \
|
||||
gettext \
|
||||
gettext-devel \
|
||||
git \
|
||||
glib2-devel \
|
||||
gobject-introspection-devel \
|
||||
graphene-devel \
|
||||
gtk-doc \
|
||||
hicolor-icon-theme \
|
||||
itstool \
|
||||
json-glib-devel \
|
||||
libepoxy-devel \
|
||||
libmount-devel \
|
||||
librsvg2 \
|
||||
libXcomposite-devel \
|
||||
libXcursor-devel \
|
||||
libXcursor-devel \
|
||||
libXdamage-devel \
|
||||
libXfixes-devel \
|
||||
libXi-devel \
|
||||
libXinerama-devel \
|
||||
libxkbcommon-devel \
|
||||
libXrandr-devel \
|
||||
libXrender-devel \
|
||||
make \
|
||||
mesa-libEGL-devel \
|
||||
mesa-libwayland-egl-devel \
|
||||
meson \
|
||||
pango-devel \
|
||||
redhat-rpm-config \
|
||||
vulkan-devel \
|
||||
wayland-devel \
|
||||
wayland-protocols-devel \
|
||||
xorg-x11-server-Xvfb
|
||||
|
||||
ARG HOST_USER_ID=5555
|
||||
ENV HOST_USER_ID ${HOST_USER_ID}
|
||||
RUN useradd -u $HOST_USER_ID -ms /bin/bash user
|
||||
|
||||
USER user
|
||||
WORKDIR /home/user
|
||||
|
||||
ENV LANG C.utf8
|
||||
ENV PATH="/usr/lib64/ccache:${PATH}"
|
||||
Executable
+19
@@ -0,0 +1,19 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# This script builds an image from the Dockerfile, starts a container with
|
||||
# the parent directory mounted as working directory and start a bash session
|
||||
# there so you can test things.
|
||||
# Once you are happy you can push it to the docker hub:
|
||||
# sudo docker push "${TAG}"
|
||||
|
||||
set -e
|
||||
|
||||
TAG="registry.gitlab.gnome.org/gnome/gtk/gtk-3-24:v1"
|
||||
|
||||
# HOST_USER_ID gets used to create a user with the same ID so that files
|
||||
# created in the mounted volume have the same owner
|
||||
sudo docker build \
|
||||
--build-arg HOST_USER_ID="$UID" --tag "${TAG}" --file "Dockerfile" .
|
||||
sudo docker run --security-opt label=disable \
|
||||
--rm --volume "$(pwd)/..:/home/user/app" --workdir "/home/user/app" \
|
||||
--tty --interactive "${TAG}" bash
|
||||
Executable
+6
@@ -0,0 +1,6 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
./autogen.sh
|
||||
make -j8
|
||||
@@ -1,3 +1,250 @@
|
||||
Overview of Changes in GTK+ 3.23.0
|
||||
==================================
|
||||
|
||||
* Dependency bumps:
|
||||
- Require libepoxy 1.4
|
||||
- Require pango 1.41
|
||||
|
||||
* New font chooser features:
|
||||
- Allow setting OpenType font features
|
||||
- Show examples for OpenType font features
|
||||
- Allow selecting OpenType font variations
|
||||
- Support levels of details for selection
|
||||
|
||||
* New Emoji features:
|
||||
- Support a completion popup for Emoji
|
||||
- Drop Ctrl-Shift-e shortcut
|
||||
|
||||
* Bugs fixed:
|
||||
#85 widgetDragDestFindTarget introspection data does not show nullable...
|
||||
#154 Documentation: Lifecycle of Editables inside GtkCellRenderers is no...
|
||||
#193 Document that GtkUIManager is deprecated by GtkBuilder
|
||||
#199 MenuButton not notified when its Popover is destroyed, still access...
|
||||
#292 GtkRanges should send ::change-value even if not realized
|
||||
#450 Menu navigation triangle doesn't work anymore
|
||||
#792 Focus events are not always matched
|
||||
#898 emoji-chooser: search for flags doesn't work
|
||||
#1053 Scroll cursor gets left behind if a child widget steals the scroll
|
||||
#1059 -Wparentheses warnings in GTK+ headers when compiling C++ code with...
|
||||
#1065 GtkScrollbar horizontal mouse wheel scroll direction is wrong
|
||||
#1069 Thread 1 "glade" received signal SIGFPE, Arithmetic exception.
|
||||
#1115 gtk icon theme searches system dirs before user dirs
|
||||
407242 GtkScale: Up/Down keys decrease/increase value, which is opposite...
|
||||
686109 gtk_print_context_get_hard_margins should return page size specif...
|
||||
765327 GtkPlug scaled to half the expected size on HiDPI screens
|
||||
772817 File Chooser: Path arrow button frames are reversed and detached ...
|
||||
775279 early calls to libepoxy cause all gtk3 programs to abort when the...
|
||||
786524 ocument GTK_OVERLAY_SCROLLING environment variable
|
||||
787867 OSX macports pango text size appears to vary between version 1.40...
|
||||
789215 GtkScrolledWindow and GtkIconView atk objects can cause a segfaul...
|
||||
791542 GDK 3 Selections documentation makes references to X
|
||||
791802 Fix direction value moves on scroll/keypress over RTL/inverted ra...
|
||||
|
||||
* Translation updates:
|
||||
Catalan
|
||||
Finnish
|
||||
Polish
|
||||
Russian
|
||||
Spanish
|
||||
|
||||
|
||||
Overview of Changes in GTK+ 3.22.30
|
||||
===================================
|
||||
|
||||
* gtk-demo has a new 'Widgetbowl' demo
|
||||
|
||||
* The wayland backend now supports the stable xdg-shell protocol
|
||||
|
||||
* Bugs fixed:
|
||||
#28 Adwaita: Selection mode styling flickers
|
||||
#83 Completion popup on non-default GdkDisplay freezes GtkFileChooserDialog
|
||||
#88 GtkSpinButton: Buttons aren't de/sensitised as they were in GTK+ 3
|
||||
#114 All Wayland apps crash when focused (gtk_gesture_multi_press_end→...
|
||||
#129 Segfault in `wl_proxy_marshal()`
|
||||
#132 GtkTextView auto-scrolling to insert mark upon focus changes due to...
|
||||
#141 GtkEntry: add a way to set the font to monospace
|
||||
#146 GtkExpander arrow is not dimmed when the Expander is not :sensitive
|
||||
#156 Transfer annotation for gtk_gl_area_new is incorrect
|
||||
#157 Crashes in gdkdisplay-wayland when clicking any button/menu item
|
||||
#163 Unable to explicitly set GtkModelButton role
|
||||
705509 notebook popup window on tabs shows underscores
|
||||
745128 Search is useless for translated app names
|
||||
748784 GtkProgressBar text cannot be superimposed on the progress bar
|
||||
791939 Add xdg-shell (stable) support
|
||||
792632 Emoji Chooser: section buttons have no tooltips
|
||||
793062 Crash under gdk_wayland_window_attach_image()
|
||||
|
||||
* Translation updates:
|
||||
Brazilian Portuguese
|
||||
Catalan
|
||||
Chinese
|
||||
Chinese (Taiwan)
|
||||
Dutch
|
||||
French
|
||||
German
|
||||
Hungarian
|
||||
Indonesian
|
||||
Italian
|
||||
Latvian
|
||||
Serbian
|
||||
Slovak
|
||||
Slovenian
|
||||
Turkish
|
||||
|
||||
|
||||
Overview of Changes in GTK+ 3.22.29
|
||||
====================================
|
||||
|
||||
* Wayland
|
||||
- add an input method based on the text protocol
|
||||
|
||||
* File chooser
|
||||
- Stop activating without double-click
|
||||
|
||||
* Bugs fixed:
|
||||
710888 GtkInfoBar not shown after calling gtk_widget_show
|
||||
743975 Better deprecation information for GtkStatusIcon
|
||||
775546 gdkscreen-x11: Don't try to calculate a refresh rate for RandR 1.3...
|
||||
794008 GtkListBoxRow signal poorly documented
|
||||
|
||||
* Translation updates:
|
||||
Brazilian Portuguese
|
||||
British English
|
||||
Catalan
|
||||
Croatian
|
||||
Czech
|
||||
Danish
|
||||
Dutch
|
||||
Esperanto
|
||||
Estonian
|
||||
French
|
||||
Friulian
|
||||
Galician
|
||||
German
|
||||
Hungarian
|
||||
Icelandic
|
||||
Indonesian
|
||||
Italian
|
||||
Kazakh
|
||||
Korean
|
||||
Latvian
|
||||
Lithuanian
|
||||
Polish
|
||||
Russian
|
||||
Scottish Gaelic
|
||||
Serbian
|
||||
Serbian Latin
|
||||
Slovak
|
||||
Swedish
|
||||
Turkish
|
||||
|
||||
|
||||
2Overview of Changes in GTK+ 3.22.28
|
||||
===================================
|
||||
|
||||
* Fix the build
|
||||
|
||||
* Improve frame clock accuracy (#787665)
|
||||
|
||||
|
||||
2Overview of Changes in GTK+ 3.22.27
|
||||
===================================
|
||||
|
||||
* Require libcloudproviders 0.2.0
|
||||
|
||||
* The Emoji chooser can now be used with GtkTextView as well
|
||||
|
||||
* The Emoji chooser avoids fallback sequences that break the grid
|
||||
|
||||
* GTK+ is now using ~/.config/gtk-3.0/settings.ini when using
|
||||
Wayland without dconf
|
||||
|
||||
* Make fuse-mounted network filesystems show up in Other Locations
|
||||
|
||||
* The font chooser dialog supports search now
|
||||
|
||||
* Bugs fixed:
|
||||
737175 most horizontal sliders are inverted when scrolled with mouse wheel
|
||||
741633 GtkListBoxRow should implement GtkActionable
|
||||
771986 Inconsistent 'row-activated' signal emission before drag'n'drop, 'acti...
|
||||
774248 Desktop-wide text scaling factor is ignored by gtk_widget_override_fon...
|
||||
779009 Missing property-change::accessible-description events when the toolti...
|
||||
786123 GtkPlacesSidebar: Add support for libcloudproviders
|
||||
786509 GDK W32: OLE2 DnD is completely broken
|
||||
786528 Please make the output deterministic
|
||||
787089 win32: GtkWindow of type GTK_WINDOW_POPUP/GDK_WINDOW_TEMP leaks memory...
|
||||
787128 Re-add FUSE network mounts in local-only mode
|
||||
789054 Firefox crashes @gdk_window_begin_move_drag() on WM without _NET_WM_MO...
|
||||
789160 Add Windows compatible emoji shortcuts
|
||||
789268 Keyboard grab by popup window causes a session-modal shortcut-inhibiti...
|
||||
790029 GtkTextView: Support gtk 3.22.19's emoji chooser
|
||||
790031 GtkClipboardClearFunc is not being called
|
||||
790033 Add support for third stylus button on Wacom's new Pro Pen 3D
|
||||
790201 Settings in ~/.config/gtk-3.0/settings.ini ignored with GDK_BACKEND=wa...
|
||||
790270 avoid copy of CSS data from resources
|
||||
790862 Addition of insert_emoji breaks ABI on gtk-3-22
|
||||
790963 Thread safety issue in gtk_application_impl_dbus_startup
|
||||
791039 Emit enter+motion after GDK_CROSSING_TOUCH_END leave
|
||||
791062 Fix mapping window with complete xdg-foreign state
|
||||
791234 autocleanups: allow g_autoptr() usage with GtkTreePath
|
||||
791281 Backport size allocation optimization from master to 3.22
|
||||
791363 Shadow vertical offset is wrong when scaling is > 2
|
||||
791549 gtklistbox: Crash on page-up on GtkListBox
|
||||
791650 Do not warn about missing colord systemd service unit
|
||||
791710 css documentation, non-breaking spaces/hyphens, and other details
|
||||
791943 gnome-shell built with meson hangs when opening more than one window
|
||||
792279 Use portable sed syntax in gdk/wayland/Makefile.am
|
||||
792459 gtk_tree_model_sort_set_sort_column_id() ignores change to sort order
|
||||
792624 Critical due to gtk_widget_reset_controllers() passing NULL to gtk_e...
|
||||
|
||||
* Translation updates:
|
||||
Africaans
|
||||
Catalan
|
||||
Chinese (Taiwan)
|
||||
Esperanto
|
||||
Finnish
|
||||
Friulian
|
||||
Galician
|
||||
Hebrew
|
||||
Hungarian
|
||||
Icelandic
|
||||
Indonesian
|
||||
Italian
|
||||
Lithuanian
|
||||
Norwegian bokmål
|
||||
Polish
|
||||
Russian
|
||||
Serbian
|
||||
Slovenian
|
||||
Spanish
|
||||
Turkish
|
||||
|
||||
|
||||
Overview of Changes in GTK+ 3.22.26
|
||||
===================================
|
||||
|
||||
* Bugs fixed:
|
||||
789630 Distribute protocol/server-decoration.xml in tarballs
|
||||
787142 input/IME: Defer the emit of the "commit" signal
|
||||
789134 icon-browser: Centre Copy button in dialog again
|
||||
789678 AboutDialog: Fix accepting GTK_LICENSE_AGPL_3_0
|
||||
788898 Inspector: better default split of CSS nodes/props
|
||||
789733 Fix GtkEntry:has-frame not working
|
||||
789213 gdk/win32: Fix Win32 GL Context switching
|
||||
785176 placessidebar: add starred location item
|
||||
|
||||
* Translation updates:
|
||||
Arabic
|
||||
Brazilian Portuguese
|
||||
Czech
|
||||
Dutch
|
||||
German
|
||||
Norwegian bokmål
|
||||
Polish
|
||||
Slovak
|
||||
Swedish
|
||||
|
||||
|
||||
Overview of Changes in GTK+ 3.22.25
|
||||
===================================
|
||||
|
||||
|
||||
@@ -0,0 +1,45 @@
|
||||
{
|
||||
"app-id": "org.gtk.WidgetFactory",
|
||||
"runtime": "org.gnome.Platform",
|
||||
"runtime-version": "master",
|
||||
"sdk": "org.gnome.Sdk",
|
||||
"command": "gtk3-widget-factory",
|
||||
"tags": ["devel", "development", "nightly"],
|
||||
"rename-desktop-file": "gtk3-widget-factory.desktop",
|
||||
"rename-icon": "gtk3-widget-factory",
|
||||
"finish-args": [
|
||||
"--device=dri",
|
||||
"--share=ipc",
|
||||
"--socket=x11",
|
||||
"--socket=wayland",
|
||||
"--talk-name=org.gtk.vfs", "--talk-name=org.gtk.vfs.*",
|
||||
"--talk-name=ca.desrt.conf", "--env=DCONF_USER_CONFIG_DIR=.config/dconf"
|
||||
],
|
||||
"cleanup": [
|
||||
"/include",
|
||||
"/lib/pkgconfig", "/share/pkgconfig",
|
||||
"/share/aclocal",
|
||||
"/man", "/share/man", "/share/gtk-doc",
|
||||
"*.la", ".a",
|
||||
"/lib/girepository-1.0",
|
||||
"/share/gir-1.0",
|
||||
"/share/doc"
|
||||
],
|
||||
"modules": [
|
||||
{
|
||||
"name": "gtk",
|
||||
"buildsystem": "autotools",
|
||||
"builddir": true,
|
||||
"config-opts": [
|
||||
"--libdir=/app/lib"
|
||||
],
|
||||
"sources": [
|
||||
{
|
||||
"type": "git",
|
||||
"branch": "gtk-3-24",
|
||||
"url": "https://gitlab.gnome.org/GNOME/gtk.git"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -36,8 +36,9 @@ SUBDIRS = \
|
||||
|
||||
EXTRA_DIST += \
|
||||
detectenv-msvc.mak \
|
||||
introspection-msvc.mak \
|
||||
gentypefuncs.py \
|
||||
gtk-introspection-msvc.mak \
|
||||
introspection-msvc.mak \
|
||||
replace.py \
|
||||
pc_base.py \
|
||||
gtkpc.py \
|
||||
|
||||
@@ -0,0 +1,53 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
import sys
|
||||
import re
|
||||
import os
|
||||
|
||||
debug = os.getenv('GTK_GENTYPEFUNCS_DEBUG') is not None
|
||||
|
||||
out_file = sys.argv[1]
|
||||
in_file = sys.argv[2]
|
||||
|
||||
funcs = []
|
||||
|
||||
|
||||
if debug: print ('Output file: ', out_file)
|
||||
|
||||
# if debug: print (len(in_files), 'input files')
|
||||
|
||||
def open_file(filename, mode):
|
||||
if sys.version_info[0] < 3:
|
||||
return open(filename, mode=mode)
|
||||
else:
|
||||
return open(filename, mode=mode, encoding='utf-8')
|
||||
|
||||
with open(in_file, 'r') as f:
|
||||
for line in f:
|
||||
line = line.rstrip('\n').rstrip('\r')
|
||||
# print line
|
||||
match = re.search(r'\bg[td]k_[a-zA-Z0-9_]*_get_type\b', line)
|
||||
if match:
|
||||
func = match.group(0)
|
||||
if not func in funcs:
|
||||
funcs.append(func)
|
||||
if debug: print ('Found ', func)
|
||||
|
||||
file_output = 'G_GNUC_BEGIN_IGNORE_DEPRECATIONS\n'
|
||||
|
||||
funcs = sorted(funcs)
|
||||
|
||||
for f in funcs:
|
||||
if f.startswith('gdk_x11') or f.startswith('gtk_socket') or f.startswith('gtk_plug'):
|
||||
file_output += '#ifdef GDK_WINDOWING_X11\n'
|
||||
file_output += '*tp++ = {0}();\n'.format(f)
|
||||
file_output += '#endif\n'
|
||||
else:
|
||||
file_output += '*tp++ = {0}();\n'.format(f)
|
||||
|
||||
if debug: print (len(funcs), 'functions')
|
||||
|
||||
ofile = open(out_file, "w")
|
||||
ofile.write(file_output)
|
||||
ofile.close()
|
||||
@@ -31,9 +31,9 @@ def main(argv):
|
||||
cairo_min_ver = '1.14.0'
|
||||
gdk_pixbuf_min_ver = '2.30.0'
|
||||
gdk_win32_sys_libs = '-lgdi32 -limm32 -lshell32 -lole32 -lwinmm -ldwmapi'
|
||||
cairo_libs = '-lcairo-gobject -lcairo '
|
||||
glib_min_ver = '2.45.8'
|
||||
|
||||
cairo_backends = 'cairo-win32'
|
||||
gdk_backends = 'win32'
|
||||
gio_package = 'gio-2.0 >= ' + glib_min_ver
|
||||
broadway_extra_libs = ''
|
||||
@@ -43,20 +43,17 @@ def main(argv):
|
||||
# On Visual Studio, we link to zlib1.lib
|
||||
broadway_extra_libs = ' -lzlib1'
|
||||
gdk_backends += ' broadway'
|
||||
cairo_backends += ' cairo'
|
||||
|
||||
pkg_replace_items = {'@GTK_API_VERSION@': '3.0',
|
||||
'@GDK_BACKENDS@': gdk_backends}
|
||||
|
||||
pkg_required_packages = 'gdk-pixbuf-2.0 >= ' + gdk_pixbuf_min_ver + ' ' + \
|
||||
'cairo >= ' + cairo_min_ver + ' ' + \
|
||||
'cairo-gobject >= ' + cairo_min_ver
|
||||
pkg_required_packages = 'gdk-pixbuf-2.0 >= ' + gdk_pixbuf_min_ver
|
||||
|
||||
gdk_pc_replace_items = {'@GDK_PACKAGES@': gio_package + ' ' + \
|
||||
'pangowin32 pangocairo' + ' ' + \
|
||||
pkg_required_packages,
|
||||
'@GDK_PRIVATE_PACKAGES@': gio_package + ' ' + cairo_backends,
|
||||
'@GDK_EXTRA_LIBS@': gdk_win32_sys_libs + broadway_extra_libs,
|
||||
'@GDK_PRIVATE_PACKAGES@': gio_package,
|
||||
'@GDK_EXTRA_LIBS@': cairo_libs + gdk_win32_sys_libs + broadway_extra_libs,
|
||||
'@GDK_EXTRA_CFLAGS@': '',
|
||||
'gdk-3': 'gdk-3.0'}
|
||||
|
||||
|
||||
@@ -21,6 +21,7 @@
|
||||
<CustomBuild Include="..\..\..\gtk\gtkdbusinterfaces.xml"><Filter>Resource Files</Filter></CustomBuild>
|
||||
<CustomBuild Include="..\..\..\gtk\gtk-win32.rc.body"><Filter>Resource Files</Filter></CustomBuild>
|
||||
<CustomBuild Include="..\..\..\gtk\libgtk3.manifest.in"><Filter>Resource Files</Filter></CustomBuild>
|
||||
<CustomBuild Include="..\gentypefuncs.py"><Filter>Resource Files</Filter></CustomBuild>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
#include "gtk-3.vs10.sourcefiles.filters"
|
||||
|
||||
@@ -164,46 +164,24 @@
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
<CustomBuild Include="..\..\..\gtk\gtkdbusinterfaces.xml">
|
||||
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Generating GTK+ DBus Sources...</Message>
|
||||
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(GenerateGtkDbusBuiltSources)</Command>
|
||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\..\gtk\gtkdbusgenerated.c;..\..\..\gtk\gtkdbusgenerated.h;%(Outputs)</Outputs>
|
||||
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Generating GTK+ DBus Sources...</Message>
|
||||
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(GenerateGtkDbusBuiltSourcesX64)</Command>
|
||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\..\gtk\gtkdbusgenerated.c;..\..\..\gtk\gtkdbusgenerated.h;%(Outputs)</Outputs>
|
||||
<Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Generating GTK+ DBus Sources...</Message>
|
||||
<Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(GenerateGtkDbusBuiltSources)</Command>
|
||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\..\gtk\gtkdbusgenerated.c;..\..\..\gtk\gtkdbusgenerated.h;%(Outputs)</Outputs>
|
||||
<Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Generating GTK+ DBus Sources...</Message>
|
||||
<Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(GenerateGtkDbusBuiltSourcesX64)</Command>
|
||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\..\gtk\gtkdbusgenerated.c;..\..\..\gtk\gtkdbusgenerated.h;%(Outputs)</Outputs>
|
||||
<Message>Generating GTK+ DBus Sources...</Message>
|
||||
<Command>$(GenerateGtkDbusBuiltSources)</Command>
|
||||
<Outputs>..\..\..\gtk\gtkdbusgenerated.c;..\..\..\gtk\gtkdbusgenerated.h;%(Outputs)</Outputs>
|
||||
</CustomBuild>
|
||||
<CustomBuild Include="..\..\..\gtk\gtk-win32.rc.body">
|
||||
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Copying GTK+ Win32 Version Resource...</Message>
|
||||
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(CopyGtkWin32RC)</Command>
|
||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\..\gtk\gtk-win32.rc;%(Outputs)</Outputs>
|
||||
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Copying GTK+ Win32 Version Resource...</Message>
|
||||
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(CopyGtkWin32RC)</Command>
|
||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\..\gtk\gtk-win32.rc;%(Outputs)</Outputs>
|
||||
<Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Copying GTK+ Win32 Version Resource...</Message>
|
||||
<Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(CopyGtkWin32RC)</Command>
|
||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\..\gtk\gtk-win32.rc;%(Outputs)</Outputs>
|
||||
<Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Copying GTK+ Win32 Version Resource...</Message>
|
||||
<Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(CopyGtkWin32RC)</Command>
|
||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\..\gtk\gtk-win32.rc;%(Outputs)</Outputs>
|
||||
<Message>Copying GTK+ Win32 Version Resource...</Message>
|
||||
<Command>$(CopyGtkWin32RC)</Command>
|
||||
<Outputs>..\..\..\gtk\gtk-win32.rc;%(Outputs)</Outputs>
|
||||
</CustomBuild>
|
||||
<CustomBuild Include="..\..\..\gtk\libgtk3.manifest.in">
|
||||
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Generating GTK+ Win32 Manifest...</Message>
|
||||
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(GenerateGtkWin32Manifest)</Command>
|
||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\..\gtk\libgtk3.manifest;%(Outputs)</Outputs>
|
||||
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Generating GTK+ Win32 Manifest...</Message>
|
||||
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(GenerateGtkWin32Manifest)</Command>
|
||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\..\gtk\libgtk3.manifest;%(Outputs)</Outputs>
|
||||
<Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Generating GTK+ Win32 Manifest...</Message>
|
||||
<Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(GenerateGtkWin32Manifest)</Command>
|
||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\..\gtk\libgtk3.manifest;%(Outputs)</Outputs>
|
||||
<Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Generating GTK+ Win32 Manifest...</Message>
|
||||
<Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(GenerateGtkWin32Manifest)</Command>
|
||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\..\gtk\libgtk3.manifest;%(Outputs)</Outputs>
|
||||
<Message>Generating GTK+ Win32 Manifest...</Message>
|
||||
<Command>$(GenerateGtkWin32Manifest)</Command>
|
||||
<Outputs>..\..\..\gtk\libgtk3.manifest;%(Outputs)</Outputs>
|
||||
</CustomBuild>
|
||||
<CustomBuild Include="..\gentypefuncs.py">
|
||||
<Message>Generating ..\..\..\gtk\gtktypefuncs.c</Message>
|
||||
<Command>$(GenerateTypeFuncs)</Command>
|
||||
<Outputs>..\..\..\gtk\gtktypefuncs.c</Outputs>
|
||||
</CustomBuild>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
|
||||
@@ -40,10 +40,16 @@ echo $(Configuration) > ..\..\..\MSVC_$(Configuration)_Broadway
|
||||
</GenGdkConfigHBroadway>
|
||||
<GDbusCodeGenCmd>$(GlibEtcInstallRoot)\bin\gdbus-codegen --interface-prefix org.Gtk. --c-namespace _Gtk --generate-c-code gtkdbusgenerated ./gtkdbusinterfaces.xml</GDbusCodeGenCmd>
|
||||
<GenerateGtkDbusBuiltSources>cd ..\..\..\gtk & $(PythonDir)\python $(GDbusCodeGenCmd) & cd $(SolutionDir)</GenerateGtkDbusBuiltSources>
|
||||
<GenerateGtkDbusBuiltSourcesX64>cd ..\..\..\gtk & $(PythonDirX64)\python $(GDbusCodeGenCmd) & cd $(SolutionDir)</GenerateGtkDbusBuiltSourcesX64>
|
||||
<CopyGtkWin32RC>copy ..\..\..\gtk\gtk-win32.rc.body ..\..\..\gtk\gtk-win32.rc</CopyGtkWin32RC>
|
||||
<GenerateGtkWin32Manifest>$(PythonDir)\python ..\replace.py --action=replace-var --input=..\..\..\gtk\libgtk3.manifest.in --output=..\..\..\gtk\libgtk3.manifest --var=EXE_MANIFEST_ARCHITECTURE --outstring=*</GenerateGtkWin32Manifest>
|
||||
<CopyDemosH>copy ..\..\..\demos\gtk-demo\demos.h.win32 ..\..\..\demos\gtk-demo\demos.h</CopyDemosH>
|
||||
<GenerateTypeFuncs>
|
||||
echo #undef GTK_COMPILATION > ..\..\..\gtk\gtktypefuncs.preproc.c
|
||||
echo #include "gtkx.h" >> ..\..\..\gtk\gtktypefuncs.preproc.c
|
||||
cl /EP /I..\..\..\gtk /I..\..\..\gdk /I..\..\..\gdk\win32 /I..\..\.. /I$(GlibEtcInstallRoot)\include\gdk-pixbuf-2.0 /I$(GlibEtcInstallRoot)\include\pango-1.0 /I$(GlibEtcInstallRoot)\include\atk-1.0 /I$(GlibEtcInstallRoot)\include\cairo /I$(GlibEtcInstallRoot)\include\gio-win32-2.0 /I$(GlibEtcInstallRoot)\include\glib-2.0 /I$(GlibEtcInstallRoot)\lib\glib-2.0\include /I$(GlibEtcInstallRoot)\include /DHAVE_CONFIG_H /DG_DISABLE_SINGLE_INCLUDES /DATK_DISABLE_SINGLE_INCLUDES /DGDK_PIXBUF_DISABLE_SINGLE_INCLUDES /DGTK_DISABLE_SINGLE_INCLUDES /D_USE_MATH_DEFINES /DINCLUDE_IM_am_et /DINCLUDE_IM_cedilla /DINCLUDE_IM_cyrillic_translit /DINCLUDE_IM_ime /DINCLUDE_IM_inuktitut /DINCLUDE_IM_ipa /DINCLUDE_IM_multipress /DINCLUDE_IM_thai /DINCLUDE_IM_ti_er /DINCLUDE_IM_ti_et /DINCLUDE_IM_viqr /DGTK_COMPILATION /DG_LOG_DOMAIN=\"Gtk\" /DGTK_HOST=\"i686-pc-vs$(VSVer)\" /DGTK_PRINT_BACKENDS=\"file\" /DGTK_PRINT_BACKEND_ENABLE_UNSUPPORTED /D$(GtkIncludedImmodulesDefines) /DGTK_LIBDIR=\"$(GtkDummyPrefix)/lib\" /DGTK_DATADIR=\"$(GtkDummyPrefix)/share\" /DGTK_DATA_PREFIX=\"$(GtkDummyPrefix)\" /DGTK_SYSCONFDIR=\"$(GtkDummyPrefix)/etc\" /DMULTIPRESS_CONFDIR=\"$(GtkDummyPrefix)/etc/gtk-$(ApiVersion)\" /DMULTIPRESS_LOCALEDIR=\"$(GtkDummyPrefix)/share/locale\" /DGTK_VERSION=\"$(GtkVersion)\" /DGTK_BINARY_VERSION=\"$(GtkBinaryVersion)\" /DGDK_DISABLE_DEPRECATED /DISOLATION_AWARE_ENABLED ..\..\..\gtk\gtktypefuncs.preproc.c > ..\..\..\gtk\gtktypefuncs.combined.c
|
||||
$(PythonDir)\python ..\gentypefuncs.py ..\..\..\gtk\gtktypefuncs.c ..\..\..\gtk\gtktypefuncs.combined.c
|
||||
del ..\..\..\gtk\gtktypefuncs.combined.c ..\..\..\gtk\gtktypefuncs.preproc.c
|
||||
</GenerateTypeFuncs>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup>
|
||||
<_PropertySheetDisplayName>gtk3gensrcsprops</_PropertySheetDisplayName>
|
||||
@@ -64,9 +70,6 @@ echo $(Configuration) > ..\..\..\MSVC_$(Configuration)_Broadway
|
||||
<BuildMacro Include="GenerateGtkDbusBuiltSources">
|
||||
<Value>$(GenerateGtkDbusBuiltSources)</Value>
|
||||
</BuildMacro>
|
||||
<BuildMacro Include="GenerateGtkDbusBuiltSourcesX64">
|
||||
<Value>$(GenerateGtkDbusBuiltSourcesX64)</Value>
|
||||
</BuildMacro>
|
||||
<BuildMacro Include="CopyGtkWin32RC">
|
||||
<Value>$(CopyGtkWin32RC)</Value>
|
||||
</BuildMacro>
|
||||
@@ -76,5 +79,8 @@ echo $(Configuration) > ..\..\..\MSVC_$(Configuration)_Broadway
|
||||
<BuildMacro Include="CopyDemosH">
|
||||
<Value>$(CopyDemosH)</Value>
|
||||
</BuildMacro>
|
||||
<BuildMacro Include="GenerateTypeFuncs">
|
||||
<Value>$(GenerateTypeFuncs)</Value>
|
||||
</BuildMacro>
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
|
||||
@@ -0,0 +1,534 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ImportGroup Label="PropertySheets">
|
||||
<Import Project="gtk3-build-defines.props" />
|
||||
</ImportGroup>
|
||||
<PropertyGroup Label="UserMacros">
|
||||
<BinDir>$(SolutionDir)$(Configuration)\$(Platform)\bin</BinDir>
|
||||
<GtkDoInstallBin>
|
||||
mkdir $(CopyDir)\bin
|
||||
mkdir $(CopyDir)\lib\pkgconfig
|
||||
copy "$(BinDir)\$(GtkDllPrefix)gdk-3$(GtkDllSuffix).dll" $(CopyDir)\bin
|
||||
copy "$(BinDir)\$(GtkDllPrefix)gdk-3$(GtkDllSuffix).pdb" $(CopyDir)\bin
|
||||
copy "$(BinDir)\gdk-$(ApiVersion).lib" $(CopyDir)\lib
|
||||
if "$(Configuration)" == "Release_Broadway" goto DO_BROADWAY_BIN
|
||||
if "$(Configuration)" == "Debug_Broadway" goto DO_BROADWAY_BIN
|
||||
copy "$(BinDir)\$(GtkDllPrefix)gtk-3$(GtkDllSuffix).dll" $(CopyDir)\bin
|
||||
copy "$(BinDir)\$(GtkDllPrefix)gtk-3$(GtkDllSuffix).pdb" $(CopyDir)\bin
|
||||
copy "$(BinDir)\$(GtkDllPrefix)gailutil-3$(GtkDllSuffix).dll" $(CopyDir)\bin
|
||||
copy "$(BinDir)\$(GtkDllPrefix)gailutil-3$(GtkDllSuffix).pdb" $(CopyDir)\bin
|
||||
copy "$(BinDir)\gtk-$(ApiVersion).lib" $(CopyDir)\lib
|
||||
copy "$(BinDir)\gailutil-$(ApiVersion).lib" $(CopyDir)\lib
|
||||
copy "$(BinDir)\gtk3-demo.exe" $(CopyDir)\bin
|
||||
copy "$(BinDir)\gtk3-demo.pdb" $(CopyDir)\bin
|
||||
copy "$(BinDir)\gtk3-demo-application.exe" $(CopyDir)\bin
|
||||
copy "$(BinDir)\gtk3-demo-application.pdb" $(CopyDir)\bin
|
||||
copy "$(BinDir)\gtk3-icon-browser.exe" $(CopyDir)\bin
|
||||
copy "$(BinDir)\gtk3-icon-browser.pdb" $(CopyDir)\bin
|
||||
copy "$(BinDir)\gtk-encode-symbolic-svg.exe" $(CopyDir)\bin
|
||||
copy "$(BinDir)\gtk-encode-symbolic-svg.pdb" $(CopyDir)\bin
|
||||
copy "$(BinDir)\gtk-update-icon-cache.exe" $(CopyDir)\bin
|
||||
copy "$(BinDir)\gtk-update-icon-cache.pdb" $(CopyDir)\bin
|
||||
copy "$(BinDir)\gtk-query-settings.exe" $(CopyDir)\bin
|
||||
copy "$(BinDir)\gtk-query-settings.pdb" $(CopyDir)\bin
|
||||
copy "$(BinDir)\gtk-builder-tool.exe" $(CopyDir)\bin
|
||||
copy "$(BinDir)\gtk-builder-tool.pdb" $(CopyDir)\bin
|
||||
goto DONE_BIN
|
||||
:DO_BROADWAY_BIN
|
||||
copy "$(BinDir)\broadwayd.exe" $(CopyDir)\bin
|
||||
copy "$(BinDir)\broadwayd.pdb" $(CopyDir)\bin
|
||||
if "$(Configuration)" == "Release_Broadway" goto DO_BROADWAY_RELEASE
|
||||
if "$(Configuration)" == "Debug_Broadway" goto DO_BROADWAY_DEBUG
|
||||
:DO_BROADWAY_RELEASE
|
||||
copy .\Release\$(Platform)\bin\$(GtkDllPrefix)gtk-3$(GtkDllSuffix).dll $(CopyDir)\bin
|
||||
copy .\Release\$(Platform)\bin\$(GtkDllPrefix)gtk-3$(GtkDllSuffix).pdb $(CopyDir)\bin
|
||||
copy .\Release\$(Platform)\bin\$(GtkDllPrefix)gailutil-3$(GtkDllSuffix).dll $(CopyDir)\bin
|
||||
copy .\Release\$(Platform)\bin\$(GtkDllPrefix)gailutil-3$(GtkDllSuffix).pdb $(CopyDir)\bin
|
||||
copy .\Release\$(Platform)\bin\gtk-$(ApiVersion).lib $(CopyDir)\lib
|
||||
copy .\Release\$(Platform)\bin\gailutil-$(ApiVersion).lib $(CopyDir)\lib
|
||||
copy .\Release\$(Platform)\bin\gtk3-demo.exe $(CopyDir)\bin
|
||||
copy .\Release\$(Platform)\bin\gtk3-demo.pdb $(CopyDir)\bin
|
||||
copy .\Release\$(Platform)\bin\gtk3-demo-application.exe $(CopyDir)\bin
|
||||
copy .\Release\$(Platform)\bin\gtk3-demo-application.pdb $(CopyDir)\bin
|
||||
copy .\Release\$(Platform)\bin\gtk3-icon-browser.exe $(CopyDir)\bin
|
||||
copy .\Release\$(Platform)\bin\gtk3-icon-browser.pdb $(CopyDir)\bin
|
||||
copy .\Release\$(Platform)\bin\gtk-encode-symbolic-svg.exe $(CopyDir)\bin
|
||||
copy .\Release\$(Platform)\bin\gtk-encode-symbolic-svg.pdb $(CopyDir)\bin
|
||||
copy .\Release\$(Platform)\bin\gtk-update-icon-cache.exe $(CopyDir)\bin
|
||||
copy .\Release\$(Platform)\bin\gtk-update-icon-cache.pdb $(CopyDir)\bin
|
||||
copy .\Release\$(Platform)\bin\gtk-query-settings.exe $(CopyDir)\bin
|
||||
copy .\Release\$(Platform)\bin\gtk-query-settings.pdb $(CopyDir)\bin
|
||||
copy .\Release\$(Platform)\bin\gtk-builder-tool.exe $(CopyDir)\bin
|
||||
copy .\Release\$(Platform)\bin\gtk-builder-tool.pdb $(CopyDir)\bin
|
||||
goto DONE_BIN
|
||||
:DO_BROADWAY_DEBUG
|
||||
copy .\Debug\$(Platform)\bin\$(GtkDllPrefix)gtk-3$(GtkDllSuffix).dll $(CopyDir)\bin
|
||||
copy .\Debug\$(Platform)\bin\$(GtkDllPrefix)gtk-3$(GtkDllSuffix).pdb $(CopyDir)\bin
|
||||
copy .\Debug\$(Platform)\bin\$(GtkDllPrefix)gailutil-3$(GtkDllSuffix).dll $(CopyDir)\bin
|
||||
copy .\Debug\$(Platform)\bin\$(GtkDllPrefix)gailutil-3$(GtkDllSuffix).pdb $(CopyDir)\bin
|
||||
copy .\Debug\$(Platform)\bin\gtk-$(ApiVersion).lib $(CopyDir)\lib
|
||||
copy .\Debug\$(Platform)\bin\gailutil-$(ApiVersion).lib $(CopyDir)\lib
|
||||
copy .\Debug\$(Platform)\bin\gtk3-demo.exe $(CopyDir)\bin
|
||||
copy .\Debug\$(Platform)\bin\gtk3-demo.pdb $(CopyDir)\bin
|
||||
copy .\Debug\$(Platform)\bin\gtk3-demo-application.exe $(CopyDir)\bin
|
||||
copy .\Debug\$(Platform)\bin\gtk3-demo-application.pdb $(CopyDir)\bin
|
||||
copy .\Debug\$(Platform)\bin\gtk3-icon-browser.exe $(CopyDir)\bin
|
||||
copy .\Debug\$(Platform)\bin\gtk3-icon-browser.pdb $(CopyDir)\bin
|
||||
copy .\Debug\$(Platform)\bin\gtk-encode-symbolic-svg.exe $(CopyDir)\bin
|
||||
copy .\Debug\$(Platform)\bin\gtk-encode-symbolic-svg.pdb $(CopyDir)\bin
|
||||
copy .\Debug\$(Platform)\bin\gtk-update-icon-cache.exe $(CopyDir)\bin
|
||||
copy .\Debug\$(Platform)\bin\gtk-update-icon-cache.pdb $(CopyDir)\bin
|
||||
copy .\Debug\$(Platform)\bin\gtk-query-settings.exe $(CopyDir)\bin
|
||||
copy .\Debug\$(Platform)\bin\gtk-query-settings.pdb $(CopyDir)\bin
|
||||
copy .\Debug\$(Platform)\bin\gtk-builder-tool.exe $(CopyDir)\bin
|
||||
copy .\Debug\$(Platform)\bin\gtk-builder-tool.pdb $(CopyDir)\bin
|
||||
:DONE_BIN
|
||||
copy ..\gdk-3.0.pc $(CopyDir)\lib\pkgconfig
|
||||
copy ..\gdk-3.0.pc $(CopyDir)\lib\pkgconfig\gdk-win32-3.0.pc
|
||||
copy "..\gtk+-3.0.pc" $(CopyDir)\lib\pkgconfig
|
||||
copy "..\gtk+-3.0.pc" "$(CopyDir)\lib\pkgconfig\gtk+-3.0.pc"
|
||||
copy ..\gail-3.0.pc $(CopyDir)\lib\pkgconfig
|
||||
</GtkDoInstallBin>
|
||||
<GtkDoInstall>
|
||||
echo off
|
||||
mkdir $(CopyDir)\include\gtk-$(ApiVersion)\gdk\win32
|
||||
mkdir $(CopyDir)\include\gtk-$(ApiVersion)\gdk\deprecated
|
||||
copy ..\..\..\gdk\win32\gdkwin32.h $(CopyDir)\include\gtk-$(ApiVersion)\gdk
|
||||
copy ..\..\..\gdk\gdk.h $(CopyDir)\include\gtk-3.0\gdk\gdk.h
|
||||
copy ..\..\..\gdk\gdk-autocleanup.h $(CopyDir)\include\gtk-3.0\gdk\gdk-autocleanup.h
|
||||
copy ..\..\..\gdk\gdkapplaunchcontext.h $(CopyDir)\include\gtk-3.0\gdk\gdkapplaunchcontext.h
|
||||
copy ..\..\..\gdk\gdkcairo.h $(CopyDir)\include\gtk-3.0\gdk\gdkcairo.h
|
||||
copy ..\..\..\gdk\gdkcursor.h $(CopyDir)\include\gtk-3.0\gdk\gdkcursor.h
|
||||
copy ..\..\..\gdk\gdkdevice.h $(CopyDir)\include\gtk-3.0\gdk\gdkdevice.h
|
||||
copy ..\..\..\gdk\gdkdevicepad.h $(CopyDir)\include\gtk-3.0\gdk\gdkdevicepad.h
|
||||
copy ..\..\..\gdk\gdkdevicetool.h $(CopyDir)\include\gtk-3.0\gdk\gdkdevicetool.h
|
||||
copy ..\..\..\gdk\gdkdevicemanager.h $(CopyDir)\include\gtk-3.0\gdk\gdkdevicemanager.h
|
||||
copy ..\..\..\gdk\gdkdisplay.h $(CopyDir)\include\gtk-3.0\gdk\gdkdisplay.h
|
||||
copy ..\..\..\gdk\gdkdisplaymanager.h $(CopyDir)\include\gtk-3.0\gdk\gdkdisplaymanager.h
|
||||
copy ..\..\..\gdk\gdkdnd.h $(CopyDir)\include\gtk-3.0\gdk\gdkdnd.h
|
||||
copy ..\..\..\gdk\gdkdrawingcontext.h $(CopyDir)\include\gtk-3.0\gdk\gdkdrawingcontext.h
|
||||
copy ..\..\..\gdk\gdkevents.h $(CopyDir)\include\gtk-3.0\gdk\gdkevents.h
|
||||
copy ..\..\..\gdk\gdkframetimings.h $(CopyDir)\include\gtk-3.0\gdk\gdkframetimings.h
|
||||
copy ..\..\..\gdk\gdkglcontext.h $(CopyDir)\include\gtk-3.0\gdk\gdkglcontext.h
|
||||
copy ..\..\..\gdk\gdkkeys.h $(CopyDir)\include\gtk-3.0\gdk\gdkkeys.h
|
||||
copy ..\..\..\gdk\gdkkeysyms.h $(CopyDir)\include\gtk-3.0\gdk\gdkkeysyms.h
|
||||
copy ..\..\..\gdk\gdkkeysyms-compat.h $(CopyDir)\include\gtk-3.0\gdk\gdkkeysyms-compat.h
|
||||
copy ..\..\..\gdk\gdkmain.h $(CopyDir)\include\gtk-3.0\gdk\gdkmain.h
|
||||
copy ..\..\..\gdk\gdkmonitor.h $(CopyDir)\include\gtk-3.0\gdk\gdkmonitor.h
|
||||
copy ..\..\..\gdk\gdkpango.h $(CopyDir)\include\gtk-3.0\gdk\gdkpango.h
|
||||
copy ..\..\..\gdk\gdkframeclock.h $(CopyDir)\include\gtk-3.0\gdk\gdkframeclock.h
|
||||
copy ..\..\..\gdk\gdkpixbuf.h $(CopyDir)\include\gtk-3.0\gdk\gdkpixbuf.h
|
||||
copy ..\..\..\gdk\gdkprivate.h $(CopyDir)\include\gtk-3.0\gdk\gdkprivate.h
|
||||
copy ..\..\..\gdk\gdkproperty.h $(CopyDir)\include\gtk-3.0\gdk\gdkproperty.h
|
||||
copy ..\..\..\gdk\gdkrectangle.h $(CopyDir)\include\gtk-3.0\gdk\gdkrectangle.h
|
||||
copy ..\..\..\gdk\gdkrgba.h $(CopyDir)\include\gtk-3.0\gdk\gdkrgba.h
|
||||
copy ..\..\..\gdk\gdkscreen.h $(CopyDir)\include\gtk-3.0\gdk\gdkscreen.h
|
||||
copy ..\..\..\gdk\gdkseat.h $(CopyDir)\include\gtk-3.0\gdk\gdkseat.h
|
||||
copy ..\..\..\gdk\gdkselection.h $(CopyDir)\include\gtk-3.0\gdk\gdkselection.h
|
||||
copy ..\..\..\gdk\gdktestutils.h $(CopyDir)\include\gtk-3.0\gdk\gdktestutils.h
|
||||
copy ..\..\..\gdk\gdkthreads.h $(CopyDir)\include\gtk-3.0\gdk\gdkthreads.h
|
||||
copy ..\..\..\gdk\gdktypes.h $(CopyDir)\include\gtk-3.0\gdk\gdktypes.h
|
||||
copy ..\..\..\gdk\gdkvisual.h $(CopyDir)\include\gtk-3.0\gdk\gdkvisual.h
|
||||
copy ..\..\..\gdk\gdkwindow.h $(CopyDir)\include\gtk-3.0\gdk\gdkwindow.h
|
||||
copy ..\..\..\gdk\deprecated\gdkcolor.h $(CopyDir)\include\gtk-3.0\gdk\deprecated\gdkcolor.h
|
||||
copy ..\..\..\gdk\gdkconfig.h $(CopyDir)\include\gtk-3.0\gdk\gdkconfig.h
|
||||
copy ..\..\..\gdk\gdkenumtypes.h $(CopyDir)\include\gtk-3.0\gdk\gdkenumtypes.h
|
||||
copy ..\..\..\gdk\gdkversionmacros.h $(CopyDir)\include\gtk-3.0\gdk\gdkversionmacros.h
|
||||
copy ..\..\..\gdk\win32\gdkwin32cursor.h $(CopyDir)\include\gtk-3.0\gdk\win32\gdkwin32cursor.h
|
||||
copy ..\..\..\gdk\win32\gdkwin32display.h $(CopyDir)\include\gtk-3.0\gdk\win32\gdkwin32display.h
|
||||
copy ..\..\..\gdk\win32\gdkwin32displaymanager.h $(CopyDir)\include\gtk-3.0\gdk\win32\gdkwin32displaymanager.h
|
||||
copy ..\..\..\gdk\win32\gdkwin32dnd.h $(CopyDir)\include\gtk-3.0\gdk\win32\gdkwin32dnd.h
|
||||
copy ..\..\..\gdk\win32\gdkwin32glcontext.h $(CopyDir)\include\gtk-3.0\gdk\win32\gdkwin32glcontext.h
|
||||
copy ..\..\..\gdk\win32\gdkwin32keys.h $(CopyDir)\include\gtk-3.0\gdk\win32\gdkwin32keys.h
|
||||
copy ..\..\..\gdk\win32\gdkwin32misc.h $(CopyDir)\include\gtk-3.0\gdk\win32\gdkwin32misc.h
|
||||
copy ..\..\..\gdk\win32\gdkwin32monitor.h $(CopyDir)\include\gtk-3.0\gdk\win32\gdkwin32monitor.h
|
||||
copy ..\..\..\gdk\win32\gdkwin32screen.h $(CopyDir)\include\gtk-3.0\gdk\win32\gdkwin32screen.h
|
||||
copy ..\..\..\gdk\win32\gdkwin32window.h $(CopyDir)\include\gtk-3.0\gdk\win32\gdkwin32window.h
|
||||
mkdir $(CopyDir)\include\gtk-$(ApiVersion)\gtk\a11y
|
||||
mkdir $(CopyDir)\include\gtk-$(ApiVersion)\gtk\deprecated
|
||||
copy ..\..\..\gtk\gtk.h $(CopyDir)\include\gtk-3.0\gtk\gtk.h
|
||||
copy ..\..\..\gtk\gtk-autocleanups.h $(CopyDir)\include\gtk-3.0\gtk\gtk-autocleanups.h
|
||||
copy ..\..\..\gtk\gtkx.h $(CopyDir)\include\gtk-3.0\gtk\gtkx.h
|
||||
copy ..\..\..\gtk\gtkx-autocleanups.h $(CopyDir)\include\gtk-3.0\gtk\gtkx-autocleanups.h
|
||||
copy ..\..\..\gtk\gtk-a11y.h $(CopyDir)\include\gtk-3.0\gtk\gtk-a11y.h
|
||||
copy ..\..\..\gtk\gtkaboutdialog.h $(CopyDir)\include\gtk-3.0\gtk\gtkaboutdialog.h
|
||||
copy ..\..\..\gtk\gtkaccelgroup.h $(CopyDir)\include\gtk-3.0\gtk\gtkaccelgroup.h
|
||||
copy ..\..\..\gtk\gtkaccellabel.h $(CopyDir)\include\gtk-3.0\gtk\gtkaccellabel.h
|
||||
copy ..\..\..\gtk\gtkaccelmap.h $(CopyDir)\include\gtk-3.0\gtk\gtkaccelmap.h
|
||||
copy ..\..\..\gtk\gtkaccessible.h $(CopyDir)\include\gtk-3.0\gtk\gtkaccessible.h
|
||||
copy ..\..\..\gtk\gtkactionable.h $(CopyDir)\include\gtk-3.0\gtk\gtkactionable.h
|
||||
copy ..\..\..\gtk\gtkactionbar.h $(CopyDir)\include\gtk-3.0\gtk\gtkactionbar.h
|
||||
copy ..\..\..\gtk\gtkadjustment.h $(CopyDir)\include\gtk-3.0\gtk\gtkadjustment.h
|
||||
copy ..\..\..\gtk\gtkappchooser.h $(CopyDir)\include\gtk-3.0\gtk\gtkappchooser.h
|
||||
copy ..\..\..\gtk\gtkappchooserbutton.h $(CopyDir)\include\gtk-3.0\gtk\gtkappchooserbutton.h
|
||||
copy ..\..\..\gtk\gtkappchooserdialog.h $(CopyDir)\include\gtk-3.0\gtk\gtkappchooserdialog.h
|
||||
copy ..\..\..\gtk\gtkappchooserwidget.h $(CopyDir)\include\gtk-3.0\gtk\gtkappchooserwidget.h
|
||||
copy ..\..\..\gtk\gtkapplication.h $(CopyDir)\include\gtk-3.0\gtk\gtkapplication.h
|
||||
copy ..\..\..\gtk\gtkapplicationwindow.h $(CopyDir)\include\gtk-3.0\gtk\gtkapplicationwindow.h
|
||||
copy ..\..\..\gtk\gtkaspectframe.h $(CopyDir)\include\gtk-3.0\gtk\gtkaspectframe.h
|
||||
copy ..\..\..\gtk\gtkassistant.h $(CopyDir)\include\gtk-3.0\gtk\gtkassistant.h
|
||||
copy ..\..\..\gtk\gtkbbox.h $(CopyDir)\include\gtk-3.0\gtk\gtkbbox.h
|
||||
copy ..\..\..\gtk\gtkbin.h $(CopyDir)\include\gtk-3.0\gtk\gtkbin.h
|
||||
copy ..\..\..\gtk\gtkbindings.h $(CopyDir)\include\gtk-3.0\gtk\gtkbindings.h
|
||||
copy ..\..\..\gtk\gtkborder.h $(CopyDir)\include\gtk-3.0\gtk\gtkborder.h
|
||||
copy ..\..\..\gtk\gtkbox.h $(CopyDir)\include\gtk-3.0\gtk\gtkbox.h
|
||||
copy ..\..\..\gtk\gtkbuilder.h $(CopyDir)\include\gtk-3.0\gtk\gtkbuilder.h
|
||||
copy ..\..\..\gtk\gtkbuildable.h $(CopyDir)\include\gtk-3.0\gtk\gtkbuildable.h
|
||||
copy ..\..\..\gtk\gtkbutton.h $(CopyDir)\include\gtk-3.0\gtk\gtkbutton.h
|
||||
copy ..\..\..\gtk\gtkcalendar.h $(CopyDir)\include\gtk-3.0\gtk\gtkcalendar.h
|
||||
copy ..\..\..\gtk\gtkcellarea.h $(CopyDir)\include\gtk-3.0\gtk\gtkcellarea.h
|
||||
copy ..\..\..\gtk\gtkcellareacontext.h $(CopyDir)\include\gtk-3.0\gtk\gtkcellareacontext.h
|
||||
copy ..\..\..\gtk\gtkcellareabox.h $(CopyDir)\include\gtk-3.0\gtk\gtkcellareabox.h
|
||||
copy ..\..\..\gtk\gtkcelleditable.h $(CopyDir)\include\gtk-3.0\gtk\gtkcelleditable.h
|
||||
copy ..\..\..\gtk\gtkcelllayout.h $(CopyDir)\include\gtk-3.0\gtk\gtkcelllayout.h
|
||||
copy ..\..\..\gtk\gtkcellrenderer.h $(CopyDir)\include\gtk-3.0\gtk\gtkcellrenderer.h
|
||||
copy ..\..\..\gtk\gtkcellrendereraccel.h $(CopyDir)\include\gtk-3.0\gtk\gtkcellrendereraccel.h
|
||||
copy ..\..\..\gtk\gtkcellrenderercombo.h $(CopyDir)\include\gtk-3.0\gtk\gtkcellrenderercombo.h
|
||||
copy ..\..\..\gtk\gtkcellrendererpixbuf.h $(CopyDir)\include\gtk-3.0\gtk\gtkcellrendererpixbuf.h
|
||||
copy ..\..\..\gtk\gtkcellrendererprogress.h $(CopyDir)\include\gtk-3.0\gtk\gtkcellrendererprogress.h
|
||||
copy ..\..\..\gtk\gtkcellrendererspin.h $(CopyDir)\include\gtk-3.0\gtk\gtkcellrendererspin.h
|
||||
copy ..\..\..\gtk\gtkcellrendererspinner.h $(CopyDir)\include\gtk-3.0\gtk\gtkcellrendererspinner.h
|
||||
copy ..\..\..\gtk\gtkcellrenderertext.h $(CopyDir)\include\gtk-3.0\gtk\gtkcellrenderertext.h
|
||||
copy ..\..\..\gtk\gtkcellrenderertoggle.h $(CopyDir)\include\gtk-3.0\gtk\gtkcellrenderertoggle.h
|
||||
copy ..\..\..\gtk\gtkcellview.h $(CopyDir)\include\gtk-3.0\gtk\gtkcellview.h
|
||||
copy ..\..\..\gtk\gtkcheckbutton.h $(CopyDir)\include\gtk-3.0\gtk\gtkcheckbutton.h
|
||||
copy ..\..\..\gtk\gtkcheckmenuitem.h $(CopyDir)\include\gtk-3.0\gtk\gtkcheckmenuitem.h
|
||||
copy ..\..\..\gtk\gtkclipboard.h $(CopyDir)\include\gtk-3.0\gtk\gtkclipboard.h
|
||||
copy ..\..\..\gtk\gtkcolorbutton.h $(CopyDir)\include\gtk-3.0\gtk\gtkcolorbutton.h
|
||||
copy ..\..\..\gtk\gtkcolorchooser.h $(CopyDir)\include\gtk-3.0\gtk\gtkcolorchooser.h
|
||||
copy ..\..\..\gtk\gtkcolorchooserwidget.h $(CopyDir)\include\gtk-3.0\gtk\gtkcolorchooserwidget.h
|
||||
copy ..\..\..\gtk\gtkcolorchooserdialog.h $(CopyDir)\include\gtk-3.0\gtk\gtkcolorchooserdialog.h
|
||||
copy ..\..\..\gtk\gtkcolorutils.h $(CopyDir)\include\gtk-3.0\gtk\gtkcolorutils.h
|
||||
copy ..\..\..\gtk\gtkcombobox.h $(CopyDir)\include\gtk-3.0\gtk\gtkcombobox.h
|
||||
copy ..\..\..\gtk\gtkcomboboxtext.h $(CopyDir)\include\gtk-3.0\gtk\gtkcomboboxtext.h
|
||||
copy ..\..\..\gtk\gtkcontainer.h $(CopyDir)\include\gtk-3.0\gtk\gtkcontainer.h
|
||||
copy ..\..\..\gtk\gtkcssprovider.h $(CopyDir)\include\gtk-3.0\gtk\gtkcssprovider.h
|
||||
copy ..\..\..\gtk\gtkcsssection.h $(CopyDir)\include\gtk-3.0\gtk\gtkcsssection.h
|
||||
copy ..\..\..\gtk\gtkdebug.h $(CopyDir)\include\gtk-3.0\gtk\gtkdebug.h
|
||||
copy ..\..\..\gtk\gtkdialog.h $(CopyDir)\include\gtk-3.0\gtk\gtkdialog.h
|
||||
copy ..\..\..\gtk\gtkdnd.h $(CopyDir)\include\gtk-3.0\gtk\gtkdnd.h
|
||||
copy ..\..\..\gtk\gtkdragdest.h $(CopyDir)\include\gtk-3.0\gtk\gtkdragdest.h
|
||||
copy ..\..\..\gtk\gtkdragsource.h $(CopyDir)\include\gtk-3.0\gtk\gtkdragsource.h
|
||||
copy ..\..\..\gtk\gtkdrawingarea.h $(CopyDir)\include\gtk-3.0\gtk\gtkdrawingarea.h
|
||||
copy ..\..\..\gtk\gtkeditable.h $(CopyDir)\include\gtk-3.0\gtk\gtkeditable.h
|
||||
copy ..\..\..\gtk\gtkentry.h $(CopyDir)\include\gtk-3.0\gtk\gtkentry.h
|
||||
copy ..\..\..\gtk\gtkentrybuffer.h $(CopyDir)\include\gtk-3.0\gtk\gtkentrybuffer.h
|
||||
copy ..\..\..\gtk\gtkentrycompletion.h $(CopyDir)\include\gtk-3.0\gtk\gtkentrycompletion.h
|
||||
copy ..\..\..\gtk\gtkenums.h $(CopyDir)\include\gtk-3.0\gtk\gtkenums.h
|
||||
copy ..\..\..\gtk\gtkeventbox.h $(CopyDir)\include\gtk-3.0\gtk\gtkeventbox.h
|
||||
copy ..\..\..\gtk\gtkeventcontroller.h $(CopyDir)\include\gtk-3.0\gtk\gtkeventcontroller.h
|
||||
copy ..\..\..\gtk\gtkexpander.h $(CopyDir)\include\gtk-3.0\gtk\gtkexpander.h
|
||||
copy ..\..\..\gtk\gtkfilechooser.h $(CopyDir)\include\gtk-3.0\gtk\gtkfilechooser.h
|
||||
copy ..\..\..\gtk\gtkfilechooserbutton.h $(CopyDir)\include\gtk-3.0\gtk\gtkfilechooserbutton.h
|
||||
copy ..\..\..\gtk\gtkfilechooserdialog.h $(CopyDir)\include\gtk-3.0\gtk\gtkfilechooserdialog.h
|
||||
copy ..\..\..\gtk\gtkfilechoosernative.h $(CopyDir)\include\gtk-3.0\gtk\gtkfilechoosernative.h
|
||||
copy ..\..\..\gtk\gtkfilechooserwidget.h $(CopyDir)\include\gtk-3.0\gtk\gtkfilechooserwidget.h
|
||||
copy ..\..\..\gtk\gtkfilefilter.h $(CopyDir)\include\gtk-3.0\gtk\gtkfilefilter.h
|
||||
copy ..\..\..\gtk\gtkfixed.h $(CopyDir)\include\gtk-3.0\gtk\gtkfixed.h
|
||||
copy ..\..\..\gtk\gtkflowbox.h $(CopyDir)\include\gtk-3.0\gtk\gtkflowbox.h
|
||||
copy ..\..\..\gtk\gtkfontbutton.h $(CopyDir)\include\gtk-3.0\gtk\gtkfontbutton.h
|
||||
copy ..\..\..\gtk\gtkfontchooser.h $(CopyDir)\include\gtk-3.0\gtk\gtkfontchooser.h
|
||||
copy ..\..\..\gtk\gtkfontchooserdialog.h $(CopyDir)\include\gtk-3.0\gtk\gtkfontchooserdialog.h
|
||||
copy ..\..\..\gtk\gtkfontchooserwidget.h $(CopyDir)\include\gtk-3.0\gtk\gtkfontchooserwidget.h
|
||||
copy ..\..\..\gtk\gtkframe.h $(CopyDir)\include\gtk-3.0\gtk\gtkframe.h
|
||||
copy ..\..\..\gtk\gtkgesture.h $(CopyDir)\include\gtk-3.0\gtk\gtkgesture.h
|
||||
copy ..\..\..\gtk\gtkgesturedrag.h $(CopyDir)\include\gtk-3.0\gtk\gtkgesturedrag.h
|
||||
copy ..\..\..\gtk\gtkgesturelongpress.h $(CopyDir)\include\gtk-3.0\gtk\gtkgesturelongpress.h
|
||||
copy ..\..\..\gtk\gtkgesturemultipress.h $(CopyDir)\include\gtk-3.0\gtk\gtkgesturemultipress.h
|
||||
copy ..\..\..\gtk\gtkgesturepan.h $(CopyDir)\include\gtk-3.0\gtk\gtkgesturepan.h
|
||||
copy ..\..\..\gtk\gtkgesturerotate.h $(CopyDir)\include\gtk-3.0\gtk\gtkgesturerotate.h
|
||||
copy ..\..\..\gtk\gtkgesturesingle.h $(CopyDir)\include\gtk-3.0\gtk\gtkgesturesingle.h
|
||||
copy ..\..\..\gtk\gtkgestureswipe.h $(CopyDir)\include\gtk-3.0\gtk\gtkgestureswipe.h
|
||||
copy ..\..\..\gtk\gtkgesturezoom.h $(CopyDir)\include\gtk-3.0\gtk\gtkgesturezoom.h
|
||||
copy ..\..\..\gtk\gtkglarea.h $(CopyDir)\include\gtk-3.0\gtk\gtkglarea.h
|
||||
copy ..\..\..\gtk\gtkgrid.h $(CopyDir)\include\gtk-3.0\gtk\gtkgrid.h
|
||||
copy ..\..\..\gtk\gtkheaderbar.h $(CopyDir)\include\gtk-3.0\gtk\gtkheaderbar.h
|
||||
copy ..\..\..\gtk\gtkicontheme.h $(CopyDir)\include\gtk-3.0\gtk\gtkicontheme.h
|
||||
copy ..\..\..\gtk\gtkiconview.h $(CopyDir)\include\gtk-3.0\gtk\gtkiconview.h
|
||||
copy ..\..\..\gtk\gtkimage.h $(CopyDir)\include\gtk-3.0\gtk\gtkimage.h
|
||||
copy ..\..\..\gtk\gtkimcontext.h $(CopyDir)\include\gtk-3.0\gtk\gtkimcontext.h
|
||||
copy ..\..\..\gtk\gtkimcontextinfo.h $(CopyDir)\include\gtk-3.0\gtk\gtkimcontextinfo.h
|
||||
copy ..\..\..\gtk\gtkimcontextsimple.h $(CopyDir)\include\gtk-3.0\gtk\gtkimcontextsimple.h
|
||||
copy ..\..\..\gtk\gtkimmodule.h $(CopyDir)\include\gtk-3.0\gtk\gtkimmodule.h
|
||||
copy ..\..\..\gtk\gtkimmulticontext.h $(CopyDir)\include\gtk-3.0\gtk\gtkimmulticontext.h
|
||||
copy ..\..\..\gtk\gtkinfobar.h $(CopyDir)\include\gtk-3.0\gtk\gtkinfobar.h
|
||||
copy ..\..\..\gtk\gtkinvisible.h $(CopyDir)\include\gtk-3.0\gtk\gtkinvisible.h
|
||||
copy ..\..\..\gtk\gtklabel.h $(CopyDir)\include\gtk-3.0\gtk\gtklabel.h
|
||||
copy ..\..\..\gtk\gtklayout.h $(CopyDir)\include\gtk-3.0\gtk\gtklayout.h
|
||||
copy ..\..\..\gtk\gtklevelbar.h $(CopyDir)\include\gtk-3.0\gtk\gtklevelbar.h
|
||||
copy ..\..\..\gtk\gtklinkbutton.h $(CopyDir)\include\gtk-3.0\gtk\gtklinkbutton.h
|
||||
copy ..\..\..\gtk\gtklistbox.h $(CopyDir)\include\gtk-3.0\gtk\gtklistbox.h
|
||||
copy ..\..\..\gtk\gtkliststore.h $(CopyDir)\include\gtk-3.0\gtk\gtkliststore.h
|
||||
copy ..\..\..\gtk\gtklockbutton.h $(CopyDir)\include\gtk-3.0\gtk\gtklockbutton.h
|
||||
copy ..\..\..\gtk\gtkmain.h $(CopyDir)\include\gtk-3.0\gtk\gtkmain.h
|
||||
copy ..\..\..\gtk\gtkmenu.h $(CopyDir)\include\gtk-3.0\gtk\gtkmenu.h
|
||||
copy ..\..\..\gtk\gtkmenubar.h $(CopyDir)\include\gtk-3.0\gtk\gtkmenubar.h
|
||||
copy ..\..\..\gtk\gtkmenubutton.h $(CopyDir)\include\gtk-3.0\gtk\gtkmenubutton.h
|
||||
copy ..\..\..\gtk\gtkmenuitem.h $(CopyDir)\include\gtk-3.0\gtk\gtkmenuitem.h
|
||||
copy ..\..\..\gtk\gtkmenushell.h $(CopyDir)\include\gtk-3.0\gtk\gtkmenushell.h
|
||||
copy ..\..\..\gtk\gtkmenutoolbutton.h $(CopyDir)\include\gtk-3.0\gtk\gtkmenutoolbutton.h
|
||||
copy ..\..\..\gtk\gtkmessagedialog.h $(CopyDir)\include\gtk-3.0\gtk\gtkmessagedialog.h
|
||||
copy ..\..\..\gtk\gtkmodelbutton.h $(CopyDir)\include\gtk-3.0\gtk\gtkmodelbutton.h
|
||||
copy ..\..\..\gtk\gtkmodules.h $(CopyDir)\include\gtk-3.0\gtk\gtkmodules.h
|
||||
copy ..\..\..\gtk\gtkmountoperation.h $(CopyDir)\include\gtk-3.0\gtk\gtkmountoperation.h
|
||||
copy ..\..\..\gtk\gtknativedialog.h $(CopyDir)\include\gtk-3.0\gtk\gtknativedialog.h
|
||||
copy ..\..\..\gtk\gtknotebook.h $(CopyDir)\include\gtk-3.0\gtk\gtknotebook.h
|
||||
copy ..\..\..\gtk\gtkoffscreenwindow.h $(CopyDir)\include\gtk-3.0\gtk\gtkoffscreenwindow.h
|
||||
copy ..\..\..\gtk\gtkorientable.h $(CopyDir)\include\gtk-3.0\gtk\gtkorientable.h
|
||||
copy ..\..\..\gtk\gtkoverlay.h $(CopyDir)\include\gtk-3.0\gtk\gtkoverlay.h
|
||||
copy ..\..\..\gtk\gtkpadcontroller.h $(CopyDir)\include\gtk-3.0\gtk\gtkpadcontroller.h
|
||||
copy ..\..\..\gtk\gtkpagesetup.h $(CopyDir)\include\gtk-3.0\gtk\gtkpagesetup.h
|
||||
copy ..\..\..\gtk\gtkpaned.h $(CopyDir)\include\gtk-3.0\gtk\gtkpaned.h
|
||||
copy ..\..\..\gtk\gtkpapersize.h $(CopyDir)\include\gtk-3.0\gtk\gtkpapersize.h
|
||||
copy ..\..\..\gtk\gtkplacessidebar.h $(CopyDir)\include\gtk-3.0\gtk\gtkplacessidebar.h
|
||||
copy ..\..\..\gtk\gtkplug.h $(CopyDir)\include\gtk-3.0\gtk\gtkplug.h
|
||||
copy ..\..\..\gtk\gtkpopover.h $(CopyDir)\include\gtk-3.0\gtk\gtkpopover.h
|
||||
copy ..\..\..\gtk\gtkpopovermenu.h $(CopyDir)\include\gtk-3.0\gtk\gtkpopovermenu.h
|
||||
copy ..\..\..\gtk\gtkprintcontext.h $(CopyDir)\include\gtk-3.0\gtk\gtkprintcontext.h
|
||||
copy ..\..\..\gtk\gtkprintoperation.h $(CopyDir)\include\gtk-3.0\gtk\gtkprintoperation.h
|
||||
copy ..\..\..\gtk\gtkprintoperationpreview.h $(CopyDir)\include\gtk-3.0\gtk\gtkprintoperationpreview.h
|
||||
copy ..\..\..\gtk\gtkprintsettings.h $(CopyDir)\include\gtk-3.0\gtk\gtkprintsettings.h
|
||||
copy ..\..\..\gtk\gtkprogressbar.h $(CopyDir)\include\gtk-3.0\gtk\gtkprogressbar.h
|
||||
copy ..\..\..\gtk\gtkradiobutton.h $(CopyDir)\include\gtk-3.0\gtk\gtkradiobutton.h
|
||||
copy ..\..\..\gtk\gtkradiomenuitem.h $(CopyDir)\include\gtk-3.0\gtk\gtkradiomenuitem.h
|
||||
copy ..\..\..\gtk\gtkradiotoolbutton.h $(CopyDir)\include\gtk-3.0\gtk\gtkradiotoolbutton.h
|
||||
copy ..\..\..\gtk\gtkrange.h $(CopyDir)\include\gtk-3.0\gtk\gtkrange.h
|
||||
copy ..\..\..\gtk\gtkrecentchooser.h $(CopyDir)\include\gtk-3.0\gtk\gtkrecentchooser.h
|
||||
copy ..\..\..\gtk\gtkrecentchooserdialog.h $(CopyDir)\include\gtk-3.0\gtk\gtkrecentchooserdialog.h
|
||||
copy ..\..\..\gtk\gtkrecentchoosermenu.h $(CopyDir)\include\gtk-3.0\gtk\gtkrecentchoosermenu.h
|
||||
copy ..\..\..\gtk\gtkrecentchooserwidget.h $(CopyDir)\include\gtk-3.0\gtk\gtkrecentchooserwidget.h
|
||||
copy ..\..\..\gtk\gtkrecentfilter.h $(CopyDir)\include\gtk-3.0\gtk\gtkrecentfilter.h
|
||||
copy ..\..\..\gtk\gtkrecentmanager.h $(CopyDir)\include\gtk-3.0\gtk\gtkrecentmanager.h
|
||||
copy ..\..\..\gtk\gtkrender.h $(CopyDir)\include\gtk-3.0\gtk\gtkrender.h
|
||||
copy ..\..\..\gtk\gtkrevealer.h $(CopyDir)\include\gtk-3.0\gtk\gtkrevealer.h
|
||||
copy ..\..\..\gtk\gtkscale.h $(CopyDir)\include\gtk-3.0\gtk\gtkscale.h
|
||||
copy ..\..\..\gtk\gtkscalebutton.h $(CopyDir)\include\gtk-3.0\gtk\gtkscalebutton.h
|
||||
copy ..\..\..\gtk\gtkscrollable.h $(CopyDir)\include\gtk-3.0\gtk\gtkscrollable.h
|
||||
copy ..\..\..\gtk\gtkscrollbar.h $(CopyDir)\include\gtk-3.0\gtk\gtkscrollbar.h
|
||||
copy ..\..\..\gtk\gtkscrolledwindow.h $(CopyDir)\include\gtk-3.0\gtk\gtkscrolledwindow.h
|
||||
copy ..\..\..\gtk\gtksearchbar.h $(CopyDir)\include\gtk-3.0\gtk\gtksearchbar.h
|
||||
copy ..\..\..\gtk\gtksearchentry.h $(CopyDir)\include\gtk-3.0\gtk\gtksearchentry.h
|
||||
copy ..\..\..\gtk\gtkselection.h $(CopyDir)\include\gtk-3.0\gtk\gtkselection.h
|
||||
copy ..\..\..\gtk\gtkseparator.h $(CopyDir)\include\gtk-3.0\gtk\gtkseparator.h
|
||||
copy ..\..\..\gtk\gtkseparatormenuitem.h $(CopyDir)\include\gtk-3.0\gtk\gtkseparatormenuitem.h
|
||||
copy ..\..\..\gtk\gtkseparatortoolitem.h $(CopyDir)\include\gtk-3.0\gtk\gtkseparatortoolitem.h
|
||||
copy ..\..\..\gtk\gtksettings.h $(CopyDir)\include\gtk-3.0\gtk\gtksettings.h
|
||||
copy ..\..\..\gtk\gtkshortcutlabel.h $(CopyDir)\include\gtk-3.0\gtk\gtkshortcutlabel.h
|
||||
copy ..\..\..\gtk\gtkshortcutsgroup.h $(CopyDir)\include\gtk-3.0\gtk\gtkshortcutsgroup.h
|
||||
copy ..\..\..\gtk\gtkshortcutssection.h $(CopyDir)\include\gtk-3.0\gtk\gtkshortcutssection.h
|
||||
copy ..\..\..\gtk\gtkshortcutsshortcut.h $(CopyDir)\include\gtk-3.0\gtk\gtkshortcutsshortcut.h
|
||||
copy ..\..\..\gtk\gtkshortcutswindow.h $(CopyDir)\include\gtk-3.0\gtk\gtkshortcutswindow.h
|
||||
copy ..\..\..\gtk\gtkshow.h $(CopyDir)\include\gtk-3.0\gtk\gtkshow.h
|
||||
copy ..\..\..\gtk\gtkstacksidebar.h $(CopyDir)\include\gtk-3.0\gtk\gtkstacksidebar.h
|
||||
copy ..\..\..\gtk\gtksizegroup.h $(CopyDir)\include\gtk-3.0\gtk\gtksizegroup.h
|
||||
copy ..\..\..\gtk\gtksizerequest.h $(CopyDir)\include\gtk-3.0\gtk\gtksizerequest.h
|
||||
copy ..\..\..\gtk\gtksocket.h $(CopyDir)\include\gtk-3.0\gtk\gtksocket.h
|
||||
copy ..\..\..\gtk\gtkspinbutton.h $(CopyDir)\include\gtk-3.0\gtk\gtkspinbutton.h
|
||||
copy ..\..\..\gtk\gtkspinner.h $(CopyDir)\include\gtk-3.0\gtk\gtkspinner.h
|
||||
copy ..\..\..\gtk\gtkstack.h $(CopyDir)\include\gtk-3.0\gtk\gtkstack.h
|
||||
copy ..\..\..\gtk\gtkstackswitcher.h $(CopyDir)\include\gtk-3.0\gtk\gtkstackswitcher.h
|
||||
copy ..\..\..\gtk\gtkstatusbar.h $(CopyDir)\include\gtk-3.0\gtk\gtkstatusbar.h
|
||||
copy ..\..\..\gtk\gtkstylecontext.h $(CopyDir)\include\gtk-3.0\gtk\gtkstylecontext.h
|
||||
copy ..\..\..\gtk\gtkstyleprovider.h $(CopyDir)\include\gtk-3.0\gtk\gtkstyleprovider.h
|
||||
copy ..\..\..\gtk\gtkswitch.h $(CopyDir)\include\gtk-3.0\gtk\gtkswitch.h
|
||||
copy ..\..\..\gtk\gtktestutils.h $(CopyDir)\include\gtk-3.0\gtk\gtktestutils.h
|
||||
copy ..\..\..\gtk\gtktextattributes.h $(CopyDir)\include\gtk-3.0\gtk\gtktextattributes.h
|
||||
copy ..\..\..\gtk\gtktextbuffer.h $(CopyDir)\include\gtk-3.0\gtk\gtktextbuffer.h
|
||||
copy ..\..\..\gtk\gtktextbufferrichtext.h $(CopyDir)\include\gtk-3.0\gtk\gtktextbufferrichtext.h
|
||||
copy ..\..\..\gtk\gtktextchild.h $(CopyDir)\include\gtk-3.0\gtk\gtktextchild.h
|
||||
copy ..\..\..\gtk\gtktextdisplay.h $(CopyDir)\include\gtk-3.0\gtk\gtktextdisplay.h
|
||||
copy ..\..\..\gtk\gtktextiter.h $(CopyDir)\include\gtk-3.0\gtk\gtktextiter.h
|
||||
copy ..\..\..\gtk\gtktextmark.h $(CopyDir)\include\gtk-3.0\gtk\gtktextmark.h
|
||||
copy ..\..\..\gtk\gtktexttag.h $(CopyDir)\include\gtk-3.0\gtk\gtktexttag.h
|
||||
copy ..\..\..\gtk\gtktexttagtable.h $(CopyDir)\include\gtk-3.0\gtk\gtktexttagtable.h
|
||||
copy ..\..\..\gtk\gtktextview.h $(CopyDir)\include\gtk-3.0\gtk\gtktextview.h
|
||||
copy ..\..\..\gtk\gtktogglebutton.h $(CopyDir)\include\gtk-3.0\gtk\gtktogglebutton.h
|
||||
copy ..\..\..\gtk\gtktoggletoolbutton.h $(CopyDir)\include\gtk-3.0\gtk\gtktoggletoolbutton.h
|
||||
copy ..\..\..\gtk\gtktoolbar.h $(CopyDir)\include\gtk-3.0\gtk\gtktoolbar.h
|
||||
copy ..\..\..\gtk\gtktoolbutton.h $(CopyDir)\include\gtk-3.0\gtk\gtktoolbutton.h
|
||||
copy ..\..\..\gtk\gtktoolitem.h $(CopyDir)\include\gtk-3.0\gtk\gtktoolitem.h
|
||||
copy ..\..\..\gtk\gtktoolitemgroup.h $(CopyDir)\include\gtk-3.0\gtk\gtktoolitemgroup.h
|
||||
copy ..\..\..\gtk\gtktoolpalette.h $(CopyDir)\include\gtk-3.0\gtk\gtktoolpalette.h
|
||||
copy ..\..\..\gtk\gtktoolshell.h $(CopyDir)\include\gtk-3.0\gtk\gtktoolshell.h
|
||||
copy ..\..\..\gtk\gtktooltip.h $(CopyDir)\include\gtk-3.0\gtk\gtktooltip.h
|
||||
copy ..\..\..\gtk\gtktreednd.h $(CopyDir)\include\gtk-3.0\gtk\gtktreednd.h
|
||||
copy ..\..\..\gtk\gtktreemodel.h $(CopyDir)\include\gtk-3.0\gtk\gtktreemodel.h
|
||||
copy ..\..\..\gtk\gtktreemodelfilter.h $(CopyDir)\include\gtk-3.0\gtk\gtktreemodelfilter.h
|
||||
copy ..\..\..\gtk\gtktreemodelsort.h $(CopyDir)\include\gtk-3.0\gtk\gtktreemodelsort.h
|
||||
copy ..\..\..\gtk\gtktreeselection.h $(CopyDir)\include\gtk-3.0\gtk\gtktreeselection.h
|
||||
copy ..\..\..\gtk\gtktreesortable.h $(CopyDir)\include\gtk-3.0\gtk\gtktreesortable.h
|
||||
copy ..\..\..\gtk\gtktreestore.h $(CopyDir)\include\gtk-3.0\gtk\gtktreestore.h
|
||||
copy ..\..\..\gtk\gtktreeview.h $(CopyDir)\include\gtk-3.0\gtk\gtktreeview.h
|
||||
copy ..\..\..\gtk\gtktreeviewcolumn.h $(CopyDir)\include\gtk-3.0\gtk\gtktreeviewcolumn.h
|
||||
copy ..\..\..\gtk\gtktypes.h $(CopyDir)\include\gtk-3.0\gtk\gtktypes.h
|
||||
copy ..\..\..\gtk\gtkviewport.h $(CopyDir)\include\gtk-3.0\gtk\gtkviewport.h
|
||||
copy ..\..\..\gtk\gtkvolumebutton.h $(CopyDir)\include\gtk-3.0\gtk\gtkvolumebutton.h
|
||||
copy ..\..\..\gtk\gtkwidget.h $(CopyDir)\include\gtk-3.0\gtk\gtkwidget.h
|
||||
copy ..\..\..\gtk\gtkwidgetpath.h $(CopyDir)\include\gtk-3.0\gtk\gtkwidgetpath.h
|
||||
copy ..\..\..\gtk\gtkwindow.h $(CopyDir)\include\gtk-3.0\gtk\gtkwindow.h
|
||||
copy ..\..\..\gtk\gtkwindowgroup.h $(CopyDir)\include\gtk-3.0\gtk\gtkwindowgroup.h
|
||||
copy ..\..\..\gtk\gtktextlayout.h $(CopyDir)\include\gtk-3.0\gtk\gtktextlayout.h
|
||||
copy ..\..\..\gtk\gtktypebuiltins.h $(CopyDir)\include\gtk-3.0\gtk\gtktypebuiltins.h
|
||||
copy ..\..\..\gtk\gtkversion.h $(CopyDir)\include\gtk-3.0\gtk\gtkversion.h
|
||||
copy ..\..\..\gtk\a11y\gtk-a11y-autocleanups.h $(CopyDir)\include\gtk-3.0\gtk\a11y\gtk-a11y-autocleanups.h
|
||||
copy ..\..\..\gtk\a11y\gtkarrowaccessible.h $(CopyDir)\include\gtk-3.0\gtk\a11y\gtkarrowaccessible.h
|
||||
copy ..\..\..\gtk\a11y\gtkbooleancellaccessible.h $(CopyDir)\include\gtk-3.0\gtk\a11y\gtkbooleancellaccessible.h
|
||||
copy ..\..\..\gtk\a11y\gtkbuttonaccessible.h $(CopyDir)\include\gtk-3.0\gtk\a11y\gtkbuttonaccessible.h
|
||||
copy ..\..\..\gtk\a11y\gtkcellaccessible.h $(CopyDir)\include\gtk-3.0\gtk\a11y\gtkcellaccessible.h
|
||||
copy ..\..\..\gtk\a11y\gtkcellaccessibleparent.h $(CopyDir)\include\gtk-3.0\gtk\a11y\gtkcellaccessibleparent.h
|
||||
copy ..\..\..\gtk\a11y\gtkcheckmenuitemaccessible.h $(CopyDir)\include\gtk-3.0\gtk\a11y\gtkcheckmenuitemaccessible.h
|
||||
copy ..\..\..\gtk\a11y\gtkcomboboxaccessible.h $(CopyDir)\include\gtk-3.0\gtk\a11y\gtkcomboboxaccessible.h
|
||||
copy ..\..\..\gtk\a11y\gtkcontaineraccessible.h $(CopyDir)\include\gtk-3.0\gtk\a11y\gtkcontaineraccessible.h
|
||||
copy ..\..\..\gtk\a11y\gtkcontainercellaccessible.h $(CopyDir)\include\gtk-3.0\gtk\a11y\gtkcontainercellaccessible.h
|
||||
copy ..\..\..\gtk\a11y\gtkentryaccessible.h $(CopyDir)\include\gtk-3.0\gtk\a11y\gtkentryaccessible.h
|
||||
copy ..\..\..\gtk\a11y\gtkexpanderaccessible.h $(CopyDir)\include\gtk-3.0\gtk\a11y\gtkexpanderaccessible.h
|
||||
copy ..\..\..\gtk\a11y\gtkflowboxaccessible.h $(CopyDir)\include\gtk-3.0\gtk\a11y\gtkflowboxaccessible.h
|
||||
copy ..\..\..\gtk\a11y\gtkflowboxchildaccessible.h $(CopyDir)\include\gtk-3.0\gtk\a11y\gtkflowboxchildaccessible.h
|
||||
copy ..\..\..\gtk\a11y\gtkframeaccessible.h $(CopyDir)\include\gtk-3.0\gtk\a11y\gtkframeaccessible.h
|
||||
copy ..\..\..\gtk\a11y\gtkiconviewaccessible.h $(CopyDir)\include\gtk-3.0\gtk\a11y\gtkiconviewaccessible.h
|
||||
copy ..\..\..\gtk\a11y\gtkimageaccessible.h $(CopyDir)\include\gtk-3.0\gtk\a11y\gtkimageaccessible.h
|
||||
copy ..\..\..\gtk\a11y\gtkimagecellaccessible.h $(CopyDir)\include\gtk-3.0\gtk\a11y\gtkimagecellaccessible.h
|
||||
copy ..\..\..\gtk\a11y\gtklabelaccessible.h $(CopyDir)\include\gtk-3.0\gtk\a11y\gtklabelaccessible.h
|
||||
copy ..\..\..\gtk\a11y\gtklevelbaraccessible.h $(CopyDir)\include\gtk-3.0\gtk\a11y\gtklevelbaraccessible.h
|
||||
copy ..\..\..\gtk\a11y\gtklinkbuttonaccessible.h $(CopyDir)\include\gtk-3.0\gtk\a11y\gtklinkbuttonaccessible.h
|
||||
copy ..\..\..\gtk\a11y\gtklistboxaccessible.h $(CopyDir)\include\gtk-3.0\gtk\a11y\gtklistboxaccessible.h
|
||||
copy ..\..\..\gtk\a11y\gtklistboxrowaccessible.h $(CopyDir)\include\gtk-3.0\gtk\a11y\gtklistboxrowaccessible.h
|
||||
copy ..\..\..\gtk\a11y\gtklockbuttonaccessible.h $(CopyDir)\include\gtk-3.0\gtk\a11y\gtklockbuttonaccessible.h
|
||||
copy ..\..\..\gtk\a11y\gtkmenuaccessible.h $(CopyDir)\include\gtk-3.0\gtk\a11y\gtkmenuaccessible.h
|
||||
copy ..\..\..\gtk\a11y\gtkmenubuttonaccessible.h $(CopyDir)\include\gtk-3.0\gtk\a11y\gtkmenubuttonaccessible.h
|
||||
copy ..\..\..\gtk\a11y\gtkmenuitemaccessible.h $(CopyDir)\include\gtk-3.0\gtk\a11y\gtkmenuitemaccessible.h
|
||||
copy ..\..\..\gtk\a11y\gtkmenushellaccessible.h $(CopyDir)\include\gtk-3.0\gtk\a11y\gtkmenushellaccessible.h
|
||||
copy ..\..\..\gtk\a11y\gtknotebookaccessible.h $(CopyDir)\include\gtk-3.0\gtk\a11y\gtknotebookaccessible.h
|
||||
copy ..\..\..\gtk\a11y\gtknotebookpageaccessible.h $(CopyDir)\include\gtk-3.0\gtk\a11y\gtknotebookpageaccessible.h
|
||||
copy ..\..\..\gtk\a11y\gtkpanedaccessible.h $(CopyDir)\include\gtk-3.0\gtk\a11y\gtkpanedaccessible.h
|
||||
copy ..\..\..\gtk\a11y\gtkpopoveraccessible.h $(CopyDir)\include\gtk-3.0\gtk\a11y\gtkpopoveraccessible.h
|
||||
copy ..\..\..\gtk\a11y\gtkprogressbaraccessible.h $(CopyDir)\include\gtk-3.0\gtk\a11y\gtkprogressbaraccessible.h
|
||||
copy ..\..\..\gtk\a11y\gtkradiobuttonaccessible.h $(CopyDir)\include\gtk-3.0\gtk\a11y\gtkradiobuttonaccessible.h
|
||||
copy ..\..\..\gtk\a11y\gtkradiomenuitemaccessible.h $(CopyDir)\include\gtk-3.0\gtk\a11y\gtkradiomenuitemaccessible.h
|
||||
copy ..\..\..\gtk\a11y\gtkrangeaccessible.h $(CopyDir)\include\gtk-3.0\gtk\a11y\gtkrangeaccessible.h
|
||||
copy ..\..\..\gtk\a11y\gtkrenderercellaccessible.h $(CopyDir)\include\gtk-3.0\gtk\a11y\gtkrenderercellaccessible.h
|
||||
copy ..\..\..\gtk\a11y\gtkscaleaccessible.h $(CopyDir)\include\gtk-3.0\gtk\a11y\gtkscaleaccessible.h
|
||||
copy ..\..\..\gtk\a11y\gtkscalebuttonaccessible.h $(CopyDir)\include\gtk-3.0\gtk\a11y\gtkscalebuttonaccessible.h
|
||||
copy ..\..\..\gtk\a11y\gtkscrolledwindowaccessible.h $(CopyDir)\include\gtk-3.0\gtk\a11y\gtkscrolledwindowaccessible.h
|
||||
copy ..\..\..\gtk\a11y\gtkspinbuttonaccessible.h $(CopyDir)\include\gtk-3.0\gtk\a11y\gtkspinbuttonaccessible.h
|
||||
copy ..\..\..\gtk\a11y\gtkspinneraccessible.h $(CopyDir)\include\gtk-3.0\gtk\a11y\gtkspinneraccessible.h
|
||||
copy ..\..\..\gtk\a11y\gtkstatusbaraccessible.h $(CopyDir)\include\gtk-3.0\gtk\a11y\gtkstatusbaraccessible.h
|
||||
copy ..\..\..\gtk\a11y\gtkstackaccessible.h $(CopyDir)\include\gtk-3.0\gtk\a11y\gtkstackaccessible.h
|
||||
copy ..\..\..\gtk\a11y\gtkswitchaccessible.h $(CopyDir)\include\gtk-3.0\gtk\a11y\gtkswitchaccessible.h
|
||||
copy ..\..\..\gtk\a11y\gtktextcellaccessible.h $(CopyDir)\include\gtk-3.0\gtk\a11y\gtktextcellaccessible.h
|
||||
copy ..\..\..\gtk\a11y\gtktextviewaccessible.h $(CopyDir)\include\gtk-3.0\gtk\a11y\gtktextviewaccessible.h
|
||||
copy ..\..\..\gtk\a11y\gtktogglebuttonaccessible.h $(CopyDir)\include\gtk-3.0\gtk\a11y\gtktogglebuttonaccessible.h
|
||||
copy ..\..\..\gtk\a11y\gtktoplevelaccessible.h $(CopyDir)\include\gtk-3.0\gtk\a11y\gtktoplevelaccessible.h
|
||||
copy ..\..\..\gtk\a11y\gtktreeviewaccessible.h $(CopyDir)\include\gtk-3.0\gtk\a11y\gtktreeviewaccessible.h
|
||||
copy ..\..\..\gtk\a11y\gtkwidgetaccessible.h $(CopyDir)\include\gtk-3.0\gtk\a11y\gtkwidgetaccessible.h
|
||||
copy ..\..\..\gtk\a11y\gtkwindowaccessible.h $(CopyDir)\include\gtk-3.0\gtk\a11y\gtkwindowaccessible.h
|
||||
copy ..\..\..\gtk\deprecated\gtkactivatable.h $(CopyDir)\include\gtk-3.0\gtk\deprecated\gtkactivatable.h
|
||||
copy ..\..\..\gtk\deprecated\gtkaction.h $(CopyDir)\include\gtk-3.0\gtk\deprecated\gtkaction.h
|
||||
copy ..\..\..\gtk\deprecated\gtkactiongroup.h $(CopyDir)\include\gtk-3.0\gtk\deprecated\gtkactiongroup.h
|
||||
copy ..\..\..\gtk\deprecated\gtkalignment.h $(CopyDir)\include\gtk-3.0\gtk\deprecated\gtkalignment.h
|
||||
copy ..\..\..\gtk\deprecated\gtkarrow.h $(CopyDir)\include\gtk-3.0\gtk\deprecated\gtkarrow.h
|
||||
copy ..\..\..\gtk\deprecated\gtkcolorsel.h $(CopyDir)\include\gtk-3.0\gtk\deprecated\gtkcolorsel.h
|
||||
copy ..\..\..\gtk\deprecated\gtkcolorseldialog.h $(CopyDir)\include\gtk-3.0\gtk\deprecated\gtkcolorseldialog.h
|
||||
copy ..\..\..\gtk\deprecated\gtkfontsel.h $(CopyDir)\include\gtk-3.0\gtk\deprecated\gtkfontsel.h
|
||||
copy ..\..\..\gtk\deprecated\gtkgradient.h $(CopyDir)\include\gtk-3.0\gtk\deprecated\gtkgradient.h
|
||||
copy ..\..\..\gtk\deprecated\gtkhandlebox.h $(CopyDir)\include\gtk-3.0\gtk\deprecated\gtkhandlebox.h
|
||||
copy ..\..\..\gtk\deprecated\gtkhbbox.h $(CopyDir)\include\gtk-3.0\gtk\deprecated\gtkhbbox.h
|
||||
copy ..\..\..\gtk\deprecated\gtkhbox.h $(CopyDir)\include\gtk-3.0\gtk\deprecated\gtkhbox.h
|
||||
copy ..\..\..\gtk\deprecated\gtkhpaned.h $(CopyDir)\include\gtk-3.0\gtk\deprecated\gtkhpaned.h
|
||||
copy ..\..\..\gtk\deprecated\gtkhscale.h $(CopyDir)\include\gtk-3.0\gtk\deprecated\gtkhscale.h
|
||||
copy ..\..\..\gtk\deprecated\gtkhscrollbar.h $(CopyDir)\include\gtk-3.0\gtk\deprecated\gtkhscrollbar.h
|
||||
copy ..\..\..\gtk\deprecated\gtkhseparator.h $(CopyDir)\include\gtk-3.0\gtk\deprecated\gtkhseparator.h
|
||||
copy ..\..\..\gtk\deprecated\gtkhsv.h $(CopyDir)\include\gtk-3.0\gtk\deprecated\gtkhsv.h
|
||||
copy ..\..\..\gtk\deprecated\gtkiconfactory.h $(CopyDir)\include\gtk-3.0\gtk\deprecated\gtkiconfactory.h
|
||||
copy ..\..\..\gtk\deprecated\gtkimagemenuitem.h $(CopyDir)\include\gtk-3.0\gtk\deprecated\gtkimagemenuitem.h
|
||||
copy ..\..\..\gtk\deprecated\gtkmisc.h $(CopyDir)\include\gtk-3.0\gtk\deprecated\gtkmisc.h
|
||||
copy ..\..\..\gtk\deprecated\gtknumerableicon.h $(CopyDir)\include\gtk-3.0\gtk\deprecated\gtknumerableicon.h
|
||||
copy ..\..\..\gtk\deprecated\gtkradioaction.h $(CopyDir)\include\gtk-3.0\gtk\deprecated\gtkradioaction.h
|
||||
copy ..\..\..\gtk\deprecated\gtkrc.h $(CopyDir)\include\gtk-3.0\gtk\deprecated\gtkrc.h
|
||||
copy ..\..\..\gtk\deprecated\gtkrecentaction.h $(CopyDir)\include\gtk-3.0\gtk\deprecated\gtkrecentaction.h
|
||||
copy ..\..\..\gtk\deprecated\gtkstatusicon.h $(CopyDir)\include\gtk-3.0\gtk\deprecated\gtkstatusicon.h
|
||||
copy ..\..\..\gtk\deprecated\gtkstock.h $(CopyDir)\include\gtk-3.0\gtk\deprecated\gtkstock.h
|
||||
copy ..\..\..\gtk\deprecated\gtkstyle.h $(CopyDir)\include\gtk-3.0\gtk\deprecated\gtkstyle.h
|
||||
copy ..\..\..\gtk\deprecated\gtkstyleproperties.h $(CopyDir)\include\gtk-3.0\gtk\deprecated\gtkstyleproperties.h
|
||||
copy ..\..\..\gtk\deprecated\gtksymboliccolor.h $(CopyDir)\include\gtk-3.0\gtk\deprecated\gtksymboliccolor.h
|
||||
copy ..\..\..\gtk\deprecated\gtktable.h $(CopyDir)\include\gtk-3.0\gtk\deprecated\gtktable.h
|
||||
copy ..\..\..\gtk\deprecated\gtktearoffmenuitem.h $(CopyDir)\include\gtk-3.0\gtk\deprecated\gtktearoffmenuitem.h
|
||||
copy ..\..\..\gtk\deprecated\gtkthemingengine.h $(CopyDir)\include\gtk-3.0\gtk\deprecated\gtkthemingengine.h
|
||||
copy ..\..\..\gtk\deprecated\gtktoggleaction.h $(CopyDir)\include\gtk-3.0\gtk\deprecated\gtktoggleaction.h
|
||||
copy ..\..\..\gtk\deprecated\gtkuimanager.h $(CopyDir)\include\gtk-3.0\gtk\deprecated\gtkuimanager.h
|
||||
copy ..\..\..\gtk\deprecated\gtkvbbox.h $(CopyDir)\include\gtk-3.0\gtk\deprecated\gtkvbbox.h
|
||||
copy ..\..\..\gtk\deprecated\gtkvbox.h $(CopyDir)\include\gtk-3.0\gtk\deprecated\gtkvbox.h
|
||||
copy ..\..\..\gtk\deprecated\gtkvscale.h $(CopyDir)\include\gtk-3.0\gtk\deprecated\gtkvscale.h
|
||||
copy ..\..\..\gtk\deprecated\gtkvscrollbar.h $(CopyDir)\include\gtk-3.0\gtk\deprecated\gtkvscrollbar.h
|
||||
copy ..\..\..\gtk\deprecated\gtkvseparator.h $(CopyDir)\include\gtk-3.0\gtk\deprecated\gtkvseparator.h
|
||||
copy ..\..\..\gtk\deprecated\gtkvpaned.h $(CopyDir)\include\gtk-3.0\gtk\deprecated\gtkvpaned.h
|
||||
mkdir $(CopyDir)\include\gail-$(ApiVersion)\libgail-util
|
||||
copy ..\..\..\libgail-util\gailmisc.h $(CopyDir)\include\gail-3.0\libgail-util\gailmisc.h
|
||||
copy ..\..\..\libgail-util\gailtextutil.h $(CopyDir)\include\gail-3.0\libgail-util\gailtextutil.h
|
||||
copy ..\..\..\libgail-util\gail-util.h $(CopyDir)\include\gail-3.0\libgail-util\gail-util.h
|
||||
for %%s in (16 22 24 32 48 256) do ((mkdir $(CopyDir)\share\icons\hicolor\%%sx%%s\apps) & (copy /b ..\..\..\demos\gtk-demo\data\%%sx%%s\gtk3-demo.png $(CopyDir)\share\icons\hicolor\%%sx%%s\apps))
|
||||
mkdir $(CopyDir)\share\glib-2.0\schemas
|
||||
copy ..\..\..\gtk\org.gtk.Settings.ColorChooser.gschema.xml $(CopyDir)\share\glib-2.0\schemas
|
||||
copy ..\..\..\gtk\org.gtk.Settings.Debug.gschema.xml $(CopyDir)\share\glib-2.0\schemas
|
||||
copy ..\..\..\gtk\org.gtk.Settings.EmojiChooser.gschema.xml $(CopyDir)\share\glib-2.0\schemas
|
||||
copy ..\..\..\gtk\org.gtk.Settings.FileChooser.gschema.xml $(CopyDir)\share\glib-2.0\schemas
|
||||
copy ..\..\..\demos\gtk-demo\org.gtk.Demo.gschema.xml $(CopyDir)\share\glib-2.0\schemas
|
||||
</GtkDoInstall>
|
||||
<GtkDoInstallBroadwayHeaders>
|
||||
copy ..\..\..\gdk\broadway\gdkbroadway.h $(CopyDir)\include\gtk-$(ApiVersion)\gdk
|
||||
mkdir $(CopyDir)\include\gtk-$(ApiVersion)\gdk\broadway
|
||||
copy ..\..\..\gdk\broadway\gdkbroadwaydisplay.h $(CopyDir)\include\gtk-3.0\gdk\broadway\gdkbroadwaydisplay.h
|
||||
copy ..\..\..\gdk\broadway\gdkbroadwaywindow.h $(CopyDir)\include\gtk-3.0\gdk\broadway\gdkbroadwaywindow.h
|
||||
copy ..\..\..\gdk\broadway\gdkbroadwaycursor.h $(CopyDir)\include\gtk-3.0\gdk\broadway\gdkbroadwaycursor.h
|
||||
copy ..\..\..\gdk\broadway\gdkbroadwaymonitor.h $(CopyDir)\include\gtk-3.0\gdk\broadway\gdkbroadwaymonitor.h
|
||||
copy ..\..\..\gdk\broadway\gdkbroadwayvisual.h $(CopyDir)\include\gtk-3.0\gdk\broadway\gdkbroadwayvisual.h
|
||||
</GtkDoInstallBroadwayHeaders>
|
||||
<GtkPostInstall>
|
||||
echo "Compiling gsettings XML Files..."
|
||||
$(GlibEtcInstallRoot)\bin\glib-compile-schemas.exe $(CopyDir)\share\glib-2.0\schemas
|
||||
echo "Generating icon cache......"
|
||||
$(CopyDir)\bin\gtk-update-icon-cache.exe --ignore-theme-index --force "$(CopyDir)\share\icons\hicolor"
|
||||
</GtkPostInstall>
|
||||
<GenerateGtkPC>$(PythonDir)\python ..\gtkpc.py --prefix=$(CopyDir) --version=$(GtkVersion) --host=i686-pc-vs$(VSVer)</GenerateGtkPC>
|
||||
<GenerateGtkPCX64>$(PythonDir)\python ..\gtkpc.py --prefix=$(CopyDir) --version=$(GtkVersion) --host=x86_64-pc-vs$(VSVer)</GenerateGtkPCX64>
|
||||
<GtkPCFiles>..\gdk-3.0.pc;..\gtk+-3.0.pc;..\gail-3.0.pc</GtkPCFiles>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup>
|
||||
<_PropertySheetDisplayName>gtk3installsprops</_PropertySheetDisplayName>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<BuildMacro Include="BinDir">
|
||||
<Value>$(BinDir)</Value>
|
||||
</BuildMacro>
|
||||
<BuildMacro Include="InstalledDlls">
|
||||
<Value>$(InstalledDlls)</Value>
|
||||
</BuildMacro>
|
||||
<BuildMacro Include="InstalledBins">
|
||||
<Value>$(InstalledBins)</Value>
|
||||
</BuildMacro>
|
||||
<BuildMacro Include="InstalledBroadwayBins">
|
||||
<Value>$(InstalledBroadwayBins)</Value>
|
||||
</BuildMacro>
|
||||
<BuildMacro Include="GtkDoInstallBin">
|
||||
<Value>$(GtkDoInstallBin)</Value>
|
||||
</BuildMacro>
|
||||
<BuildMacro Include="GtkDoInstall">
|
||||
<Value>$(GtkDoInstall)</Value>
|
||||
</BuildMacro>
|
||||
<BuildMacro Include="GtkDoInstallBroadwayHeaders">
|
||||
<Value>$(GtkDoInstallBroadwayHeaders)</Value>
|
||||
</BuildMacro>
|
||||
<BuildMacro Include="GtkPostInstall">
|
||||
<Value>$(GtkPostInstall)</Value>
|
||||
</BuildMacro>
|
||||
<BuildMacro Include="GenerateGtkPC">
|
||||
<Value>$(GenerateGtkPC)</Value>
|
||||
</BuildMacro>
|
||||
<BuildMacro Include="GenerateGtkPCX64">
|
||||
<Value>$(GenerateGtkPCX64)</Value>
|
||||
</BuildMacro>
|
||||
<BuildMacro Include="GtkPCFiles">
|
||||
<Value>$(GtkPCFiles)</Value>
|
||||
</BuildMacro>
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
@@ -135,7 +135,7 @@ echo "Generating icon cache......"
|
||||
$(CopyDir)\bin\gtk-update-icon-cache.exe --ignore-theme-index --force "$(CopyDir)\share\icons\hicolor"
|
||||
</GtkPostInstall>
|
||||
<GenerateGtkPC>$(PythonDir)\python ..\gtkpc.py --prefix=$(CopyDir) --version=$(GtkVersion) --host=i686-pc-vs$(VSVer)</GenerateGtkPC>
|
||||
<GenerateGtkPCX64>$(PythonDirX64)\python ..\gtkpc.py --prefix=$(CopyDir) --version=$(GtkVersion) --host=x86_64-pc-vs$(VSVer)</GenerateGtkPCX64>
|
||||
<GenerateGtkPCX64>$(PythonDir)\python ..\gtkpc.py --prefix=$(CopyDir) --version=$(GtkVersion) --host=x86_64-pc-vs$(VSVer)</GenerateGtkPCX64>
|
||||
<GtkPCFiles>..\gdk-3.0.pc;..\gtk+-3.0.pc;..\gail-3.0.pc</GtkPCFiles>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup>
|
||||
|
||||
@@ -80,15 +80,15 @@
|
||||
<NMakeOutput>$(GtkIntrospectBuiltFiles)</NMakeOutput>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<NMakeBuildCommandLine>$(GtkIntrospectNMakeCmd) $(IntrospectPythonParamX64) install-introspection</NMakeBuildCommandLine>
|
||||
<NMakeReBuildCommandLine>$(GtkIntrospectNMakeCmd) $(IntrospectPythonParamX64) clean install-introspection</NMakeReBuildCommandLine>
|
||||
<NMakeCleanCommandLine>$(GtkIntrospectNMakeCmd) $(IntrospectPythonParamX64) clean</NMakeCleanCommandLine>
|
||||
<NMakeBuildCommandLine>$(GtkIntrospectNMakeCmd) $(IntrospectPythonParam) install-introspection</NMakeBuildCommandLine>
|
||||
<NMakeReBuildCommandLine>$(GtkIntrospectNMakeCmd) $(IntrospectPythonParam) clean install-introspection</NMakeReBuildCommandLine>
|
||||
<NMakeCleanCommandLine>$(GtkIntrospectNMakeCmd) $(IntrospectPythonParam) clean</NMakeCleanCommandLine>
|
||||
<NMakeOutput>$(GtkIntrospectBuiltFiles)</NMakeOutput>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<NMakeBuildCommandLine>$(GtkIntrospectNMakeCmd) $(IntrospectPythonParamX64) install-introspection</NMakeBuildCommandLine>
|
||||
<NMakeReBuildCommandLine>$(GtkIntrospectNMakeCmd) $(IntrospectPythonParamX64) clean install-introspection</NMakeReBuildCommandLine>
|
||||
<NMakeCleanCommandLine>$(GtkIntrospectNMakeCmd) $(IntrospectPythonParamX64) clean</NMakeCleanCommandLine>
|
||||
<NMakeBuildCommandLine>$(GtkIntrospectNMakeCmd) $(IntrospectPythonParam) install-introspection</NMakeBuildCommandLine>
|
||||
<NMakeReBuildCommandLine>$(GtkIntrospectNMakeCmd) $(IntrospectPythonParam) clean install-introspection</NMakeReBuildCommandLine>
|
||||
<NMakeCleanCommandLine>$(GtkIntrospectNMakeCmd) $(IntrospectPythonParam) clean</NMakeCleanCommandLine>
|
||||
<NMakeOutput>$(GtkIntrospectBuiltFiles)</NMakeOutput>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
|
||||
@@ -12,14 +12,17 @@
|
||||
<GtkSeparateVSDllSuffix>-vs$(VSVer)</GtkSeparateVSDllSuffix>
|
||||
<GtkDllPrefix>$(GtkSeparateVSDllPrefix)</GtkDllPrefix>
|
||||
<GtkDllSuffix>$(GtkSeparateVSDllSuffix)</GtkDllSuffix>
|
||||
<PythonDir Condition="'$(VisualStudioVersion)' == '10.0'">c:\python34</PythonDir>
|
||||
<PythonDir Condition="'$(VisualStudioVersion)' == '11.0'">c:\python34</PythonDir>
|
||||
<PythonDir Condition="'$(VisualStudioVersion)' == '12.0'">c:\python34</PythonDir>
|
||||
<PythonDir Condition="'$(VisualStudioVersion)' == '14.0'">c:\python36</PythonDir>
|
||||
<PythonDir Condition="'$(VisualStudioVersion)' == '15.0'">c:\python36</PythonDir>
|
||||
<PythonDirX64>$(PythonDir).x64</PythonDirX64>
|
||||
<PythonDir Condition="'$(VisualStudioVersion)|$(Platform)' == '10.0|Win32'">c:\python34</PythonDir>
|
||||
<PythonDir Condition="'$(VisualStudioVersion)|$(Platform)' == '11.0|Win32'">c:\python34</PythonDir>
|
||||
<PythonDir Condition="'$(VisualStudioVersion)|$(Platform)' == '12.0|Win32'">c:\python34</PythonDir>
|
||||
<PythonDir Condition="'$(VisualStudioVersion)|$(Platform)' == '14.0|Win32'">c:\python36</PythonDir>
|
||||
<PythonDir Condition="'$(VisualStudioVersion)|$(Platform)' == '15.0|Win32'">c:\python36</PythonDir>
|
||||
<PythonDir Condition="'$(VisualStudioVersion)|$(Platform)' == '10.0|x64'">c:\python34.x64</PythonDir>
|
||||
<PythonDir Condition="'$(VisualStudioVersion)|$(Platform)' == '11.0|x64'">c:\python34.x64</PythonDir>
|
||||
<PythonDir Condition="'$(VisualStudioVersion)|$(Platform)' == '12.0|x64'">c:\python34.x64</PythonDir>
|
||||
<PythonDir Condition="'$(VisualStudioVersion)|$(Platform)' == '14.0|x64'">c:\python36.x64</PythonDir>
|
||||
<PythonDir Condition="'$(VisualStudioVersion)|$(Platform)' == '15.0|x64'">c:\python36.x64</PythonDir>
|
||||
<IntrospectPythonParam>PYTHON=$(PythonDir)\python.exe</IntrospectPythonParam>
|
||||
<IntrospectPythonParamX64>PYTHON=$(PythonDirX64)\python.exe</IntrospectPythonParamX64>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup>
|
||||
<_PropertySheetDisplayName>gtk3versionpathsprops</_PropertySheetDisplayName>
|
||||
@@ -61,14 +64,8 @@
|
||||
<BuildMacro Include="PythonDir">
|
||||
<Value>$(PythonDir)</Value>
|
||||
</BuildMacro>
|
||||
<BuildMacro Include="PythonDirX64">
|
||||
<Value>$(PythonDirX64)</Value>
|
||||
</BuildMacro>
|
||||
<BuildMacro Include="IntrospectPythonParam">
|
||||
<Value>$(IntrospectPythonParam)</Value>
|
||||
</BuildMacro>
|
||||
<BuildMacro Include="IntrospectPythonParamX64">
|
||||
<Value>$(IntrospectPythonParamX64)</Value>
|
||||
</BuildMacro>
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
|
||||
@@ -252,6 +252,36 @@
|
||||
/>
|
||||
</FileConfiguration>
|
||||
</File>
|
||||
<File RelativePath="..\gentypefuncs.py">
|
||||
<FileConfiguration Name="Debug|Win32">
|
||||
<Tool Name="VCCustomBuildTool"
|
||||
Description="Generating ..\..\..\gtk\gtktypefuncs.c..."
|
||||
CommandLine="$(GenerateTypeFuncs)"
|
||||
Outputs="..\..\..\gtk\gtktypefuncs.c"
|
||||
/>
|
||||
</FileConfiguration>
|
||||
<FileConfiguration Name="Release|Win32">
|
||||
<Tool Name="VCCustomBuildTool"
|
||||
Description="Generating ..\..\..\gtk\gtktypefuncs.c..."
|
||||
CommandLine="$(GenerateTypeFuncs)"
|
||||
Outputs="..\..\..\gtk\gtktypefuncs.c"
|
||||
/>
|
||||
</FileConfiguration>
|
||||
<FileConfiguration Name="Debug|x64">
|
||||
<Tool Name="VCCustomBuildTool"
|
||||
Description="Generating ..\..\..\gtk\gtktypefuncs.c..."
|
||||
CommandLine="$(GenerateTypeFuncsX64)"
|
||||
Outputs="..\..\..\gtk\gtktypefuncs.c"
|
||||
/>
|
||||
</FileConfiguration>
|
||||
<FileConfiguration Name="Release|x64">
|
||||
<Tool Name="VCCustomBuildTool"
|
||||
Description="Generating ..\..\..\gtk\gtktypefuncs.c..."
|
||||
CommandLine="$(GenerateTypeFuncsX64)"
|
||||
Outputs="..\..\..\gtk\gtktypefuncs.c"
|
||||
/>
|
||||
</FileConfiguration>
|
||||
</File>
|
||||
<File RelativePath="..\..\..\gtk\gtk-win32.rc" />
|
||||
<File RelativePath="..\..\..\gtk\libgtk3.manifest" />
|
||||
</Filter>
|
||||
|
||||
@@ -78,4 +78,24 @@ echo $(ConfigurationName) > ..\..\..\MSVC_$(ConfigurationName)_Broadway
|
||||
Name="CopyDemosH"
|
||||
Value="copy ..\..\..\demos\gtk-demo\demos.h.win32 ..\..\..\demos\gtk-demo\demos.h"
|
||||
/>
|
||||
<UserMacro
|
||||
Name="GenerateTypeFuncs"
|
||||
Value="
|
||||
echo #undef GTK_COMPILATION > ..\..\..\gtk\gtktypefuncs.preproc.c

|
||||
echo #include "gtkx.h" >> ..\..\..\gtk\gtktypefuncs.preproc.c

|
||||
cl /EP /I..\..\..\gtk /I..\..\..\gdk /I..\..\..\gdk\win32 /I..\..\.. /I$(GlibEtcInstallRoot)\include\gdk-pixbuf-2.0 /I$(GlibEtcInstallRoot)\include\pango-1.0 /I$(GlibEtcInstallRoot)\include\atk-1.0 /I$(GlibEtcInstallRoot)\include\cairo /I$(GlibEtcInstallRoot)\include\gio-win32-2.0 /I$(GlibEtcInstallRoot)\include\glib-2.0 /I$(GlibEtcInstallRoot)\lib\glib-2.0\include /I$(GlibEtcInstallRoot)\include /DHAVE_CONFIG_H /DG_DISABLE_SINGLE_INCLUDES /DATK_DISABLE_SINGLE_INCLUDES /DGDK_PIXBUF_DISABLE_SINGLE_INCLUDES /DGTK_DISABLE_SINGLE_INCLUDES /D_USE_MATH_DEFINES /DINCLUDE_IM_am_et /DINCLUDE_IM_cedilla /DINCLUDE_IM_cyrillic_translit /DINCLUDE_IM_ime /DINCLUDE_IM_inuktitut /DINCLUDE_IM_ipa /DINCLUDE_IM_multipress /DINCLUDE_IM_thai /DINCLUDE_IM_ti_er /DINCLUDE_IM_ti_et /DINCLUDE_IM_viqr /DGTK_COMPILATION /DG_LOG_DOMAIN=\"Gtk\" /DGTK_HOST=\"i686-pc-vs$(VSVer)\" /DGTK_PRINT_BACKENDS=\"file\" /DGTK_PRINT_BACKEND_ENABLE_UNSUPPORTED /D$(GtkIncludedImmodulesDefines) /DGTK_LIBDIR=\"$(GtkDummyPrefix)/lib\" /DGTK_DATADIR=\"$(GtkDummyPrefix)/share\" /DGTK_DATA_PREFIX=\"$(GtkDummyPrefix)\" /DGTK_SYSCONFDIR=\"$(GtkDummyPrefix)/etc\" /DMULTIPRESS_CONFDIR=\"$(GtkDummyPrefix)/etc/gtk-$(ApiVersion)\" /DMULTIPRESS_LOCALEDIR=\"$(GtkDummyPrefix)/share/locale\" /DGTK_VERSION=\"$(GtkVersion)\" /DGTK_BINARY_VERSION=\"$(GtkBinaryVersion)\" /DGDK_DISABLE_DEPRECATED /DISOLATION_AWARE_ENABLED ..\..\..\gtk\gtktypefuncs.preproc.c > ..\..\..\gtk\gtktypefuncs.combined.c

|
||||
$(PythonDir)\python ..\gentypefuncs.py ..\..\..\gtk\gtktypefuncs.c ..\..\..\gtk\gtktypefuncs.combined.c

|
||||
del ..\..\..\gtk\gtktypefuncs.combined.c ..\..\..\gtk\gtktypefuncs.preproc.c

|
||||
"
|
||||
/>
|
||||
<UserMacro
|
||||
Name="GenerateTypeFuncsX64"
|
||||
Value="
|
||||
echo #undef GTK_COMPILATION > ..\..\..\gtk\gtktypefuncs.preproc.c

|
||||
echo #include "gtkx.h" >> ..\..\..\gtk\gtktypefuncs.preproc.c

|
||||
cl /EP /I..\..\..\gtk /I..\..\..\gdk /I..\..\..\gdk\win32 /I..\..\.. /I$(GlibEtcInstallRoot)\include\gdk-pixbuf-2.0 /I$(GlibEtcInstallRoot)\include\pango-1.0 /I$(GlibEtcInstallRoot)\include\atk-1.0 /I$(GlibEtcInstallRoot)\include\cairo /I$(GlibEtcInstallRoot)\include\gio-win32-2.0 /I$(GlibEtcInstallRoot)\include\glib-2.0 /I$(GlibEtcInstallRoot)\lib\glib-2.0\include /I$(GlibEtcInstallRoot)\include /DHAVE_CONFIG_H /DG_DISABLE_SINGLE_INCLUDES /DATK_DISABLE_SINGLE_INCLUDES /DGDK_PIXBUF_DISABLE_SINGLE_INCLUDES /DGTK_DISABLE_SINGLE_INCLUDES /D_USE_MATH_DEFINES /DINCLUDE_IM_am_et /DINCLUDE_IM_cedilla /DINCLUDE_IM_cyrillic_translit /DINCLUDE_IM_ime /DINCLUDE_IM_inuktitut /DINCLUDE_IM_ipa /DINCLUDE_IM_multipress /DINCLUDE_IM_thai /DINCLUDE_IM_ti_er /DINCLUDE_IM_ti_et /DINCLUDE_IM_viqr /DGTK_COMPILATION /DG_LOG_DOMAIN=\"Gtk\" /DGTK_HOST=\"i686-pc-vs$(VSVer)\" /DGTK_PRINT_BACKENDS=\"file\" /DGTK_PRINT_BACKEND_ENABLE_UNSUPPORTED /D$(GtkIncludedImmodulesDefines) /DGTK_LIBDIR=\"$(GtkDummyPrefix)/lib\" /DGTK_DATADIR=\"$(GtkDummyPrefix)/share\" /DGTK_DATA_PREFIX=\"$(GtkDummyPrefix)\" /DGTK_SYSCONFDIR=\"$(GtkDummyPrefix)/etc\" /DMULTIPRESS_CONFDIR=\"$(GtkDummyPrefix)/etc/gtk-$(ApiVersion)\" /DMULTIPRESS_LOCALEDIR=\"$(GtkDummyPrefix)/share/locale\" /DGTK_VERSION=\"$(GtkVersion)\" /DGTK_BINARY_VERSION=\"$(GtkBinaryVersion)\" /DGDK_DISABLE_DEPRECATED /DISOLATION_AWARE_ENABLED ..\..\..\gtk\gtktypefuncs.preproc.c > ..\..\..\gtk\gtktypefuncs.combined.c

|
||||
$(PythonDirX64)\python ..\gentypefuncs.py ..\..\..\gtk\gtktypefuncs.c ..\..\..\gtk\gtktypefuncs.combined.c

|
||||
del ..\..\..\gtk\gtktypefuncs.combined.c ..\..\..\gtk\gtktypefuncs.preproc.c

|
||||
"
|
||||
/>
|
||||
</VisualStudioPropertySheet>
|
||||
|
||||
+24
-11
@@ -9,9 +9,9 @@
|
||||
# set GTK_BINARY_AGE and GTK_INTERFACE_AGE to 0.
|
||||
|
||||
m4_define([gtk_major_version], [3])
|
||||
m4_define([gtk_minor_version], [22])
|
||||
m4_define([gtk_micro_version], [25])
|
||||
m4_define([gtk_interface_age], [25])
|
||||
m4_define([gtk_minor_version], [23])
|
||||
m4_define([gtk_micro_version], [0])
|
||||
m4_define([gtk_interface_age], [0])
|
||||
m4_define([gtk_binary_age],
|
||||
[m4_eval(100 * gtk_minor_version + gtk_micro_version)])
|
||||
m4_define([gtk_version],
|
||||
@@ -54,17 +54,17 @@ m4_define([glib_min_required_version], m4_join([_], [GLIB_VERSION], glib_require
|
||||
m4_define([glib_max_allowed_version], m4_join([_], [GLIB_VERSION], glib_required_major, glib_max_allowed_minor))
|
||||
GLIB_VERSION_CFLAGS="-DGLIB_MIN_REQUIRED_VERSION=glib_min_required_version -DGLIB_MAX_ALLOWED_VERSION=glib_max_allowed_version"
|
||||
|
||||
m4_define([pango_required_version], [1.37.3])
|
||||
m4_define([pango_required_version], [1.41.0])
|
||||
m4_define([atk_required_version], [2.15.1])
|
||||
m4_define([cairo_required_version], [1.14.0])
|
||||
m4_define([gdk_pixbuf_required_version], [2.30.0])
|
||||
m4_define([introspection_required_version], [1.39.0])
|
||||
m4_define([wayland_required_version], [1.9.91])
|
||||
m4_define([wayland_protocols_required_version], [1.9])
|
||||
m4_define([wayland_protocols_required_version], [1.12])
|
||||
m4_define([mirclient_required_version], [0.22.0])
|
||||
m4_define([mircookie_required_version], [0.17.0])
|
||||
m4_define([epoxy_required_version], [1.0])
|
||||
m4_define([cloudproviders_required_version], [0.2.0])
|
||||
m4_define([epoxy_required_version], [1.4])
|
||||
m4_define([cloudproviders_required_version], [0.2.5])
|
||||
GLIB_REQUIRED_VERSION=glib_required_version
|
||||
PANGO_REQUIRED_VERSION=pango_required_version
|
||||
ATK_REQUIRED_VERSION=atk_required_version
|
||||
@@ -459,6 +459,7 @@ if test "$enable_wayland_backend" = "yes"; then
|
||||
GDK_BACKENDS="$GDK_BACKENDS wayland"
|
||||
GDK_WINDOWING="$GDK_WINDOWING
|
||||
#define GDK_WINDOWING_WAYLAND"
|
||||
backend_immodules="$backend_immodules,wayland"
|
||||
WAYLAND_PACKAGES="$WAYLAND_DEPENDENCIES"
|
||||
AC_PATH_PROG([WAYLAND_SCANNER],[wayland-scanner],[no])
|
||||
AS_IF([test "x$WAYLAND_SCANNER" = "xno"],
|
||||
@@ -818,7 +819,13 @@ LIBS=$gtk_save_LIBS
|
||||
|
||||
AC_CHECK_HEADERS(linux/memfd.h,
|
||||
AC_DEFINE(HAVE_LINUX_MEMFD_H, 1,
|
||||
[Define to 1 if memfd.h is available]))
|
||||
[Define to 1 if linux/memfd.h is available]))
|
||||
AC_CHECK_HEADERS(linux/input.h,
|
||||
AC_DEFINE(HAVE_LINUX_INPUT_H, 1,
|
||||
[Define to 1 if linux/input.h is available]))
|
||||
AC_CHECK_HEADERS(dev/evdev/input.h,
|
||||
AC_DEFINE(HAVE_DEV_EVDEV_INPUT_H, 1,
|
||||
[Define to 1 if dev/evdev/input.h is available]))
|
||||
AC_CHECK_HEADERS(sys/mman.h,
|
||||
AC_DEFINE(HAVE_SYS_MMAN_H, 1,
|
||||
[Define to 1 if mman.h is available]))
|
||||
@@ -990,6 +997,7 @@ AM_CONDITIONAL(INCLUDE_IM_TI_ER, [test x"$INCLUDE_ti_er" = xyes])
|
||||
AM_CONDITIONAL(INCLUDE_IM_TI_ET, [test x"$INCLUDE_ti_et" = xyes])
|
||||
AM_CONDITIONAL(INCLUDE_IM_VIQR, [test x"$INCLUDE_viqr" = xyes])
|
||||
AM_CONDITIONAL(INCLUDE_IM_XIM, [test x"$INCLUDE_xim" = xyes])
|
||||
AM_CONDITIONAL(INCLUDE_IM_WAYLAND, [test x"$INCLUDE_wayland" = xyes])
|
||||
|
||||
# Checks to see whether we should include mediaLib
|
||||
# support.
|
||||
@@ -1430,6 +1438,7 @@ GLIB_PREFIX="`$PKG_CONFIG --variable=prefix glib-2.0`"
|
||||
ATK_PREFIX="`$PKG_CONFIG --variable=prefix atk`"
|
||||
PANGO_PREFIX="`$PKG_CONFIG --variable=prefix pango`"
|
||||
CAIRO_PREFIX="`$PKG_CONFIG --variable=prefix cairo`"
|
||||
ISO_CODES_PREFIX="`$PKG_CONFIG --variable=prefix iso-codes`"
|
||||
|
||||
AC_SUBST(GTK_PACKAGES)
|
||||
AC_SUBST(GTK_PRIVATE_PACKAGES)
|
||||
@@ -1443,6 +1452,7 @@ AC_SUBST(GLIB_PREFIX)
|
||||
AC_SUBST(ATK_PREFIX)
|
||||
AC_SUBST(PANGO_PREFIX)
|
||||
AC_SUBST(CAIRO_PREFIX)
|
||||
AC_SUBST(ISO_CODES_PREFIX)
|
||||
|
||||
AC_SUBST(GTK_DEBUG_FLAGS)
|
||||
AC_SUBST(GTK_XIM_FLAGS)
|
||||
@@ -1738,6 +1748,10 @@ PKG_CHECK_MODULES(FONTDEMO, harfbuzz >= 0.9 pangoft2, build_font_demo=yes, build
|
||||
AC_SUBST(FONTDEMO_CFLAGS)
|
||||
AC_SUBST(FONTDEMO_LIBS)
|
||||
AM_CONDITIONAL(BUILD_FONT_DEMO, [ test "x$build_font_demo" = xyes ])
|
||||
if test "x$build_font_demo" = xyes; then
|
||||
AC_DEFINE([HAVE_HARFBUZZ], 1, [defines whether we have HarfBuzz])
|
||||
AC_DEFINE([HAVE_PANGOFT], 1, [defines whether we have pangoft2])
|
||||
fi
|
||||
|
||||
##################################################
|
||||
# Checks for gtk-doc and docbook-tools
|
||||
@@ -1820,7 +1834,7 @@ case "$host" in
|
||||
SAVED_CFLAGS="${CFLAGS}"
|
||||
CFLAGS="-fvisibility=hidden"
|
||||
AC_MSG_CHECKING([for -fvisibility=hidden compiler flag])
|
||||
AC_TRY_COMPILE([], [int main (void) { return 0; }],
|
||||
AC_TRY_COMPILE([], [return 0],
|
||||
AC_MSG_RESULT(yes)
|
||||
enable_fvisibility_hidden=yes,
|
||||
AC_MSG_RESULT(no)
|
||||
@@ -1901,8 +1915,7 @@ AC_ARG_ENABLE(Bsymbolic,
|
||||
[SAVED_LDFLAGS="${LDFLAGS}"
|
||||
AC_MSG_CHECKING([for -Bsymbolic-functions linker flag])
|
||||
LDFLAGS=-Wl,-Bsymbolic-functions
|
||||
AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],
|
||||
[[int main (void) { return 0; }]])],
|
||||
AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[return 0]])],
|
||||
[AC_MSG_RESULT(yes)
|
||||
enable_Bsymbolic=yes],
|
||||
[AC_MSG_RESULT(no)
|
||||
|
||||
+203
-112
@@ -9,163 +9,254 @@
|
||||
|
||||
#include "gtkfishbowl.h"
|
||||
|
||||
GtkWidget *allow_changes;
|
||||
const char *const css =
|
||||
".blurred-button {"
|
||||
" box-shadow: 0px 0px 5px 10px rgba(0, 0, 0, 0.5);"
|
||||
"}"
|
||||
"";
|
||||
|
||||
#define N_STATS 5
|
||||
char **icon_names = NULL;
|
||||
gsize n_icon_names = 0;
|
||||
|
||||
#define STATS_UPDATE_TIME G_USEC_PER_SEC
|
||||
static void
|
||||
init_icon_names (GtkIconTheme *theme)
|
||||
{
|
||||
GPtrArray *icons;
|
||||
GList *l, *icon_list;
|
||||
|
||||
typedef struct _Stats Stats;
|
||||
struct _Stats {
|
||||
gint64 last_stats;
|
||||
gint64 last_frame;
|
||||
gint last_suggestion;
|
||||
guint frame_counter_max;
|
||||
if (icon_names)
|
||||
return;
|
||||
|
||||
guint stats_index;
|
||||
guint frame_counter[N_STATS];
|
||||
guint item_counter[N_STATS];
|
||||
icon_list = gtk_icon_theme_list_icons (theme, NULL);
|
||||
icons = g_ptr_array_new ();
|
||||
|
||||
for (l = icon_list; l; l = l->next)
|
||||
{
|
||||
if (g_str_has_suffix (l->data, "symbolic"))
|
||||
continue;
|
||||
|
||||
g_ptr_array_add (icons, g_strdup (l->data));
|
||||
}
|
||||
|
||||
n_icon_names = icons->len;
|
||||
g_ptr_array_add (icons, NULL); /* NULL-terminate the array */
|
||||
icon_names = (char **) g_ptr_array_free (icons, FALSE);
|
||||
|
||||
/* don't free strings, we assigned them to the array */
|
||||
g_list_free_full (icon_list, g_free);
|
||||
}
|
||||
|
||||
static const char *
|
||||
get_random_icon_name (GtkIconTheme *theme)
|
||||
{
|
||||
init_icon_names (theme);
|
||||
|
||||
return icon_names[g_random_int_range(0, n_icon_names)];
|
||||
}
|
||||
|
||||
GtkWidget *
|
||||
create_icon (void)
|
||||
{
|
||||
GtkWidget *image;
|
||||
|
||||
image = gtk_image_new_from_icon_name (get_random_icon_name (gtk_icon_theme_get_default ()), GTK_ICON_SIZE_DND);
|
||||
|
||||
return image;
|
||||
}
|
||||
|
||||
static GtkWidget *
|
||||
create_button (void)
|
||||
{
|
||||
return gtk_button_new_with_label ("Button");
|
||||
}
|
||||
|
||||
static GtkWidget *
|
||||
create_blurred_button (void)
|
||||
{
|
||||
GtkWidget *w = gtk_button_new ();
|
||||
|
||||
gtk_style_context_add_class (gtk_widget_get_style_context (w), "blurred-button");
|
||||
|
||||
return w;
|
||||
}
|
||||
|
||||
static GtkWidget *
|
||||
create_font_button (void)
|
||||
{
|
||||
return gtk_font_button_new ();
|
||||
}
|
||||
|
||||
static GtkWidget *
|
||||
create_level_bar (void)
|
||||
{
|
||||
GtkWidget *w = gtk_level_bar_new_for_interval (0, 100);
|
||||
|
||||
gtk_level_bar_set_value (GTK_LEVEL_BAR (w), 50);
|
||||
|
||||
/* Force them to be a bit larger */
|
||||
gtk_widget_set_size_request (w, 200, -1);
|
||||
|
||||
return w;
|
||||
}
|
||||
|
||||
static GtkWidget *
|
||||
create_spinner (void)
|
||||
{
|
||||
GtkWidget *w = gtk_spinner_new ();
|
||||
|
||||
gtk_spinner_start (GTK_SPINNER (w));
|
||||
|
||||
return w;
|
||||
}
|
||||
|
||||
static GtkWidget *
|
||||
create_spinbutton (void)
|
||||
{
|
||||
GtkWidget *w = gtk_spin_button_new_with_range (0, 10, 1);
|
||||
|
||||
return w;
|
||||
}
|
||||
|
||||
static GtkWidget *
|
||||
create_label (void)
|
||||
{
|
||||
GtkWidget *w = gtk_label_new ("pLorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.");
|
||||
|
||||
gtk_label_set_line_wrap (GTK_LABEL (w), TRUE);
|
||||
gtk_label_set_max_width_chars (GTK_LABEL (w), 100);
|
||||
|
||||
return w;
|
||||
}
|
||||
|
||||
#if 0
|
||||
static GtkWidget *
|
||||
create_gears (void)
|
||||
{
|
||||
GtkWidget *w = gtk_gears_new ();
|
||||
|
||||
gtk_widget_set_size_request (w, 100, 100);
|
||||
|
||||
return w;
|
||||
}
|
||||
#endif
|
||||
|
||||
static GtkWidget *
|
||||
create_switch (void)
|
||||
{
|
||||
GtkWidget *w = gtk_switch_new ();
|
||||
|
||||
gtk_switch_set_state (GTK_SWITCH (w), TRUE);
|
||||
|
||||
return w;
|
||||
}
|
||||
|
||||
static const struct {
|
||||
const char *name;
|
||||
GtkWidget * (*create_func) (void);
|
||||
} widget_types[] = {
|
||||
{ "Icon", create_icon },
|
||||
{ "Button", create_button },
|
||||
{ "Blurbutton", create_blurred_button },
|
||||
{ "Fontbutton", create_font_button },
|
||||
{ "Levelbar", create_level_bar },
|
||||
{ "Label", create_label },
|
||||
{ "Spinner", create_spinner },
|
||||
{ "Spinbutton", create_spinbutton },
|
||||
// { "Gears", create_gears },
|
||||
{ "Switch", create_switch },
|
||||
};
|
||||
|
||||
static Stats *
|
||||
get_stats (GtkWidget *widget)
|
||||
{
|
||||
static GQuark stats_quark = 0;
|
||||
Stats *stats;
|
||||
|
||||
if (G_UNLIKELY (stats_quark == 0))
|
||||
stats_quark = g_quark_from_static_string ("stats");
|
||||
|
||||
stats = g_object_get_qdata (G_OBJECT (widget), stats_quark);
|
||||
if (stats == NULL)
|
||||
{
|
||||
stats = g_new0 (Stats, 1);
|
||||
g_object_set_qdata_full (G_OBJECT (widget), stats_quark, stats, g_free);
|
||||
stats->last_frame = gdk_frame_clock_get_frame_time (gtk_widget_get_frame_clock (widget));
|
||||
stats->last_stats = stats->last_frame;
|
||||
}
|
||||
|
||||
return stats;
|
||||
}
|
||||
static int selected_widget_type = -1;
|
||||
static const int N_WIDGET_TYPES = G_N_ELEMENTS (widget_types);
|
||||
|
||||
static void
|
||||
do_stats (GtkWidget *widget,
|
||||
GtkWidget *info_label,
|
||||
gint *suggested_change)
|
||||
set_widget_type (GtkFishbowl *fishbowl,
|
||||
int widget_type_index)
|
||||
{
|
||||
Stats *stats;
|
||||
gint64 frame_time;
|
||||
GtkWidget *window, *headerbar;
|
||||
|
||||
stats = get_stats (widget);
|
||||
frame_time = gdk_frame_clock_get_frame_time (gtk_widget_get_frame_clock (widget));
|
||||
if (widget_type_index == selected_widget_type)
|
||||
return;
|
||||
|
||||
if (stats->last_stats + STATS_UPDATE_TIME < frame_time)
|
||||
{
|
||||
char *new_label;
|
||||
guint i, n_frames;
|
||||
selected_widget_type = widget_type_index;
|
||||
|
||||
n_frames = 0;
|
||||
for (i = 0; i < N_STATS; i++)
|
||||
{
|
||||
n_frames += stats->frame_counter[i];
|
||||
}
|
||||
|
||||
new_label = g_strdup_printf ("icons - %.1f fps",
|
||||
(double) G_USEC_PER_SEC * n_frames
|
||||
/ (N_STATS * STATS_UPDATE_TIME));
|
||||
gtk_label_set_label (GTK_LABEL (info_label), new_label);
|
||||
g_free (new_label);
|
||||
gtk_fishbowl_set_creation_func (fishbowl,
|
||||
widget_types[selected_widget_type].create_func);
|
||||
|
||||
if (stats->frame_counter[stats->stats_index] >= 19 * stats->frame_counter_max / 20)
|
||||
{
|
||||
if (stats->last_suggestion > 0)
|
||||
stats->last_suggestion *= 2;
|
||||
else
|
||||
stats->last_suggestion = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (stats->last_suggestion < 0)
|
||||
stats->last_suggestion--;
|
||||
else
|
||||
stats->last_suggestion = -1;
|
||||
stats->last_suggestion = MAX (stats->last_suggestion, 1 - (int) stats->item_counter[stats->stats_index]);
|
||||
}
|
||||
window = gtk_widget_get_toplevel (GTK_WIDGET (fishbowl));
|
||||
headerbar = gtk_window_get_titlebar (GTK_WINDOW (window));
|
||||
gtk_header_bar_set_title (GTK_HEADER_BAR (headerbar),
|
||||
widget_types[selected_widget_type].name);
|
||||
}
|
||||
|
||||
stats->stats_index = (stats->stats_index + 1) % N_STATS;
|
||||
stats->frame_counter[stats->stats_index] = 0;
|
||||
stats->item_counter[stats->stats_index] = stats->item_counter[(stats->stats_index + N_STATS - 1) % N_STATS];
|
||||
stats->last_stats = frame_time;
|
||||
|
||||
if (suggested_change)
|
||||
*suggested_change = stats->last_suggestion;
|
||||
else
|
||||
stats->last_suggestion = 0;
|
||||
}
|
||||
void
|
||||
next_button_clicked_cb (GtkButton *source,
|
||||
gpointer user_data)
|
||||
{
|
||||
GtkFishbowl *fishbowl = user_data;
|
||||
int new_index;
|
||||
|
||||
if (selected_widget_type + 1 >= N_WIDGET_TYPES)
|
||||
new_index = 0;
|
||||
else
|
||||
{
|
||||
if (suggested_change)
|
||||
*suggested_change = 0;
|
||||
}
|
||||
new_index = selected_widget_type + 1;
|
||||
|
||||
stats->last_frame = frame_time;
|
||||
stats->frame_counter[stats->stats_index]++;
|
||||
stats->frame_counter_max = MAX (stats->frame_counter_max, stats->frame_counter[stats->stats_index]);
|
||||
set_widget_type (fishbowl, new_index);
|
||||
}
|
||||
|
||||
static void
|
||||
stats_update (GtkWidget *widget)
|
||||
void
|
||||
prev_button_clicked_cb (GtkButton *source,
|
||||
gpointer user_data)
|
||||
{
|
||||
Stats *stats;
|
||||
GtkFishbowl *fishbowl = user_data;
|
||||
int new_index;
|
||||
|
||||
stats = get_stats (widget);
|
||||
if (selected_widget_type - 1 < 0)
|
||||
new_index = N_WIDGET_TYPES - 1;
|
||||
else
|
||||
new_index = selected_widget_type - 1;
|
||||
|
||||
stats->item_counter[stats->stats_index] = gtk_fishbowl_get_count (GTK_FISHBOWL (widget));
|
||||
set_widget_type (fishbowl, new_index);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
move_fish (GtkWidget *bowl,
|
||||
GdkFrameClock *frame_clock,
|
||||
gpointer info_label)
|
||||
{
|
||||
gint suggested_change = 0;
|
||||
|
||||
do_stats (bowl,
|
||||
info_label,
|
||||
!gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (allow_changes)) ? &suggested_change : NULL);
|
||||
|
||||
gtk_fishbowl_set_count (GTK_FISHBOWL (bowl),
|
||||
gtk_fishbowl_get_count (GTK_FISHBOWL (bowl)) + suggested_change);
|
||||
stats_update (bowl);
|
||||
|
||||
return G_SOURCE_CONTINUE;
|
||||
}
|
||||
|
||||
GtkWidget *
|
||||
do_fishbowl (GtkWidget *do_widget)
|
||||
{
|
||||
static GtkWidget *window = NULL;
|
||||
static GtkCssProvider *provider = NULL;
|
||||
|
||||
if (provider == NULL)
|
||||
{
|
||||
provider = gtk_css_provider_new ();
|
||||
gtk_css_provider_load_from_data (provider, css, -1, NULL);
|
||||
gtk_style_context_add_provider_for_screen (gdk_screen_get_default (),
|
||||
GTK_STYLE_PROVIDER (provider),
|
||||
GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
|
||||
}
|
||||
|
||||
if (!window)
|
||||
{
|
||||
GtkBuilder *builder;
|
||||
GtkWidget *bowl, *info_label;
|
||||
GtkWidget *bowl;
|
||||
|
||||
g_type_ensure (GTK_TYPE_FISHBOWL);
|
||||
|
||||
builder = gtk_builder_new_from_resource ("/fishbowl/fishbowl.ui");
|
||||
gtk_builder_add_callback_symbols (builder,
|
||||
"next_button_clicked_cb", G_CALLBACK (next_button_clicked_cb),
|
||||
"prev_button_clicked_cb", G_CALLBACK (prev_button_clicked_cb),
|
||||
NULL);
|
||||
gtk_builder_connect_signals (builder, NULL);
|
||||
window = GTK_WIDGET (gtk_builder_get_object (builder, "window"));
|
||||
bowl = GTK_WIDGET (gtk_builder_get_object (builder, "bowl"));
|
||||
info_label = GTK_WIDGET (gtk_builder_get_object (builder, "info_label"));
|
||||
allow_changes = GTK_WIDGET (gtk_builder_get_object (builder, "changes_allow"));
|
||||
set_widget_type (GTK_FISHBOWL (bowl), 0);
|
||||
gtk_window_set_screen (GTK_WINDOW (window),
|
||||
gtk_widget_get_screen (do_widget));
|
||||
g_signal_connect (window, "destroy",
|
||||
G_CALLBACK (gtk_widget_destroyed), &window);
|
||||
|
||||
gtk_widget_realize (window);
|
||||
gtk_widget_add_tick_callback (bowl, move_fish, info_label, NULL);
|
||||
}
|
||||
|
||||
if (!gtk_widget_get_visible (window))
|
||||
|
||||
@@ -8,27 +8,76 @@
|
||||
<property name="visible">True</property>
|
||||
<property name="show-close-button">True</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="info_label">
|
||||
<object class="GtkBox">
|
||||
<property name="visible">True</property>
|
||||
<property name="label">icons - 0 fps</property>
|
||||
<style>
|
||||
<class name="linked"/>
|
||||
</style>
|
||||
<child>
|
||||
<object class="GtkButton">
|
||||
<property name="visible">True</property>
|
||||
<child>
|
||||
<object class="GtkImage">
|
||||
<property name="icon-name">pan-start-symbolic</property>
|
||||
<property name="visible">True</property>
|
||||
</object>
|
||||
</child>
|
||||
<signal name="clicked" handler="prev_button_clicked_cb" object="bowl" swapped="no"/>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton">
|
||||
<property name="visible">True</property>
|
||||
<child>
|
||||
<object class="GtkImage">
|
||||
<property name="icon-name">pan-end-symbolic</property>
|
||||
<property name="visible">True</property>
|
||||
</object>
|
||||
</child>
|
||||
<signal name="clicked" handler="next_button_clicked_cb" object="bowl" swapped="no"/>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel">
|
||||
<property name="visible">True</property>
|
||||
<property name="label">fps</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="pack_type">end</property>
|
||||
<property name="pack-type">end</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" bind-source="bowl" bind-property="count">0</property>
|
||||
<property name="label" bind-source="bowl" bind-property="framerate"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="pack_type">end</property>
|
||||
<property name="pack-type">end</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel">
|
||||
<property name="visible">True</property>
|
||||
<property name="label">Icons, </property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="pack-type">end</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" bind-source="bowl" bind-property="count"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="pack-type">end</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkToggleButton" id="changes_allow">
|
||||
<property name="active">False</property>
|
||||
<property name="visible" bind-source="changes_allow" bind-property="active" bind-flags="invert-boolean">True</property>
|
||||
<property name="visible" bind-source="changes_allow" bind-property="active" bind-flags="invert-boolean"/>
|
||||
<property name="relief">none</property>
|
||||
<child>
|
||||
<object class="GtkImage">
|
||||
@@ -38,7 +87,7 @@
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="pack_type">end</property>
|
||||
<property name="pack-type">end</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
@@ -54,7 +103,7 @@
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="pack_type">end</property>
|
||||
<property name="pack-type">end</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
@@ -63,6 +112,7 @@
|
||||
<object class="GtkFishbowl" id="bowl">
|
||||
<property name="visible">True</property>
|
||||
<property name="animating">True</property>
|
||||
<property name="benchmark" bind-source="changes_allow" bind-property="active" bind-flags="invert-boolean">True</property>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
|
||||
+281
-148
@@ -19,18 +19,25 @@
|
||||
|
||||
#include "gtkfishbowl.h"
|
||||
|
||||
#include "gtk/fallback-c89.c"
|
||||
#include <math.h>
|
||||
|
||||
typedef struct _GtkFishbowlPrivate GtkFishbowlPrivate;
|
||||
typedef struct _GtkFishbowlChild GtkFishbowlChild;
|
||||
|
||||
struct _GtkFishbowlPrivate
|
||||
{
|
||||
GtkFishCreationFunc creation_func;
|
||||
GList *children;
|
||||
guint count;
|
||||
|
||||
gint64 last_frame_time;
|
||||
gint64 update_delay;
|
||||
guint tick_id;
|
||||
|
||||
double framerate;
|
||||
int last_benchmark_change;
|
||||
|
||||
guint benchmark : 1;
|
||||
};
|
||||
|
||||
struct _GtkFishbowlChild
|
||||
@@ -45,7 +52,10 @@ struct _GtkFishbowlChild
|
||||
enum {
|
||||
PROP_0,
|
||||
PROP_ANIMATING,
|
||||
PROP_BENCHMARK,
|
||||
PROP_COUNT,
|
||||
PROP_FRAMERATE,
|
||||
PROP_UPDATE_DELAY,
|
||||
NUM_PROPERTIES
|
||||
};
|
||||
|
||||
@@ -56,7 +66,11 @@ G_DEFINE_TYPE_WITH_PRIVATE (GtkFishbowl, gtk_fishbowl, GTK_TYPE_CONTAINER)
|
||||
static void
|
||||
gtk_fishbowl_init (GtkFishbowl *fishbowl)
|
||||
{
|
||||
GtkFishbowlPrivate *priv = gtk_fishbowl_get_instance_private (fishbowl);
|
||||
|
||||
gtk_widget_set_has_window (GTK_WIDGET (fishbowl), FALSE);
|
||||
|
||||
priv->update_delay = G_USEC_PER_SEC;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -73,48 +87,9 @@ gtk_fishbowl_new (void)
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_widget_measure (GtkWidget *widget,
|
||||
GtkOrientation orientation,
|
||||
gint size,
|
||||
gint *minimum,
|
||||
gint *natural,
|
||||
gint *minimum_baseline,
|
||||
gint *natural_baseline)
|
||||
{
|
||||
g_return_if_fail (GTK_IS_WIDGET (widget));
|
||||
g_return_if_fail (size >= -1);
|
||||
|
||||
if (orientation == GTK_ORIENTATION_HORIZONTAL)
|
||||
{
|
||||
if (size < 0)
|
||||
gtk_widget_get_preferred_width (widget, minimum, natural);
|
||||
else
|
||||
gtk_widget_get_preferred_width_for_height (widget, size, minimum, natural);
|
||||
|
||||
if (minimum_baseline)
|
||||
*minimum_baseline = -1;
|
||||
if (natural_baseline)
|
||||
*natural_baseline = -1;
|
||||
}
|
||||
else
|
||||
{
|
||||
gtk_widget_get_preferred_height_and_baseline_for_width (widget,
|
||||
size,
|
||||
minimum,
|
||||
natural,
|
||||
minimum_baseline,
|
||||
natural_baseline);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_fishbowl_measure (GtkWidget *widget,
|
||||
GtkOrientation orientation,
|
||||
int for_size,
|
||||
int *minimum,
|
||||
int *natural,
|
||||
int *minimum_baseline,
|
||||
int *natural_baseline)
|
||||
gtk_fishbowl_get_preferred_width (GtkWidget *widget,
|
||||
int *minimum,
|
||||
int *natural)
|
||||
{
|
||||
GtkFishbowl *fishbowl = GTK_FISHBOWL (widget);
|
||||
GtkFishbowlPrivate *priv = gtk_fishbowl_get_instance_private (fishbowl);
|
||||
@@ -132,47 +107,42 @@ gtk_fishbowl_measure (GtkWidget *widget,
|
||||
if (!gtk_widget_get_visible (child->widget))
|
||||
continue;
|
||||
|
||||
gtk_widget_measure (child->widget, orientation, -1, &child_min, &child_nat, NULL, NULL);
|
||||
gtk_widget_get_preferred_width (child->widget, &child_min, &child_nat);
|
||||
|
||||
*minimum = MAX (*minimum, child_min);
|
||||
*natural = MAX (*natural, child_nat);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_fishbowl_get_preferred_width (GtkWidget *widget,
|
||||
int *minimum,
|
||||
int *natural)
|
||||
{
|
||||
gtk_fishbowl_measure (widget, GTK_ORIENTATION_HORIZONTAL, -1, minimum, natural, NULL, NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_fishbowl_get_preferred_height (GtkWidget *widget,
|
||||
int *minimum,
|
||||
int *natural)
|
||||
{
|
||||
gtk_fishbowl_measure (widget, GTK_ORIENTATION_VERTICAL, -1, minimum, natural, NULL, NULL);
|
||||
}
|
||||
GtkFishbowl *fishbowl = GTK_FISHBOWL (widget);
|
||||
GtkFishbowlPrivate *priv = gtk_fishbowl_get_instance_private (fishbowl);
|
||||
GtkFishbowlChild *child;
|
||||
GList *children;
|
||||
gint child_min, child_nat;
|
||||
|
||||
static void
|
||||
gtk_fishbowl_get_preferred_width_for_height (GtkWidget *widget,
|
||||
int for_size,
|
||||
int *minimum,
|
||||
int *natural)
|
||||
{
|
||||
gtk_fishbowl_measure (widget, GTK_ORIENTATION_HORIZONTAL, for_size, minimum, natural, NULL, NULL);
|
||||
}
|
||||
*minimum = 0;
|
||||
*natural = 0;
|
||||
|
||||
static void
|
||||
gtk_fishbowl_get_preferred_height_and_baseline_for_width (GtkWidget *widget,
|
||||
int for_size,
|
||||
int *minimum,
|
||||
int *natural,
|
||||
int *minimum_baseline,
|
||||
int *natural_baseline)
|
||||
{
|
||||
gtk_fishbowl_measure (widget, GTK_ORIENTATION_VERTICAL, for_size, minimum, natural, minimum_baseline, natural_baseline);
|
||||
for (children = priv->children; children; children = children->next)
|
||||
{
|
||||
int min_width;
|
||||
|
||||
child = children->data;
|
||||
|
||||
if (!gtk_widget_get_visible (child->widget))
|
||||
continue;
|
||||
|
||||
gtk_widget_get_preferred_width (child->widget, &min_width, NULL);
|
||||
gtk_widget_get_preferred_height_for_width (child->widget, min_width, &child_min, &child_nat);
|
||||
|
||||
*minimum = MAX (*minimum, child_min);
|
||||
*natural = MAX (*natural, child_nat);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -186,8 +156,6 @@ gtk_fishbowl_size_allocate (GtkWidget *widget,
|
||||
GtkRequisition child_requisition;
|
||||
GList *children;
|
||||
|
||||
gtk_widget_set_allocation (widget, allocation);
|
||||
|
||||
for (children = priv->children; children; children = children->next)
|
||||
{
|
||||
child = children->data;
|
||||
@@ -244,7 +212,7 @@ gtk_fishbowl_remove (GtkContainer *container,
|
||||
GtkFishbowl *fishbowl = GTK_FISHBOWL (container);
|
||||
GtkFishbowlPrivate *priv = gtk_fishbowl_get_instance_private (fishbowl);
|
||||
GtkFishbowlChild *child;
|
||||
GtkWidget *widget_container = GTK_WIDGET (container);
|
||||
GtkWidget *widget_bowl = GTK_WIDGET (fishbowl);
|
||||
GList *children;
|
||||
|
||||
for (children = priv->children; children; children = children->next)
|
||||
@@ -261,8 +229,8 @@ gtk_fishbowl_remove (GtkContainer *container,
|
||||
g_list_free (children);
|
||||
g_free (child);
|
||||
|
||||
if (was_visible && gtk_widget_get_visible (widget_container))
|
||||
gtk_widget_queue_resize (widget_container);
|
||||
if (was_visible && gtk_widget_get_visible (widget_bowl))
|
||||
gtk_widget_queue_resize (widget_bowl);
|
||||
|
||||
priv->count--;
|
||||
g_object_notify_by_pspec (G_OBJECT (fishbowl), props[PROP_COUNT]);
|
||||
@@ -271,6 +239,7 @@ gtk_fishbowl_remove (GtkContainer *container,
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
gtk_fishbowl_forall (GtkContainer *container,
|
||||
gboolean include_internals,
|
||||
@@ -295,29 +264,6 @@ gtk_fishbowl_forall (GtkContainer *container,
|
||||
}
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gtk_fishbowl_draw (GtkWidget *widget,
|
||||
cairo_t *cr)
|
||||
{
|
||||
GtkFishbowl *fishbowl = GTK_FISHBOWL (widget);
|
||||
GtkFishbowlPrivate *priv = gtk_fishbowl_get_instance_private (fishbowl);
|
||||
GtkFishbowlChild *child;
|
||||
GList *list;
|
||||
|
||||
for (list = priv->children;
|
||||
list;
|
||||
list = list->next)
|
||||
{
|
||||
child = list->data;
|
||||
|
||||
gtk_container_propagate_draw (GTK_CONTAINER (fishbowl),
|
||||
child->widget,
|
||||
cr);
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_fishbowl_dispose (GObject *object)
|
||||
{
|
||||
@@ -343,10 +289,18 @@ gtk_fishbowl_set_property (GObject *object,
|
||||
gtk_fishbowl_set_animating (fishbowl, g_value_get_boolean (value));
|
||||
break;
|
||||
|
||||
case PROP_BENCHMARK:
|
||||
gtk_fishbowl_set_benchmark (fishbowl, g_value_get_boolean (value));
|
||||
break;
|
||||
|
||||
case PROP_COUNT:
|
||||
gtk_fishbowl_set_count (fishbowl, g_value_get_uint (value));
|
||||
break;
|
||||
|
||||
case PROP_UPDATE_DELAY:
|
||||
gtk_fishbowl_set_update_delay (fishbowl, g_value_get_int64 (value));
|
||||
break;
|
||||
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||
break;
|
||||
@@ -367,10 +321,22 @@ gtk_fishbowl_get_property (GObject *object,
|
||||
g_value_set_boolean (value, gtk_fishbowl_get_animating (fishbowl));
|
||||
break;
|
||||
|
||||
case PROP_BENCHMARK:
|
||||
g_value_set_boolean (value, gtk_fishbowl_get_benchmark (fishbowl));
|
||||
break;
|
||||
|
||||
case PROP_COUNT:
|
||||
g_value_set_uint (value, gtk_fishbowl_get_count (fishbowl));
|
||||
break;
|
||||
|
||||
case PROP_FRAMERATE:
|
||||
g_value_set_double (value, gtk_fishbowl_get_framerate (fishbowl));
|
||||
break;
|
||||
|
||||
case PROP_UPDATE_DELAY:
|
||||
g_value_set_int64 (value, gtk_fishbowl_get_update_delay (fishbowl));
|
||||
break;
|
||||
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||
break;
|
||||
@@ -390,10 +356,7 @@ gtk_fishbowl_class_init (GtkFishbowlClass *klass)
|
||||
|
||||
widget_class->get_preferred_width = gtk_fishbowl_get_preferred_width;
|
||||
widget_class->get_preferred_height = gtk_fishbowl_get_preferred_height;
|
||||
widget_class->get_preferred_width_for_height = gtk_fishbowl_get_preferred_width_for_height;
|
||||
widget_class->get_preferred_height_and_baseline_for_width = gtk_fishbowl_get_preferred_height_and_baseline_for_width;
|
||||
widget_class->size_allocate = gtk_fishbowl_size_allocate;
|
||||
widget_class->draw = gtk_fishbowl_draw;
|
||||
|
||||
container_class->add = gtk_fishbowl_add;
|
||||
container_class->remove = gtk_fishbowl_remove;
|
||||
@@ -406,13 +369,36 @@ gtk_fishbowl_class_init (GtkFishbowlClass *klass)
|
||||
FALSE,
|
||||
G_PARAM_READWRITE);
|
||||
|
||||
props[PROP_BENCHMARK] =
|
||||
g_param_spec_boolean ("benchmark",
|
||||
"Benchmark",
|
||||
"Adapt the count property to hit the maximum framerate",
|
||||
FALSE,
|
||||
G_PARAM_READWRITE);
|
||||
|
||||
props[PROP_COUNT] =
|
||||
g_param_spec_uint ("count",
|
||||
"Count",
|
||||
"Number of widgets",
|
||||
0, G_MAXUINT,
|
||||
0,
|
||||
G_PARAM_READABLE);
|
||||
G_PARAM_READWRITE);
|
||||
|
||||
props[PROP_FRAMERATE] =
|
||||
g_param_spec_double ("framerate",
|
||||
"Framerate",
|
||||
"Framerate of this widget in frames per second",
|
||||
0, G_MAXDOUBLE,
|
||||
0,
|
||||
G_PARAM_READABLE);
|
||||
|
||||
props[PROP_UPDATE_DELAY] =
|
||||
g_param_spec_int64 ("update-delay",
|
||||
"Update delay",
|
||||
"Number of usecs between updates",
|
||||
0, G_MAXINT64,
|
||||
G_USEC_PER_SEC,
|
||||
G_PARAM_READWRITE);
|
||||
|
||||
g_object_class_install_properties (object_class, NUM_PROPERTIES, props);
|
||||
}
|
||||
@@ -425,72 +411,60 @@ gtk_fishbowl_get_count (GtkFishbowl *fishbowl)
|
||||
return priv->count;
|
||||
}
|
||||
|
||||
char **icon_names = NULL;
|
||||
gsize n_icon_names = 0;
|
||||
|
||||
static void
|
||||
init_icon_names (GtkIconTheme *theme)
|
||||
{
|
||||
GPtrArray *icons;
|
||||
GList *l, *icon_list;
|
||||
|
||||
if (icon_names)
|
||||
return;
|
||||
|
||||
icon_list = gtk_icon_theme_list_icons (theme, NULL);
|
||||
icons = g_ptr_array_new ();
|
||||
|
||||
for (l = icon_list; l; l = l->next)
|
||||
{
|
||||
if (g_str_has_suffix (l->data, "symbolic"))
|
||||
continue;
|
||||
|
||||
g_ptr_array_add (icons, g_strdup (l->data));
|
||||
}
|
||||
|
||||
n_icon_names = icons->len;
|
||||
g_ptr_array_add (icons, NULL); /* NULL-terminate the array */
|
||||
icon_names = (char **) g_ptr_array_free (icons, FALSE);
|
||||
|
||||
/* don't free strings, we assigned them to the array */
|
||||
g_list_free_full (icon_list, g_free);
|
||||
}
|
||||
|
||||
static const char *
|
||||
get_random_icon_name (GtkIconTheme *theme)
|
||||
{
|
||||
init_icon_names (theme);
|
||||
|
||||
return icon_names[g_random_int_range(0, n_icon_names)];
|
||||
}
|
||||
|
||||
void
|
||||
gtk_fishbowl_set_count (GtkFishbowl *fishbowl,
|
||||
guint count)
|
||||
{
|
||||
GtkFishbowlPrivate *priv = gtk_fishbowl_get_instance_private (fishbowl);
|
||||
|
||||
if (priv->count == count)
|
||||
return;
|
||||
|
||||
g_object_freeze_notify (G_OBJECT (fishbowl));
|
||||
|
||||
while (priv->count > count)
|
||||
{
|
||||
gtk_container_remove (GTK_CONTAINER (fishbowl),
|
||||
((GtkFishbowlChild *) priv->children->data)->widget);
|
||||
gtk_fishbowl_remove (GTK_CONTAINER (fishbowl), ((GtkFishbowlChild *) priv->children->data)->widget);
|
||||
}
|
||||
|
||||
while (priv->count < count)
|
||||
{
|
||||
GtkWidget *new_widget;
|
||||
|
||||
new_widget = gtk_image_new_from_icon_name (get_random_icon_name (gtk_icon_theme_get_default ()),
|
||||
GTK_ICON_SIZE_DIALOG);
|
||||
|
||||
new_widget = priv->creation_func ();
|
||||
|
||||
gtk_widget_show (new_widget);
|
||||
gtk_container_add (GTK_CONTAINER (fishbowl), new_widget);
|
||||
|
||||
gtk_fishbowl_add (GTK_CONTAINER (fishbowl), new_widget);
|
||||
}
|
||||
|
||||
g_object_thaw_notify (G_OBJECT (fishbowl));
|
||||
}
|
||||
|
||||
gboolean
|
||||
gtk_fishbowl_get_benchmark (GtkFishbowl *fishbowl)
|
||||
{
|
||||
GtkFishbowlPrivate *priv = gtk_fishbowl_get_instance_private (fishbowl);
|
||||
|
||||
return priv->benchmark;
|
||||
}
|
||||
|
||||
void
|
||||
gtk_fishbowl_set_benchmark (GtkFishbowl *fishbowl,
|
||||
gboolean benchmark)
|
||||
{
|
||||
GtkFishbowlPrivate *priv = gtk_fishbowl_get_instance_private (fishbowl);
|
||||
|
||||
if (priv->benchmark == benchmark)
|
||||
return;
|
||||
|
||||
priv->benchmark = benchmark;
|
||||
if (!benchmark)
|
||||
priv->last_benchmark_change = 0;
|
||||
|
||||
g_object_notify_by_pspec (G_OBJECT (fishbowl), props[PROP_BENCHMARK]);
|
||||
}
|
||||
|
||||
gboolean
|
||||
gtk_fishbowl_get_animating (GtkFishbowl *fishbowl)
|
||||
{
|
||||
@@ -499,6 +473,111 @@ gtk_fishbowl_get_animating (GtkFishbowl *fishbowl)
|
||||
return priv->tick_id != 0;
|
||||
}
|
||||
|
||||
static gint64
|
||||
guess_refresh_interval (GdkFrameClock *frame_clock)
|
||||
{
|
||||
gint64 interval;
|
||||
gint64 i;
|
||||
|
||||
interval = G_MAXINT64;
|
||||
|
||||
for (i = gdk_frame_clock_get_history_start (frame_clock);
|
||||
i < gdk_frame_clock_get_frame_counter (frame_clock);
|
||||
i++)
|
||||
{
|
||||
GdkFrameTimings *t, *before;
|
||||
gint64 ts, before_ts;
|
||||
|
||||
t = gdk_frame_clock_get_timings (frame_clock, i);
|
||||
before = gdk_frame_clock_get_timings (frame_clock, i - 1);
|
||||
if (t == NULL || before == NULL)
|
||||
continue;
|
||||
|
||||
ts = gdk_frame_timings_get_frame_time (t);
|
||||
before_ts = gdk_frame_timings_get_frame_time (before);
|
||||
if (ts == 0 || before_ts == 0)
|
||||
continue;
|
||||
|
||||
interval = MIN (interval, ts - before_ts);
|
||||
}
|
||||
|
||||
if (interval == G_MAXINT64)
|
||||
return 0;
|
||||
|
||||
return interval;
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_fishbowl_do_update (GtkFishbowl *fishbowl)
|
||||
{
|
||||
GtkFishbowlPrivate *priv = gtk_fishbowl_get_instance_private (fishbowl);
|
||||
GdkFrameClock *frame_clock;
|
||||
GdkFrameTimings *start, *end;
|
||||
gint64 start_counter, end_counter;
|
||||
gint64 n_frames, expected_frames;
|
||||
gint64 start_timestamp, end_timestamp;
|
||||
gint64 interval;
|
||||
|
||||
frame_clock = gtk_widget_get_frame_clock (GTK_WIDGET (fishbowl));
|
||||
if (frame_clock == NULL)
|
||||
return;
|
||||
|
||||
start_counter = gdk_frame_clock_get_history_start (frame_clock);
|
||||
end_counter = gdk_frame_clock_get_frame_counter (frame_clock);
|
||||
start = gdk_frame_clock_get_timings (frame_clock, start_counter);
|
||||
for (end = gdk_frame_clock_get_timings (frame_clock, end_counter);
|
||||
end_counter > start_counter && end != NULL && !gdk_frame_timings_get_complete (end);
|
||||
end = gdk_frame_clock_get_timings (frame_clock, end_counter))
|
||||
end_counter--;
|
||||
if (end_counter - start_counter < 4)
|
||||
return;
|
||||
|
||||
start_timestamp = gdk_frame_timings_get_presentation_time (start);
|
||||
end_timestamp = gdk_frame_timings_get_presentation_time (end);
|
||||
if (start_timestamp == 0 || end_timestamp == 0)
|
||||
{
|
||||
start_timestamp = gdk_frame_timings_get_frame_time (start);
|
||||
end_timestamp = gdk_frame_timings_get_frame_time (end);
|
||||
}
|
||||
|
||||
n_frames = end_counter - start_counter;
|
||||
priv->framerate = ((double) n_frames) * G_USEC_PER_SEC / (end_timestamp - start_timestamp);
|
||||
g_object_notify_by_pspec (G_OBJECT (fishbowl), props[PROP_FRAMERATE]);
|
||||
|
||||
if (!priv->benchmark)
|
||||
return;
|
||||
|
||||
interval = gdk_frame_timings_get_refresh_interval (end);
|
||||
if (interval == 0)
|
||||
{
|
||||
interval = guess_refresh_interval (frame_clock);
|
||||
if (interval == 0)
|
||||
return;
|
||||
}
|
||||
expected_frames = round ((double) (end_timestamp - start_timestamp) / interval);
|
||||
|
||||
if (n_frames >= expected_frames)
|
||||
{
|
||||
if (priv->last_benchmark_change > 0)
|
||||
priv->last_benchmark_change *= 2;
|
||||
else
|
||||
priv->last_benchmark_change = 1;
|
||||
}
|
||||
else if (n_frames + 1 < expected_frames)
|
||||
{
|
||||
if (priv->last_benchmark_change < 0)
|
||||
priv->last_benchmark_change--;
|
||||
else
|
||||
priv->last_benchmark_change = -1;
|
||||
}
|
||||
else
|
||||
{
|
||||
priv->last_benchmark_change = 0;
|
||||
}
|
||||
|
||||
gtk_fishbowl_set_count (fishbowl, MAX (1, (int) priv->count + priv->last_benchmark_change));
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gtk_fishbowl_tick (GtkWidget *widget,
|
||||
GdkFrameClock *frame_clock,
|
||||
@@ -509,9 +588,11 @@ gtk_fishbowl_tick (GtkWidget *widget,
|
||||
GtkFishbowlChild *child;
|
||||
GList *l;
|
||||
gint64 frame_time, elapsed;
|
||||
gboolean do_update;
|
||||
|
||||
frame_time = gdk_frame_clock_get_frame_time (gtk_widget_get_frame_clock (widget));
|
||||
elapsed = frame_time - priv->last_frame_time;
|
||||
do_update = frame_time / priv->update_delay != priv->last_frame_time / priv->update_delay;
|
||||
priv->last_frame_time = frame_time;
|
||||
|
||||
/* last frame was 0, so we're just starting to animate */
|
||||
@@ -550,6 +631,9 @@ gtk_fishbowl_tick (GtkWidget *widget,
|
||||
|
||||
gtk_widget_queue_allocate (widget);
|
||||
|
||||
if (do_update)
|
||||
gtk_fishbowl_do_update (fishbowl);
|
||||
|
||||
return G_SOURCE_CONTINUE;
|
||||
}
|
||||
|
||||
@@ -574,8 +658,57 @@ gtk_fishbowl_set_animating (GtkFishbowl *fishbowl,
|
||||
priv->last_frame_time = 0;
|
||||
gtk_widget_remove_tick_callback (GTK_WIDGET (fishbowl), priv->tick_id);
|
||||
priv->tick_id = 0;
|
||||
priv->framerate = 0;
|
||||
g_object_notify_by_pspec (G_OBJECT (fishbowl), props[PROP_FRAMERATE]);
|
||||
}
|
||||
|
||||
g_object_notify_by_pspec (G_OBJECT (fishbowl), props[PROP_ANIMATING]);
|
||||
}
|
||||
|
||||
double
|
||||
gtk_fishbowl_get_framerate (GtkFishbowl *fishbowl)
|
||||
{
|
||||
GtkFishbowlPrivate *priv = gtk_fishbowl_get_instance_private (fishbowl);
|
||||
|
||||
return priv->framerate;
|
||||
}
|
||||
|
||||
gint64
|
||||
gtk_fishbowl_get_update_delay (GtkFishbowl *fishbowl)
|
||||
{
|
||||
GtkFishbowlPrivate *priv = gtk_fishbowl_get_instance_private (fishbowl);
|
||||
|
||||
return priv->update_delay;
|
||||
}
|
||||
|
||||
void
|
||||
gtk_fishbowl_set_update_delay (GtkFishbowl *fishbowl,
|
||||
gint64 update_delay)
|
||||
{
|
||||
GtkFishbowlPrivate *priv = gtk_fishbowl_get_instance_private (fishbowl);
|
||||
|
||||
if (priv->update_delay == update_delay)
|
||||
return;
|
||||
|
||||
priv->update_delay = update_delay;
|
||||
|
||||
g_object_notify_by_pspec (G_OBJECT (fishbowl), props[PROP_UPDATE_DELAY]);
|
||||
}
|
||||
|
||||
void
|
||||
gtk_fishbowl_set_creation_func (GtkFishbowl *fishbowl,
|
||||
GtkFishCreationFunc creation_func)
|
||||
{
|
||||
GtkFishbowlPrivate *priv = gtk_fishbowl_get_instance_private (fishbowl);
|
||||
|
||||
g_object_freeze_notify (G_OBJECT (fishbowl));
|
||||
|
||||
gtk_fishbowl_set_count (fishbowl, 0);
|
||||
priv->last_benchmark_change = 0;
|
||||
|
||||
priv->creation_func = creation_func;
|
||||
|
||||
gtk_fishbowl_set_count (fishbowl, 1);
|
||||
|
||||
g_object_thaw_notify (G_OBJECT (fishbowl));
|
||||
}
|
||||
|
||||
@@ -32,9 +32,11 @@ G_BEGIN_DECLS
|
||||
typedef struct _GtkFishbowl GtkFishbowl;
|
||||
typedef struct _GtkFishbowlClass GtkFishbowlClass;
|
||||
|
||||
typedef GtkWidget * (* GtkFishCreationFunc) (void);
|
||||
|
||||
struct _GtkFishbowl
|
||||
{
|
||||
GtkContainer container;
|
||||
GtkContainer parent;
|
||||
};
|
||||
|
||||
struct _GtkFishbowlClass
|
||||
@@ -52,6 +54,15 @@ void gtk_fishbowl_set_count (GtkFishbowl *fishbowl,
|
||||
gboolean gtk_fishbowl_get_animating (GtkFishbowl *fishbowl);
|
||||
void gtk_fishbowl_set_animating (GtkFishbowl *fishbowl,
|
||||
gboolean animating);
|
||||
gboolean gtk_fishbowl_get_benchmark (GtkFishbowl *fishbowl);
|
||||
void gtk_fishbowl_set_benchmark (GtkFishbowl *fishbowl,
|
||||
gboolean animating);
|
||||
double gtk_fishbowl_get_framerate (GtkFishbowl *fishbowl);
|
||||
gint64 gtk_fishbowl_get_update_delay (GtkFishbowl *fishbowl);
|
||||
void gtk_fishbowl_set_update_delay (GtkFishbowl *fishbowl,
|
||||
gint64 update_delay);
|
||||
void gtk_fishbowl_set_creation_func (GtkFishbowl *fishbowl,
|
||||
GtkFishCreationFunc creation_func);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
|
||||
@@ -338,21 +338,16 @@
|
||||
<property name="top-attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Copy to Clipboard</property>
|
||||
<property name="halign">center</property>
|
||||
<property name="valign">center</property>
|
||||
<property name="margin">20</property>
|
||||
<signal name="clicked" handler="copy_to_clipboard"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">4</property>
|
||||
<property name="width">5</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Copy to Clipboard</property>
|
||||
<property name="halign">center</property>
|
||||
<property name="valign">center</property>
|
||||
<property name="margin">20</property>
|
||||
<signal name="clicked" handler="copy_to_clipboard"/>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
|
||||
@@ -493,6 +493,7 @@ Suspendisse feugiat quam quis dolor accumsan cursus.</property>
|
||||
<object class="GtkEntry" id="entry1">
|
||||
<property name="visible">1</property>
|
||||
<property name="can_focus">1</property>
|
||||
<property name="enable-emoji-completion">1</property>
|
||||
<property name="invisible_char">•</property>
|
||||
<property name="placeholder-text" translatable="yes">Click icon to change mode</property>
|
||||
<property name="secondary_icon_name">view-refresh-symbolic</property>
|
||||
|
||||
@@ -113,6 +113,10 @@
|
||||
<title>Index of new symbols in 3.22</title>
|
||||
<xi:include href="xml/api-index-3.22.xml"><xi:fallback /></xi:include>
|
||||
</index>
|
||||
<index id="api-index-3-24" role="3.24">
|
||||
<title>Index of new symbols in 3.24</title>
|
||||
<xi:include href="xml/api-index-3.24.xml"><xi:fallback /></xi:include>
|
||||
</index>
|
||||
|
||||
<xi:include href="xml/annotation-glossary.xml"><xi:fallback /></xi:include>
|
||||
|
||||
|
||||
@@ -386,6 +386,7 @@ gdk_window_move
|
||||
gdk_window_resize
|
||||
gdk_window_move_resize
|
||||
gdk_window_scroll
|
||||
gdk_window_move_to_rect
|
||||
gdk_window_move_region
|
||||
gdk_window_flush
|
||||
gdk_window_has_native
|
||||
@@ -1270,6 +1271,7 @@ gdk_wayland_device_get_wl_seat
|
||||
gdk_wayland_display_get_wl_compositor
|
||||
gdk_wayland_display_get_wl_display
|
||||
gdk_wayland_display_get_xdg_shell
|
||||
gdk_wayland_display_query_registry
|
||||
gdk_wayland_window_get_wl_surface
|
||||
gdk_wayland_window_set_use_custom_surface
|
||||
GdkWaylandWindowExported
|
||||
|
||||
@@ -4,13 +4,13 @@
|
||||
]>
|
||||
<refentry id="chap-css-overview">
|
||||
<refmeta>
|
||||
<refentrytitle>GTK+ CSS</refentrytitle>
|
||||
<refentrytitle>GTK+ CSS Overview</refentrytitle>
|
||||
<manvolnum>3</manvolnum>
|
||||
<refmiscinfo>GTK Library</refmiscinfo>
|
||||
</refmeta>
|
||||
|
||||
<refnamediv>
|
||||
<refname>GTK+ CSS</refname>
|
||||
<refname>GTK+ CSS Overview</refname>
|
||||
<refpurpose>
|
||||
Overview of CSS in GTK+
|
||||
</refpurpose>
|
||||
@@ -21,12 +21,6 @@ Overview of CSS in GTK+
|
||||
Formatting conventions:
|
||||
We use
|
||||
|
||||
‑ U+2011 Non-breaking Hyphen
|
||||
U+00A0 No-break Space
|
||||
|
||||
to control line breaks in the Name and Value columns.
|
||||
We use
|
||||
|
||||
〈 U+2329 Left-pointing Angle Bracket
|
||||
〉 U+232A Right-pointing Angle Bracket
|
||||
|
||||
@@ -123,7 +117,7 @@ scale[.fine-tune]
|
||||
<programlisting><![CDATA[
|
||||
button, entry {
|
||||
color: #ff00ea;
|
||||
font: 12px "Comic Sans"
|
||||
font: 12px "Comic Sans";
|
||||
}
|
||||
]]></programlisting>
|
||||
</example>
|
||||
@@ -142,8 +136,8 @@ button, entry {
|
||||
The syntax for @import rules is as follows:
|
||||
</para>
|
||||
|
||||
<literallayout><code>〈import rule〉 = @import [ 〈url〉 | 〈string〉] ;</code>
|
||||
<code>〈url〉 = url( 〈string〉)</code>
|
||||
<literallayout><code>〈import rule〉 = @import [ 〈url〉 | 〈string〉 ]</code>
|
||||
<code>〈url〉 = url( 〈string〉 )</code>
|
||||
</literallayout>
|
||||
|
||||
<example><title>An example for using the @import rule</title>
|
||||
@@ -187,7 +181,7 @@ button, entry {
|
||||
<title>Theme labels that are descendants of a window</title>
|
||||
<programlisting><![CDATA[
|
||||
window label {
|
||||
background-color: #898989
|
||||
background-color: #898989;
|
||||
}
|
||||
]]></programlisting>
|
||||
</example>
|
||||
@@ -196,7 +190,7 @@ window label {
|
||||
<title>Theme notebooks, and anything within</title>
|
||||
<programlisting><![CDATA[
|
||||
notebook {
|
||||
background-color: #a939f0
|
||||
background-color: #a939f0;
|
||||
}
|
||||
]]></programlisting>
|
||||
</example>
|
||||
@@ -207,7 +201,7 @@ notebook {
|
||||
combobox,
|
||||
notebook > entry {
|
||||
color: @fg_color;
|
||||
background-color: #1209a2
|
||||
background-color: #1209a2;
|
||||
}
|
||||
]]></programlisting>
|
||||
</example>
|
||||
@@ -216,7 +210,7 @@ notebook > entry {
|
||||
<title>Theme any widget within a GtkBox</title>
|
||||
<programlisting><![CDATA[
|
||||
box * {
|
||||
font: 20px Sans
|
||||
font: 20px Sans;
|
||||
}
|
||||
]]></programlisting>
|
||||
</example>
|
||||
@@ -225,7 +219,7 @@ box * {
|
||||
<title>Theme a label named title-label</title>
|
||||
<programlisting><![CDATA[
|
||||
label#title-label {
|
||||
font: 15px Sans
|
||||
font: 15px Sans;
|
||||
}
|
||||
]]></programlisting>
|
||||
</example>
|
||||
@@ -234,7 +228,7 @@ label#title-label {
|
||||
<title>Theme any widget named main-entry</title>
|
||||
<programlisting><![CDATA[
|
||||
#main-entry {
|
||||
background-color: #f0a810
|
||||
background-color: #f0a810;
|
||||
}
|
||||
]]></programlisting>
|
||||
</example>
|
||||
@@ -252,7 +246,7 @@ label#title-label {
|
||||
<title>Theme the entry of a GtkSpinButton</title>
|
||||
<programlisting><![CDATA[
|
||||
spinbutton entry {
|
||||
color: 900185;
|
||||
color: #900185;
|
||||
}
|
||||
]]></programlisting>
|
||||
</example>
|
||||
@@ -358,134 +352,134 @@ checkbutton:indeterminate {
|
||||
</thead>
|
||||
<tbody>
|
||||
<row>
|
||||
<entry>*</entry>
|
||||
<entry><phrase role="nowrap">*</phrase></entry>
|
||||
<entry>any node</entry>
|
||||
<entry><ulink url="https://www.w3.org/TR/css3-selectors/#universal-selector">CSS</ulink></entry>
|
||||
<entry></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>E</entry>
|
||||
<entry><phrase role="nowrap">E</phrase></entry>
|
||||
<entry>any node with name E</entry>
|
||||
<entry><ulink url="https://www.w3.org/TR/css3-selectors/#type-selectors">CSS</ulink></entry>
|
||||
<entry></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>E.class</entry>
|
||||
<entry><phrase role="nowrap">E.class</phrase></entry>
|
||||
<entry>any E node with the given style class</entry>
|
||||
<entry><ulink url="https://www.w3.org/TR/css3-selectors/#class-html">CSS</ulink></entry>
|
||||
<entry></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>E#id</entry>
|
||||
<entry><phrase role="nowrap">E#id</phrase></entry>
|
||||
<entry>any E node with the given ID</entry>
|
||||
<entry><ulink url="https://www.w3.org/TR/css3-selectors/#id-selectors">CSS</ulink></entry>
|
||||
<entry>GTK+ uses the widget name as ID</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>E:nth‑child(〈nth‑child〉)</entry>
|
||||
<entry><phrase role="nowrap">E:nth-child(〈nth-child〉)</phrase></entry>
|
||||
<entry>any E node which is the n-th child of its parent node</entry>
|
||||
<entry><ulink url="https://www.w3.org/TR/css3-selectors/#structural-pseudos">CSS</ulink></entry>
|
||||
<entry></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>E:nth‑last‑child(〈nth‑child〉)</entry>
|
||||
<entry><phrase role="nowrap">E:nth-last-child(〈nth-child〉)</phrase></entry>
|
||||
<entry>any E node which is the n-th child of its parent node, counting from the end</entry>
|
||||
<entry><ulink url="https://www.w3.org/TR/css3-selectors/#structural-pseudos">CSS</ulink></entry>
|
||||
<entry></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>E:first‑child</entry>
|
||||
<entry><phrase role="nowrap">E:first-child</phrase></entry>
|
||||
<entry>any E node which is the first child of its parent node</entry>
|
||||
<entry><ulink url="https://www.w3.org/TR/css3-selectors/#structural-pseudos">CSS</ulink></entry>
|
||||
<entry></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>E:last‑child</entry>
|
||||
<entry><phrase role="nowrap">E:last-child</phrase></entry>
|
||||
<entry>any E node which is the last child of its parent node</entry>
|
||||
<entry><ulink url="https://www.w3.org/TR/css3-selectors/#structural-pseudos">CSS</ulink></entry>
|
||||
<entry></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>E:only‑child</entry>
|
||||
<entry><phrase role="nowrap">E:only-child</phrase></entry>
|
||||
<entry>any E node which is the only child of its parent node</entry>
|
||||
<entry><ulink url="https://www.w3.org/TR/css3-selectors/#structural-pseudos">CSS</ulink></entry>
|
||||
<entry>Equivalent to E:first-child:last-child</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>E:link, E:visited</entry>
|
||||
<entry><phrase role="nowrap">E:link, E:visited</phrase></entry>
|
||||
<entry>any E node which represents a hyperlink, not yet visited (:link) or already visited (:visited)</entry>
|
||||
<entry><ulink url="https://www.w3.org/TR/css3-selectors/#link">CSS</ulink></entry>
|
||||
<entry>Corresponds to GTK_STATE_FLAG_LINK and GTK_STATE_FLAGS_VISITED</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>E:active, E:hover, E:focus</entry>
|
||||
<entry><phrase role="nowrap">E:active, E:hover, E:focus</phrase></entry>
|
||||
<entry>any E node which is part of a widget with the corresponding state</entry>
|
||||
<entry><ulink url="https://www.w3.org/TR/css3-selectors/#useraction-pseudos">CSS</ulink></entry>
|
||||
<entry>Corresponds to GTK_STATE_FLAG_ACTIVE, GTK_STATE_FLAG_PRELIGHT and GTK_STATE_FLAGS_FOCUSED; GTK+ also allows E:prelight and E:focused</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>E:disabled</entry>
|
||||
<entry><phrase role="nowrap">E:disabled</phrase></entry>
|
||||
<entry>any E node which is part of a widget which is disabled</entry>
|
||||
<entry><ulink url="https://www.w3.org/TR/css3-selectors/#UIstates">CSS</ulink></entry>
|
||||
<entry>Corresponds to GTK_STATE_FLAG_INSENSITIVE; GTK+ also allows E:insensitive</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>E:checked</entry>
|
||||
<entry><phrase role="nowrap">E:checked</phrase></entry>
|
||||
<entry>any E node which is part of a widget (e.g. radio- or checkbuttons) which is checked</entry>
|
||||
<entry><ulink url="https://www.w3.org/TR/css3-selectors/#UIstates">CSS</ulink></entry>
|
||||
<entry>Corresponds to GTK_STATE_FLAG_CHECKED</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>E:indeterminate</entry>
|
||||
<entry>any E node which is part of a widget (e.g. radio- or checkbuttons) which is in an inconsistent state</entry>
|
||||
<entry><phrase role="nowrap">E:indeterminate</phrase></entry>
|
||||
<entry>any E node which is part of a widget (e.g. radio- or checkbuttons) which is in an indeterminate state</entry>
|
||||
<entry><ulink url="https://www.w3.org/TR/css3-selectors/#indeterminate">CSS3</ulink>,
|
||||
<ulink url="https://drafts.csswg.org/selectors/#indeterminate">CSS4</ulink></entry>
|
||||
<entry>Corresponds to GTK_STATE_FLAG_INCONSISTENT; GTK+ also allows E:inconsistent</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>E:backdrop, E:selected</entry>
|
||||
<entry><phrase role="nowrap">E:backdrop, E:selected</phrase></entry>
|
||||
<entry>any E node which is part of a widget with the corresponding state</entry>
|
||||
<entry></entry>
|
||||
<entry>Corresponds to GTK_STATE_FLAG_BACKDROP, GTK_STATE_FLAG_SELECTED</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>E:not(〈selector〉)</entry>
|
||||
<entry><phrase role="nowrap">E:not(〈selector〉)</phrase></entry>
|
||||
<entry>any E node which does not match the simple selector 〈selector〉</entry>
|
||||
<entry><ulink url="https://www.w3.org/TR/css3-selectors/#negation">CSS</ulink></entry>
|
||||
<entry></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>E:dir(ltr), E:dir(rtl)</entry>
|
||||
<entry><phrase role="nowrap">E:dir(ltr), E:dir(rtl)</phrase></entry>
|
||||
<entry>any E node that has the corresponding text direction</entry>
|
||||
<entry><ulink url="https://drafts.csswg.org/selectors/#the-dir-pseudo">CSS4</ulink></entry>
|
||||
<entry></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>E:drop(active)</entry>
|
||||
<entry><phrase role="nowrap">E:drop(active)</phrase></entry>
|
||||
<entry>any E node that is an active drop target for a current DND operation</entry>
|
||||
<entry><ulink url="https://drafts.csswg.org/selectors/#drag-pseudos">CSS4</ulink></entry>
|
||||
<entry></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>E F</entry>
|
||||
<entry><phrase role="nowrap">E F</phrase></entry>
|
||||
<entry>any F node which is a descendent of an E node</entry>
|
||||
<entry><ulink url="https://www.w3.org/TR/css3-selectors/#descendent-combinators">CSS</ulink></entry>
|
||||
<entry></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>E > F</entry>
|
||||
<entry><phrase role="nowrap">E > F</phrase></entry>
|
||||
<entry>any F node which is a child of an E node</entry>
|
||||
<entry><ulink url="https://www.w3.org/TR/css3-selectors/#child-combinators">CSS</ulink></entry>
|
||||
<entry></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>E ~ F</entry>
|
||||
<entry><phrase role="nowrap">E ~ F</phrase></entry>
|
||||
<entry>any F node which is preceded by an E node</entry>
|
||||
<entry><ulink url="https://www.w3.org/TR/css3-selectors/#general-sibling-combinators">CSS</ulink></entry>
|
||||
<entry></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>E + F</entry>
|
||||
<entry><phrase role="nowrap">E + F</phrase></entry>
|
||||
<entry>any F node which is immediately preceded by an E node</entry>
|
||||
<entry><ulink url="https://www.w3.org/TR/css3-selectors/#adjacent-sibling-combinators">CSS</ulink></entry>
|
||||
<entry></entry>
|
||||
@@ -514,8 +508,8 @@ checkbutton:indeterminate {
|
||||
</para>
|
||||
|
||||
<literallayout><code>〈color〉 = currentColor | transparent | 〈color name〉 | 〈rgb color〉 | 〈rgba color〉 | 〈hex color〉 | 〈gtk color〉</code>
|
||||
<code>〈rgb color 〉 = rgb( 〈number〉, 〈number〉, 〈number〉 ) | rgb( 〈percentage〉, 〈percentage〉, 〈percentage〉 )</code>
|
||||
<code>〈rgba color 〉 = rgba(〈number〉, 〈number〉, 〈number〉, 〈alpha value〉) | rgba( 〈percentage〉, 〈percentage〉, 〈percentage〉, 〈alpha value〉 )</code>
|
||||
<code>〈rgb color〉 = rgb( 〈number〉, 〈number〉, 〈number〉 ) | rgb( 〈percentage〉, 〈percentage〉, 〈percentage〉 )</code>
|
||||
<code>〈rgba color〉 = rgba( 〈number〉, 〈number〉, 〈number〉, 〈alpha value〉 ) | rgba( 〈percentage〉, 〈percentage〉, 〈percentage〉, 〈alpha value〉 )</code>
|
||||
<code>〈hex color〉 = #〈hex digits〉</code>
|
||||
<code>〈alpha value〉 = 〈number〉</code>, clamped to values between 0 and 1
|
||||
</literallayout>
|
||||
@@ -552,7 +546,7 @@ checkbutton:indeterminate {
|
||||
GTK+ adds several additional ways to specify colors.
|
||||
</para>
|
||||
|
||||
<literallayout><code>〈gtk color〉 = 〈symbolic color〉 | 〈color expression〉| 〈win32 color〉</code>
|
||||
<literallayout><code>〈gtk color〉 = 〈symbolic color〉 | 〈color expression〉 | 〈win32 color〉</code>
|
||||
</literallayout>
|
||||
|
||||
<para>
|
||||
@@ -576,7 +570,7 @@ checkbutton:indeterminate {
|
||||
@define-color bg_color #f9a039;
|
||||
|
||||
* {
|
||||
background-color: @bg_color;
|
||||
background-color: @bg_color;
|
||||
}
|
||||
]]></programlisting>
|
||||
</example>
|
||||
@@ -596,14 +590,15 @@ background-color: @bg_color;
|
||||
number from 0 to 1 and applies that as the opacity of the supplied color.
|
||||
</para>
|
||||
|
||||
<literallayout><code>〈color expression〉 = lighter(〈color〉) | darker(〈color〉) | shade(〈color〉,〈number〉) | alpha(〈color〉,〈number〉) | mix(〈color〉,〈color〉,〈number〉)</code>
|
||||
<literallayout><code>〈color expression〉 = lighter( 〈color〉 ) | darker( 〈color〉 ) | shade( 〈color〉, 〈number〉 ) |</code>
|
||||
<code> alpha( 〈color〉, 〈number〉 ) | mix( 〈color〉, 〈color〉, 〈number〉 )</code>
|
||||
</literallayout>
|
||||
|
||||
<para>
|
||||
On Windows, GTK+ allows to refer to system colors, as follows:
|
||||
</para>
|
||||
|
||||
<literallayout><code>〈win32 color〉 = -gtk-win32-color( 〈name〉, 〈integer〉)</code>
|
||||
<literallayout><code>〈win32 color〉 = -gtk-win32-color( 〈name〉, 〈integer〉 )</code>
|
||||
</literallayout>
|
||||
|
||||
</refsect2>
|
||||
@@ -617,17 +612,17 @@ background-color: @bg_color;
|
||||
</para>
|
||||
|
||||
<literallayout><code>〈image〉 = 〈url〉 | 〈crossfade〉 | 〈alternatives〉 | 〈gradient〉 | 〈gtk image〉</code>
|
||||
<code>〈crossfade〉 = cross-fade( 〈percentage〉, 〈image〉, 〈image〉)</code>
|
||||
<code>〈alternatives〉 = image([ 〈image〉, ]* [ 〈image〉 | 〈color〉 ])</code>
|
||||
<code>〈crossfade〉 = cross-fade( 〈percentage〉, 〈image〉, 〈image〉 )</code>
|
||||
<code>〈alternatives〉 = image([ 〈image〉, ]* [ 〈image〉 | 〈color〉 ] )</code>
|
||||
<code>〈gradient〉 = 〈linear gradient〉 | 〈radial gradient〉</code>
|
||||
<code>〈linear gradient〉 = [ linear-gradient | repeating-linear-gradient ] (</code>
|
||||
<code> [ [ 〈angle〉 | to 〈side or corner〉 ] , ]?</code>
|
||||
<code> 〈color stops〉 )</code>
|
||||
<code>〈radial gradient〉 = [ radial‑gradient | repeating‑radial‑gradient ] (</code>
|
||||
<code>〈radial gradient〉 = [ radial-gradient | repeating-radial-gradient ] (</code>
|
||||
<code> [ [ 〈shape〉 || 〈size〉 ] [ at 〈position〉 ]? , | at 〈position〉, ]?</code>
|
||||
<code> 〈color stops〉 )</code>
|
||||
<code>〈side or corner〉 = [ left | right ] || [ top | bottom ]</code>
|
||||
<code>〈color stops〉 = 〈color stop〉 [ , 〈color stop〉]+</code>
|
||||
<code>〈color stops〉 = 〈color stop〉 [ , 〈color stop〉 ]+</code>
|
||||
<code>〈color stop〉 = 〈color〉 [ 〈percentage〉 | 〈length〉 ]?</code>
|
||||
<code>〈shape〉 = circle | ellipse</code>
|
||||
<code>〈size〉 = 〈extent keyword〉 | 〈length〉 | [ 〈length〉 | 〈percentage〉 ]{1,2}</code>
|
||||
@@ -848,7 +843,7 @@ arrow.fancy {
|
||||
CSS, this can be done with the -gtk-scaled syntax.
|
||||
</para>
|
||||
|
||||
<literallayout><code>〈scaled image〉 = -gtk-scaled( 〈image〉[, 〈image〉]* )</code>
|
||||
<literallayout><code>〈scaled image〉 = -gtk-scaled( 〈image〉[ , 〈image〉 ]* )</code>
|
||||
</literallayout>
|
||||
|
||||
<para>
|
||||
@@ -867,7 +862,7 @@ arrow {
|
||||
]]></programlisting>
|
||||
</example>
|
||||
|
||||
<literallayout><code>〈recolored image〉 = -gtk-recolored( 〈url〉[, 〈color palette〉] )</code>
|
||||
<literallayout><code>〈recolored image〉 = -gtk-recolor( 〈url〉 [ , 〈color palette〉 ] )</code>
|
||||
</literallayout>
|
||||
|
||||
<para>
|
||||
@@ -893,7 +888,7 @@ arrow {
|
||||
</para>
|
||||
|
||||
<literallayout><code>〈win32 theme part〉 = -gtk-win32-theme-part( 〈name〉, 〈integer〉 〈integer〉</code>
|
||||
<code> [, [ over( 〈integer〉 〈integer〉 [ , 〈alpha value〉]? ) | margins( 〈integer〉{1,4} ) ] ]* )</code>
|
||||
<code> [ , [ over( 〈integer〉 〈integer〉 [ , 〈alpha value〉 ]? ) | margins( 〈integer〉{1,4} ) ] ]* )</code>
|
||||
</literallayout>
|
||||
|
||||
</refsect2>
|
||||
@@ -944,7 +939,7 @@ arrow {
|
||||
|
||||
<literallayout><code>〈keyframe rule〉 = @keyframes 〈name〉 { 〈animation rule〉 }</code>
|
||||
<code>〈animation rule〉 = 〈animation selector〉 { 〈declaration〉* }</code>
|
||||
<code>〈animation selector〉 = 〈single animation selector〉 [ , 〈single animation selector ]*</code>
|
||||
<code>〈animation selector〉 = 〈single animation selector〉 [ , 〈single animation selector〉 ]*</code>
|
||||
<code>〈single animation selector〉 = from | to | 〈percentage〉</code>
|
||||
</literallayout>
|
||||
|
||||
@@ -994,10 +989,10 @@ spinner {
|
||||
The syntax for @binding-set rules is as follows:
|
||||
</para>
|
||||
|
||||
<literallayout><code>〈binding set rule〉 = @binding-set 〈binding name〉{ [ [ 〈binding〉 | 〈unbinding〉] ; ]* }</code>
|
||||
<literallayout><code>〈binding set rule〉 = @binding-set 〈binding name〉 { [ [ 〈binding〉 | 〈unbinding〉 ] ; ]* }</code>
|
||||
<code>〈binding〉 = bind "〈accelerator〉" { 〈signal emission〉* }</code>
|
||||
<code>〈signal emission〉 = "〈signal name〉" ( [ 〈argument〉[ , 〈argument〉]* ]? }</code>
|
||||
<code>〈unbinding〉 = unbind "〈accelerator〉" ;</code>
|
||||
<code>〈signal emission〉 = "〈signal name〉" ( [ 〈argument〉 [ , 〈argument〉 ]* ]? }</code>
|
||||
<code>〈unbinding〉 = unbind "〈accelerator〉"</code>
|
||||
</literallayout>
|
||||
|
||||
<para>
|
||||
|
||||
@@ -4,15 +4,15 @@
|
||||
]>
|
||||
<refentry id="chap-css-properties">
|
||||
<refmeta>
|
||||
<refentrytitle>GTK+ CSS</refentrytitle>
|
||||
<refentrytitle>GTK+ CSS Properties</refentrytitle>
|
||||
<manvolnum>3</manvolnum>
|
||||
<refmiscinfo>GTK Library</refmiscinfo>
|
||||
</refmeta>
|
||||
|
||||
<refnamediv>
|
||||
<refname>GTK+ CSS</refname>
|
||||
<refname>GTK+ CSS Properties</refname>
|
||||
<refpurpose>
|
||||
GTK+ CSS Properties
|
||||
CSS Properties in GTK+
|
||||
</refpurpose>
|
||||
</refnamediv>
|
||||
|
||||
@@ -21,12 +21,6 @@ GTK+ CSS Properties
|
||||
Formatting conventions:
|
||||
We use
|
||||
|
||||
‑ U+2011 Non-breaking Hyphen
|
||||
U+00A0 No-break Space
|
||||
|
||||
to control line breaks in the Name and Value columns.
|
||||
We use
|
||||
|
||||
〈 U+2329 Left-pointing Angle Bracket
|
||||
〉 U+232A Right-pointing Angle Bracket
|
||||
|
||||
@@ -77,11 +71,12 @@ We use <literallayout> for syntax productions, and each line is put in a <code>
|
||||
</para>
|
||||
|
||||
<literallayout>
|
||||
<code>〈win32 theme size〉 = 〈win32 size〉| 〈win32 part size〉</code>
|
||||
<code>〈win32 theme size〉 = 〈win32 size〉 | 〈win32 part size〉</code>
|
||||
<code>〈win32 size〉 = -gtk-win32-size ( 〈theme name〉, 〈metric id〉 )</code>
|
||||
<code>〈win32 part size〉 = [ -gtk-win32-part-width | -gtk-win32-part-height |</code>
|
||||
<code> -gtk-win32-part-border-top | -gtk-win32-part-border-right |</code>
|
||||
<code> -gtk-win32-part-border-bottom | -gtk-win32-part-border-left ] ( 〈theme name〉 , 〈integer〉 , 〈integer〉 )</code>
|
||||
<code> -gtk-win32-part-border-top | -gtk-win32-part-border-right |</code>
|
||||
<code> -gtk-win32-part-border-bottom | -gtk-win32-part-border-left ]</code>
|
||||
<code> ( 〈theme name〉 , 〈integer〉 , 〈integer〉 )</code>
|
||||
</literallayout>
|
||||
|
||||
<literallayout><code>〈calc expression〉 = calc( 〈calc sum〉 )</code>
|
||||
@@ -129,7 +124,7 @@ We use <literallayout> for syntax productions, and each line is put in a <code>
|
||||
</thead>
|
||||
<tbody>
|
||||
<row>
|
||||
<entry>color</entry>
|
||||
<entry><phrase role="nowrap">color</phrase></entry>
|
||||
<entry><code>〈color〉</code></entry>
|
||||
<entry><code>rgba(1,1,1,1)</code></entry>
|
||||
<entry>✓</entry>
|
||||
@@ -139,7 +134,7 @@ We use <literallayout> for syntax productions, and each line is put in a <code>
|
||||
<entry></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>opacity</entry>
|
||||
<entry><phrase role="nowrap">opacity</phrase></entry>
|
||||
<entry><code>〈alpha value〉</code></entry>
|
||||
<entry><code>1</code></entry>
|
||||
<entry></entry>
|
||||
@@ -167,7 +162,7 @@ We use <literallayout> for syntax productions, and each line is put in a <code>
|
||||
</thead>
|
||||
<tbody>
|
||||
<row>
|
||||
<entry>font‑family</entry>
|
||||
<entry><phrase role="nowrap">font-family</phrase></entry>
|
||||
<entry><code>〈family name〉 [ , 〈family name〉 ]*</code></entry>
|
||||
<entry>gtk-font-name setting</entry>
|
||||
<entry>✓</entry>
|
||||
@@ -177,7 +172,7 @@ We use <literallayout> for syntax productions, and each line is put in a <code>
|
||||
<entry></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>font‑size</entry>
|
||||
<entry><phrase role="nowrap">font-size</phrase></entry>
|
||||
<entry><code>〈absolute size〉 | 〈relative size〉 | 〈length〉 | 〈percentage〉</code></entry>
|
||||
<entry>gtk-font-name setting</entry>
|
||||
<entry>✓</entry>
|
||||
@@ -187,7 +182,7 @@ We use <literallayout> for syntax productions, and each line is put in a <code>
|
||||
<entry></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>font‑style</entry>
|
||||
<entry><phrase role="nowrap">font-style</phrase></entry>
|
||||
<entry><code>normal | oblique | italic</code></entry>
|
||||
<entry><code>normal</code></entry>
|
||||
<entry>✓</entry>
|
||||
@@ -197,7 +192,7 @@ We use <literallayout> for syntax productions, and each line is put in a <code>
|
||||
<entry></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>font‑variant</entry>
|
||||
<entry><phrase role="nowrap">font-variant</phrase></entry>
|
||||
<entry><code>normal | small-caps</code></entry>
|
||||
<entry><code>normal</code></entry>
|
||||
<entry>✓</entry>
|
||||
@@ -207,7 +202,7 @@ We use <literallayout> for syntax productions, and each line is put in a <code>
|
||||
<entry>only CSS2 values supported</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>font‑weight</entry>
|
||||
<entry><phrase role="nowrap">font-weight</phrase></entry>
|
||||
<entry><code>normal | bold | bolder | lighter | 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900</code></entry>
|
||||
<entry><code>normal</code></entry>
|
||||
<entry>✓</entry>
|
||||
@@ -217,7 +212,7 @@ We use <literallayout> for syntax productions, and each line is put in a <code>
|
||||
<entry>normal is synonymous with 400, bold with 700</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>font‑stretch</entry>
|
||||
<entry><phrase role="nowrap">font-stretch</phrase></entry>
|
||||
<entry><code>ultra-condensed | extra-condensed | condensed | semi-condensed | normal | semi-expanded | expanded | extra-expanded | ultra-expanded</code></entry>
|
||||
<entry><code>normal</code></entry>
|
||||
<entry>✓</entry>
|
||||
@@ -226,7 +221,7 @@ We use <literallayout> for syntax productions, and each line is put in a <code>
|
||||
<entry></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>‑gtk‑dpi</entry>
|
||||
<entry><phrase role="nowrap">-gtk-dpi</phrase></entry>
|
||||
<entry><code>〈number〉</code></entry>
|
||||
<entry>screen resolution</entry>
|
||||
<entry>✓</entry>
|
||||
@@ -242,7 +237,7 @@ We use <literallayout> for syntax productions, and each line is put in a <code>
|
||||
</thead>
|
||||
<tbody>
|
||||
<row>
|
||||
<entry>font</entry>
|
||||
<entry><phrase role="nowrap">font</phrase></entry>
|
||||
<entry><code>[ 〈font-style〉 || 〈font-variant〉 || 〈font-weight〉 || 〈font-stretch〉 ]? 〈font-size〉 〈font-family〉</code></entry>
|
||||
<entry>see individual properties</entry>
|
||||
<entry><ulink url="https://www.w3.org/TR/2011/REC-CSS2-20110607/fonts.html#font-shorthand">CSS2</ulink>,
|
||||
@@ -273,7 +268,7 @@ We use <literallayout> for syntax productions, and each line is put in a <code>
|
||||
</thead>
|
||||
<tbody>
|
||||
<row>
|
||||
<entry>caret-color</entry>
|
||||
<entry><phrase role="nowrap">caret-color</phrase></entry>
|
||||
<entry><code>〈color〉</code></entry>
|
||||
<entry><code>currentColor</code></entry>
|
||||
<entry>✓</entry>
|
||||
@@ -282,7 +277,7 @@ We use <literallayout> for syntax productions, and each line is put in a <code>
|
||||
<entry>CSS allows an auto value</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>-gtk-secondary-caret-color</entry>
|
||||
<entry><phrase role="nowrap">-gtk-secondary-caret-color</phrase></entry>
|
||||
<entry><code>〈color〉</code></entry>
|
||||
<entry><code>currentColor</code></entry>
|
||||
<entry>✓</entry>
|
||||
@@ -309,7 +304,7 @@ We use <literallayout> for syntax productions, and each line is put in a <code>
|
||||
</thead>
|
||||
<tbody>
|
||||
<row>
|
||||
<entry>letter‑spacing</entry>
|
||||
<entry><phrase role="nowrap">letter-spacing</phrase></entry>
|
||||
<entry><code>〈length〉</code></entry>
|
||||
<entry><code>0px</code></entry>
|
||||
<entry>✓</entry>
|
||||
@@ -318,7 +313,7 @@ We use <literallayout> for syntax productions, and each line is put in a <code>
|
||||
<entry></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>text‑decoration‑line</entry>
|
||||
<entry><phrase role="nowrap">text-decoration-line</phrase></entry>
|
||||
<entry><code>none | underline | line-through</code></entry>
|
||||
<entry><code>none</code></entry>
|
||||
<entry></entry>
|
||||
@@ -328,7 +323,7 @@ We use <literallayout> for syntax productions, and each line is put in a <code>
|
||||
<entry>CSS allows overline</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>text‑decoration‑color</entry>
|
||||
<entry><phrase role="nowrap">text-decoration-color</phrase></entry>
|
||||
<entry><code>〈color〉</code></entry>
|
||||
<entry><code>currentColor</code></entry>
|
||||
<entry></entry>
|
||||
@@ -337,7 +332,7 @@ We use <literallayout> for syntax productions, and each line is put in a <code>
|
||||
<entry></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>text‑decoration‑style</entry>
|
||||
<entry><phrase role="nowrap">text-decoration-style</phrase></entry>
|
||||
<entry><code>solid | double | wavy</code></entry>
|
||||
<entry><code>solid</code></entry>
|
||||
<entry></entry>
|
||||
@@ -346,7 +341,7 @@ We use <literallayout> for syntax productions, and each line is put in a <code>
|
||||
<entry>CSS allows dashed and dotted</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>text‑shadow</entry>
|
||||
<entry><phrase role="nowrap">text-shadow</phrase></entry>
|
||||
<entry><code>none | 〈shadow〉</code></entry>
|
||||
<entry><code>none</code></entry>
|
||||
<entry>✓</entry>
|
||||
@@ -362,7 +357,7 @@ We use <literallayout> for syntax productions, and each line is put in a <code>
|
||||
</thead>
|
||||
<tbody>
|
||||
<row>
|
||||
<entry>text‑decoration</entry>
|
||||
<entry><phrase role="nowrap">text-decoration</phrase></entry>
|
||||
<entry><code>〈text-decoration-line〉 || 〈text-decoration-style〉 || 〈text-decoration-color〉</code></entry>
|
||||
<entry>see individual properties</entry>
|
||||
<entry><ulink url="https://www.w3.org/TR/css-text-decor-3/#text-decoration-property">CSS3</ulink></entry>
|
||||
@@ -390,7 +385,7 @@ We use <literallayout> for syntax productions, and each line is put in a <code>
|
||||
</thead>
|
||||
<tbody>
|
||||
<row>
|
||||
<entry>‑gtk‑icon‑source</entry>
|
||||
<entry><phrase role="nowrap">-gtk-icon-source</phrase></entry>
|
||||
<entry><code>builtin | 〈image〉 | none</code></entry>
|
||||
<entry><code>builtin</code></entry>
|
||||
<entry></entry>
|
||||
@@ -399,7 +394,7 @@ We use <literallayout> for syntax productions, and each line is put in a <code>
|
||||
<entry></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>‑gtk‑icon‑transform</entry>
|
||||
<entry><phrase role="nowrap">-gtk-icon-transform</phrase></entry>
|
||||
<entry><code>none | 〈transform〉+</code></entry>
|
||||
<entry><code>none</code></entry>
|
||||
<entry></entry>
|
||||
@@ -408,7 +403,7 @@ We use <literallayout> for syntax productions, and each line is put in a <code>
|
||||
<entry></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>‑gtk‑icon‑style</entry>
|
||||
<entry><phrase role="nowrap">-gtk-icon-style</phrase></entry>
|
||||
<entry><code>requested | regular | symbolic</code></entry>
|
||||
<entry><code>requested</code></entry>
|
||||
<entry>✓</entry>
|
||||
@@ -417,7 +412,7 @@ We use <literallayout> for syntax productions, and each line is put in a <code>
|
||||
<entry>Determines the preferred style for application-loaded icons</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>‑gtk‑icon‑theme</entry>
|
||||
<entry><phrase role="nowrap">-gtk-icon-theme</phrase></entry>
|
||||
<entry><code>〈name〉</code></entry>
|
||||
<entry>current icon theme</entry>
|
||||
<entry>✓</entry>
|
||||
@@ -426,7 +421,7 @@ We use <literallayout> for syntax productions, and each line is put in a <code>
|
||||
<entry>The icon theme to use with -gtk-icontheme(). Since 3.20</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>‑gtk‑icon‑palette</entry>
|
||||
<entry><phrase role="nowrap">-gtk-icon-palette</phrase></entry>
|
||||
<entry><code>〈color palette〉</code></entry>
|
||||
<entry><code>default</code></entry>
|
||||
<entry>✓</entry>
|
||||
@@ -435,7 +430,7 @@ We use <literallayout> for syntax productions, and each line is put in a <code>
|
||||
<entry>Used to recolor symbolic icons (both application-loaded and from -gtk-icontheme()). Since 3.20</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>‑gtk‑icon‑shadow</entry>
|
||||
<entry><phrase role="nowrap">-gtk-icon-shadow</phrase></entry>
|
||||
<entry><code>none | 〈shadow〉</code></entry>
|
||||
<entry><code>none</code></entry>
|
||||
<entry>✓</entry>
|
||||
@@ -444,7 +439,7 @@ We use <literallayout> for syntax productions, and each line is put in a <code>
|
||||
<entry></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>‑gtk‑icon‑effect</entry>
|
||||
<entry><phrase role="nowrap">-gtk-icon-effect</phrase></entry>
|
||||
<entry><code>none | highlight | dim</code></entry>
|
||||
<entry><code>none</code></entry>
|
||||
<entry>✓</entry>
|
||||
@@ -457,7 +452,7 @@ We use <literallayout> for syntax productions, and each line is put in a <code>
|
||||
</table>
|
||||
|
||||
<literallayout><code>〈transform〉 = matrix( 〈number〉 [ , 〈number〉 ]{5} ) | translate( 〈length〉, 〈length〉 ) | translateX( 〈length〉 ) | translateY( 〈length〉 ) |</code>
|
||||
<code> scale( 〈number〉[ , 〈number〉 ]? ) | scaleX( 〈number〉 ) | scaleY( 〈number〉 ) | rotate( 〈angle〉 ) | skew( 〈angle〉 [ , 〈angle〉 ]? ) |</code>
|
||||
<code> scale( 〈number〉 [ , 〈number〉 ]? ) | scaleX( 〈number〉 ) | scaleY( 〈number〉 ) | rotate( 〈angle〉 ) | skew( 〈angle〉 [ , 〈angle〉 ]? ) |</code>
|
||||
<code> skewX( 〈angle〉 ) | skewY( 〈angle〉 )</code>
|
||||
<code>〈color palette〉 = default | 〈name〉 〈color〉 [ , 〈name〉 〈color〉 ]*</code>
|
||||
</literallayout>
|
||||
@@ -495,7 +490,7 @@ We use <literallayout> for syntax productions, and each line is put in a <code>
|
||||
</thead>
|
||||
<tbody>
|
||||
<row>
|
||||
<entry>min‑width</entry>
|
||||
<entry><phrase role="nowrap">min-width</phrase></entry>
|
||||
<entry><code>〈length〉</code></entry>
|
||||
<entry><code>0px</code></entry>
|
||||
<entry></entry>
|
||||
@@ -505,7 +500,7 @@ We use <literallayout> for syntax productions, and each line is put in a <code>
|
||||
<entry>CSS allows percentages</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>min‑height</entry>
|
||||
<entry><phrase role="nowrap">min-height</phrase></entry>
|
||||
<entry><code>〈length〉</code></entry>
|
||||
<entry><code>0px</code></entry>
|
||||
<entry></entry>
|
||||
@@ -515,7 +510,7 @@ We use <literallayout> for syntax productions, and each line is put in a <code>
|
||||
<entry>CSS allows percentages</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>margin‑top</entry>
|
||||
<entry><phrase role="nowrap">margin-top</phrase></entry>
|
||||
<entry><code>〈length〉</code></entry>
|
||||
<entry><code>0px</code></entry>
|
||||
<entry></entry>
|
||||
@@ -525,7 +520,7 @@ We use <literallayout> for syntax productions, and each line is put in a <code>
|
||||
<entry>CSS allows percentages or auto</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>margin‑right</entry>
|
||||
<entry><phrase role="nowrap">margin-right</phrase></entry>
|
||||
<entry><code>〈length〉</code></entry>
|
||||
<entry><code>0px</code></entry>
|
||||
<entry></entry>
|
||||
@@ -535,7 +530,7 @@ We use <literallayout> for syntax productions, and each line is put in a <code>
|
||||
<entry>CSS allows percentages or auto</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>margin‑bottom</entry>
|
||||
<entry><phrase role="nowrap">margin-bottom</phrase></entry>
|
||||
<entry><code>〈length〉</code></entry>
|
||||
<entry><code>0px</code></entry>
|
||||
<entry></entry>
|
||||
@@ -545,7 +540,7 @@ We use <literallayout> for syntax productions, and each line is put in a <code>
|
||||
<entry>CSS allows percentages or auto</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>margin‑left</entry>
|
||||
<entry><phrase role="nowrap">margin-left</phrase></entry>
|
||||
<entry><code>〈length〉</code></entry>
|
||||
<entry><code>0px</code></entry>
|
||||
<entry></entry>
|
||||
@@ -555,7 +550,7 @@ We use <literallayout> for syntax productions, and each line is put in a <code>
|
||||
<entry>CSS allows percentages or auto</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>padding‑top</entry>
|
||||
<entry><phrase role="nowrap">padding-top</phrase></entry>
|
||||
<entry><code>〈length〉</code></entry>
|
||||
<entry><code>0px</code></entry>
|
||||
<entry></entry>
|
||||
@@ -565,7 +560,7 @@ We use <literallayout> for syntax productions, and each line is put in a <code>
|
||||
<entry>CSS allows percentages</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>padding‑right</entry>
|
||||
<entry><phrase role="nowrap">padding-right</phrase></entry>
|
||||
<entry><code>〈length〉</code></entry>
|
||||
<entry><code>0px</code></entry>
|
||||
<entry></entry>
|
||||
@@ -575,7 +570,7 @@ We use <literallayout> for syntax productions, and each line is put in a <code>
|
||||
<entry>CSS allows percentages</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>padding‑bottom</entry>
|
||||
<entry><phrase role="nowrap">padding-bottom</phrase></entry>
|
||||
<entry><code>〈length〉</code></entry>
|
||||
<entry><code>0px</code></entry>
|
||||
<entry></entry>
|
||||
@@ -585,7 +580,7 @@ We use <literallayout> for syntax productions, and each line is put in a <code>
|
||||
<entry>CSS allows percentages</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>padding‑left</entry>
|
||||
<entry><phrase role="nowrap">padding-left</phrase></entry>
|
||||
<entry><code>〈length〉</code></entry>
|
||||
<entry><code>0px</code></entry>
|
||||
<entry></entry>
|
||||
@@ -602,7 +597,7 @@ We use <literallayout> for syntax productions, and each line is put in a <code>
|
||||
</thead>
|
||||
<tbody>
|
||||
<row>
|
||||
<entry>margin</entry>
|
||||
<entry><phrase role="nowrap">margin</phrase></entry>
|
||||
<entry><code>〈length〉{1,4}</code></entry>
|
||||
<entry>see individual properties</entry>
|
||||
<entry><ulink url="https://www.w3.org/TR/2011/REC-CSS2-20110607/box.html#propdef-margin">CSS2</ulink>,
|
||||
@@ -610,7 +605,7 @@ We use <literallayout> for syntax productions, and each line is put in a <code>
|
||||
<entry>a 'four sides' shorthand</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>padding</entry>
|
||||
<entry><phrase role="nowrap">padding</phrase></entry>
|
||||
<entry><code>〈length〉{1,4}</code></entry>
|
||||
<entry>see individual properties</entry>
|
||||
<entry><ulink url="https://www.w3.org/TR/2011/REC-CSS2-20110607/box.html#propdef-padding">CSS2</ulink>,
|
||||
@@ -631,7 +626,7 @@ We use <literallayout> for syntax productions, and each line is put in a <code>
|
||||
</thead>
|
||||
<tbody>
|
||||
<row>
|
||||
<entry>border‑top‑width</entry>
|
||||
<entry><phrase role="nowrap">border-top-width</phrase></entry>
|
||||
<entry><code>〈length〉</code></entry>
|
||||
<entry><code>0px</code></entry>
|
||||
<entry></entry>
|
||||
@@ -641,7 +636,7 @@ We use <literallayout> for syntax productions, and each line is put in a <code>
|
||||
<entry>CSS allows other values</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>border‑right‑width</entry>
|
||||
<entry><phrase role="nowrap">border-right-width</phrase></entry>
|
||||
<entry><code>〈length〉</code></entry>
|
||||
<entry><code>0px</code></entry>
|
||||
<entry></entry>
|
||||
@@ -651,7 +646,7 @@ We use <literallayout> for syntax productions, and each line is put in a <code>
|
||||
<entry>CSS allows other values</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>border‑bottom‑width</entry>
|
||||
<entry><phrase role="nowrap">border-bottom-width</phrase></entry>
|
||||
<entry><code>〈length〉</code></entry>
|
||||
<entry><code>0px</code></entry>
|
||||
<entry></entry>
|
||||
@@ -661,17 +656,17 @@ We use <literallayout> for syntax productions, and each line is put in a <code>
|
||||
<entry>CSS allows other values</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>border‑right‑width</entry>
|
||||
<entry><phrase role="nowrap">border-left-width</phrase></entry>
|
||||
<entry><code>〈length〉</code></entry>
|
||||
<entry><code>0px</code></entry>
|
||||
<entry></entry>
|
||||
<entry>✓</entry>
|
||||
<entry><ulink url="https://www.w3.org/TR/2011/REC-CSS2-20110607/box.html#propdef-border-right-width">CSS2</ulink>,
|
||||
<entry><ulink url="https://www.w3.org/TR/2011/REC-CSS2-20110607/box.html#propdef-border-left-width">CSS2</ulink>,
|
||||
<ulink url="https://www.w3.org/TR/css3-background/#the-border-width">CSS3</ulink></entry>
|
||||
<entry>CSS allows other values</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>border‑top‑style</entry>
|
||||
<entry><phrase role="nowrap">border-top-style</phrase></entry>
|
||||
<entry><code>〈border style〉</code></entry>
|
||||
<entry><code>none</code></entry>
|
||||
<entry></entry>
|
||||
@@ -681,7 +676,7 @@ We use <literallayout> for syntax productions, and each line is put in a <code>
|
||||
<entry></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>border‑right‑style</entry>
|
||||
<entry><phrase role="nowrap">border-right-style</phrase></entry>
|
||||
<entry><code>〈border style〉</code></entry>
|
||||
<entry><code>none</code></entry>
|
||||
<entry></entry>
|
||||
@@ -691,7 +686,7 @@ We use <literallayout> for syntax productions, and each line is put in a <code>
|
||||
<entry></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>border‑bottom‑style</entry>
|
||||
<entry><phrase role="nowrap">border-bottom-style</phrase></entry>
|
||||
<entry><code>〈border style〉</code></entry>
|
||||
<entry><code>none</code></entry>
|
||||
<entry></entry>
|
||||
@@ -701,7 +696,7 @@ We use <literallayout> for syntax productions, and each line is put in a <code>
|
||||
<entry></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>border‑left‑style</entry>
|
||||
<entry><phrase role="nowrap">border-left-style</phrase></entry>
|
||||
<entry><code>〈border style〉</code></entry>
|
||||
<entry><code>none</code></entry>
|
||||
<entry></entry>
|
||||
@@ -711,7 +706,7 @@ We use <literallayout> for syntax productions, and each line is put in a <code>
|
||||
<entry></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>border‑top‑right‑radius</entry>
|
||||
<entry><phrase role="nowrap">border-top-right-radius</phrase></entry>
|
||||
<entry><code>〈corner radius〉</code></entry>
|
||||
<entry><code>0</code></entry>
|
||||
<entry></entry>
|
||||
@@ -721,7 +716,7 @@ We use <literallayout> for syntax productions, and each line is put in a <code>
|
||||
<entry></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>border‑bottom‑right‑radius</entry>
|
||||
<entry><phrase role="nowrap">border-bottom-right-radius</phrase></entry>
|
||||
<entry><code>〈corner radius〉</code></entry>
|
||||
<entry><code>0</code></entry>
|
||||
<entry></entry>
|
||||
@@ -731,7 +726,7 @@ We use <literallayout> for syntax productions, and each line is put in a <code>
|
||||
<entry></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>border‑bottom‑left‑radius</entry>
|
||||
<entry><phrase role="nowrap">border-bottom-left-radius</phrase></entry>
|
||||
<entry><code>〈corner radius〉</code></entry>
|
||||
<entry><code>0</code></entry>
|
||||
<entry></entry>
|
||||
@@ -741,7 +736,7 @@ We use <literallayout> for syntax productions, and each line is put in a <code>
|
||||
<entry></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>border‑top‑left‑radius</entry>
|
||||
<entry><phrase role="nowrap">border-top-left-radius</phrase></entry>
|
||||
<entry><code>〈corner radius〉</code></entry>
|
||||
<entry><code>0</code></entry>
|
||||
<entry></entry>
|
||||
@@ -751,7 +746,7 @@ We use <literallayout> for syntax productions, and each line is put in a <code>
|
||||
<entry></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>border‑top‑color</entry>
|
||||
<entry><phrase role="nowrap">border-top-color</phrase></entry>
|
||||
<entry><code>〈color〉</code></entry>
|
||||
<entry><code>currentColor</code></entry>
|
||||
<entry></entry>
|
||||
@@ -761,7 +756,7 @@ We use <literallayout> for syntax productions, and each line is put in a <code>
|
||||
<entry></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>border‑right‑color</entry>
|
||||
<entry><phrase role="nowrap">border-right-color</phrase></entry>
|
||||
<entry><code>〈color〉</code></entry>
|
||||
<entry><code>currentColor</code></entry>
|
||||
<entry></entry>
|
||||
@@ -771,7 +766,7 @@ We use <literallayout> for syntax productions, and each line is put in a <code>
|
||||
<entry></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>border‑bottom‑color</entry>
|
||||
<entry><phrase role="nowrap">border-bottom-color</phrase></entry>
|
||||
<entry><code>〈color〉</code></entry>
|
||||
<entry><code>currentColor</code></entry>
|
||||
<entry></entry>
|
||||
@@ -781,7 +776,7 @@ We use <literallayout> for syntax productions, and each line is put in a <code>
|
||||
<entry></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>border‑left‑color</entry>
|
||||
<entry><phrase role="nowrap">border-left-color</phrase></entry>
|
||||
<entry><code>〈color〉</code></entry>
|
||||
<entry><code>currentColor</code></entry>
|
||||
<entry></entry>
|
||||
@@ -791,7 +786,7 @@ We use <literallayout> for syntax productions, and each line is put in a <code>
|
||||
<entry></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>border‑image‑source</entry>
|
||||
<entry><phrase role="nowrap">border-image-source</phrase></entry>
|
||||
<entry><code>〈image〉 | none</code></entry>
|
||||
<entry><code>none</code></entry>
|
||||
<entry></entry>
|
||||
@@ -800,7 +795,7 @@ We use <literallayout> for syntax productions, and each line is put in a <code>
|
||||
<entry></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>border‑image‑repeat</entry>
|
||||
<entry><phrase role="nowrap">border-image-repeat</phrase></entry>
|
||||
<entry><code>〈border repeat〉{1,2}</code></entry>
|
||||
<entry><code>stretch</code></entry>
|
||||
<entry></entry>
|
||||
@@ -809,7 +804,7 @@ We use <literallayout> for syntax productions, and each line is put in a <code>
|
||||
<entry></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>border‑image‑slice</entry>
|
||||
<entry><phrase role="nowrap">border-image-slice</phrase></entry>
|
||||
<entry><code>[ 〈number〉 | 〈percentage〉 ]{1,4} && fill?</code></entry>
|
||||
<entry><code>100%</code></entry>
|
||||
<entry></entry>
|
||||
@@ -818,8 +813,8 @@ We use <literallayout> for syntax productions, and each line is put in a <code>
|
||||
<entry>a 'four sides' shorthand</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>border‑image‑width</entry>
|
||||
<entry><code>[ 〈length〉 | 〈number〉 | 〈percentage〉 | auto ]{1,4}</code></entry>
|
||||
<entry><phrase role="nowrap">border-image-width</phrase></entry>
|
||||
<entry><code>[ 〈length〉 | 〈number〉 | 〈percentage〉 | auto ]{1,4}</code></entry>
|
||||
<entry><code>1</code></entry>
|
||||
<entry></entry>
|
||||
<entry></entry>
|
||||
@@ -835,7 +830,7 @@ We use <literallayout> for syntax productions, and each line is put in a <code>
|
||||
</thead>
|
||||
<tbody>
|
||||
<row>
|
||||
<entry>border‑width</entry>
|
||||
<entry><phrase role="nowrap">border-width</phrase></entry>
|
||||
<entry><code>〈length〉{1,4}</code></entry>
|
||||
<entry>see individual properties</entry>
|
||||
<entry><ulink url="https://www.w3.org/TR/2011/REC-CSS2-20110607/box.html#propdef-border-width">CSS2</ulink>,
|
||||
@@ -843,7 +838,7 @@ We use <literallayout> for syntax productions, and each line is put in a <code>
|
||||
<entry>a 'four sides' shorthand</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>border‑style</entry>
|
||||
<entry><phrase role="nowrap">border-style</phrase></entry>
|
||||
<entry><code>〈border style〉{1,4}</code></entry>
|
||||
<entry>see individual properties</entry>
|
||||
<entry><ulink url="https://www.w3.org/TR/2011/REC-CSS2-20110607/box.html#propdef-border-style">CSS2</ulink>,
|
||||
@@ -851,14 +846,14 @@ We use <literallayout> for syntax productions, and each line is put in a <code>
|
||||
<entry>a 'four sides' shorthand</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>border‑color</entry>
|
||||
<entry><phrase role="nowrap">border-color</phrase></entry>
|
||||
<entry><code>〈color〉{1,4}</code></entry>
|
||||
<entry>see individual properties</entry>
|
||||
<entry><ulink url="https://www.w3.org/TR/css3-background/#border-color">CSS3</ulink></entry>
|
||||
<entry>a 'four sides' shorthand</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>border‑top</entry>
|
||||
<entry><phrase role="nowrap">border-top</phrase></entry>
|
||||
<entry><code>〈length〉 || 〈border style〉 || 〈color〉</code></entry>
|
||||
<entry>see individual properties</entry>
|
||||
<entry><ulink url="https://www.w3.org/TR/2011/REC-CSS2-20110607/box.html#propdef-border-top">CSS2</ulink>,
|
||||
@@ -866,23 +861,7 @@ We use <literallayout> for syntax productions, and each line is put in a <code>
|
||||
<entry></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>border‑left</entry>
|
||||
<entry><code>〈length〉 || 〈border style〉 || 〈color〉</code></entry>
|
||||
<entry>see individual properties</entry>
|
||||
<entry><ulink url="https://www.w3.org/TR/2011/REC-CSS2-20110607/box.html#propdef-border-left">CSS2</ulink>,
|
||||
<ulink url="https://www.w3.org/TR/css3-background/#border-left">CSS3</ulink></entry>
|
||||
<entry></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>border‑bottom</entry>
|
||||
<entry><code>〈length〉 || 〈border style〉 || 〈color〉</code></entry>
|
||||
<entry>see individual properties</entry>
|
||||
<entry><ulink url="https://www.w3.org/TR/2011/REC-CSS2-20110607/box.html#propdef-border-bottom">CSS2</ulink>,
|
||||
<ulink url="https://www.w3.org/TR/css3-background/#border-bottom">CSS3</ulink></entry>
|
||||
<entry></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>border‑right</entry>
|
||||
<entry><phrase role="nowrap">border-right</phrase></entry>
|
||||
<entry><code>〈length〉 || 〈border style〉 || 〈color〉</code></entry>
|
||||
<entry>see individual properties</entry>
|
||||
<entry><ulink url="https://www.w3.org/TR/2011/REC-CSS2-20110607/box.html#propdef-border-right">CSS2</ulink>,
|
||||
@@ -890,7 +869,23 @@ We use <literallayout> for syntax productions, and each line is put in a <code>
|
||||
<entry></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>border</entry>
|
||||
<entry><phrase role="nowrap">border-bottom</phrase></entry>
|
||||
<entry><code>〈length〉 || 〈border style〉 || 〈color〉</code></entry>
|
||||
<entry>see individual properties</entry>
|
||||
<entry><ulink url="https://www.w3.org/TR/2011/REC-CSS2-20110607/box.html#propdef-border-bottom">CSS2</ulink>,
|
||||
<ulink url="https://www.w3.org/TR/css3-background/#border-bottom">CSS3</ulink></entry>
|
||||
<entry></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><phrase role="nowrap">border-left</phrase></entry>
|
||||
<entry><code>〈length〉 || 〈border style〉 || 〈color〉</code></entry>
|
||||
<entry>see individual properties</entry>
|
||||
<entry><ulink url="https://www.w3.org/TR/2011/REC-CSS2-20110607/box.html#propdef-border-left">CSS2</ulink>,
|
||||
<ulink url="https://www.w3.org/TR/css3-background/#border-left">CSS3</ulink></entry>
|
||||
<entry></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><phrase role="nowrap">border</phrase></entry>
|
||||
<entry><code>〈length〉 || 〈border style〉 || 〈color〉</code></entry>
|
||||
<entry>see individual properties</entry>
|
||||
<entry><ulink url="https://www.w3.org/TR/2011/REC-CSS2-20110607/box.html#propdef-border-right">CSS2</ulink>,
|
||||
@@ -898,14 +893,14 @@ We use <literallayout> for syntax productions, and each line is put in a <code>
|
||||
<entry></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>border‑radius</entry>
|
||||
<entry><code>[ 〈length〉 | 〈percentage〉 ]{1,4} [ / [ 〈length〉 | 〈percentage> ]{1,4} ]?</code></entry>
|
||||
<entry><phrase role="nowrap">border-radius</phrase></entry>
|
||||
<entry><code>[ 〈length〉 | 〈percentage〉 ]{1,4} [ / [ 〈length〉 | 〈percentage〉 ]{1,4} ]?</code></entry>
|
||||
<entry>see individual properties</entry>
|
||||
<entry><ulink url="https://www.w3.org/TR/css3-background/#border-radius">CSS3</ulink></entry>
|
||||
<entry></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>border‑image</entry>
|
||||
<entry><phrase role="nowrap">border-image</phrase></entry>
|
||||
<entry><code>〈border-image-source〉 || 〈border-image-slice〉 [ / 〈border-image-width〉 | / 〈border-image-width〉? / 〈border-image-outset〉 ]? || 〈border-image-repeat〉</code></entry>
|
||||
<entry>see individual properties</entry>
|
||||
<entry><ulink url="https://www.w3.org/TR/css3-background/#border-image">CSS3</ulink></entry>
|
||||
@@ -929,7 +924,7 @@ We use <literallayout> for syntax productions, and each line is put in a <code>
|
||||
</thead>
|
||||
<tbody>
|
||||
<row>
|
||||
<entry>outline‑style</entry>
|
||||
<entry><phrase role="nowrap">outline-style</phrase></entry>
|
||||
<entry><code>none | solid | inset | outset | hidden | dotted | dashed | double | groove | ridge</code></entry>
|
||||
<entry><code>none</code></entry>
|
||||
<entry></entry>
|
||||
@@ -939,7 +934,7 @@ We use <literallayout> for syntax productions, and each line is put in a <code>
|
||||
<entry></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>outline‑width</entry>
|
||||
<entry><phrase role="nowrap">outline-width</phrase></entry>
|
||||
<entry><code>〈length〉</code></entry>
|
||||
<entry><code>0px</code></entry>
|
||||
<entry></entry>
|
||||
@@ -949,7 +944,7 @@ We use <literallayout> for syntax productions, and each line is put in a <code>
|
||||
<entry></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>outline‑color</entry>
|
||||
<entry><phrase role="nowrap">outline-color</phrase></entry>
|
||||
<entry><code>〈color〉</code></entry>
|
||||
<entry><code>currentColor</code></entry>
|
||||
<entry></entry>
|
||||
@@ -959,7 +954,7 @@ We use <literallayout> for syntax productions, and each line is put in a <code>
|
||||
<entry></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>outline‑offset</entry>
|
||||
<entry><phrase role="nowrap">outline-offset</phrase></entry>
|
||||
<entry><code>〈length〉</code></entry>
|
||||
<entry><code>0px</code></entry>
|
||||
<entry></entry>
|
||||
@@ -968,7 +963,7 @@ We use <literallayout> for syntax productions, and each line is put in a <code>
|
||||
<entry></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>‑gtk‑outline‑top‑left‑radius</entry>
|
||||
<entry><phrase role="nowrap">-gtk-outline-top-left-radius</phrase></entry>
|
||||
<entry><code>〈corner radius〉</code></entry>
|
||||
<entry><code>0</code></entry>
|
||||
<entry></entry>
|
||||
@@ -977,7 +972,7 @@ We use <literallayout> for syntax productions, and each line is put in a <code>
|
||||
<entry></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>‑gtk‑outline‑top‑right‑radius</entry>
|
||||
<entry><phrase role="nowrap">-gtk-outline-top-right-radius</phrase></entry>
|
||||
<entry><code>〈corner radius〉</code></entry>
|
||||
<entry><code>0</code></entry>
|
||||
<entry></entry>
|
||||
@@ -986,7 +981,7 @@ We use <literallayout> for syntax productions, and each line is put in a <code>
|
||||
<entry></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>‑gtk‑outline‑bottom‑right‑radius</entry>
|
||||
<entry><phrase role="nowrap">-gtk-outline-bottom-right-radius</phrase></entry>
|
||||
<entry><code>〈corner radius〉</code></entry>
|
||||
<entry><code>0</code></entry>
|
||||
<entry></entry>
|
||||
@@ -995,7 +990,7 @@ We use <literallayout> for syntax productions, and each line is put in a <code>
|
||||
<entry></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>‑gtk‑outline‑bottom‑left‑radius</entry>
|
||||
<entry><phrase role="nowrap">-gtk-outline-bottom-left-radius</phrase></entry>
|
||||
<entry><code>〈corner radius〉</code></entry>
|
||||
<entry><code>0</code></entry>
|
||||
<entry></entry>
|
||||
@@ -1011,7 +1006,7 @@ We use <literallayout> for syntax productions, and each line is put in a <code>
|
||||
</thead>
|
||||
<tbody>
|
||||
<row>
|
||||
<entry>outline</entry>
|
||||
<entry><phrase role="nowrap">outline</phrase></entry>
|
||||
<entry><code>〈outline-color〉 || 〈outline-style〉 || 〈outline-width〉</code></entry>
|
||||
<entry>see individual properties</entry>
|
||||
<entry><ulink url="https://www.w3.org/TR/2011/REC-CSS2-20110607/ui.html#propdef-outline">CSS2</ulink>,
|
||||
@@ -1019,8 +1014,8 @@ We use <literallayout> for syntax productions, and each line is put in a <code>
|
||||
<entry></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>‑gtk‑outline‑radius</entry>
|
||||
<entry><code>[ 〈length〉|〈percentage〉 ]{1,4} [ / [〈length〉 | 〈percentage> ]{1,4} ]?</code></entry>
|
||||
<entry><phrase role="nowrap">-gtk-outline-radius</phrase></entry>
|
||||
<entry><code>[ 〈length〉 | 〈percentage〉 ]{1,4} [ / [ 〈length〉 | 〈percentage〉 ]{1,4} ]?</code></entry>
|
||||
<entry>see individual properties</entry>
|
||||
<entry></entry>
|
||||
<entry></entry>
|
||||
@@ -1043,7 +1038,7 @@ We use <literallayout> for syntax productions, and each line is put in a <code>
|
||||
</thead>
|
||||
<tbody>
|
||||
<row>
|
||||
<entry>background‑color</entry>
|
||||
<entry><phrase role="nowrap">background-color</phrase></entry>
|
||||
<entry><code>〈color〉</code></entry>
|
||||
<entry><code>rgba(0,0,0,0)</code></entry>
|
||||
<entry></entry>
|
||||
@@ -1053,7 +1048,7 @@ We use <literallayout> for syntax productions, and each line is put in a <code>
|
||||
<entry></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>background‑clip</entry>
|
||||
<entry><phrase role="nowrap">background-clip</phrase></entry>
|
||||
<entry><code>〈box〉 [ , 〈box〉 ]*</code></entry>
|
||||
<entry><code>border-box</code></entry>
|
||||
<entry></entry>
|
||||
@@ -1062,7 +1057,7 @@ We use <literallayout> for syntax productions, and each line is put in a <code>
|
||||
<entry></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>background‑origin</entry>
|
||||
<entry><phrase role="nowrap">background-origin</phrase></entry>
|
||||
<entry><code>〈box〉 [ , 〈box〉 ]*</code></entry>
|
||||
<entry><code>padding-box</code></entry>
|
||||
<entry></entry>
|
||||
@@ -1071,7 +1066,7 @@ We use <literallayout> for syntax productions, and each line is put in a <code>
|
||||
<entry></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>background‑size</entry>
|
||||
<entry><phrase role="nowrap">background-size</phrase></entry>
|
||||
<entry><code>〈bg-size〉 [ , 〈bg-size〉 ]*</code></entry>
|
||||
<entry><code>auto</code></entry>
|
||||
<entry></entry>
|
||||
@@ -1080,8 +1075,8 @@ We use <literallayout> for syntax productions, and each line is put in a <code>
|
||||
<entry></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>background‑position</entry>
|
||||
<entry><code>〈position〉 [ , 〈position〉 ]*</code></entry>
|
||||
<entry><phrase role="nowrap">background-position</phrase></entry>
|
||||
<entry><code>〈position〉 [ , 〈position〉 ]*</code></entry>
|
||||
<entry><code>0</code></entry>
|
||||
<entry></entry>
|
||||
<entry>✓</entry>
|
||||
@@ -1090,8 +1085,8 @@ We use <literallayout> for syntax productions, and each line is put in a <code>
|
||||
<entry></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>background‑repeat</entry>
|
||||
<entry><code>〈bg-repeat 〉[ , 〈bg-repeat〉 ]*</code></entry>
|
||||
<entry><phrase role="nowrap">background-repeat</phrase></entry>
|
||||
<entry><code>〈bg-repeat〉 [ , 〈bg-repeat〉 ]*</code></entry>
|
||||
<entry><code>repeat</code></entry>
|
||||
<entry></entry>
|
||||
<entry></entry>
|
||||
@@ -1100,8 +1095,8 @@ We use <literallayout> for syntax productions, and each line is put in a <code>
|
||||
<entry></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>background‑image</entry>
|
||||
<entry><code>〈bg-image〉[ , 〈bg-image〉 ]*</code></entry>
|
||||
<entry><phrase role="nowrap">background-image</phrase></entry>
|
||||
<entry><code>〈bg-image〉 [ , 〈bg-image〉 ]*</code></entry>
|
||||
<entry><code>none</code></entry>
|
||||
<entry></entry>
|
||||
<entry>✓</entry>
|
||||
@@ -1110,8 +1105,8 @@ We use <literallayout> for syntax productions, and each line is put in a <code>
|
||||
<entry>not supported: urls without quotes, CSS radial gradients, colors in crossfades</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>background-blend-mode</entry>
|
||||
<entry><code>〈blend-mode〉 [ , 〈blend-mode〉 ]*</code></entry>
|
||||
<entry><phrase role="nowrap">background-blend-mode</phrase></entry>
|
||||
<entry><code>〈blend-mode〉 [ , 〈blend-mode〉 ]*</code></entry>
|
||||
<entry><code>normal</code></entry>
|
||||
<entry></entry>
|
||||
<entry></entry>
|
||||
@@ -1119,8 +1114,8 @@ We use <literallayout> for syntax productions, and each line is put in a <code>
|
||||
<entry>only affects multiple backgrounds</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>box‑shadow</entry>
|
||||
<entry><code>none | 〈box shadow〉 [ , 〈box shadow〉 ]*</code></entry>
|
||||
<entry><phrase role="nowrap">box-shadow</phrase></entry>
|
||||
<entry><code>none | 〈box shadow〉 [ , 〈box shadow〉 ]*</code></entry>
|
||||
<entry><code>none</code></entry>
|
||||
<entry></entry>
|
||||
<entry>✓</entry>
|
||||
@@ -1135,7 +1130,7 @@ We use <literallayout> for syntax productions, and each line is put in a <code>
|
||||
</thead>
|
||||
<tbody>
|
||||
<row>
|
||||
<entry><para>background</para></entry>
|
||||
<entry>background</entry>
|
||||
<entry><code>[ 〈bg-layer〉 , ]* 〈final-bg-layer〉</code></entry>
|
||||
<entry>see individual properties</entry>
|
||||
<entry><ulink url="https://www.w3.org/TR/2011/REC-CSS2-20110607/colors.html#propdef-background">CSS2</ulink>,
|
||||
@@ -1152,8 +1147,10 @@ We use <literallayout> for syntax productions, and each line is put in a <code>
|
||||
<code>〈bg-repeat〉 = repeat-x | repeat-y | [ no-repeat | repeat | round | space ]{1,2}</code>
|
||||
<code>〈bg-image〉 = 〈image〉 | none</code>
|
||||
<code>〈bg-layer〉 = 〈bg-image〉 || 〈position〉 [ / 〈bg-size〉 ]? || 〈bg-repeat〉 || 〈box〉 || 〈box〉</code>
|
||||
<code>〈final-bg-layer〉 = 〈bg-image〉 || 〈position〉 [ / 〈bg-size〉 ]? || 〈bg-repeat〉 || 〈box〉 || 〈box〉|| 〈color〉</code>
|
||||
<code>〈blend-mode〉 = color || color-burn || color-dodge || darken || difference || exclusion || hard-light || hue || lighten || luminosity || multiply || normal || overlay || saturate || screen || soft-light</code>
|
||||
<code>〈final-bg-layer〉 = 〈bg-image〉 || 〈position〉 [ / 〈bg-size〉 ]? || 〈bg-repeat〉 || 〈box〉 || 〈box〉 || 〈color〉</code>
|
||||
<code>〈blend-mode〉 = color || color-burn || color-dodge || darken || difference || exclusion ||</code>
|
||||
<code> hard-light || hue || lighten || luminosity || multiply || normal || overlay ||</code>
|
||||
<code> saturate || screen || soft-light</code>
|
||||
<code>〈box shadow〉 = inset? && 〈length〉{2,4}? && 〈color〉?</code>
|
||||
</literallayout>
|
||||
|
||||
@@ -1176,7 +1173,7 @@ We use <literallayout> for syntax productions, and each line is put in a <code>
|
||||
</thead>
|
||||
<tbody>
|
||||
<row>
|
||||
<entry>transition‑property</entry>
|
||||
<entry><phrase role="nowrap">transition-property</phrase></entry>
|
||||
<entry><code>none | all | 〈property name〉 [ , 〈property name〉 ]*</code></entry>
|
||||
<entry><code>all</code></entry>
|
||||
<entry></entry>
|
||||
@@ -1185,7 +1182,7 @@ We use <literallayout> for syntax productions, and each line is put in a <code>
|
||||
<entry></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>transition‑duration</entry>
|
||||
<entry><phrase role="nowrap">transition-duration</phrase></entry>
|
||||
<entry><code>〈time〉 [ , 〈time〉 ]*</code></entry>
|
||||
<entry><code>0s</code></entry>
|
||||
<entry></entry>
|
||||
@@ -1194,8 +1191,8 @@ We use <literallayout> for syntax productions, and each line is put in a <code>
|
||||
<entry></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>transition‑timing‑function</entry>
|
||||
<entry><code>〈single‑timing‑function〉[ , 〈single‑timing‑function〉 ]*</code></entry>
|
||||
<entry><phrase role="nowrap">transition-timing-function</phrase></entry>
|
||||
<entry><code>〈single-timing-function〉 [ , 〈single-timing-function〉 ]*</code></entry>
|
||||
<entry><code>ease</code></entry>
|
||||
<entry></entry>
|
||||
<entry></entry>
|
||||
@@ -1203,7 +1200,7 @@ We use <literallayout> for syntax productions, and each line is put in a <code>
|
||||
<entry></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>transition‑delay</entry>
|
||||
<entry><phrase role="nowrap">transition-delay</phrase></entry>
|
||||
<entry><code>〈time〉 [ , 〈time〉 ]*</code></entry>
|
||||
<entry><code>0s</code></entry>
|
||||
<entry></entry>
|
||||
@@ -1219,7 +1216,7 @@ We use <literallayout> for syntax productions, and each line is put in a <code>
|
||||
</thead>
|
||||
<tbody>
|
||||
<row>
|
||||
<entry>transition</entry>
|
||||
<entry><phrase role="nowrap">transition</phrase></entry>
|
||||
<entry><code>〈single-transition〉 [ , 〈single-transition〉 ]*</code></entry>
|
||||
<entry>see individual properties</entry>
|
||||
<entry><ulink url="https://www.w3.org/TR/css3-transitions/#transition">CSS3</ulink></entry>
|
||||
@@ -1230,8 +1227,8 @@ We use <literallayout> for syntax productions, and each line is put in a <code>
|
||||
</table>
|
||||
|
||||
<literallayout><code>〈single-timing-function〉 = ease | linear | ease-in | ease-out | ease-in-out |</code>
|
||||
<code> step-start | step-end | steps( 〈integer〉 [ , [ start | end ] ]? ) |</code>
|
||||
<code> cubic-bezier( 〈number〉, 〈number〉, 〈number〉, 〈number〉 )</code>
|
||||
<code> step-start | step-end | steps( 〈integer〉 [ , [ start | end ] ]? ) |</code>
|
||||
<code> cubic-bezier( 〈number〉, 〈number〉, 〈number〉, 〈number〉 )</code>
|
||||
<code>〈single-transition〉 = [ none | 〈property name〉 ] || 〈time〉 || 〈single-transition-timing-function〉 || 〈time〉</code>
|
||||
</literallayout>
|
||||
|
||||
@@ -1245,7 +1242,7 @@ We use <literallayout> for syntax productions, and each line is put in a <code>
|
||||
</thead>
|
||||
<tbody>
|
||||
<row>
|
||||
<entry>animation‑name</entry>
|
||||
<entry><phrase role="nowrap">animation-name</phrase></entry>
|
||||
<entry><code>〈single-animation-name〉 [ , 〈single-animation-name〉 ]*</code></entry>
|
||||
<entry><code>none</code></entry>
|
||||
<entry></entry>
|
||||
@@ -1254,7 +1251,7 @@ We use <literallayout> for syntax productions, and each line is put in a <code>
|
||||
<entry></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>animation‑duration</entry>
|
||||
<entry><phrase role="nowrap">animation-duration</phrase></entry>
|
||||
<entry><code>〈time〉 [ , 〈time〉 ]*</code></entry>
|
||||
<entry><code>0s</code></entry>
|
||||
<entry></entry>
|
||||
@@ -1263,8 +1260,8 @@ We use <literallayout> for syntax productions, and each line is put in a <code>
|
||||
<entry></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>animation‑timing‑function</entry>
|
||||
<entry><code>〈single‑timing‑function〉 [ , 〈single‑timing‑function〉 ]*</code></entry>
|
||||
<entry><phrase role="nowrap">animation-timing-function</phrase></entry>
|
||||
<entry><code>〈single-timing-function〉 [ , 〈single-timing-function〉 ]*</code></entry>
|
||||
<entry><code>ease</code></entry>
|
||||
<entry></entry>
|
||||
<entry></entry>
|
||||
@@ -1272,8 +1269,8 @@ We use <literallayout> for syntax productions, and each line is put in a <code>
|
||||
<entry></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>animation‑iteration-count</entry>
|
||||
<entry><code>〈single‑animation‑iteration‑count〉 [ , 〈single‑animation‑iteration‑count〉 ]*</code></entry>
|
||||
<entry><phrase role="nowrap">animation-iteration-count</phrase></entry>
|
||||
<entry><code>〈single-animation-iteration-count〉 [ , 〈single-animation-iteration-count〉 ]*</code></entry>
|
||||
<entry><code>1</code></entry>
|
||||
<entry></entry>
|
||||
<entry></entry>
|
||||
@@ -1281,8 +1278,8 @@ We use <literallayout> for syntax productions, and each line is put in a <code>
|
||||
<entry></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>animation‑direction</entry>
|
||||
<entry><code>〈single‑animation‑direction〉 [ , 〈single‑animation‑direction〉 ]*</code></entry>
|
||||
<entry><phrase role="nowrap">animation-direction</phrase></entry>
|
||||
<entry><code>〈single-animation-direction〉 [ , 〈single-animation-direction〉 ]*</code></entry>
|
||||
<entry><code>normal</code></entry>
|
||||
<entry></entry>
|
||||
<entry></entry>
|
||||
@@ -1290,8 +1287,8 @@ We use <literallayout> for syntax productions, and each line is put in a <code>
|
||||
<entry></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>animation‑play‑state</entry>
|
||||
<entry><code>〈single‑animation‑play‑state〉 [ , 〈single‑animation‑play‑state〉 ]*</code></entry>
|
||||
<entry><phrase role="nowrap">animation-play-state</phrase></entry>
|
||||
<entry><code>〈single-animation-play-state〉 [ , 〈single-animation-play-state〉 ]*</code></entry>
|
||||
<entry><code>running</code></entry>
|
||||
<entry></entry>
|
||||
<entry></entry>
|
||||
@@ -1299,7 +1296,7 @@ We use <literallayout> for syntax productions, and each line is put in a <code>
|
||||
<entry></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>animation‑delay</entry>
|
||||
<entry><phrase role="nowrap">animation-delay</phrase></entry>
|
||||
<entry><code>〈time〉 [ , 〈time〉 ]*</code></entry>
|
||||
<entry><code>0s</code></entry>
|
||||
<entry></entry>
|
||||
@@ -1308,8 +1305,8 @@ We use <literallayout> for syntax productions, and each line is put in a <code>
|
||||
<entry></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>animation‑fill‑mode</entry>
|
||||
<entry><code>〈single‑animation‑fill‑mode〉 [ , 〈single‑animation‑fill‑mode〉 ]*</code></entry>
|
||||
<entry><phrase role="nowrap">animation-fill-mode</phrase></entry>
|
||||
<entry><code>〈single-animation-fill-mode〉 [ , 〈single-animation-fill-mode〉 ]*</code></entry>
|
||||
<entry><code>none</code></entry>
|
||||
<entry></entry>
|
||||
<entry></entry>
|
||||
@@ -1324,8 +1321,8 @@ We use <literallayout> for syntax productions, and each line is put in a <code>
|
||||
</thead>
|
||||
<tbody>
|
||||
<row>
|
||||
<entry>animation</entry>
|
||||
<entry><code>〈single‑animation〉 [ , 〈single‑animation〉]*</code></entry>
|
||||
<entry><phrase role="nowrap">animation</phrase></entry>
|
||||
<entry><code>〈single-animation〉 [ , 〈single-animation〉 ]*</code></entry>
|
||||
<entry>see individual properties</entry>
|
||||
<entry><ulink url="https://www.w3.org/TR/css3-animations/#animation">CSS3</ulink></entry>
|
||||
<entry></entry>
|
||||
@@ -1340,7 +1337,8 @@ We use <literallayout> for syntax productions, and each line is put in a <code>
|
||||
<code>〈single-animation-play-state〉 = running | paused</code>
|
||||
<code>〈single-animation-fill-mode〉 = none | forwards | backwards | both</code>
|
||||
<code>〈single-animation〉 = 〈single-animation-name〉 || 〈time〉 || 〈single-timing-function〉 || 〈time〉 ||</code>
|
||||
<code> 〈single-animation-iteration-count〉 || 〈single-animation-direction〉 || 〈single-animation-play-state〉 || 〈single-animation-fill-mode〉</code>
|
||||
<code> 〈single-animation-iteration-count〉 || 〈single-animation-direction〉 ||</code>
|
||||
<code> 〈single-animation-play-state〉 || 〈single-animation-fill-mode〉</code>
|
||||
</literallayout>
|
||||
|
||||
<table pgwide="1">
|
||||
@@ -1353,7 +1351,7 @@ We use <literallayout> for syntax productions, and each line is put in a <code>
|
||||
</thead>
|
||||
<tbody>
|
||||
<row>
|
||||
<entry>‑gtk‑key‑bindings</entry>
|
||||
<entry><phrase role="nowrap">-gtk-key-bindings</phrase></entry>
|
||||
<entry><code>none | 〈binding name〉 [ , 〈binding name〉 ]*</code></entry>
|
||||
<entry><code>none</code></entry>
|
||||
<entry></entry>
|
||||
|
||||
@@ -450,13 +450,13 @@ example_app_window_class_init (ExampleAppWindowClass *class)
|
||||
|
||||
...
|
||||
]]></programlisting>
|
||||
<para>(<ulink url="https://git.gnome.org/browse/gtk+/tree/examples/application2/exampleappwin.c">full source</ulink>)</para>
|
||||
<para>(<ulink url="https://gitlab.gnome.org/GNOME/gtk/blob/gtk-3-22/examples/application2/exampleappwin.c">full source</ulink>)</para>
|
||||
</informalexample>
|
||||
|
||||
<para>You may have noticed that we used the <literal>_from_resource(<!-- -->)</literal> variant
|
||||
of the function that sets a template. Now we need to use GLib's resource
|
||||
functionality to include the ui file in the binary. This is commonly
|
||||
done by listing all resources in a .gresource.xml file, such as this:
|
||||
of the function that sets a template. Now we need to use <ulink url="https://developer.gnome.org/gio/stable/GResource.html">GLib's resource functionality</ulink>
|
||||
to include the ui file in the binary. This is commonly done by listing
|
||||
all resources in a .gresource.xml file, such as this:
|
||||
</para>
|
||||
|
||||
<informalexample>
|
||||
@@ -518,7 +518,7 @@ example_app_window_class_init (ExampleAppWindowClass *class)
|
||||
|
||||
...
|
||||
]]></programlisting>
|
||||
<para>(<ulink url="https://git.gnome.org/browse/gtk+/tree/examples/application3/exampleappwin.c">full source</ulink>)</para>
|
||||
<para>(<ulink url="https://gitlab.gnome.org/GNOME/gtk/blob/gtk-3-22/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://git.gnome.org/browse/gtk+/tree/examples/application3/exampleappwin.c">full source</ulink>)</para>
|
||||
<para>(<ulink url="https://gitlab.gnome.org/GNOME/gtk/blob/gtk-3-22/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://git.gnome.org/browse/gtk+/tree/examples/application4/exampleapp.c">full source</ulink>)</para>
|
||||
<para>(<ulink url="https://gitlab.gnome.org/GNOME/gtk/blob/gtk-3-22/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://git.gnome.org/browse/gtk+/tree/examples/application5/exampleappwin.c">full source</ulink>)</para>
|
||||
<para>(<ulink url="https://gitlab.gnome.org/GNOME/gtk/blob/gtk-3-22/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://git.gnome.org/browse/gtk+/tree/examples/application6/exampleapp.c">full source</ulink>)</para>
|
||||
<para>(<ulink url="https://gitlab.gnome.org/GNOME/gtk/blob/gtk-3-22/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://git.gnome.org/browse/gtk+/tree/examples/application7/exampleappwin.c">full source</ulink>)</para>
|
||||
<para>(<ulink url="https://gitlab.gnome.org/GNOME/gtk/blob/gtk-3-22/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://git.gnome.org/browse/gtk+/tree/examples/application8/exampleappwin.c">full source</ulink>)</para>
|
||||
<para>(<ulink url="https://gitlab.gnome.org/GNOME/gtk/blob/gtk-3-22/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://git.gnome.org/browse/gtk+/tree/examples/application9/exampleappwin.c">full source</ulink>)</para>
|
||||
<para>(<ulink url="https://gitlab.gnome.org/GNOME/gtk/blob/gtk-3-22/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://git.gnome.org/browse/gtk+/tree/examples/application9/exampleappwin.c">full source</ulink>
|
||||
<ulink url="https://gitlab.gnome.org/GNOME/gtk/blob/gtk-3-22/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>
|
||||
|
||||
@@ -494,6 +494,10 @@
|
||||
<title>Index of new symbols in 3.22</title>
|
||||
<xi:include href="xml/api-index-3.22.xml"><xi:fallback /></xi:include>
|
||||
</index>
|
||||
<index id="api-index-3-24" role="3.24">
|
||||
<title>Index of new symbols in 3.24</title>
|
||||
<xi:include href="xml/api-index-3.24.xml"><xi:fallback /></xi:include>
|
||||
</index>
|
||||
|
||||
<xi:include href="xml/annotation-glossary.xml"><xi:fallback /></xi:include>
|
||||
|
||||
|
||||
@@ -1665,6 +1665,11 @@ GtkFontFilterFunc
|
||||
gtk_font_chooser_set_filter_func
|
||||
gtk_font_chooser_set_font_map
|
||||
gtk_font_chooser_get_font_map
|
||||
gtk_font_chooser_set_level
|
||||
gtk_font_chooser_get_level
|
||||
gtk_font_chooser_get_font_features
|
||||
gtk_font_chooser_set_language
|
||||
gtk_font_chooser_get_language
|
||||
|
||||
<SUBSECTION Standard>
|
||||
GtkFontChooserIface
|
||||
@@ -2488,6 +2493,8 @@ gtk_info_bar_get_action_area
|
||||
gtk_info_bar_get_content_area
|
||||
gtk_info_bar_get_show_close_button
|
||||
gtk_info_bar_set_show_close_button
|
||||
gtk_info_bar_get_revealed
|
||||
gtk_info_bar_set_revealed
|
||||
|
||||
<SUBSECTION Standard>
|
||||
GTK_TYPE_INFO_BAR
|
||||
|
||||
@@ -537,6 +537,18 @@ nevertheless.
|
||||
</para>
|
||||
</formalpara>
|
||||
|
||||
<formalpara>
|
||||
<title><envar>GTK_OVERLAY_SCROLLING</envar></title>
|
||||
|
||||
<para>
|
||||
The default value of this environment variable is 1, which means that each
|
||||
instance of GtkScrolledWindow will choose whether to use overlay or full-
|
||||
size scrollbars via its own GtkScrolledWindow:overlay-scrolling property,
|
||||
which defaults to <literal>TRUE</literal>. If this variable is set to 0,
|
||||
all GtkScrolledWindow instances are made to use full/non-overlay scrollbars.
|
||||
</para>
|
||||
</formalpara>
|
||||
|
||||
<formalpara>
|
||||
<title><envar>XDG_DATA_HOME</envar>, <envar>XDG_DATA_DIRS</envar></title>
|
||||
|
||||
|
||||
+7
-1
@@ -14,12 +14,18 @@ main (int argc,
|
||||
GtkBuilder *builder;
|
||||
GObject *window;
|
||||
GObject *button;
|
||||
GError *error = NULL;
|
||||
|
||||
gtk_init (&argc, &argv);
|
||||
|
||||
/* Construct a GtkBuilder instance and load our UI description */
|
||||
builder = gtk_builder_new ();
|
||||
gtk_builder_add_from_file (builder, "builder.ui", NULL);
|
||||
if (gtk_builder_add_from_file (builder, "builder.ui", &error) == 0)
|
||||
{
|
||||
g_printerr ("Error loading file: %s\n", error->message);
|
||||
g_clear_error (&error);
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* Connect signal handlers to the constructed widgets. */
|
||||
window = gtk_builder_get_object (builder, "window");
|
||||
|
||||
@@ -1267,7 +1267,7 @@ handle_incoming_connection (GSocketService *service,
|
||||
}
|
||||
else
|
||||
{
|
||||
request->connection = g_object_ref (connection);
|
||||
request->connection = G_IO_STREAM (g_object_ref (connection));
|
||||
}
|
||||
|
||||
in = g_io_stream_get_input_stream (request->connection);
|
||||
|
||||
@@ -17,7 +17,6 @@ gdk__private__ (void)
|
||||
gdk_display_set_rendering_mode,
|
||||
gdk_display_get_debug_updates,
|
||||
gdk_display_set_debug_updates,
|
||||
gdk_window_move_to_rect
|
||||
};
|
||||
|
||||
return &table;
|
||||
|
||||
+2
-16
@@ -31,14 +31,6 @@ gboolean gdk_display_get_debug_updates (GdkDisplay *display);
|
||||
void gdk_display_set_debug_updates (GdkDisplay *display,
|
||||
gboolean debug_updates);
|
||||
|
||||
void gdk_window_move_to_rect (GdkWindow *window,
|
||||
const GdkRectangle *rect,
|
||||
GdkGravity rect_anchor,
|
||||
GdkGravity window_anchor,
|
||||
GdkAnchorHints anchor_hints,
|
||||
gint rect_anchor_dx,
|
||||
gint rect_anchor_dy);
|
||||
|
||||
typedef struct {
|
||||
/* add all private functions here, initialize them in gdk-private.c */
|
||||
gboolean (* gdk_device_grab_info) (GdkDisplay *display,
|
||||
@@ -64,17 +56,11 @@ typedef struct {
|
||||
gboolean (* gdk_display_get_debug_updates) (GdkDisplay *display);
|
||||
void (* gdk_display_set_debug_updates) (GdkDisplay *display,
|
||||
gboolean debug_updates);
|
||||
|
||||
void (* gdk_window_move_to_rect) (GdkWindow *window,
|
||||
const GdkRectangle *rect,
|
||||
GdkGravity rect_anchor,
|
||||
GdkGravity window_anchor,
|
||||
GdkAnchorHints anchor_hints,
|
||||
gint rect_anchor_dx,
|
||||
gint rect_anchor_dy);
|
||||
} GdkPrivateVTable;
|
||||
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
GdkPrivateVTable * gdk__private__ (void);
|
||||
|
||||
gboolean gdk_running_in_sandbox (void);
|
||||
|
||||
#endif /* __GDK__PRIVATE_H__ */
|
||||
|
||||
@@ -468,6 +468,19 @@ gdk_display_open_default (void)
|
||||
return display;
|
||||
}
|
||||
|
||||
gboolean
|
||||
gdk_running_in_sandbox (void)
|
||||
{
|
||||
char *path;
|
||||
gboolean ret;
|
||||
|
||||
path = g_build_filename (g_get_user_runtime_dir (), "flatpak-info", NULL);
|
||||
ret = g_file_test (path, G_FILE_TEST_EXISTS);
|
||||
g_free (path);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_display_open_default_libgtk_only:
|
||||
*
|
||||
@@ -601,7 +614,6 @@ gdk_init (int *argc, char ***argv)
|
||||
* management for you.
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* gdk_threads_enter:
|
||||
*
|
||||
|
||||
@@ -300,7 +300,7 @@ gdk_device_manager_get_property (GObject *object,
|
||||
* Gets the #GdkDisplay associated to @device_manager.
|
||||
*
|
||||
* Returns: (nullable) (transfer none): the #GdkDisplay to which
|
||||
* @device_manager is associated to, or #NULL. This memory is
|
||||
* @device_manager is associated to, or %NULL. This memory is
|
||||
* owned by GDK and must not be freed or unreferenced.
|
||||
*
|
||||
* Since: 3.0
|
||||
|
||||
+2
-2
@@ -166,7 +166,7 @@ gdk_drag_context_get_source_window (GdkDragContext *context)
|
||||
* gdk_drag_context_get_dest_window:
|
||||
* @context: a #GdkDragContext
|
||||
*
|
||||
* Returns the destination windw for the DND operation.
|
||||
* Returns the destination window for the DND operation.
|
||||
*
|
||||
* Returns: (transfer none): a #GdkWindow
|
||||
*
|
||||
@@ -184,7 +184,7 @@ gdk_drag_context_get_dest_window (GdkDragContext *context)
|
||||
* gdk_drag_context_get_protocol:
|
||||
* @context: a #GdkDragContext
|
||||
*
|
||||
* Returns the drag protocol thats used by this context.
|
||||
* Returns the drag protocol that is used by this context.
|
||||
*
|
||||
* Returns: the drag protocol
|
||||
*
|
||||
|
||||
+2
-2
@@ -1200,7 +1200,7 @@ struct _GdkEventDND {
|
||||
* @type: the type of the event (%GDK_TOUCHPAD_SWIPE)
|
||||
* @window: the window which received the event
|
||||
* @send_event: %TRUE if the event was sent explicitly
|
||||
* @phase: (type GdkTouchpadGesturePhase): the current phase of the gesture
|
||||
* @phase: the current phase of the gesture
|
||||
* @n_fingers: The number of fingers triggering the swipe
|
||||
* @time: the time of the event in milliseconds
|
||||
* @x: The X coordinate of the pointer
|
||||
@@ -1237,7 +1237,7 @@ struct _GdkEventTouchpadSwipe {
|
||||
* @type: the type of the event (%GDK_TOUCHPAD_PINCH)
|
||||
* @window: the window which received the event
|
||||
* @send_event: %TRUE if the event was sent explicitly
|
||||
* @phase: (type GdkTouchpadGesturePhase): the current phase of the gesture
|
||||
* @phase: the current phase of the gesture
|
||||
* @n_fingers: The number of fingers triggering the pinch
|
||||
* @time: the time of the event in milliseconds
|
||||
* @x: The X coordinate of the pointer
|
||||
|
||||
+5
-5
@@ -477,7 +477,7 @@ gdk_frame_clock_get_timings (GdkFrameClock *frame_clock,
|
||||
*
|
||||
* Returns: (nullable): the #GdkFrameTimings for the frame currently
|
||||
* being processed, or even no frame is being processed, for the
|
||||
* previous frame. Before any frames have been procesed, returns
|
||||
* previous frame. Before any frames have been processed, returns
|
||||
* %NULL.
|
||||
* Since: 3.8
|
||||
*/
|
||||
@@ -541,10 +541,10 @@ _gdk_frame_clock_debug_print_timings (GdkFrameClock *clock,
|
||||
* gdk_frame_clock_get_refresh_info:
|
||||
* @frame_clock: a #GdkFrameClock
|
||||
* @base_time: base time for determining a presentaton time
|
||||
* @refresh_interval_return: a location to store the determined refresh
|
||||
* interval, or %NULL. A default refresh interval of 1/60th of
|
||||
* a second will be stored if no history is present.
|
||||
* @presentation_time_return: a location to store the next
|
||||
* @refresh_interval_return: (out) (optional): a location to store the
|
||||
* determined refresh interval, or %NULL. A default refresh interval of
|
||||
* 1/60th of a second will be stored if no history is present.
|
||||
* @presentation_time_return: (out): a location to store the next
|
||||
* candidate presentation time after the given base time.
|
||||
* 0 will be will be stored if no history is present.
|
||||
*
|
||||
|
||||
+30
-1
@@ -123,6 +123,7 @@ gdk_frame_clock_idle_init (GdkFrameClockIdle *frame_clock_idle)
|
||||
frame_clock_idle->priv = priv =
|
||||
gdk_frame_clock_idle_get_instance_private (frame_clock_idle);
|
||||
|
||||
priv->frame_time = g_get_monotonic_time (); /* more sane than zero */
|
||||
priv->freeze_count = 0;
|
||||
}
|
||||
|
||||
@@ -350,9 +351,37 @@ gdk_frame_clock_paint_idle (void *data)
|
||||
case GDK_FRAME_CLOCK_PHASE_BEFORE_PAINT:
|
||||
if (priv->freeze_count == 0)
|
||||
{
|
||||
priv->frame_time = compute_frame_time (clock_idle);
|
||||
gint64 frame_interval = FRAME_INTERVAL;
|
||||
gint64 reset_frame_time;
|
||||
gint64 smoothest_frame_time;
|
||||
gint64 frame_time_error;
|
||||
GdkFrameTimings *prev_timings =
|
||||
gdk_frame_clock_get_current_timings (clock);
|
||||
|
||||
if (prev_timings && prev_timings->refresh_interval)
|
||||
frame_interval = prev_timings->refresh_interval;
|
||||
|
||||
/* We are likely not getting precisely even callbacks in real
|
||||
* time, particularly if the event loop is busy.
|
||||
* This is a documented limitation in the precision of
|
||||
* gdk_threads_add_timeout_full and g_timeout_add_full.
|
||||
*
|
||||
* In order to avoid this imprecision from compounding between
|
||||
* frames and affecting visual smoothness, we correct frame_time
|
||||
* to more precisely match the even refresh interval of the
|
||||
* physical display. This also means we proactively avoid (most)
|
||||
* missed frames before they occur.
|
||||
*/
|
||||
smoothest_frame_time = priv->frame_time + frame_interval;
|
||||
reset_frame_time = compute_frame_time (clock_idle);
|
||||
frame_time_error = ABS (reset_frame_time - smoothest_frame_time);
|
||||
if (frame_time_error >= frame_interval)
|
||||
priv->frame_time = reset_frame_time;
|
||||
else
|
||||
priv->frame_time = smoothest_frame_time;
|
||||
|
||||
_gdk_frame_clock_begin_frame (clock);
|
||||
/* Note "current" is different now so timings != prev_timings */
|
||||
timings = gdk_frame_clock_get_current_timings (clock);
|
||||
|
||||
timings->frame_time = priv->frame_time;
|
||||
|
||||
+1
-1
@@ -340,7 +340,7 @@ gdk_gl_context_class_init (GdkGLContextClass *klass)
|
||||
/**
|
||||
* GdkGLContext:shared-context:
|
||||
*
|
||||
* The #GdkGLContext that this context is sharing data with, or #NULL
|
||||
* The #GdkGLContext that this context is sharing data with, or %NULL
|
||||
*
|
||||
* Since: 3.16
|
||||
*/
|
||||
|
||||
@@ -277,6 +277,8 @@ gdk_keyval_is_lower (guint keyval)
|
||||
* Returns the #GdkKeymap attached to the default display.
|
||||
*
|
||||
* Returns: (transfer none): the #GdkKeymap attached to the default display.
|
||||
*
|
||||
* Deprecated: 3.22: Use gdk_keymap_get_for_display() instead
|
||||
*/
|
||||
GdkKeymap*
|
||||
gdk_keymap_get_default (void)
|
||||
|
||||
+1
-1
@@ -80,7 +80,7 @@ struct _GdkKeymapKey
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
GType gdk_keymap_get_type (void) G_GNUC_CONST;
|
||||
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
GDK_DEPRECATED_IN_3_22_FOR(gdk_keymap_get_for_display)
|
||||
GdkKeymap* gdk_keymap_get_default (void);
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
GdkKeymap* gdk_keymap_get_for_display (GdkDisplay *display);
|
||||
|
||||
+6
-6
@@ -66,12 +66,12 @@ void gdk_notify_startup_complete_with_id (const gchar* startup_
|
||||
|
||||
/* Push and pop error handlers for X errors
|
||||
*/
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
GDK_DEPRECATED_IN_3_22_FOR(gdk_x11_display_error_trap_push)
|
||||
void gdk_error_trap_push (void);
|
||||
/* warn unused because you could use pop_ignored otherwise */
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
GDK_DEPRECATED_IN_3_22_FOR(gdk_x11_display_error_trap_pop)
|
||||
G_GNUC_WARN_UNUSED_RESULT gint gdk_error_trap_pop (void);
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
GDK_DEPRECATED_IN_3_22_FOR(gdk_x11_display_error_trap_pop_ignored)
|
||||
void gdk_error_trap_pop_ignored (void);
|
||||
|
||||
|
||||
@@ -114,13 +114,13 @@ gint gdk_screen_width_mm (void) G_GNUC_CONST;
|
||||
GDK_DEPRECATED_IN_3_22
|
||||
gint gdk_screen_height_mm (void) G_GNUC_CONST;
|
||||
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
GDK_DEPRECATED_IN_3_22_FOR(gdk_display_set_double_click_time)
|
||||
void gdk_set_double_click_time (guint msec);
|
||||
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
GDK_DEPRECATED_IN_3_22_FOR(gdk_display_beep)
|
||||
void gdk_beep (void);
|
||||
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
GDK_DEPRECATED_IN_3_22_FOR(gdk_display_flush)
|
||||
void gdk_flush (void);
|
||||
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
|
||||
+3
-3
@@ -32,8 +32,8 @@
|
||||
*
|
||||
* GdkMonitor objects represent the individual outputs that are
|
||||
* associated with a #GdkDisplay. GdkDisplay has APIs to enumerate
|
||||
* monitors with gdk_display_get_monitors() and to find particular
|
||||
* monitors with gdk_display_get_primary_monitor() or
|
||||
* monitors with gdk_display_get_n_monitors() and gdk_display_get_monitor(), and
|
||||
* to find particular monitors with gdk_display_get_primary_monitor() or
|
||||
* gdk_display_get_monitor_at_window().
|
||||
*
|
||||
* GdkMonitor was introduced in GTK+ 3.22 and supersedes earlier
|
||||
@@ -267,7 +267,7 @@ gdk_monitor_get_display (GdkMonitor *monitor)
|
||||
/**
|
||||
* gdk_monitor_get_geometry:
|
||||
* @monitor: a #GdkMonitor
|
||||
* @geometry: (out): a #GdkRectangle to be filled wiht the monitor geometry
|
||||
* @geometry: (out): a #GdkRectangle to be filled with the monitor geometry
|
||||
*
|
||||
* Retrieves the size and position of an individual monitor within the
|
||||
* display coordinate space. The returned geometry is in ”application pixels”,
|
||||
|
||||
+1
-1
@@ -55,7 +55,7 @@ G_DEFINE_BOXED_TYPE (GdkRGBA, gdk_rgba,
|
||||
* 1.0 for opaque
|
||||
*
|
||||
* A #GdkRGBA is used to represent a (possibly translucent)
|
||||
* color, in a way that is compatible with cairos notion of color.
|
||||
* color, in a way that is compatible with cairo’s notion of color.
|
||||
*/
|
||||
|
||||
/**
|
||||
|
||||
@@ -115,8 +115,10 @@ gdk_seat_default_grab (GdkSeat *seat,
|
||||
GdkSeatDefaultPrivate *priv;
|
||||
guint32 evtime = event ? gdk_event_get_time (event) : GDK_CURRENT_TIME;
|
||||
GdkGrabStatus status = GDK_GRAB_SUCCESS;
|
||||
gboolean was_visible;
|
||||
|
||||
priv = gdk_seat_default_get_instance_private (GDK_SEAT_DEFAULT (seat));
|
||||
was_visible = gdk_window_is_visible (window);
|
||||
|
||||
if (prepare_func)
|
||||
(prepare_func) (seat, window, prepare_func_data);
|
||||
@@ -163,10 +165,12 @@ gdk_seat_default_grab (GdkSeat *seat,
|
||||
{
|
||||
if (capabilities & ~GDK_SEAT_CAPABILITY_KEYBOARD)
|
||||
gdk_device_ungrab (priv->master_pointer, evtime);
|
||||
gdk_window_hide (window);
|
||||
}
|
||||
}
|
||||
|
||||
if (status != GDK_GRAB_SUCCESS && !was_visible)
|
||||
gdk_window_hide (window);
|
||||
|
||||
G_GNUC_END_IGNORE_DEPRECATIONS;
|
||||
|
||||
return status;
|
||||
|
||||
+9
-3
@@ -32,10 +32,12 @@
|
||||
|
||||
/**
|
||||
* SECTION:selections
|
||||
* @Short_description: Functions for transfering data via the X selection mechanism
|
||||
* @Short_description: Functions for transferring data between programs
|
||||
* @Title: Selections
|
||||
*
|
||||
* The X selection mechanism provides a way to transfer arbitrary chunks of
|
||||
* GDK’s selection functions, based on the [X selection mechanism](
|
||||
* https://www.x.org/releases/X11R7.6/doc/xorg-docs/specs/ICCCM/icccm.html),
|
||||
* provide a way to transfer arbitrary chunks of
|
||||
* data between programs. A “selection” is a essentially
|
||||
* a named clipboard, identified by a string interned as a #GdkAtom. By
|
||||
* claiming ownership of a selection, an application indicates that it will
|
||||
@@ -57,7 +59,11 @@
|
||||
* `gtkselection.h` and programmers should use those functions
|
||||
* instead of the ones presented here. If you plan to implement selection
|
||||
* handling directly on top of the functions here, you should refer to the
|
||||
* X Inter-client Communication Conventions Manual (ICCCM).
|
||||
* [X Inter-Client Communication Conventions Manual (ICCCM)](
|
||||
* https://www.x.org/releases/X11R7.6/doc/xorg-docs/specs/ICCCM/icccm.html).
|
||||
*
|
||||
* Note that although much of the selection API design is based on that of X,
|
||||
* it will work on other GDK backends too.
|
||||
*/
|
||||
|
||||
/**
|
||||
|
||||
+1
-1
@@ -451,7 +451,7 @@ typedef enum
|
||||
GDK_SMOOTH_SCROLL_MASK = 1 << 23,
|
||||
GDK_TOUCHPAD_GESTURE_MASK = 1 << 24,
|
||||
GDK_TABLET_PAD_MASK = 1 << 25,
|
||||
GDK_ALL_EVENTS_MASK = 0xFFFFFE
|
||||
GDK_ALL_EVENTS_MASK = 0x3FFFFFE
|
||||
} GdkEventMask;
|
||||
|
||||
/**
|
||||
|
||||
@@ -172,6 +172,16 @@
|
||||
*/
|
||||
#define GDK_VERSION_3_22 (G_ENCODE_VERSION (3, 22))
|
||||
|
||||
/**
|
||||
* GDK_VERSION_3_24:
|
||||
*
|
||||
* A macro that evaluates to the 3.24 version of GDK, in a format
|
||||
* that can be used by the C pre-processor.
|
||||
*
|
||||
* Since: 3.24
|
||||
*/
|
||||
#define GDK_VERSION_3_24 (G_ENCODE_VERSION (3, 24))
|
||||
|
||||
/* evaluates to the current stable version; for development cycles,
|
||||
* this means the next stable target
|
||||
*/
|
||||
@@ -412,5 +422,11 @@
|
||||
# define GDK_AVAILABLE_IN_3_22 _GDK_EXTERN
|
||||
#endif
|
||||
|
||||
#if GDK_VERSION_MAX_ALLOWED < GDK_VERSION_3_24
|
||||
# define GDK_AVAILABLE_IN_3_24 GDK_UNAVAILABLE(3, 24)
|
||||
#else
|
||||
# define GDK_AVAILABLE_IN_3_24 _GDK_EXTERN
|
||||
#endif
|
||||
|
||||
#endif /* __GDK_VERSION_MACROS_H__ */
|
||||
|
||||
|
||||
+6
-5
@@ -4164,7 +4164,7 @@ static void
|
||||
gdk_window_process_updates_with_mode (GdkWindow *window,
|
||||
int recurse_mode)
|
||||
{
|
||||
GPtrArray *list = g_ptr_array_new_with_free_func (g_object_unref);
|
||||
GPtrArray *list;
|
||||
int i;
|
||||
|
||||
g_return_if_fail (GDK_IS_WINDOW (window));
|
||||
@@ -4172,6 +4172,7 @@ gdk_window_process_updates_with_mode (GdkWindow *window,
|
||||
if (GDK_WINDOW_DESTROYED (window))
|
||||
return;
|
||||
|
||||
list = g_ptr_array_new_with_free_func (g_object_unref);
|
||||
find_impl_windows_to_update (list, window, recurse_mode);
|
||||
|
||||
if (window->impl_window != window)
|
||||
@@ -6232,8 +6233,7 @@ gdk_window_move_resize (GdkWindow *window,
|
||||
* Connect to the #GdkWindow::moved-to-rect signal to find out how it was
|
||||
* actually positioned.
|
||||
*
|
||||
* Since: 3.22
|
||||
* Stability: Private
|
||||
* Since: 3.24
|
||||
*/
|
||||
void
|
||||
gdk_window_move_to_rect (GdkWindow *window,
|
||||
@@ -9294,8 +9294,9 @@ proxy_pointer_event (GdkDisplay *display,
|
||||
serial, non_linear);
|
||||
_gdk_display_set_window_under_pointer (display, device, pointer_window);
|
||||
}
|
||||
else if (source_event->type == GDK_MOTION_NOTIFY ||
|
||||
source_event->type == GDK_TOUCH_UPDATE)
|
||||
|
||||
if (source_event->type == GDK_MOTION_NOTIFY ||
|
||||
source_event->type == GDK_TOUCH_UPDATE)
|
||||
{
|
||||
GdkWindow *event_win;
|
||||
guint evmask;
|
||||
|
||||
@@ -550,6 +550,15 @@ void gdk_window_move_resize (GdkWindow *window,
|
||||
gint y,
|
||||
gint width,
|
||||
gint height);
|
||||
|
||||
GDK_AVAILABLE_IN_3_24
|
||||
void gdk_window_move_to_rect (GdkWindow *window,
|
||||
const GdkRectangle *rect,
|
||||
GdkGravity rect_anchor,
|
||||
GdkGravity window_anchor,
|
||||
GdkAnchorHints anchor_hints,
|
||||
gint rect_anchor_dx,
|
||||
gint rect_anchor_dy);
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
void gdk_window_reparent (GdkWindow *window,
|
||||
GdkWindow *new_parent,
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
#import "GdkQuartzNSWindow.h"
|
||||
#include "gdkquartzwindow.h"
|
||||
#include "gdkdnd-quartz.h"
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
#import "GdkQuartzView.h"
|
||||
#include "gdkquartzwindow.h"
|
||||
#include "gdkprivate-quartz.h"
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
#include "gdkdnd.h"
|
||||
#include "gdkquartzdnd.h"
|
||||
#include "gdkprivate-quartz.h"
|
||||
@@ -27,7 +28,7 @@ G_DEFINE_TYPE (GdkQuartzDragContext, gdk_quartz_drag_context, GDK_TYPE_DRAG_CONT
|
||||
GdkDragContext *_gdk_quartz_drag_source_context = NULL;
|
||||
|
||||
GdkDragContext *
|
||||
gdk_quartz_drag_source_context ()
|
||||
gdk_quartz_drag_source_context_libgtk_only ()
|
||||
{
|
||||
return _gdk_quartz_drag_source_context;
|
||||
}
|
||||
|
||||
@@ -60,8 +60,11 @@ typedef enum
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
GdkOSXVersion gdk_quartz_osx_version (void);
|
||||
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
GdkAtom gdk_quartz_pasteboard_type_to_atom_libgtk_only (NSString *type);
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
NSString *gdk_quartz_target_to_pasteboard_type_libgtk_only (const gchar *target);
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
NSString *gdk_quartz_atom_to_pasteboard_type_libgtk_only (GdkAtom atom);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
@@ -48,6 +48,9 @@ GType gdk_quartz_drag_context_get_type (void);
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
id gdk_quartz_drag_context_get_dragging_info_libgtk_only (GdkDragContext *context);
|
||||
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
GdkDragContext *gdk_quartz_drag_source_context_libgtk_only (void);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#endif /* __GDK_QUARTZ_DRAG_CONTEXT_H__ */
|
||||
|
||||
@@ -67,7 +67,7 @@ static void gdk_quartz_screen_calculate_layout (GdkQuartzScreen *screen);
|
||||
static void display_reconfiguration_callback (CGDirectDisplayID display,
|
||||
CGDisplayChangeSummaryFlags flags,
|
||||
void *userInfo);
|
||||
|
||||
static const double dpi = 96.0;
|
||||
static gint get_mm_from_pixels (NSScreen *screen, int pixels);
|
||||
|
||||
G_DEFINE_TYPE (GdkQuartzScreen, gdk_quartz_screen, GDK_TYPE_SCREEN);
|
||||
@@ -76,10 +76,17 @@ static void
|
||||
gdk_quartz_screen_init (GdkQuartzScreen *quartz_screen)
|
||||
{
|
||||
GdkScreen *screen = GDK_SCREEN (quartz_screen);
|
||||
NSDictionary *dd = [[[NSScreen screens] objectAtIndex:0] deviceDescription];
|
||||
NSSize size = [[dd valueForKey:NSDeviceResolution] sizeValue];
|
||||
/* Screen resolution is used exclusively to pass to Pango for font
|
||||
* scaling. There's a long discussion in
|
||||
* https://bugzilla.gnome.org/show_bug.cgi?id=787867 exploring how
|
||||
* screen resolution and pangocairo-coretext interact. The summary
|
||||
* is that MacOS takes care of scaling fonts for Retina screens and
|
||||
* that while the Apple Documentation goes on about "points" they're
|
||||
* CSS points (96/in), not typeography points (72/in) and
|
||||
* pangocairo-coretext needs to default to that scaling factor.
|
||||
*/
|
||||
|
||||
_gdk_screen_set_resolution (screen, size.width);
|
||||
_gdk_screen_set_resolution (screen, dpi);
|
||||
|
||||
gdk_quartz_screen_calculate_layout (quartz_screen);
|
||||
|
||||
@@ -335,9 +342,6 @@ static gint
|
||||
get_mm_from_pixels (NSScreen *screen, int pixels)
|
||||
{
|
||||
const float mm_per_inch = 25.4;
|
||||
NSDictionary *dd = [[[NSScreen screens] objectAtIndex:0] deviceDescription];
|
||||
NSSize size = [[dd valueForKey:NSDeviceResolution] sizeValue];
|
||||
float dpi = size.width;
|
||||
return (pixels / dpi) * mm_per_inch;
|
||||
}
|
||||
|
||||
|
||||
@@ -23,6 +23,8 @@ noinst_LTLIBRARIES = \
|
||||
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 \
|
||||
@@ -80,11 +82,11 @@ libgdkwaylandinclude_HEADERS = \
|
||||
.SECONDEXPANSION:
|
||||
|
||||
define protostability
|
||||
$(shell echo $1 | sed 's/.*\(\<unstable\>\|\<stable\>\).*/\1/')
|
||||
$(if $(findstring unstable,$1),unstable,stable)
|
||||
endef
|
||||
|
||||
define protoname
|
||||
$(shell echo $1 | sed 's/\([a-z\-]\+\)-[a-z]\+-v[0-9]\+/\1/')
|
||||
$(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
|
||||
@@ -104,6 +106,7 @@ endef
|
||||
|
||||
EXTRA_DIST += \
|
||||
protocol/gtk-primary-selection.xml \
|
||||
protocol/gtk-shell.xml
|
||||
protocol/gtk-shell.xml \
|
||||
protocol/server-decoration.xml
|
||||
|
||||
-include $(top_srcdir)/git.mk
|
||||
|
||||
@@ -38,14 +38,20 @@
|
||||
|
||||
#include <xkbcommon/xkbcommon.h>
|
||||
|
||||
#include <linux/input.h>
|
||||
|
||||
#include <sys/time.h>
|
||||
#include <sys/mman.h>
|
||||
#if defined(HAVE_DEV_EVDEV_INPUT_H)
|
||||
#include <dev/evdev/input.h>
|
||||
#elif defined(HAVE_LINUX_INPUT_H)
|
||||
#include <linux/input.h>
|
||||
#endif
|
||||
|
||||
#define BUTTON_BASE (BTN_LEFT - 1) /* Used to translate to 1-indexed buttons */
|
||||
|
||||
#ifndef BTN_STYLUS3
|
||||
#define BTN_STYLUS3 0x149 /* Linux 4.15 */
|
||||
#endif
|
||||
|
||||
typedef struct _GdkWaylandDevicePad GdkWaylandDevicePad;
|
||||
typedef struct _GdkWaylandDevicePadClass GdkWaylandDevicePadClass;
|
||||
|
||||
@@ -413,13 +419,16 @@ gdk_wayland_device_update_window_cursor (GdkDevice *device)
|
||||
else
|
||||
{
|
||||
pointer->cursor_timeout_id = 0;
|
||||
return TRUE;
|
||||
return G_SOURCE_REMOVE;
|
||||
}
|
||||
|
||||
if (tablet)
|
||||
{
|
||||
if (!tablet->current_tool)
|
||||
return retval;
|
||||
{
|
||||
pointer->cursor_timeout_id = 0;
|
||||
return G_SOURCE_REMOVE;
|
||||
}
|
||||
|
||||
zwp_tablet_tool_v2_set_cursor (tablet->current_tool->wp_tablet_tool,
|
||||
pointer->enter_serial,
|
||||
@@ -434,7 +443,10 @@ gdk_wayland_device_update_window_cursor (GdkDevice *device)
|
||||
x, y);
|
||||
}
|
||||
else
|
||||
return retval;
|
||||
{
|
||||
pointer->cursor_timeout_id = 0;
|
||||
return G_SOURCE_REMOVE;
|
||||
}
|
||||
|
||||
if (buffer)
|
||||
{
|
||||
@@ -456,7 +468,8 @@ gdk_wayland_device_update_window_cursor (GdkDevice *device)
|
||||
|
||||
if (next_image_index != pointer->cursor_image_index)
|
||||
{
|
||||
if (next_image_delay != pointer->cursor_image_delay)
|
||||
if (next_image_delay != pointer->cursor_image_delay ||
|
||||
pointer->cursor_timeout_id == 0)
|
||||
{
|
||||
guint id;
|
||||
|
||||
@@ -728,6 +741,43 @@ gdk_wayland_device_get_focus (GdkDevice *device)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
device_maybe_emit_grab_crossing (GdkDevice *device,
|
||||
GdkWindow *window,
|
||||
guint32 time)
|
||||
{
|
||||
GdkWindow *native = gdk_wayland_device_get_focus (device);
|
||||
GdkWindow *focus = gdk_window_get_toplevel (window);
|
||||
|
||||
if (focus != native)
|
||||
device_emit_grab_crossing (device, focus, window, GDK_CROSSING_GRAB, time);
|
||||
}
|
||||
|
||||
static GdkWindow*
|
||||
device_maybe_emit_ungrab_crossing (GdkDevice *device,
|
||||
guint32 time)
|
||||
{
|
||||
GdkDeviceGrabInfo *grab;
|
||||
GdkWindow *focus = NULL;
|
||||
GdkWindow *native = NULL;
|
||||
GdkWindow *prev_focus = NULL;
|
||||
|
||||
focus = gdk_wayland_device_get_focus (device);
|
||||
grab = _gdk_display_get_last_device_grab (gdk_device_get_display (device), device);
|
||||
|
||||
if (grab)
|
||||
{
|
||||
grab->serial_end = grab->serial_start;
|
||||
prev_focus = grab->window;
|
||||
native = grab->native_window;
|
||||
}
|
||||
|
||||
if (focus != native)
|
||||
device_emit_grab_crossing (device, prev_focus, focus, GDK_CROSSING_UNGRAB, time);
|
||||
|
||||
return prev_focus;
|
||||
}
|
||||
|
||||
static GdkGrabStatus
|
||||
gdk_wayland_device_grab (GdkDevice *device,
|
||||
GdkWindow *window,
|
||||
@@ -738,7 +788,6 @@ gdk_wayland_device_grab (GdkDevice *device,
|
||||
guint32 time_)
|
||||
{
|
||||
GdkWaylandSeat *wayland_seat = GDK_WAYLAND_SEAT (gdk_device_get_seat (device));
|
||||
GdkWindow *prev_focus = gdk_wayland_device_get_focus (device);
|
||||
GdkWaylandPointerData *pointer = GDK_WAYLAND_DEVICE (device)->pointer;
|
||||
|
||||
if (gdk_window_get_window_type (window) == GDK_WINDOW_TEMP &&
|
||||
@@ -750,14 +799,17 @@ gdk_wayland_device_grab (GdkDevice *device,
|
||||
window);
|
||||
}
|
||||
|
||||
if (prev_focus != window)
|
||||
device_emit_grab_crossing (device, prev_focus, window, GDK_CROSSING_GRAB, time_);
|
||||
device_maybe_emit_grab_crossing (device, window, time_);
|
||||
|
||||
if (gdk_device_get_source (device) == GDK_SOURCE_KEYBOARD)
|
||||
{
|
||||
/* Device is a keyboard */
|
||||
gdk_wayland_window_inhibit_shortcuts (window,
|
||||
gdk_device_get_seat (device));
|
||||
if (gdk_window_get_window_type (window) == GDK_WINDOW_TOPLEVEL)
|
||||
{
|
||||
gdk_wayland_window_inhibit_shortcuts (window,
|
||||
gdk_device_get_seat (device));
|
||||
}
|
||||
|
||||
return GDK_GRAB_SUCCESS;
|
||||
}
|
||||
else
|
||||
@@ -792,24 +844,9 @@ gdk_wayland_device_ungrab (GdkDevice *device,
|
||||
guint32 time_)
|
||||
{
|
||||
GdkWaylandPointerData *pointer = GDK_WAYLAND_DEVICE (device)->pointer;
|
||||
GdkDisplay *display;
|
||||
GdkDeviceGrabInfo *grab;
|
||||
GdkWindow *focus, *prev_focus = NULL;
|
||||
GdkWindow *prev_focus;
|
||||
|
||||
display = gdk_device_get_display (device);
|
||||
|
||||
grab = _gdk_display_get_last_device_grab (display, device);
|
||||
|
||||
if (grab)
|
||||
{
|
||||
grab->serial_end = grab->serial_start;
|
||||
prev_focus = grab->window;
|
||||
}
|
||||
|
||||
focus = gdk_wayland_device_get_focus (device);
|
||||
|
||||
if (focus != prev_focus)
|
||||
device_emit_grab_crossing (device, prev_focus, focus, GDK_CROSSING_UNGRAB, time_);
|
||||
prev_focus = device_maybe_emit_ungrab_crossing (device, time_);
|
||||
|
||||
if (gdk_device_get_source (device) == GDK_SOURCE_KEYBOARD)
|
||||
{
|
||||
@@ -3815,6 +3852,8 @@ tablet_tool_handle_button (void *data,
|
||||
n_button = GDK_BUTTON_SECONDARY;
|
||||
else if (button == BTN_STYLUS2)
|
||||
n_button = GDK_BUTTON_MIDDLE;
|
||||
else if (button == BTN_STYLUS3)
|
||||
n_button = 8; /* Back */
|
||||
else
|
||||
return;
|
||||
|
||||
@@ -3966,7 +4005,7 @@ tablet_pad_ring_handle_angle (void *data,
|
||||
GdkWaylandTabletPadGroupData *group = data;
|
||||
|
||||
GDK_NOTE (EVENTS,
|
||||
g_message ("tablet pad ring handle angle, %s ring = %p angle = %f",
|
||||
g_message ("tablet pad ring handle angle, ring = %p angle = %f",
|
||||
wp_tablet_pad_ring, wl_fixed_to_double (angle)));
|
||||
|
||||
group->axis_tmp_info.value = wl_fixed_to_double (angle);
|
||||
@@ -4724,11 +4763,8 @@ gdk_wayland_seat_grab (GdkSeat *seat,
|
||||
if (wayland_seat->master_pointer &&
|
||||
capabilities & GDK_SEAT_CAPABILITY_POINTER)
|
||||
{
|
||||
GdkWindow *prev_focus = gdk_wayland_device_get_focus (wayland_seat->master_pointer);
|
||||
|
||||
if (prev_focus != native)
|
||||
device_emit_grab_crossing (wayland_seat->master_pointer, prev_focus,
|
||||
native, GDK_CROSSING_GRAB, evtime);
|
||||
device_maybe_emit_grab_crossing (wayland_seat->master_pointer,
|
||||
native, evtime);
|
||||
|
||||
_gdk_display_add_device_grab (display,
|
||||
wayland_seat->master_pointer,
|
||||
@@ -4749,11 +4785,8 @@ gdk_wayland_seat_grab (GdkSeat *seat,
|
||||
if (wayland_seat->touch_master &&
|
||||
capabilities & GDK_SEAT_CAPABILITY_TOUCH)
|
||||
{
|
||||
GdkWindow *prev_focus = gdk_wayland_device_get_focus (wayland_seat->touch_master);
|
||||
|
||||
if (prev_focus != native)
|
||||
device_emit_grab_crossing (wayland_seat->touch_master, prev_focus,
|
||||
native, GDK_CROSSING_GRAB, evtime);
|
||||
device_maybe_emit_grab_crossing (wayland_seat->touch_master,
|
||||
native, evtime);
|
||||
|
||||
_gdk_display_add_device_grab (display,
|
||||
wayland_seat->touch_master,
|
||||
@@ -4770,11 +4803,8 @@ gdk_wayland_seat_grab (GdkSeat *seat,
|
||||
if (wayland_seat->master_keyboard &&
|
||||
capabilities & GDK_SEAT_CAPABILITY_KEYBOARD)
|
||||
{
|
||||
GdkWindow *prev_focus = gdk_wayland_device_get_focus (wayland_seat->master_keyboard);
|
||||
|
||||
if (prev_focus != native)
|
||||
device_emit_grab_crossing (wayland_seat->master_keyboard, prev_focus,
|
||||
native, GDK_CROSSING_GRAB, evtime);
|
||||
device_maybe_emit_grab_crossing (wayland_seat->master_keyboard,
|
||||
native, evtime);
|
||||
|
||||
_gdk_display_add_device_grab (display,
|
||||
wayland_seat->master_keyboard,
|
||||
@@ -4787,8 +4817,9 @@ gdk_wayland_seat_grab (GdkSeat *seat,
|
||||
evtime,
|
||||
FALSE);
|
||||
|
||||
/* Inhibit shortcuts if the seat grab is for the keyboard only */
|
||||
if (capabilities == GDK_SEAT_CAPABILITY_KEYBOARD)
|
||||
/* Inhibit shortcuts on toplevels if the seat grab is for the keyboard only */
|
||||
if (capabilities == GDK_SEAT_CAPABILITY_KEYBOARD &&
|
||||
native->window_type == GDK_WINDOW_TOPLEVEL)
|
||||
gdk_wayland_window_inhibit_shortcuts (window, seat);
|
||||
}
|
||||
|
||||
@@ -4798,11 +4829,8 @@ gdk_wayland_seat_grab (GdkSeat *seat,
|
||||
for (l = wayland_seat->tablets; l; l = l->next)
|
||||
{
|
||||
GdkWaylandTabletData *tablet = l->data;
|
||||
GdkWindow *prev_focus = gdk_wayland_device_get_focus (tablet->master);
|
||||
|
||||
if (prev_focus != native)
|
||||
device_emit_grab_crossing (tablet->master, prev_focus,
|
||||
native, GDK_CROSSING_GRAB, evtime);
|
||||
device_maybe_emit_grab_crossing (tablet->master, native, evtime);
|
||||
|
||||
_gdk_display_add_device_grab (display,
|
||||
tablet->master,
|
||||
@@ -4836,36 +4864,20 @@ gdk_wayland_seat_ungrab (GdkSeat *seat)
|
||||
|
||||
if (wayland_seat->master_pointer)
|
||||
{
|
||||
GdkWindow *focus, *prev_focus = NULL;
|
||||
|
||||
grab = _gdk_display_get_last_device_grab (display, wayland_seat->master_pointer);
|
||||
|
||||
if (grab)
|
||||
{
|
||||
grab->serial_end = grab->serial_start;
|
||||
prev_focus = grab->window;
|
||||
}
|
||||
|
||||
focus = gdk_wayland_device_get_focus (wayland_seat->master_pointer);
|
||||
|
||||
if (focus != prev_focus)
|
||||
device_emit_grab_crossing (wayland_seat->master_pointer, prev_focus,
|
||||
focus, GDK_CROSSING_UNGRAB,
|
||||
GDK_CURRENT_TIME);
|
||||
device_maybe_emit_ungrab_crossing (wayland_seat->master_pointer,
|
||||
GDK_CURRENT_TIME);
|
||||
|
||||
gdk_wayland_device_update_window_cursor (wayland_seat->master_pointer);
|
||||
}
|
||||
|
||||
if (wayland_seat->master_keyboard)
|
||||
{
|
||||
grab = _gdk_display_get_last_device_grab (display, wayland_seat->master_keyboard);
|
||||
GdkWindow *prev_focus;
|
||||
|
||||
if (grab)
|
||||
{
|
||||
grab->serial_end = grab->serial_start;
|
||||
if (grab->window)
|
||||
gdk_wayland_window_restore_shortcuts (grab->window, seat);
|
||||
}
|
||||
prev_focus = device_maybe_emit_ungrab_crossing (wayland_seat->master_keyboard,
|
||||
GDK_CURRENT_TIME);
|
||||
if (prev_focus)
|
||||
gdk_wayland_window_restore_shortcuts (prev_focus, seat);
|
||||
}
|
||||
|
||||
if (wayland_seat->touch_master)
|
||||
|
||||
@@ -119,9 +119,28 @@ _gdk_wayland_display_async_roundtrip (GdkWaylandDisplay *display_wayland)
|
||||
}
|
||||
|
||||
static void
|
||||
xdg_shell_ping (void *data,
|
||||
struct zxdg_shell_v6 *xdg_shell,
|
||||
uint32_t serial)
|
||||
xdg_wm_base_ping (void *data,
|
||||
struct xdg_wm_base *xdg_wm_base,
|
||||
uint32_t serial)
|
||||
{
|
||||
GdkWaylandDisplay *display_wayland = data;
|
||||
|
||||
_gdk_wayland_display_update_serial (display_wayland, serial);
|
||||
|
||||
GDK_NOTE (EVENTS,
|
||||
g_message ("ping, shell %p, serial %u\n", xdg_wm_base, serial));
|
||||
|
||||
xdg_wm_base_pong (xdg_wm_base, serial);
|
||||
}
|
||||
|
||||
static const struct xdg_wm_base_listener xdg_wm_base_listener = {
|
||||
xdg_wm_base_ping,
|
||||
};
|
||||
|
||||
static void
|
||||
zxdg_shell_v6_ping (void *data,
|
||||
struct zxdg_shell_v6 *xdg_shell,
|
||||
uint32_t serial)
|
||||
{
|
||||
GdkWaylandDisplay *display_wayland = data;
|
||||
|
||||
@@ -133,8 +152,8 @@ xdg_shell_ping (void *data,
|
||||
zxdg_shell_v6_pong (xdg_shell, serial);
|
||||
}
|
||||
|
||||
static const struct zxdg_shell_v6_listener xdg_shell_listener = {
|
||||
xdg_shell_ping,
|
||||
static const struct zxdg_shell_v6_listener zxdg_shell_v6_listener = {
|
||||
zxdg_shell_v6_ping,
|
||||
};
|
||||
|
||||
static gboolean
|
||||
@@ -372,7 +391,6 @@ gdk_registry_handle_global (void *data,
|
||||
{
|
||||
GdkWaylandDisplay *display_wayland = data;
|
||||
struct wl_output *output;
|
||||
gboolean handled = TRUE;
|
||||
|
||||
GDK_NOTE (MISC,
|
||||
g_message ("add global %u, interface %s, version %u", id, interface, version));
|
||||
@@ -389,14 +407,13 @@ gdk_registry_handle_global (void *data,
|
||||
wl_registry_bind (display_wayland->wl_registry, id, &wl_shm_interface, 1);
|
||||
wl_shm_add_listener (display_wayland->shm, &wl_shm_listener, display_wayland);
|
||||
}
|
||||
else if (strcmp (interface, "xdg_wm_base") == 0)
|
||||
{
|
||||
display_wayland->xdg_wm_base_id = id;
|
||||
}
|
||||
else if (strcmp (interface, "zxdg_shell_v6") == 0)
|
||||
{
|
||||
display_wayland->xdg_shell =
|
||||
wl_registry_bind (display_wayland->wl_registry, id,
|
||||
&zxdg_shell_v6_interface, 1);
|
||||
zxdg_shell_v6_add_listener (display_wayland->xdg_shell,
|
||||
&xdg_shell_listener,
|
||||
display_wayland);
|
||||
display_wayland->zxdg_shell_v6_id = id;
|
||||
}
|
||||
else if (strcmp (interface, "gtk_shell1") == 0)
|
||||
{
|
||||
@@ -495,12 +512,9 @@ gdk_registry_handle_global (void *data,
|
||||
&server_decoration_listener,
|
||||
display_wayland);
|
||||
}
|
||||
else
|
||||
handled = FALSE;
|
||||
|
||||
if (handled)
|
||||
g_hash_table_insert (display_wayland->known_globals,
|
||||
GUINT_TO_POINTER (id), g_strdup (interface));
|
||||
g_hash_table_insert (display_wayland->known_globals,
|
||||
GUINT_TO_POINTER (id), g_strdup (interface));
|
||||
|
||||
process_on_globals_closures (display_wayland);
|
||||
}
|
||||
@@ -607,11 +621,32 @@ _gdk_wayland_display_open (const gchar *display_name)
|
||||
}
|
||||
}
|
||||
|
||||
/* Make sure we have xdg_shell at least */
|
||||
if (display_wayland->xdg_shell == NULL)
|
||||
if (display_wayland->xdg_wm_base_id)
|
||||
{
|
||||
g_warning ("Wayland compositor does not support xdg_shell interface,"
|
||||
" not using Wayland display");
|
||||
display_wayland->shell_variant = GDK_WAYLAND_SHELL_VARIANT_XDG_SHELL;
|
||||
display_wayland->xdg_wm_base =
|
||||
wl_registry_bind (display_wayland->wl_registry,
|
||||
display_wayland->xdg_wm_base_id,
|
||||
&xdg_wm_base_interface, 1);
|
||||
xdg_wm_base_add_listener (display_wayland->xdg_wm_base,
|
||||
&xdg_wm_base_listener,
|
||||
display_wayland);
|
||||
}
|
||||
else if (display_wayland->zxdg_shell_v6_id)
|
||||
{
|
||||
display_wayland->shell_variant = GDK_WAYLAND_SHELL_VARIANT_ZXDG_SHELL_V6;
|
||||
display_wayland->zxdg_shell_v6 =
|
||||
wl_registry_bind (display_wayland->wl_registry,
|
||||
display_wayland->zxdg_shell_v6_id,
|
||||
&zxdg_shell_v6_interface, 1);
|
||||
zxdg_shell_v6_add_listener (display_wayland->zxdg_shell_v6,
|
||||
&zxdg_shell_v6_listener,
|
||||
display_wayland);
|
||||
}
|
||||
else
|
||||
{
|
||||
g_warning ("The Wayland compositor does not provide any supported shell interface, "
|
||||
"not using Wayland display");
|
||||
g_object_unref (display);
|
||||
|
||||
return NULL;
|
||||
@@ -1241,6 +1276,9 @@ open_shared_memory (void)
|
||||
|
||||
if (force_shm_open)
|
||||
{
|
||||
#if defined (__FreeBSD__)
|
||||
ret = shm_open (SHM_ANON, O_CREAT | O_EXCL | O_RDWR | O_CLOEXEC, 0600);
|
||||
#else
|
||||
char name[NAME_MAX - 1] = "";
|
||||
|
||||
sprintf (name, "/gdk-wayland-%x", g_random_int ());
|
||||
@@ -1251,6 +1289,7 @@ open_shared_memory (void)
|
||||
shm_unlink (name);
|
||||
else if (errno == EEXIST)
|
||||
continue;
|
||||
#endif
|
||||
}
|
||||
}
|
||||
while (ret < 0 && errno == EINTR);
|
||||
@@ -1386,3 +1425,37 @@ gdk_wayland_display_get_selection (GdkDisplay *display)
|
||||
|
||||
return display_wayland->selection;
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_wayland_display_query_registry:
|
||||
* @display: a wayland #GdkDisplay
|
||||
* @interface: global interface to query in the registry
|
||||
*
|
||||
* Returns %TRUE if the the interface was found in the display
|
||||
* wl_registry.global handler.
|
||||
*
|
||||
* Returns: %TRUE if the global is offered by the compositor
|
||||
*
|
||||
* Since: 3.22.27
|
||||
**/
|
||||
gboolean
|
||||
gdk_wayland_display_query_registry (GdkDisplay *display,
|
||||
const gchar *global)
|
||||
{
|
||||
GdkWaylandDisplay *display_wayland = GDK_WAYLAND_DISPLAY (display);
|
||||
GHashTableIter iter;
|
||||
gchar *value;
|
||||
|
||||
g_return_val_if_fail (GDK_IS_WAYLAND_DISPLAY (display), FALSE);
|
||||
g_return_val_if_fail (global != NULL, FALSE);
|
||||
|
||||
g_hash_table_iter_init (&iter, display_wayland->known_globals);
|
||||
|
||||
while (g_hash_table_iter_next (&iter, NULL, (gpointer*) &value))
|
||||
{
|
||||
if (strcmp (value, global) == 0)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
@@ -29,6 +29,7 @@
|
||||
#include <wayland-egl.h>
|
||||
#include <gdk/wayland/tablet-unstable-v2-client-protocol.h>
|
||||
#include <gdk/wayland/gtk-shell-client-protocol.h>
|
||||
#include <gdk/wayland/xdg-shell-client-protocol.h>
|
||||
#include <gdk/wayland/xdg-shell-unstable-v6-client-protocol.h>
|
||||
#include <gdk/wayland/xdg-foreign-unstable-v1-client-protocol.h>
|
||||
#include <gdk/wayland/keyboard-shortcuts-inhibit-unstable-v1-client-protocol.h>
|
||||
@@ -46,13 +47,19 @@
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
#define GDK_WAYLAND_MAX_THEME_SCALE 2
|
||||
#define GDK_WAYLAND_MAX_THEME_SCALE 3
|
||||
#define GDK_WAYLAND_THEME_SCALES_COUNT GDK_WAYLAND_MAX_THEME_SCALE
|
||||
|
||||
#define GDK_ZWP_POINTER_GESTURES_V1_VERSION 1
|
||||
|
||||
typedef struct _GdkWaylandSelection GdkWaylandSelection;
|
||||
|
||||
typedef enum _GdkWaylandShellVariant
|
||||
{
|
||||
GDK_WAYLAND_SHELL_VARIANT_XDG_SHELL,
|
||||
GDK_WAYLAND_SHELL_VARIANT_ZXDG_SHELL_V6,
|
||||
} GdkWaylandShellVariant;
|
||||
|
||||
struct _GdkWaylandDisplay
|
||||
{
|
||||
GdkDisplay parent_instance;
|
||||
@@ -64,12 +71,17 @@ struct _GdkWaylandDisplay
|
||||
/* Most recent serial */
|
||||
guint32 serial;
|
||||
|
||||
uint32_t xdg_wm_base_id;
|
||||
uint32_t zxdg_shell_v6_id;
|
||||
GdkWaylandShellVariant shell_variant;
|
||||
|
||||
/* Wayland fields below */
|
||||
struct wl_display *wl_display;
|
||||
struct wl_registry *wl_registry;
|
||||
struct wl_compositor *compositor;
|
||||
struct wl_shm *shm;
|
||||
struct zxdg_shell_v6 *xdg_shell;
|
||||
struct xdg_wm_base *xdg_wm_base;
|
||||
struct zxdg_shell_v6 *zxdg_shell_v6;
|
||||
struct gtk_shell1 *gtk_shell;
|
||||
struct wl_input_device *input_device;
|
||||
struct wl_data_device_manager *data_device_manager;
|
||||
|
||||
@@ -50,6 +50,10 @@ typedef struct {
|
||||
const gchar *hintstyle;
|
||||
} GsdXftSettings;
|
||||
|
||||
typedef struct {
|
||||
guint fontconfig_timestamp;
|
||||
gchar *modules;
|
||||
} GsdExtSettings;
|
||||
|
||||
struct _GdkWaylandScreen
|
||||
{
|
||||
@@ -66,6 +70,11 @@ struct _GdkWaylandScreen
|
||||
|
||||
GHashTable *settings;
|
||||
GsdXftSettings xft_settings;
|
||||
GsdExtSettings dbus_settings;
|
||||
|
||||
GDBusProxy *dbus_proxy;
|
||||
GCancellable *dbus_cancellable;
|
||||
gulong dbus_setting_change_id;
|
||||
|
||||
guint32 shell_capabilities;
|
||||
};
|
||||
@@ -77,6 +86,8 @@ struct _GdkWaylandScreenClass
|
||||
|
||||
#define OUTPUT_VERSION_WITH_DONE 2
|
||||
|
||||
#define GTK_SETTINGS_DBUS_PATH "/org/gtk/Settings"
|
||||
#define GTK_SETTINGS_DBUS_NAME "org.gtk.Settings"
|
||||
|
||||
GType _gdk_wayland_screen_get_type (void);
|
||||
|
||||
@@ -87,6 +98,15 @@ gdk_wayland_screen_dispose (GObject *object)
|
||||
{
|
||||
GdkWaylandScreen *screen_wayland = GDK_WAYLAND_SCREEN (object);
|
||||
|
||||
if (screen_wayland->dbus_proxy && screen_wayland->dbus_setting_change_id > 0)
|
||||
{
|
||||
g_signal_handler_disconnect (screen_wayland->dbus_proxy,
|
||||
screen_wayland->dbus_setting_change_id);
|
||||
screen_wayland->dbus_setting_change_id = 0;
|
||||
}
|
||||
|
||||
g_cancellable_cancel (screen_wayland->dbus_cancellable);
|
||||
|
||||
if (screen_wayland->root_window)
|
||||
_gdk_window_destroy (screen_wayland->root_window, FALSE);
|
||||
|
||||
@@ -98,6 +118,9 @@ gdk_wayland_screen_finalize (GObject *object)
|
||||
{
|
||||
GdkWaylandScreen *screen_wayland = GDK_WAYLAND_SCREEN (object);
|
||||
|
||||
g_clear_object (&screen_wayland->dbus_proxy);
|
||||
g_clear_object (&screen_wayland->dbus_cancellable);
|
||||
|
||||
if (screen_wayland->root_window)
|
||||
g_object_unref (screen_wayland->root_window);
|
||||
|
||||
@@ -105,6 +128,8 @@ gdk_wayland_screen_finalize (GObject *object)
|
||||
|
||||
g_hash_table_destroy (screen_wayland->settings);
|
||||
|
||||
g_free (screen_wayland->dbus_settings.modules);
|
||||
|
||||
G_OBJECT_CLASS (_gdk_wayland_screen_parent_class)->finalize (object);
|
||||
}
|
||||
|
||||
@@ -653,10 +678,14 @@ gdk_wayland_screen_get_setting (GdkScreen *screen,
|
||||
const gchar *name,
|
||||
GValue *value)
|
||||
{
|
||||
GdkWaylandScreen *wayland_screen = GDK_WAYLAND_SCREEN (screen);
|
||||
TranslationEntry *entry;
|
||||
|
||||
g_return_val_if_fail (GDK_IS_SCREEN (screen), FALSE);
|
||||
|
||||
if (g_settings_schema_source_get_default () == NULL)
|
||||
return FALSE;
|
||||
|
||||
entry = find_translation_entry_by_setting (name);
|
||||
if (entry != NULL)
|
||||
{
|
||||
@@ -685,6 +714,18 @@ gdk_wayland_screen_get_setting (GdkScreen *screen,
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
if (strcmp (name, "gtk-fontconfig-timestamp") == 0)
|
||||
{
|
||||
g_value_set_uint (value, wayland_screen->dbus_settings.fontconfig_timestamp);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
if (strcmp (name, "gtk-modules") == 0)
|
||||
{
|
||||
g_value_set_string (value, wayland_screen->dbus_settings.modules);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
@@ -822,6 +863,107 @@ gdk_wayland_visual_new (GdkScreen *screen)
|
||||
return visual;
|
||||
}
|
||||
|
||||
static void
|
||||
dbus_properties_change_cb (GDBusProxy *proxy,
|
||||
GVariant *changed_properties,
|
||||
const gchar* const *invalidated_properties,
|
||||
gpointer user_data)
|
||||
{
|
||||
GdkWaylandScreen *screen_wayland = user_data;
|
||||
GVariant *value;
|
||||
gint64 timestamp;
|
||||
|
||||
if (g_variant_n_children (changed_properties) <= 0)
|
||||
return;
|
||||
|
||||
value = g_variant_lookup_value (changed_properties,
|
||||
"FontconfigTimestamp",
|
||||
G_VARIANT_TYPE_INT64);
|
||||
|
||||
if (value != NULL)
|
||||
{
|
||||
timestamp = g_variant_get_int64 (value);
|
||||
timestamp = timestamp / G_TIME_SPAN_SECOND;
|
||||
|
||||
if (timestamp > 0 && timestamp <= G_MAXUINT)
|
||||
screen_wayland->dbus_settings.fontconfig_timestamp = (guint)timestamp;
|
||||
else if (timestamp > G_MAXUINT)
|
||||
g_warning ("Could not handle fontconfig update: timestamp out of bound");
|
||||
|
||||
notify_setting (GDK_SCREEN (screen_wayland), "gtk-fontconfig-timestamp");
|
||||
|
||||
g_variant_unref (value);
|
||||
}
|
||||
|
||||
value = g_variant_lookup_value (changed_properties,
|
||||
"Modules",
|
||||
G_VARIANT_TYPE_STRING);
|
||||
|
||||
if (value != NULL)
|
||||
{
|
||||
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");
|
||||
|
||||
g_variant_unref (value);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
fontconfig_dbus_proxy_open_cb (GObject *object,
|
||||
GAsyncResult *result,
|
||||
gpointer user_data)
|
||||
{
|
||||
GdkWaylandScreen *screen_wayland = user_data;
|
||||
GDBusProxy *proxy;
|
||||
GVariant *value;
|
||||
gint64 timestamp;
|
||||
|
||||
proxy = g_dbus_proxy_new_for_bus_finish (result, NULL);
|
||||
|
||||
if (proxy == NULL)
|
||||
return;
|
||||
|
||||
screen_wayland->dbus_proxy = proxy;
|
||||
screen_wayland->dbus_setting_change_id =
|
||||
g_signal_connect (screen_wayland->dbus_proxy,
|
||||
"g-properties-changed",
|
||||
G_CALLBACK (dbus_properties_change_cb),
|
||||
screen_wayland);
|
||||
|
||||
value = g_dbus_proxy_get_cached_property (screen_wayland->dbus_proxy,
|
||||
"FontconfigTimestamp");
|
||||
|
||||
if (value && g_variant_is_of_type (value, G_VARIANT_TYPE_INT64))
|
||||
{
|
||||
timestamp = g_variant_get_int64 (value);
|
||||
timestamp = timestamp / G_TIME_SPAN_SECOND;
|
||||
|
||||
if (timestamp > 0 && timestamp <= G_MAXUINT)
|
||||
screen_wayland->dbus_settings.fontconfig_timestamp = (guint)timestamp;
|
||||
else if (timestamp > G_MAXUINT)
|
||||
g_warning ("Could not handle fontconfig init: timestamp out of bound");
|
||||
}
|
||||
|
||||
if (value != NULL)
|
||||
g_variant_unref (value);
|
||||
|
||||
value = g_dbus_proxy_get_cached_property (screen_wayland->dbus_proxy,
|
||||
"Modules");
|
||||
|
||||
if (value && g_variant_is_of_type (value, G_VARIANT_TYPE_STRING))
|
||||
{
|
||||
g_free (screen_wayland->dbus_settings.modules);
|
||||
|
||||
screen_wayland->dbus_settings.modules = g_variant_dup_string (value, NULL);
|
||||
}
|
||||
|
||||
if (value != NULL)
|
||||
g_variant_unref (value);
|
||||
}
|
||||
|
||||
GdkScreen *
|
||||
_gdk_wayland_screen_new (GdkDisplay *display)
|
||||
{
|
||||
@@ -842,6 +984,17 @@ _gdk_wayland_screen_new (GdkDisplay *display)
|
||||
screen_wayland->width,
|
||||
screen_wayland->height);
|
||||
|
||||
screen_wayland->dbus_cancellable = g_cancellable_new ();
|
||||
g_dbus_proxy_new_for_bus (G_BUS_TYPE_SESSION,
|
||||
G_DBUS_PROXY_FLAGS_NONE,
|
||||
NULL,
|
||||
GTK_SETTINGS_DBUS_NAME,
|
||||
GTK_SETTINGS_DBUS_PATH,
|
||||
GTK_SETTINGS_DBUS_NAME,
|
||||
screen_wayland->dbus_cancellable,
|
||||
fontconfig_dbus_proxy_open_cb,
|
||||
screen_wayland);
|
||||
|
||||
init_settings (screen);
|
||||
|
||||
return screen;
|
||||
|
||||
@@ -61,12 +61,6 @@ struct _StoredSelection
|
||||
gint fd;
|
||||
};
|
||||
|
||||
struct _DataSourceData
|
||||
{
|
||||
GdkWindow *window;
|
||||
GdkAtom selection;
|
||||
};
|
||||
|
||||
struct _DataOfferData
|
||||
{
|
||||
GDestroyNotify destroy_notify;
|
||||
@@ -119,6 +113,7 @@ struct _GdkWaylandSelection
|
||||
|
||||
static void selection_buffer_read (SelectionBuffer *buffer);
|
||||
static void async_write_data_write (AsyncWriteData *write_data);
|
||||
static void emit_selection_clear (GdkDisplay *display, GdkAtom selection);
|
||||
|
||||
static void
|
||||
selection_buffer_notify (SelectionBuffer *buffer)
|
||||
@@ -250,7 +245,7 @@ selection_buffer_read_cb (GObject *object,
|
||||
|
||||
if (bytes)
|
||||
{
|
||||
finished = g_bytes_get_size (bytes) < get_buffer_size ();
|
||||
finished = g_bytes_get_size (bytes) == 0;
|
||||
selection_buffer_append_data (buffer,
|
||||
g_bytes_get_data (bytes, NULL),
|
||||
g_bytes_get_size (bytes));
|
||||
@@ -927,6 +922,7 @@ data_source_cancelled (void *data,
|
||||
if (context)
|
||||
gdk_drag_context_cancel (context, GDK_DRAG_CANCEL_ERROR);
|
||||
|
||||
emit_selection_clear (display, atom);
|
||||
gdk_selection_owner_set (NULL, atom, GDK_CURRENT_TIME, TRUE);
|
||||
gdk_wayland_selection_unset_data_source (display, atom);
|
||||
}
|
||||
@@ -1037,6 +1033,7 @@ primary_source_cancelled (void *data,
|
||||
display = gdk_display_get_default ();
|
||||
|
||||
atom = atoms[ATOM_PRIMARY];
|
||||
emit_selection_clear (display, atom);
|
||||
gdk_selection_owner_set (NULL, atom, GDK_CURRENT_TIME, TRUE);
|
||||
gdk_wayland_selection_unset_data_source (display, atom);
|
||||
}
|
||||
@@ -1278,6 +1275,28 @@ emit_empty_selection_notify (GdkWindow *requestor,
|
||||
gdk_event_free (event);
|
||||
}
|
||||
|
||||
static void
|
||||
emit_selection_clear (GdkDisplay *display,
|
||||
GdkAtom selection)
|
||||
{
|
||||
GdkEvent *event;
|
||||
GdkWindow *window;
|
||||
|
||||
event = gdk_event_new (GDK_SELECTION_CLEAR);
|
||||
event->selection.selection = selection;
|
||||
event->selection.time = GDK_CURRENT_TIME;
|
||||
|
||||
window = _gdk_wayland_display_get_selection_owner (display, selection);
|
||||
if (window != NULL)
|
||||
{
|
||||
event->selection.window = g_object_ref (window);
|
||||
event->selection.requestor = g_object_ref (window);
|
||||
}
|
||||
|
||||
gdk_event_put (event);
|
||||
gdk_event_free (event);
|
||||
}
|
||||
|
||||
void
|
||||
_gdk_wayland_display_convert_selection (GdkDisplay *display,
|
||||
GdkWindow *requestor,
|
||||
|
||||
@@ -60,6 +60,10 @@ void gdk_wayland_display_set_startup_notification_id (GdkDisp
|
||||
GDK_AVAILABLE_IN_3_22
|
||||
gboolean gdk_wayland_display_prefers_ssd (GdkDisplay *display);
|
||||
|
||||
GDK_AVAILABLE_IN_3_22
|
||||
gboolean gdk_wayland_display_query_registry (GdkDisplay *display,
|
||||
const gchar *global);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#endif /* __GDK_WAYLAND_DISPLAY_H__ */
|
||||
|
||||
+845
-213
File diff suppressed because it is too large
Load Diff
@@ -54,11 +54,13 @@ libgdk_win32_la_SOURCES = \
|
||||
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 \
|
||||
gdkwin32.h \
|
||||
gdkwin32id.c \
|
||||
|
||||
@@ -1041,7 +1041,7 @@ G_GNUC_END_IGNORE_DEPRECATIONS;
|
||||
/* Don't produce any button or motion events while a window is being
|
||||
* moved or resized, see bug #151090.
|
||||
*/
|
||||
if (_modal_operation_in_progress)
|
||||
if (_modal_operation_in_progress & GDK_WIN32_MODAL_OP_SIZEMOVE_MASK)
|
||||
{
|
||||
GDK_NOTE (EVENTS_OR_INPUT, g_print ("... ignored when moving/sizing\n"));
|
||||
return FALSE;
|
||||
|
||||
@@ -551,9 +551,12 @@ inner_clipboard_window_procedure (HWND hwnd,
|
||||
case WM_DRAWCLIPBOARD:
|
||||
{
|
||||
HWND hwnd_owner;
|
||||
HWND stored_hwnd_owner;
|
||||
HWND hwnd_opener;
|
||||
GdkEvent *event;
|
||||
GdkWindow *owner;
|
||||
GdkWindow *stored_owner;
|
||||
GdkWin32Selection *win32_sel = _gdk_win32_selection_get ();
|
||||
|
||||
hwnd_owner = GetClipboardOwner ();
|
||||
|
||||
@@ -568,14 +571,16 @@ inner_clipboard_window_procedure (HWND hwnd,
|
||||
#ifdef G_ENABLE_DEBUG
|
||||
if (_gdk_debug_flags & GDK_DEBUG_DND)
|
||||
{
|
||||
if (OpenClipboard (hwnd))
|
||||
if (win32_sel->clipboard_opened_for != INVALID_HANDLE_VALUE ||
|
||||
OpenClipboard (hwnd))
|
||||
{
|
||||
UINT nFormat = 0;
|
||||
|
||||
while ((nFormat = EnumClipboardFormats (nFormat)) != 0)
|
||||
g_print ("%s ", _gdk_win32_cf_to_string (nFormat));
|
||||
|
||||
CloseClipboard ();
|
||||
if (win32_sel->clipboard_opened_for == INVALID_HANDLE_VALUE)
|
||||
CloseClipboard ();
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -590,6 +595,27 @@ inner_clipboard_window_procedure (HWND hwnd,
|
||||
if (owner == NULL)
|
||||
owner = gdk_win32_window_foreign_new_for_display (_gdk_display, hwnd_owner);
|
||||
|
||||
stored_owner = _gdk_win32_display_get_selection_owner (gdk_display_get_default (),
|
||||
GDK_SELECTION_CLIPBOARD);
|
||||
|
||||
if (stored_owner)
|
||||
stored_hwnd_owner = GDK_WINDOW_HWND (stored_owner);
|
||||
else
|
||||
stored_hwnd_owner = NULL;
|
||||
|
||||
if (stored_hwnd_owner != hwnd_owner)
|
||||
{
|
||||
if (win32_sel->clipboard_opened_for != INVALID_HANDLE_VALUE)
|
||||
{
|
||||
CloseClipboard ();
|
||||
GDK_NOTE (DND, g_print ("Closed clipboard @ %s:%d\n", __FILE__, __LINE__));
|
||||
}
|
||||
|
||||
win32_sel->clipboard_opened_for = INVALID_HANDLE_VALUE;
|
||||
|
||||
_gdk_win32_clear_clipboard_queue ();
|
||||
}
|
||||
|
||||
event = gdk_event_new (GDK_OWNER_CHANGE);
|
||||
event->owner_change.window = gdk_get_default_root_window ();
|
||||
event->owner_change.owner = owner;
|
||||
@@ -686,10 +712,11 @@ gdk_win32_display_request_selection_notification (GdkDisplay *display,
|
||||
{
|
||||
GdkWin32Display *display_win32 = GDK_WIN32_DISPLAY (display);
|
||||
gboolean ret = FALSE;
|
||||
gchar *selection_name = gdk_atom_name (selection);
|
||||
|
||||
GDK_NOTE (DND,
|
||||
g_print ("gdk_display_request_selection_notification (..., %s)",
|
||||
gdk_atom_name (selection)));
|
||||
selection_name));
|
||||
|
||||
if (selection == GDK_SELECTION_CLIPBOARD ||
|
||||
selection == GDK_SELECTION_PRIMARY)
|
||||
@@ -709,6 +736,8 @@ gdk_win32_display_request_selection_notification (GdkDisplay *display,
|
||||
ret = FALSE;
|
||||
}
|
||||
|
||||
g_free (selection_name);
|
||||
|
||||
GDK_NOTE (DND, g_print (" -> %s\n", ret ? "TRUE" : "FALSE"));
|
||||
return ret;
|
||||
}
|
||||
@@ -716,16 +745,30 @@ gdk_win32_display_request_selection_notification (GdkDisplay *display,
|
||||
static gboolean
|
||||
gdk_win32_display_supports_clipboard_persistence (GdkDisplay *display)
|
||||
{
|
||||
return FALSE;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_win32_display_store_clipboard (GdkDisplay *display,
|
||||
GdkWindow *clipboard_window,
|
||||
guint32 time_,
|
||||
const GdkAtom *targets,
|
||||
gint n_targets)
|
||||
GdkWindow *clipboard_window,
|
||||
guint32 time_,
|
||||
const GdkAtom *targets,
|
||||
gint n_targets)
|
||||
{
|
||||
GdkEvent tmp_event;
|
||||
SendMessage (GDK_WINDOW_HWND (clipboard_window), WM_RENDERALLFORMATS, 0, 0);
|
||||
|
||||
memset (&tmp_event, 0, sizeof (tmp_event));
|
||||
tmp_event.selection.type = GDK_SELECTION_NOTIFY;
|
||||
tmp_event.selection.window = clipboard_window;
|
||||
tmp_event.selection.send_event = FALSE;
|
||||
tmp_event.selection.selection = _gdk_win32_selection_atom (GDK_WIN32_ATOM_INDEX_CLIPBOARD_MANAGER);
|
||||
tmp_event.selection.target = 0;
|
||||
tmp_event.selection.property = GDK_NONE;
|
||||
tmp_event.selection.requestor = 0;
|
||||
tmp_event.selection.time = GDK_CURRENT_TIME;
|
||||
|
||||
gdk_event_put (&tmp_event);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
|
||||
@@ -73,7 +73,6 @@ struct _GdkWin32Display
|
||||
/* WGL/OpenGL Items */
|
||||
guint have_wgl : 1;
|
||||
guint gl_version;
|
||||
HDC gl_hdc;
|
||||
HWND gl_hwnd;
|
||||
|
||||
GPtrArray *monitors;
|
||||
|
||||
+1333
-473
File diff suppressed because it is too large
Load Diff
+125
-51
@@ -56,6 +56,7 @@
|
||||
#include "gdkdevice-wintab.h"
|
||||
#include "gdkwin32dnd.h"
|
||||
#include "gdkdisplay-win32.h"
|
||||
#include "gdkselection-win32.h"
|
||||
#include "gdkdndprivate.h"
|
||||
|
||||
#include <windowsx.h>
|
||||
@@ -1736,36 +1737,42 @@ modal_timer_proc (HWND hwnd,
|
||||
{
|
||||
int arbitrary_limit = 10;
|
||||
|
||||
while (_modal_operation_in_progress &&
|
||||
while (_modal_operation_in_progress != GDK_WIN32_MODAL_OP_NONE &&
|
||||
g_main_context_pending (NULL) &&
|
||||
arbitrary_limit--)
|
||||
g_main_context_iteration (NULL, FALSE);
|
||||
}
|
||||
|
||||
void
|
||||
_gdk_win32_begin_modal_call (void)
|
||||
_gdk_win32_begin_modal_call (GdkWin32ModalOpKind kind)
|
||||
{
|
||||
g_assert (!_modal_operation_in_progress);
|
||||
GdkWin32ModalOpKind was = _modal_operation_in_progress;
|
||||
g_assert (!(_modal_operation_in_progress & kind));
|
||||
|
||||
_modal_operation_in_progress = TRUE;
|
||||
_modal_operation_in_progress |= kind;
|
||||
|
||||
modal_timer = SetTimer (NULL, 0, 10, modal_timer_proc);
|
||||
if (modal_timer == 0)
|
||||
WIN32_API_FAILED ("SetTimer");
|
||||
if (was == GDK_WIN32_MODAL_OP_NONE)
|
||||
{
|
||||
modal_timer = SetTimer (NULL, 0, 10, modal_timer_proc);
|
||||
|
||||
if (modal_timer == 0)
|
||||
WIN32_API_FAILED ("SetTimer");
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
_gdk_win32_end_modal_call (void)
|
||||
_gdk_win32_end_modal_call (GdkWin32ModalOpKind kind)
|
||||
{
|
||||
g_assert (_modal_operation_in_progress);
|
||||
g_assert (_modal_operation_in_progress & kind);
|
||||
|
||||
_modal_operation_in_progress = FALSE;
|
||||
_modal_operation_in_progress &= ~kind;
|
||||
|
||||
if (modal_timer != 0)
|
||||
if (_modal_operation_in_progress == GDK_WIN32_MODAL_OP_NONE &&
|
||||
modal_timer != 0)
|
||||
{
|
||||
API_CALL (KillTimer, (NULL, modal_timer));
|
||||
modal_timer = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static VOID CALLBACK
|
||||
@@ -2280,6 +2287,10 @@ gdk_event_translate (MSG *msg,
|
||||
|
||||
int i;
|
||||
|
||||
GdkWin32Selection *win32_sel = NULL;
|
||||
|
||||
STGMEDIUM *property_change_data;
|
||||
|
||||
display = gdk_display_get_default ();
|
||||
window = gdk_win32_handle_table_lookup (msg->hwnd);
|
||||
|
||||
@@ -3139,7 +3150,8 @@ gdk_event_translate (MSG *msg,
|
||||
|
||||
case WM_KILLFOCUS:
|
||||
if (keyboard_grab != NULL &&
|
||||
!GDK_WINDOW_DESTROYED (keyboard_grab->window))
|
||||
!GDK_WINDOW_DESTROYED (keyboard_grab->window) &&
|
||||
(_modal_operation_in_progress & GDK_WIN32_MODAL_OP_DND) == 0)
|
||||
{
|
||||
generate_grab_broken_event (device_manager, keyboard_grab->window, TRUE, NULL);
|
||||
}
|
||||
@@ -3246,30 +3258,54 @@ gdk_event_translate (MSG *msg,
|
||||
break;
|
||||
|
||||
case WM_ENTERSIZEMOVE:
|
||||
case WM_ENTERMENULOOP:
|
||||
if (msg->message == WM_ENTERSIZEMOVE)
|
||||
_modal_move_resize_window = msg->hwnd;
|
||||
|
||||
_gdk_win32_begin_modal_call ();
|
||||
_modal_move_resize_window = msg->hwnd;
|
||||
_gdk_win32_begin_modal_call (GDK_WIN32_MODAL_OP_SIZEMOVE_MASK);
|
||||
break;
|
||||
|
||||
case WM_EXITSIZEMOVE:
|
||||
case WM_EXITMENULOOP:
|
||||
if (_modal_operation_in_progress)
|
||||
if (_modal_operation_in_progress & GDK_WIN32_MODAL_OP_SIZEMOVE_MASK)
|
||||
{
|
||||
_modal_move_resize_window = NULL;
|
||||
_gdk_win32_end_modal_call ();
|
||||
_gdk_win32_end_modal_call (GDK_WIN32_MODAL_OP_SIZEMOVE_MASK);
|
||||
}
|
||||
break;
|
||||
|
||||
case WM_ENTERMENULOOP:
|
||||
_gdk_win32_begin_modal_call (GDK_WIN32_MODAL_OP_MENU);
|
||||
break;
|
||||
|
||||
case WM_EXITMENULOOP:
|
||||
if (_modal_operation_in_progress & GDK_WIN32_MODAL_OP_MENU)
|
||||
_gdk_win32_end_modal_call (GDK_WIN32_MODAL_OP_MENU);
|
||||
break;
|
||||
|
||||
break;
|
||||
|
||||
/*
|
||||
* Handle WM_CANCELMODE and do nothing in response to it when DnD is
|
||||
* active. Otherwise pass it to DefWindowProc, which will call ReleaseCapture()
|
||||
* on our behalf.
|
||||
* This prevents us from losing mouse capture when alt-tabbing during DnD
|
||||
* (this includes the feature of Windows Explorer where dragging stuff over
|
||||
* a window button in the taskbar causes that window to receive focus, i.e.
|
||||
* keyboardless alt-tabbing).
|
||||
*/
|
||||
case WM_CANCELMODE:
|
||||
if (_modal_operation_in_progress & GDK_WIN32_MODAL_OP_DND)
|
||||
{
|
||||
return_val = TRUE;
|
||||
*ret_valp = 0;
|
||||
}
|
||||
break;
|
||||
|
||||
case WM_CAPTURECHANGED:
|
||||
/* Sometimes we don't get WM_EXITSIZEMOVE, for instance when you
|
||||
select move/size in the menu and then click somewhere without
|
||||
moving/resizing. We work around this using WM_CAPTURECHANGED. */
|
||||
if (_modal_operation_in_progress)
|
||||
if (_modal_operation_in_progress & GDK_WIN32_MODAL_OP_SIZEMOVE_MASK)
|
||||
{
|
||||
_modal_move_resize_window = NULL;
|
||||
_gdk_win32_end_modal_call ();
|
||||
_gdk_win32_end_modal_call (GDK_WIN32_MODAL_OP_SIZEMOVE_MASK);
|
||||
}
|
||||
|
||||
impl = GDK_WINDOW_IMPL_WIN32 (window->impl);
|
||||
@@ -3425,7 +3461,7 @@ gdk_event_translate (MSG *msg,
|
||||
}
|
||||
|
||||
/* Call modal timer immediate so that we repaint faster after a resize. */
|
||||
if (_modal_operation_in_progress)
|
||||
if (_modal_operation_in_progress & GDK_WIN32_MODAL_OP_SIZEMOVE_MASK)
|
||||
modal_timer_proc (0,0,0,0);
|
||||
|
||||
/* Claim as handled, so that WM_SIZE and WM_MOVE are avoided */
|
||||
@@ -3721,7 +3757,9 @@ gdk_event_translate (MSG *msg,
|
||||
break;
|
||||
|
||||
case WM_DESTROYCLIPBOARD:
|
||||
if (!_ignore_destroy_clipboard)
|
||||
win32_sel = _gdk_win32_selection_get ();
|
||||
|
||||
if (!win32_sel->ignore_destroy_clipboard)
|
||||
{
|
||||
event = gdk_event_new (GDK_SELECTION_CLEAR);
|
||||
event->selection.window = window;
|
||||
@@ -3739,12 +3777,29 @@ gdk_event_translate (MSG *msg,
|
||||
case WM_RENDERFORMAT:
|
||||
GDK_NOTE (EVENTS, g_print (" %s", _gdk_win32_cf_to_string (msg->wParam)));
|
||||
|
||||
if (!(target = g_hash_table_lookup (_format_atom_table, GINT_TO_POINTER (msg->wParam))))
|
||||
{
|
||||
GDK_NOTE (EVENTS, g_print (" (target not found)"));
|
||||
return_val = TRUE;
|
||||
break;
|
||||
}
|
||||
*ret_valp = 0;
|
||||
return_val = TRUE;
|
||||
|
||||
win32_sel = _gdk_win32_selection_get ();
|
||||
|
||||
for (target = NULL, i = 0;
|
||||
i < win32_sel->clipboard_selection_targets->len;
|
||||
i++)
|
||||
{
|
||||
GdkSelTargetFormat target_format = g_array_index (win32_sel->clipboard_selection_targets, GdkSelTargetFormat, i);
|
||||
|
||||
if (target_format.format == msg->wParam)
|
||||
{
|
||||
target = target_format.target;
|
||||
win32_sel->property_change_transmute = target_format.transmute;
|
||||
}
|
||||
}
|
||||
|
||||
if (target == NULL)
|
||||
{
|
||||
GDK_NOTE (EVENTS, g_print (" (target not found)"));
|
||||
break;
|
||||
}
|
||||
|
||||
/* We need to render to clipboard immediately, don't call
|
||||
* _gdk_win32_append_event()
|
||||
@@ -3754,45 +3809,62 @@ gdk_event_translate (MSG *msg,
|
||||
event->selection.send_event = FALSE;
|
||||
event->selection.selection = GDK_SELECTION_CLIPBOARD;
|
||||
event->selection.target = target;
|
||||
event->selection.property = _gdk_selection;
|
||||
event->selection.property = _gdk_win32_selection_atom (GDK_WIN32_ATOM_INDEX_GDK_SELECTION);
|
||||
event->selection.requestor = gdk_win32_handle_table_lookup (msg->hwnd);
|
||||
event->selection.time = msg->time;
|
||||
property_change_data = g_new0 (STGMEDIUM, 1);
|
||||
win32_sel->property_change_data = property_change_data;
|
||||
win32_sel->property_change_format = msg->wParam;
|
||||
win32_sel->property_change_target_atom = target;
|
||||
|
||||
fixup_event (event);
|
||||
GDK_NOTE (EVENTS, g_print (" (calling _gdk_event_emit)"));
|
||||
GDK_NOTE (EVENTS, _gdk_win32_print_event (event));
|
||||
_gdk_event_emit (event);
|
||||
gdk_event_free (event);
|
||||
win32_sel->property_change_format = 0;
|
||||
|
||||
/* Now the clipboard owner should have rendered */
|
||||
if (!_delayed_rendering_data)
|
||||
if (!property_change_data->hGlobal)
|
||||
{
|
||||
GDK_NOTE (EVENTS, g_print (" (no _delayed_rendering_data?)"));
|
||||
}
|
||||
else
|
||||
{
|
||||
if (msg->wParam == CF_DIB)
|
||||
{
|
||||
_delayed_rendering_data =
|
||||
_gdk_win32_selection_convert_to_dib (_delayed_rendering_data,
|
||||
target);
|
||||
if (!_delayed_rendering_data)
|
||||
{
|
||||
g_warning ("Cannot convert to DIB from delayed rendered image");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* The requestor is holding the clipboard, no
|
||||
* OpenClipboard() is required/possible
|
||||
*/
|
||||
GDK_NOTE (DND,
|
||||
g_print (" SetClipboardData(%s,%p)",
|
||||
_gdk_win32_cf_to_string (msg->wParam),
|
||||
_delayed_rendering_data));
|
||||
property_change_data->hGlobal));
|
||||
|
||||
API_CALL (SetClipboardData, (msg->wParam, _delayed_rendering_data));
|
||||
_delayed_rendering_data = NULL;
|
||||
API_CALL (SetClipboardData, (msg->wParam, property_change_data->hGlobal));
|
||||
}
|
||||
|
||||
g_clear_pointer (&property_change_data, g_free);
|
||||
*ret_valp = 0;
|
||||
return_val = TRUE;
|
||||
break;
|
||||
|
||||
case WM_RENDERALLFORMATS:
|
||||
*ret_valp = 0;
|
||||
return_val = TRUE;
|
||||
|
||||
win32_sel = _gdk_win32_selection_get ();
|
||||
|
||||
if (API_CALL (OpenClipboard, (msg->hwnd)))
|
||||
{
|
||||
for (target = NULL, i = 0;
|
||||
i < win32_sel->clipboard_selection_targets->len;
|
||||
i++)
|
||||
{
|
||||
GdkSelTargetFormat target_format = g_array_index (win32_sel->clipboard_selection_targets, GdkSelTargetFormat, i);
|
||||
if (target_format.format != 0)
|
||||
SendMessage (msg->hwnd, WM_RENDERFORMAT, target_format.format, 0);
|
||||
}
|
||||
|
||||
API_CALL (CloseClipboard, ());
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -3962,16 +4034,18 @@ gdk_event_dispatch (GSource *source,
|
||||
|
||||
if (event)
|
||||
{
|
||||
GdkWin32Selection *sel_win32 = _gdk_win32_selection_get ();
|
||||
|
||||
_gdk_event_emit (event);
|
||||
|
||||
gdk_event_free (event);
|
||||
|
||||
/* Do drag & drop if it is still pending */
|
||||
if (_dnd_source_state == GDK_WIN32_DND_PENDING)
|
||||
if (sel_win32->dnd_source_state == GDK_WIN32_DND_PENDING)
|
||||
{
|
||||
_dnd_source_state = GDK_WIN32_DND_DRAGGING;
|
||||
sel_win32->dnd_source_state = GDK_WIN32_DND_DRAGGING;
|
||||
_gdk_win32_dnd_do_dragdrop ();
|
||||
_dnd_source_state = GDK_WIN32_DND_NONE;
|
||||
sel_win32->dnd_source_state = GDK_WIN32_DND_NONE;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -215,8 +215,6 @@ _destroy_dummy_gl_context (GdkWGLDummy dummy)
|
||||
{
|
||||
if (dummy.hglrc != NULL)
|
||||
{
|
||||
if (wglGetCurrentContext () == dummy.hglrc)
|
||||
wglMakeCurrent (NULL, NULL);
|
||||
wglDeleteContext (dummy.hglrc);
|
||||
dummy.hglrc = NULL;
|
||||
}
|
||||
@@ -302,6 +300,10 @@ _get_wgl_pfd (HDC hdc,
|
||||
int pixelAttribs[PIXEL_ATTRIBUTES];
|
||||
int alpha_idx = 0;
|
||||
|
||||
/* Save up the HDC and HGLRC that we are currently using, to restore back to it when we are done here */
|
||||
HDC hdc_current = wglGetCurrentDC ();
|
||||
HGLRC hglrc_current = wglGetCurrentContext ();
|
||||
|
||||
if (display->hasWglARBmultisample)
|
||||
{
|
||||
/* 2 pairs of values needed for multisampling/AA support */
|
||||
@@ -355,7 +357,10 @@ _get_wgl_pfd (HDC hdc,
|
||||
best_pf = _gdk_init_dummy_context (&dummy, need_alpha_bits);
|
||||
|
||||
if (best_pf == 0 || !wglMakeCurrent (dummy.hdc, dummy.hglrc))
|
||||
return 0;
|
||||
{
|
||||
wglMakeCurrent (hdc_current, hglrc_current);
|
||||
return 0;
|
||||
}
|
||||
|
||||
wglChoosePixelFormatARB (hdc,
|
||||
pixelAttribs,
|
||||
@@ -384,7 +389,8 @@ _get_wgl_pfd (HDC hdc,
|
||||
}
|
||||
}
|
||||
|
||||
wglMakeCurrent (NULL, NULL);
|
||||
/* Go back to the HDC that we were using, since we are done with the dummy HDC and GL Context */
|
||||
wglMakeCurrent (hdc_current, hglrc_current);
|
||||
_destroy_dummy_gl_context (dummy);
|
||||
}
|
||||
else
|
||||
@@ -447,7 +453,7 @@ _gdk_init_dummy_context (GdkWGLDummy *dummy,
|
||||
return best_idx;
|
||||
}
|
||||
|
||||
gboolean
|
||||
static gboolean
|
||||
_gdk_win32_display_init_gl (GdkDisplay *display,
|
||||
const gboolean need_alpha_bits)
|
||||
{
|
||||
@@ -487,10 +493,10 @@ _gdk_win32_display_init_gl (GdkDisplay *display,
|
||||
g_print ("WGL API version %d.%d found\n"
|
||||
" - Vendor: %s\n"
|
||||
" - Checked extensions:\n"
|
||||
"\t* WGL_ARB_pixel_format: %s\n",
|
||||
"\t* WGL_ARB_pixel_format: %s\n"
|
||||
"\t* WGL_ARB_create_context: %s\n"
|
||||
"\t* WGL_EXT_swap_control: %s\n"
|
||||
"\t* WGL_OML_sync_control: %s\n",
|
||||
"\t* WGL_OML_sync_control: %s\n"
|
||||
"\t* WGL_ARB_multisample: %s\n",
|
||||
display_win32->gl_version / 10,
|
||||
display_win32->gl_version % 10,
|
||||
@@ -578,11 +584,18 @@ _create_gl_context (HDC hdc,
|
||||
HGLRC hglrc_base = wglCreateContext (hdc);
|
||||
gboolean success = TRUE;
|
||||
|
||||
/* Save up the HDC and HGLRC that we are currently using, to restore back to it when we are done here */
|
||||
HDC hdc_current = wglGetCurrentDC ();
|
||||
HGLRC hglrc_current = wglGetCurrentContext ();
|
||||
|
||||
/* if we have no wglCreateContextAttribsARB(), return the legacy context when all is set */
|
||||
if (*is_legacy && !hasWglARBCreateContext)
|
||||
{
|
||||
if (_ensure_legacy_gl_context (hdc, hglrc_base, share))
|
||||
return hglrc_base;
|
||||
{
|
||||
wglMakeCurrent (hdc_current, hglrc_current);
|
||||
return hglrc_base;
|
||||
}
|
||||
|
||||
success = FALSE;
|
||||
goto gl_fail;
|
||||
@@ -632,17 +645,21 @@ _create_gl_context (HDC hdc,
|
||||
}
|
||||
|
||||
gl_fail:
|
||||
if (!success || hglrc != NULL)
|
||||
|
||||
if (!success)
|
||||
{
|
||||
wglMakeCurrent (NULL, NULL);
|
||||
wglDeleteContext (hglrc_base);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (!success)
|
||||
return NULL;
|
||||
wglMakeCurrent (hdc_current, hglrc_current);
|
||||
|
||||
if (hglrc != NULL)
|
||||
return hglrc;
|
||||
{
|
||||
wglDeleteContext (hglrc_base);
|
||||
return hglrc;
|
||||
}
|
||||
|
||||
return hglrc_base;
|
||||
}
|
||||
@@ -700,6 +717,7 @@ _gdk_win32_gl_context_realize (GdkGLContext *context,
|
||||
g_set_error_literal (error, GDK_GL_ERROR,
|
||||
GDK_GL_ERROR_UNSUPPORTED_FORMAT,
|
||||
_("No available configurations for the given pixel format"));
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
@@ -800,7 +818,6 @@ _gdk_win32_window_create_gl_context (GdkWindow *window,
|
||||
hwnd = GDK_WINDOW_HWND (window);
|
||||
hdc = GetDC (hwnd);
|
||||
|
||||
display_win32->gl_hdc = hdc;
|
||||
display_win32->gl_hwnd = hwnd;
|
||||
|
||||
context = g_object_new (GDK_TYPE_WIN32_GL_CONTEXT,
|
||||
@@ -835,15 +852,13 @@ _gdk_win32_display_make_gl_context_current (GdkDisplay *display,
|
||||
|
||||
context_win32 = GDK_WIN32_GL_CONTEXT (context);
|
||||
|
||||
if (!wglMakeCurrent (display_win32->gl_hdc, context_win32->hglrc))
|
||||
if (!wglMakeCurrent (context_win32->gl_hdc, context_win32->hglrc))
|
||||
{
|
||||
GDK_NOTE (OPENGL,
|
||||
g_print ("Making WGL context current failed\n"));
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
context_win32->gl_hdc = display_win32->gl_hdc;
|
||||
|
||||
if (context_win32->is_attached && display_win32->hasWglEXTSwapControl)
|
||||
{
|
||||
window = gdk_gl_context_get_window (context);
|
||||
|
||||
@@ -41,41 +41,11 @@ HKL _gdk_input_locale;
|
||||
gboolean _gdk_input_locale_is_ime;
|
||||
UINT _gdk_input_codepage;
|
||||
|
||||
GdkAtom _gdk_selection;
|
||||
GdkAtom _wm_transient_for;
|
||||
GdkAtom _targets;
|
||||
GdkAtom _delete;
|
||||
GdkAtom _save_targets;
|
||||
GdkAtom _utf8_string;
|
||||
GdkAtom _text;
|
||||
GdkAtom _compound_text;
|
||||
GdkAtom _text_uri_list;
|
||||
GdkAtom _text_html;
|
||||
GdkAtom _image_png;
|
||||
GdkAtom _image_jpeg;
|
||||
GdkAtom _image_bmp;
|
||||
GdkAtom _image_gif;
|
||||
|
||||
GdkAtom _local_dnd;
|
||||
GdkAtom _gdk_win32_dropfiles;
|
||||
GdkAtom _gdk_ole2_dnd;
|
||||
|
||||
UINT _cf_png;
|
||||
UINT _cf_jfif;
|
||||
UINT _cf_gif;
|
||||
UINT _cf_url;
|
||||
UINT _cf_html_format;
|
||||
UINT _cf_text_html;
|
||||
|
||||
GdkWin32DndState _dnd_target_state = GDK_WIN32_DND_NONE;
|
||||
GdkWin32DndState _dnd_source_state = GDK_WIN32_DND_NONE;
|
||||
|
||||
gint _gdk_input_ignore_wintab = FALSE;
|
||||
gint _gdk_max_colors = 0;
|
||||
|
||||
gboolean _modal_operation_in_progress = FALSE;
|
||||
GdkWin32ModalOpKind _modal_operation_in_progress = GDK_WIN32_MODAL_OP_NONE;
|
||||
HWND _modal_move_resize_window = NULL;
|
||||
gboolean _ignore_destroy_clipboard = FALSE;
|
||||
|
||||
HGLOBAL _delayed_rendering_data = NULL;
|
||||
GHashTable *_format_atom_table = NULL;
|
||||
/* The singleton selection object pointer */
|
||||
GdkWin32Selection *_win32_selection = NULL;
|
||||
|
||||
@@ -44,6 +44,9 @@
|
||||
#include <wintab.h>
|
||||
#include <imm.h>
|
||||
|
||||
/* for CFSTR_SHELLIDLIST */
|
||||
#include <shlobj.h>
|
||||
|
||||
static gboolean gdk_synchronize = FALSE;
|
||||
|
||||
static gboolean dummy;
|
||||
@@ -98,38 +101,6 @@ _gdk_win32_windowing_init (void)
|
||||
GDK_NOTE (EVENTS, g_print ("input_locale:%p, codepage:%d\n",
|
||||
_gdk_input_locale, _gdk_input_codepage));
|
||||
|
||||
_gdk_selection = gdk_atom_intern_static_string ("GDK_SELECTION");
|
||||
_wm_transient_for = gdk_atom_intern_static_string ("WM_TRANSIENT_FOR");
|
||||
_targets = gdk_atom_intern_static_string ("TARGETS");
|
||||
_delete = gdk_atom_intern_static_string ("DELETE");
|
||||
_save_targets = gdk_atom_intern_static_string ("SAVE_TARGETS");
|
||||
_utf8_string = gdk_atom_intern_static_string ("UTF8_STRING");
|
||||
_text = gdk_atom_intern_static_string ("TEXT");
|
||||
_compound_text = gdk_atom_intern_static_string ("COMPOUND_TEXT");
|
||||
_text_uri_list = gdk_atom_intern_static_string ("text/uri-list");
|
||||
_text_html = gdk_atom_intern_static_string ("text/html");
|
||||
_image_png = gdk_atom_intern_static_string ("image/png");
|
||||
_image_jpeg = gdk_atom_intern_static_string ("image/jpeg");
|
||||
_image_bmp = gdk_atom_intern_static_string ("image/bmp");
|
||||
_image_gif = gdk_atom_intern_static_string ("image/gif");
|
||||
|
||||
_local_dnd = gdk_atom_intern_static_string ("LocalDndSelection");
|
||||
_gdk_win32_dropfiles = gdk_atom_intern_static_string ("DROPFILES_DND");
|
||||
_gdk_ole2_dnd = gdk_atom_intern_static_string ("OLE2_DND");
|
||||
|
||||
/* MS Office 2007, at least, offers images in common file formats
|
||||
* using clipboard format names like "PNG" and "JFIF". So we follow
|
||||
* the lead and map the GDK target name "image/png" to the clipboard
|
||||
* format name "PNG" etc.
|
||||
*/
|
||||
_cf_png = RegisterClipboardFormat ("PNG");
|
||||
_cf_jfif = RegisterClipboardFormat ("JFIF");
|
||||
_cf_gif = RegisterClipboardFormat ("GIF");
|
||||
|
||||
_cf_url = RegisterClipboardFormat ("UniformResourceLocatorW");
|
||||
_cf_html_format = RegisterClipboardFormat ("HTML Format");
|
||||
_cf_text_html = RegisterClipboardFormat ("text/html");
|
||||
|
||||
_gdk_win32_selection_init ();
|
||||
}
|
||||
|
||||
|
||||
@@ -766,10 +766,7 @@ prune_monitors (EnumMonitorData *data)
|
||||
m = g_ptr_array_index (data->monitors, i);
|
||||
|
||||
if (m->remove)
|
||||
{
|
||||
g_ptr_array_remove_index (data->monitors, i);
|
||||
continue;
|
||||
}
|
||||
g_ptr_array_remove_index (data->monitors, i--);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -40,6 +40,7 @@
|
||||
#include <gdk/win32/gdkwin32display.h>
|
||||
#include <gdk/win32/gdkwin32screen.h>
|
||||
#include <gdk/win32/gdkwin32keys.h>
|
||||
#include <gdk/win32/gdkselection-win32.h>
|
||||
|
||||
#include "gdkinternals.h"
|
||||
|
||||
@@ -296,46 +297,8 @@ extern UINT _gdk_input_codepage;
|
||||
|
||||
extern guint _gdk_keymap_serial;
|
||||
|
||||
/* GdkAtoms: properties, targets and types */
|
||||
extern GdkAtom _gdk_selection;
|
||||
extern GdkAtom _wm_transient_for;
|
||||
extern GdkAtom _targets;
|
||||
extern GdkAtom _delete;
|
||||
extern GdkAtom _save_targets;
|
||||
extern GdkAtom _utf8_string;
|
||||
extern GdkAtom _text;
|
||||
extern GdkAtom _compound_text;
|
||||
extern GdkAtom _text_uri_list;
|
||||
extern GdkAtom _text_html;
|
||||
extern GdkAtom _image_png;
|
||||
extern GdkAtom _image_jpeg;
|
||||
extern GdkAtom _image_bmp;
|
||||
extern GdkAtom _image_gif;
|
||||
|
||||
/* DND selections */
|
||||
extern GdkAtom _local_dnd;
|
||||
extern GdkAtom _gdk_win32_dropfiles;
|
||||
extern GdkAtom _gdk_ole2_dnd;
|
||||
|
||||
/* Clipboard formats */
|
||||
extern UINT _cf_png;
|
||||
extern UINT _cf_jfif;
|
||||
extern UINT _cf_gif;
|
||||
extern UINT _cf_url;
|
||||
extern UINT _cf_html_format;
|
||||
extern UINT _cf_text_html;
|
||||
|
||||
/* OLE-based DND state */
|
||||
typedef enum {
|
||||
GDK_WIN32_DND_NONE,
|
||||
GDK_WIN32_DND_PENDING,
|
||||
GDK_WIN32_DND_DROPPED,
|
||||
GDK_WIN32_DND_FAILED,
|
||||
GDK_WIN32_DND_DRAGGING,
|
||||
} GdkWin32DndState;
|
||||
|
||||
extern GdkWin32DndState _dnd_target_state;
|
||||
extern GdkWin32DndState _dnd_source_state;
|
||||
/* The singleton selection object pointer */
|
||||
GdkWin32Selection *_win32_selection;
|
||||
|
||||
void _gdk_win32_dnd_do_dragdrop (void);
|
||||
void _gdk_win32_ole2_dnd_property_change (GdkAtom type,
|
||||
@@ -343,8 +306,23 @@ void _gdk_win32_ole2_dnd_property_change (GdkAtom type,
|
||||
const guchar *data,
|
||||
gint nelements);
|
||||
|
||||
void _gdk_win32_begin_modal_call (void);
|
||||
void _gdk_win32_end_modal_call (void);
|
||||
typedef enum {
|
||||
GDK_WIN32_MODAL_OP_NONE = 0x0,
|
||||
GDK_WIN32_MODAL_OP_SIZE = 0x1 << 0,
|
||||
GDK_WIN32_MODAL_OP_MOVE = 0x1 << 1,
|
||||
GDK_WIN32_MODAL_OP_MENU = 0x1 << 2,
|
||||
GDK_WIN32_MODAL_OP_DND = 0x1 << 3
|
||||
} GdkWin32ModalOpKind;
|
||||
|
||||
#define GDK_WIN32_MODAL_OP_SIZEMOVE_MASK (GDK_WIN32_MODAL_OP_SIZE | GDK_WIN32_MODAL_OP_MOVE)
|
||||
|
||||
/* Non-zero while a modal sizing, moving, or dnd operation is in progress */
|
||||
extern GdkWin32ModalOpKind _modal_operation_in_progress;
|
||||
|
||||
extern HWND _modal_move_resize_window;
|
||||
|
||||
void _gdk_win32_begin_modal_call (GdkWin32ModalOpKind kind);
|
||||
void _gdk_win32_end_modal_call (GdkWin32ModalOpKind kind);
|
||||
|
||||
|
||||
/* Options */
|
||||
@@ -353,27 +331,8 @@ extern gint _gdk_max_colors;
|
||||
|
||||
#define GDK_WIN32_COLORMAP_DATA(cmap) ((GdkColormapPrivateWin32 *) GDK_COLORMAP (cmap)->windowing_data)
|
||||
|
||||
/* TRUE while a modal sizing, moving, or dnd operation is in progress */
|
||||
extern gboolean _modal_operation_in_progress;
|
||||
|
||||
extern HWND _modal_move_resize_window;
|
||||
|
||||
/* TRUE when we are emptying the clipboard ourselves */
|
||||
extern gboolean _ignore_destroy_clipboard;
|
||||
|
||||
/* Mapping from registered clipboard format id (native) to
|
||||
* corresponding GdkAtom
|
||||
*/
|
||||
extern GHashTable *_format_atom_table;
|
||||
|
||||
/* Hold the result of a delayed rendering */
|
||||
extern HGLOBAL _delayed_rendering_data;
|
||||
|
||||
extern GdkCursor *_gdk_win32_grab_cursor;
|
||||
|
||||
HGLOBAL _gdk_win32_selection_convert_to_dib (HGLOBAL hdata,
|
||||
GdkAtom target);
|
||||
|
||||
/* Convert a pixbuf to an HICON (or HCURSOR). Supports alpha under
|
||||
* Windows XP, thresholds alpha otherwise.
|
||||
*/
|
||||
|
||||
+34
-104
@@ -137,20 +137,15 @@ _gdk_win32_window_get_property (GdkWindow *window,
|
||||
}
|
||||
|
||||
void
|
||||
_gdk_win32_window_change_property (GdkWindow *window,
|
||||
GdkAtom property,
|
||||
GdkAtom type,
|
||||
gint format,
|
||||
GdkPropMode mode,
|
||||
const guchar *data,
|
||||
gint nelements)
|
||||
_gdk_win32_window_change_property (GdkWindow *window,
|
||||
GdkAtom property,
|
||||
GdkAtom type,
|
||||
gint format,
|
||||
GdkPropMode mode,
|
||||
const guchar *data,
|
||||
gint nelements)
|
||||
{
|
||||
HGLOBAL hdata;
|
||||
gint i, size;
|
||||
guchar *ucptr;
|
||||
wchar_t *wcptr, *p;
|
||||
glong wclen;
|
||||
GError *err = NULL;
|
||||
GdkWin32Selection *win32_sel = _gdk_win32_selection_get ();
|
||||
|
||||
g_return_if_fail (window != NULL);
|
||||
g_return_if_fail (GDK_IS_WINDOW (window));
|
||||
@@ -161,6 +156,7 @@ _gdk_win32_window_change_property (GdkWindow *window,
|
||||
GDK_NOTE (DND, {
|
||||
gchar *prop_name = gdk_atom_name (property);
|
||||
gchar *type_name = gdk_atom_name (type);
|
||||
gchar *datastring = _gdk_win32_data_to_string (data, MIN (10, format*nelements/8));
|
||||
|
||||
g_print ("gdk_property_change: %p %s %s %s %d*%d bits: %s\n",
|
||||
GDK_WINDOW_HWND (window),
|
||||
@@ -171,103 +167,36 @@ _gdk_win32_window_change_property (GdkWindow *window,
|
||||
(mode == GDK_PROP_MODE_APPEND ? "APPEND" :
|
||||
"???"))),
|
||||
format, nelements,
|
||||
_gdk_win32_data_to_string (data, MIN (10, format*nelements/8)));
|
||||
datastring);
|
||||
g_free (datastring);
|
||||
g_free (prop_name);
|
||||
g_free (type_name);
|
||||
});
|
||||
|
||||
#ifndef G_DISABLE_CHECKS
|
||||
/* We should never come here for these types */
|
||||
g_return_if_fail (type != GDK_TARGET_STRING);
|
||||
g_return_if_fail (type != _text);
|
||||
g_return_if_fail (type != _compound_text);
|
||||
g_return_if_fail (type != _save_targets);
|
||||
|
||||
if (property == _gdk_selection &&
|
||||
format == 8 &&
|
||||
mode == GDK_PROP_MODE_REPLACE)
|
||||
if (G_UNLIKELY (type == _gdk_win32_selection_atom (GDK_WIN32_ATOM_INDEX_COMPOUND_TEXT) ||
|
||||
type == _gdk_win32_selection_atom (GDK_WIN32_ATOM_INDEX_SAVE_TARGETS)))
|
||||
{
|
||||
if (type == _image_bmp && nelements < sizeof (BITMAPFILEHEADER))
|
||||
{
|
||||
g_warning ("Clipboard contains invalid bitmap data");
|
||||
return;
|
||||
}
|
||||
|
||||
if (type == _utf8_string)
|
||||
{
|
||||
wcptr = g_utf8_to_utf16 ((char *) data, nelements, NULL, &wclen, &err);
|
||||
if (err != NULL)
|
||||
{
|
||||
g_warning ("Failed to convert utf8: %s", err->message);
|
||||
g_clear_error (&err);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!OpenClipboard (GDK_WINDOW_HWND (window)))
|
||||
{
|
||||
WIN32_API_FAILED ("OpenClipboard");
|
||||
g_free (wcptr);
|
||||
return;
|
||||
}
|
||||
|
||||
wclen++; /* Terminating 0 */
|
||||
size = wclen * 2;
|
||||
for (i = 0; i < wclen; i++)
|
||||
if (wcptr[i] == '\n' && (i == 0 || wcptr[i - 1] != '\r'))
|
||||
size += 2;
|
||||
|
||||
if (!(hdata = GlobalAlloc (GMEM_MOVEABLE, size)))
|
||||
{
|
||||
WIN32_API_FAILED ("GlobalAlloc");
|
||||
if (!CloseClipboard ())
|
||||
WIN32_API_FAILED ("CloseClipboard");
|
||||
g_free (wcptr);
|
||||
return;
|
||||
}
|
||||
|
||||
ucptr = GlobalLock (hdata);
|
||||
|
||||
p = (wchar_t *) ucptr;
|
||||
for (i = 0; i < wclen; i++)
|
||||
{
|
||||
if (wcptr[i] == '\n' && (i == 0 || wcptr[i - 1] != '\r'))
|
||||
*p++ = '\r';
|
||||
*p++ = wcptr[i];
|
||||
}
|
||||
g_free (wcptr);
|
||||
|
||||
GlobalUnlock (hdata);
|
||||
GDK_NOTE (DND, g_print ("... SetClipboardData(CF_UNICODETEXT,%p)\n",
|
||||
hdata));
|
||||
if (!SetClipboardData (CF_UNICODETEXT, hdata))
|
||||
WIN32_API_FAILED ("SetClipboardData");
|
||||
|
||||
if (!CloseClipboard ())
|
||||
WIN32_API_FAILED ("CloseClipboard");
|
||||
}
|
||||
else
|
||||
{
|
||||
/* We use delayed rendering for everything else than
|
||||
* text. We can't assign hdata to the clipboard here as type
|
||||
* may be "image/png", "image/jpg", etc. In this case
|
||||
* there's a further conversion afterwards.
|
||||
*/
|
||||
GDK_NOTE (DND, g_print ("... delayed rendering\n"));
|
||||
_delayed_rendering_data = NULL;
|
||||
if (!(hdata = GlobalAlloc (GMEM_MOVEABLE, nelements > 0 ? nelements : 1)))
|
||||
{
|
||||
WIN32_API_FAILED ("GlobalAlloc");
|
||||
return;
|
||||
}
|
||||
ucptr = GlobalLock (hdata);
|
||||
memcpy (ucptr, data, nelements);
|
||||
GlobalUnlock (hdata);
|
||||
_delayed_rendering_data = hdata;
|
||||
}
|
||||
g_return_if_fail_warning (G_LOG_DOMAIN,
|
||||
G_STRFUNC,
|
||||
"change_property called with a bad type");
|
||||
return;
|
||||
}
|
||||
else if (property == _gdk_ole2_dnd)
|
||||
#endif
|
||||
|
||||
if (property == _gdk_win32_selection_atom (GDK_WIN32_ATOM_INDEX_GDK_SELECTION) ||
|
||||
property == _gdk_win32_selection_atom (GDK_WIN32_ATOM_INDEX_OLE2_DND) ||
|
||||
property == _gdk_win32_selection_atom (GDK_WIN32_ATOM_INDEX_LOCAL_DND_SELECTION))
|
||||
{
|
||||
/* Will happen only if gdkdnd-win32.c has OLE2 dnd support compiled in */
|
||||
_gdk_win32_ole2_dnd_property_change (type, format, data, nelements);
|
||||
_gdk_win32_selection_property_change (win32_sel,
|
||||
window,
|
||||
property,
|
||||
type,
|
||||
format,
|
||||
mode,
|
||||
data,
|
||||
nelements);
|
||||
}
|
||||
else
|
||||
g_warning ("gdk_property_change: General case not implemented");
|
||||
@@ -291,9 +220,10 @@ _gdk_win32_window_delete_property (GdkWindow *window,
|
||||
g_free (prop_name);
|
||||
});
|
||||
|
||||
if (property == _gdk_selection)
|
||||
if (property == _gdk_win32_selection_atom (GDK_WIN32_ATOM_INDEX_GDK_SELECTION) ||
|
||||
property == _gdk_win32_selection_atom (GDK_WIN32_ATOM_INDEX_OLE2_DND))
|
||||
_gdk_selection_property_delete (window);
|
||||
else if (property == _wm_transient_for)
|
||||
else if (property == _gdk_win32_selection_atom (GDK_WIN32_ATOM_INDEX_WM_TRANSIENT_FOR))
|
||||
{
|
||||
GdkScreen *screen;
|
||||
|
||||
|
||||
+2277
-694
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,224 @@
|
||||
/* GDK - The GIMP Drawing Kit
|
||||
*
|
||||
* gdkselection-win32.h: Private Win32 specific selection object
|
||||
*
|
||||
* Copyright © 2017 LRN
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Library General Public
|
||||
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef __GDK_SELECTION_WIN32_H__
|
||||
#define __GDK_SELECTION_WIN32_H__
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
#define _gdk_win32_selection_get() (_win32_selection)
|
||||
#define _gdk_atom_array_index(a, i) (g_array_index (a, GdkAtom, i))
|
||||
#define _gdk_win32_selection_atom(i) (_gdk_atom_array_index (_gdk_win32_selection_get ()->known_atoms, i))
|
||||
#define _gdk_cf_array_index(a, i) (g_array_index (a, UINT, i))
|
||||
#define _gdk_win32_selection_cf(i) (_gdk_cf_array_index (_gdk_win32_selection_get ()->known_clipboard_formats, i))
|
||||
|
||||
/* Maps targets to formats or vice versa, depending on the
|
||||
* semantics of the array that holds these.
|
||||
* Also remembers whether the data needs to be transmuted.
|
||||
*/
|
||||
typedef struct {
|
||||
gint format;
|
||||
GdkAtom target;
|
||||
gboolean transmute;
|
||||
} GdkSelTargetFormat;
|
||||
|
||||
/* We emulate the GDK_SELECTION window properties of windows (as used
|
||||
* in the X11 backend) by using a hash table from window handles to
|
||||
* GdkSelProp structs.
|
||||
*/
|
||||
typedef struct {
|
||||
guchar *data;
|
||||
gsize length;
|
||||
gint bitness;
|
||||
GdkAtom target;
|
||||
} GdkSelProp;
|
||||
|
||||
/* OLE-based DND state */
|
||||
typedef enum {
|
||||
GDK_WIN32_DND_NONE,
|
||||
GDK_WIN32_DND_PENDING,
|
||||
GDK_WIN32_DND_DROPPED,
|
||||
GDK_WIN32_DND_FAILED,
|
||||
GDK_WIN32_DND_DRAGGING,
|
||||
} GdkWin32DndState;
|
||||
|
||||
enum _GdkWin32AtomIndex
|
||||
{
|
||||
/* GdkAtoms: properties, targets and types */
|
||||
GDK_WIN32_ATOM_INDEX_GDK_SELECTION = 0,
|
||||
GDK_WIN32_ATOM_INDEX_CLIPBOARD_MANAGER,
|
||||
GDK_WIN32_ATOM_INDEX_WM_TRANSIENT_FOR,
|
||||
GDK_WIN32_ATOM_INDEX_TARGETS,
|
||||
GDK_WIN32_ATOM_INDEX_DELETE,
|
||||
GDK_WIN32_ATOM_INDEX_SAVE_TARGETS,
|
||||
GDK_WIN32_ATOM_INDEX_UTF8_STRING,
|
||||
GDK_WIN32_ATOM_INDEX_TEXT,
|
||||
GDK_WIN32_ATOM_INDEX_COMPOUND_TEXT,
|
||||
GDK_WIN32_ATOM_INDEX_TEXT_URI_LIST,
|
||||
GDK_WIN32_ATOM_INDEX_TEXT_HTML,
|
||||
GDK_WIN32_ATOM_INDEX_IMAGE_PNG,
|
||||
GDK_WIN32_ATOM_INDEX_IMAGE_JPEG,
|
||||
GDK_WIN32_ATOM_INDEX_IMAGE_BMP,
|
||||
GDK_WIN32_ATOM_INDEX_IMAGE_GIF,
|
||||
/* DND selections */
|
||||
GDK_WIN32_ATOM_INDEX_LOCAL_DND_SELECTION,
|
||||
GDK_WIN32_ATOM_INDEX_DROPFILES_DND,
|
||||
GDK_WIN32_ATOM_INDEX_OLE2_DND,
|
||||
/* Clipboard formats */
|
||||
GDK_WIN32_ATOM_INDEX_PNG,
|
||||
GDK_WIN32_ATOM_INDEX_JFIF,
|
||||
GDK_WIN32_ATOM_INDEX_GIF,
|
||||
GDK_WIN32_ATOM_INDEX_CF_DIB,
|
||||
GDK_WIN32_ATOM_INDEX_CFSTR_SHELLIDLIST,
|
||||
GDK_WIN32_ATOM_INDEX_CF_TEXT,
|
||||
GDK_WIN32_ATOM_INDEX_CF_UNICODETEXT,
|
||||
GDK_WIN32_ATOM_INDEX_LAST
|
||||
};
|
||||
|
||||
typedef enum _GdkWin32AtomIndex GdkWin32AtomIndex;
|
||||
|
||||
enum _GdkWin32CFIndex
|
||||
{
|
||||
GDK_WIN32_CF_INDEX_PNG = 0,
|
||||
GDK_WIN32_CF_INDEX_JFIF,
|
||||
GDK_WIN32_CF_INDEX_GIF,
|
||||
GDK_WIN32_CF_INDEX_UNIFORMRESOURCELOCATORW,
|
||||
GDK_WIN32_CF_INDEX_CFSTR_SHELLIDLIST,
|
||||
GDK_WIN32_CF_INDEX_HTML_FORMAT,
|
||||
GDK_WIN32_CF_INDEX_TEXT_HTML,
|
||||
GDK_WIN32_CF_INDEX_IMAGE_PNG,
|
||||
GDK_WIN32_CF_INDEX_IMAGE_JPEG,
|
||||
GDK_WIN32_CF_INDEX_IMAGE_BMP,
|
||||
GDK_WIN32_CF_INDEX_IMAGE_GIF,
|
||||
GDK_WIN32_CF_INDEX_TEXT_URI_LIST,
|
||||
GDK_WIN32_CF_INDEX_UTF8_STRING,
|
||||
GDK_WIN32_CF_INDEX_LAST
|
||||
};
|
||||
|
||||
typedef enum _GdkWin32CFIndex GdkWin32CFIndex;
|
||||
|
||||
#define GDK_TYPE_WIN32_SELECTION (gdk_win32_selection_get_type ())
|
||||
#define GDK_WIN32_SELECTION(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GDK_TYPE_WIN32_SELECTION, GdkWin32Selection))
|
||||
#define GDK_WIN32_SELECTION_CLASS(c) (G_TYPE_CHECK_CLASS_CAST ((c), GDK_TYPE_WIN32_SELECTION, GdkWin32SelectionClass))
|
||||
#define GDK_IS_WIN32_SELECTION(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GDK_TYPE_WIN32_SELECTION))
|
||||
#define GDK_IS_WIN32_SELECTION_CLASS(c) (G_TYPE_CHECK_CLASS_TYPE ((c), GDK_TYPE_WIN32_SELECTION))
|
||||
#define GDK_WIN32_SELECTION_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GDK_TYPE_WIN32_SELECTION, GdkWin32SelectionClass))
|
||||
|
||||
typedef struct _GdkWin32Selection GdkWin32Selection;
|
||||
typedef struct _GdkWin32SelectionClass GdkWin32SelectionClass;
|
||||
|
||||
/* This object is just a sink to hold all the selection- and dnd-related data
|
||||
* that otherwise would be in global variables.
|
||||
*/
|
||||
struct _GdkWin32Selection
|
||||
{
|
||||
GObject *parent_instance;
|
||||
GHashTable *sel_prop_table;
|
||||
GdkSelProp *dropfiles_prop;
|
||||
/* We store the owner of each selection in this table. Obviously, this only
|
||||
* is valid intra-app, and in fact it is necessary for the intra-app DND to work.
|
||||
*/
|
||||
GHashTable *sel_owner_table;
|
||||
|
||||
/* GdkAtoms for well-known image formats */
|
||||
GdkAtom *known_pixbuf_formats;
|
||||
int n_known_pixbuf_formats;
|
||||
|
||||
/* GArray of GdkAtoms for various known Selection and DnD strings.
|
||||
* Size is guaranteed to be at least GDK_WIN32_ATOM_INDEX_LAST
|
||||
*/
|
||||
GArray *known_atoms;
|
||||
|
||||
/* GArray of UINTs for various known clipboard formats.
|
||||
* Size is guaranteed to be at least GDK_WIN32_CF_INDEX_LAST.
|
||||
*/
|
||||
GArray *known_clipboard_formats;
|
||||
|
||||
GdkWin32DndState dnd_target_state;
|
||||
GdkWin32DndState dnd_source_state;
|
||||
|
||||
/* Holds a reference to the data object for the target drop site.
|
||||
*/
|
||||
IDataObject *dnd_data_object_target;
|
||||
|
||||
/* Carries DnD target context from idroptarget_*() to convert_selection() */
|
||||
GdkDragContext *target_drag_context;
|
||||
|
||||
/* Carries W32 format ID from idataobject_getdata() to property_change() */
|
||||
UINT property_change_format;
|
||||
/* Carries the W32-wrapped data between idataobject_getdata() and property_change() */
|
||||
LPSTGMEDIUM property_change_data;
|
||||
/* Carries the transmute field of the GdkSelTargetFormat from from idataobject_getdata() to property_change() */
|
||||
gboolean property_change_transmute;
|
||||
/* Carries the target atom from GDK_SELECTION_REQUEST issuer to property_change() */
|
||||
GdkAtom property_change_target_atom;
|
||||
|
||||
/* TRUE when we are emptying the clipboard ourselves */
|
||||
gboolean ignore_destroy_clipboard;
|
||||
|
||||
/* Array of GdkSelTargetFormats describing the targets supported by the clipboard selection */
|
||||
GArray *clipboard_selection_targets;
|
||||
|
||||
/* Same for the DnD selection (applies for both LOCAL and OLE2 DnD) */
|
||||
GArray *dnd_selection_targets;
|
||||
|
||||
/* If TRUE, then we queued a GDK_SELECTION_REQUEST with TARGETS
|
||||
* target. This field is checked to prevent queueing
|
||||
* multiple selection requests.
|
||||
*/
|
||||
gboolean targets_request_pending;
|
||||
|
||||
/* The handle that was given to OpenClipboard().
|
||||
* NULL is a valid handle,
|
||||
* INVALID_HANDLE_VALUE means that the clipboard is closed.
|
||||
*/
|
||||
HWND clipboard_opened_for;
|
||||
|
||||
/* A target-keyed hash table of GArrays of GdkSelTargetFormats describing compatibility formats for a target */
|
||||
GHashTable *compatibility_formats;
|
||||
/* A format-keyed hash table of GArrays of GdkAtoms describing compatibility targets for a format */
|
||||
GHashTable *compatibility_targets;
|
||||
};
|
||||
|
||||
struct _GdkWin32SelectionClass
|
||||
{
|
||||
GObjectClass parent_class;
|
||||
};
|
||||
|
||||
GType gdk_win32_selection_get_type (void) G_GNUC_CONST;
|
||||
|
||||
void _gdk_win32_clear_clipboard_queue ();
|
||||
gchar * _gdk_win32_get_clipboard_format_name (UINT fmt,
|
||||
gboolean *is_predefined);
|
||||
void _gdk_win32_add_format_to_targets (UINT format,
|
||||
GArray *array,
|
||||
GList **list);
|
||||
gint _gdk_win32_add_target_to_selformats (GdkAtom target,
|
||||
GArray *array);
|
||||
void _gdk_win32_selection_property_change (GdkWin32Selection *win32_sel,
|
||||
GdkWindow *window,
|
||||
GdkAtom property,
|
||||
GdkAtom type,
|
||||
gint format,
|
||||
GdkPropMode mode,
|
||||
const guchar *data,
|
||||
gint nelements);
|
||||
|
||||
#endif /* __GDK_SELECTION_WIN32_H__ */
|
||||
@@ -0,0 +1,72 @@
|
||||
/* GDK - The GIMP Drawing Kit
|
||||
* Copyright (C) 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_WIN32_DND_PRIVATE_H__
|
||||
#define __GDK_WIN32_DND_PRIVATE_H__
|
||||
|
||||
#if !defined (__GDKWIN32_H_INSIDE__) && !defined (GDK_COMPILATION)
|
||||
#error "Only <gdk/gdkwin32.h> can be included directly."
|
||||
#endif
|
||||
|
||||
#include <gdk/gdk.h>
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
struct _GdkWin32DragContext
|
||||
{
|
||||
GdkDragContext context;
|
||||
GdkWindow *ipc_window;
|
||||
GdkWindow *drag_window;
|
||||
GdkCursor *cursor;
|
||||
GdkSeat *grab_seat;
|
||||
GdkDragAction actions;
|
||||
GdkDragAction current_action;
|
||||
|
||||
guint drag_status : 4; /* Current status of drag */
|
||||
guint drop_failed : 1; /* Whether the drop was unsuccessful */
|
||||
guint has_image_format : 1;
|
||||
guint has_text_uri_list : 1;
|
||||
guint has_shell_id_list : 1;
|
||||
guint has_unicodetext : 1;
|
||||
guint has_cf_png : 1;
|
||||
guint has_cf_dib : 1;
|
||||
guint has_gif : 1;
|
||||
guint has_jfif : 1;
|
||||
|
||||
guint scale; /* Temporarily caches the HiDPI scale */
|
||||
gint hot_x; /* Hotspot offset from the top-left of the drag-window, scaled (can be added to GDK space coordinates) */
|
||||
gint hot_y;
|
||||
gint last_x; /* Coordinates from last event, in GDK space */
|
||||
gint last_y;
|
||||
gint start_x; /* Coordinates of the drag start, in GDK space */
|
||||
gint start_y;
|
||||
DWORD last_key_state; /* Key state from last event */
|
||||
|
||||
/* Just like context->targets, but an array, and with format IDs
|
||||
* stored inside.
|
||||
*/
|
||||
GArray *droptarget_format_target_map;
|
||||
};
|
||||
|
||||
struct _GdkWin32DragContextClass
|
||||
{
|
||||
GdkDragContextClass parent_class;
|
||||
};
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#endif /* __GDK_WIN32_DND_PRIVATE_H__ */
|
||||
@@ -87,6 +87,13 @@ void gdk_win32_selection_add_targets (GdkWindow *owner,
|
||||
gint n_targets,
|
||||
GdkAtom *targets);
|
||||
|
||||
#if defined (GTK_COMPILATION) || defined (GDK_COMPILATION)
|
||||
#define gdk_win32_selection_clear_targets gdk_win32_selection_clear_targets_libgtk_only
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
void gdk_win32_selection_clear_targets (GdkDisplay *display,
|
||||
GdkAtom selection);
|
||||
#endif
|
||||
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
GdkWindow * gdk_win32_window_foreign_new_for_display (GdkDisplay *display,
|
||||
HWND anid);
|
||||
|
||||
+141
-68
@@ -256,22 +256,48 @@ gdk_window_impl_win32_finalize (GObject *object)
|
||||
|
||||
g_free (window_impl->decorations);
|
||||
|
||||
if (window_impl->cache_surface)
|
||||
{
|
||||
cairo_surface_destroy (window_impl->cache_surface);
|
||||
window_impl->cache_surface = NULL;
|
||||
}
|
||||
|
||||
if (window_impl->cairo_surface)
|
||||
{
|
||||
cairo_surface_destroy (window_impl->cairo_surface);
|
||||
window_impl->cairo_surface = NULL;
|
||||
}
|
||||
|
||||
g_assert (window_impl->transient_owner == NULL);
|
||||
g_assert (window_impl->transient_children == NULL);
|
||||
|
||||
G_OBJECT_CLASS (parent_class)->finalize (object);
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_win32_get_window_client_area_rect (GdkWindow *window,
|
||||
gint scale,
|
||||
RECT *rect)
|
||||
{
|
||||
gint x, y, width, height;
|
||||
|
||||
gdk_window_get_position (window, &x, &y);
|
||||
width = gdk_window_get_width (window);
|
||||
height = gdk_window_get_height (window);
|
||||
rect->left = x * scale;
|
||||
rect->top = y * scale;
|
||||
rect->right = rect->left + width * scale;
|
||||
rect->bottom = rect->top + height * scale;
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_win32_window_get_queued_window_rect (GdkWindow *window,
|
||||
RECT *return_window_rect)
|
||||
{
|
||||
gint x, y;
|
||||
RECT window_rect;
|
||||
GdkWindowImplWin32 *impl = GDK_WINDOW_IMPL_WIN32 (window->impl);
|
||||
|
||||
gdk_window_get_position (window, &x, &y);
|
||||
window_rect.left = x * impl->window_scale;
|
||||
window_rect.top = y * impl->window_scale;
|
||||
window_rect.right = window_rect.left + gdk_window_get_width (window) * impl->window_scale;
|
||||
window_rect.bottom = window_rect.top + gdk_window_get_height (window) * impl->window_scale;
|
||||
gdk_win32_get_window_client_area_rect (window, impl->window_scale, &window_rect);
|
||||
|
||||
/* Turn client area into window area */
|
||||
_gdk_win32_adjust_client_rect (window, &window_rect);
|
||||
@@ -878,6 +904,14 @@ _gdk_win32_display_create_window_impl (GdkDisplay *display,
|
||||
if (impl->type_hint == GDK_WINDOW_TYPE_HINT_UTILITY)
|
||||
dwExStyle |= WS_EX_TOOLWINDOW;
|
||||
|
||||
/* WS_EX_TRANSPARENT means "try draw this window last, and ignore input".
|
||||
* It's the last part we're after. We don't want DND indicator to accept
|
||||
* input, because that will make it a potential drop target, and if it's
|
||||
* under the mouse cursor, this will kill any DND.
|
||||
*/
|
||||
if (impl->type_hint == GDK_WINDOW_TYPE_HINT_DND)
|
||||
dwExStyle |= WS_EX_TRANSPARENT;
|
||||
|
||||
klass = RegisterGdkClass (window->window_type, impl->type_hint);
|
||||
|
||||
wtitle = g_utf8_to_utf16 (title, -1, NULL, NULL, NULL);
|
||||
@@ -4774,6 +4808,83 @@ gdk_win32_window_end_move_resize_drag (GdkWindow *window)
|
||||
context->current_snap = GDK_WIN32_AEROSNAP_STATE_UNDETERMINED;
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_win32_get_window_size_and_position_from_client_rect (GdkWindow *window,
|
||||
RECT *window_rect,
|
||||
SIZE *window_size,
|
||||
POINT *window_position)
|
||||
{
|
||||
GdkWindowImplWin32 *impl;
|
||||
|
||||
impl = GDK_WINDOW_IMPL_WIN32 (window->impl);
|
||||
|
||||
/* Turn client area into window area */
|
||||
_gdk_win32_adjust_client_rect (window, window_rect);
|
||||
|
||||
/* Convert GDK screen coordinates to W32 desktop coordinates */
|
||||
window_rect->left -= _gdk_offset_x * impl->window_scale;
|
||||
window_rect->right -= _gdk_offset_x * impl->window_scale;
|
||||
window_rect->top -= _gdk_offset_y * impl->window_scale;
|
||||
window_rect->bottom -= _gdk_offset_y * impl->window_scale;
|
||||
|
||||
window_position->x = window_rect->left;
|
||||
window_position->y = window_rect->top;
|
||||
window_size->cx = window_rect->right - window_rect->left;
|
||||
window_size->cy = window_rect->bottom - window_rect->top;
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_win32_update_layered_window_from_cache (GdkWindow *window,
|
||||
RECT *client_rect)
|
||||
{
|
||||
POINT window_position;
|
||||
SIZE window_size;
|
||||
BLENDFUNCTION blender;
|
||||
HDC hdc;
|
||||
SIZE *window_size_ptr;
|
||||
POINT source_point = { 0, 0 };
|
||||
POINT *source_point_ptr;
|
||||
GdkWindowImplWin32 *impl;
|
||||
|
||||
impl = GDK_WINDOW_IMPL_WIN32 (window->impl);
|
||||
|
||||
gdk_win32_get_window_size_and_position_from_client_rect (window,
|
||||
client_rect,
|
||||
&window_size,
|
||||
&window_position);
|
||||
|
||||
blender.BlendOp = AC_SRC_OVER;
|
||||
blender.BlendFlags = 0;
|
||||
blender.AlphaFormat = AC_SRC_ALPHA;
|
||||
blender.SourceConstantAlpha = impl->layered_opacity * 255;
|
||||
|
||||
/* Size didn't change, so move immediately, no need to wait for redraw */
|
||||
/* Strictly speaking, we don't need to supply hdc, source_point and
|
||||
* window_size here. However, without these arguments
|
||||
* the window moves but does not update its contents on Windows 7 when
|
||||
* desktop composition is off. This forces us to provide hdc and
|
||||
* source_point. window_size is here to avoid the function
|
||||
* inexplicably failing with error 317.
|
||||
*/
|
||||
if (gdk_screen_is_composited (gdk_window_get_screen (window)))
|
||||
{
|
||||
hdc = NULL;
|
||||
window_size_ptr = NULL;
|
||||
source_point_ptr = NULL;
|
||||
}
|
||||
else
|
||||
{
|
||||
hdc = cairo_win32_surface_get_dc (impl->cache_surface);
|
||||
window_size_ptr = &window_size;
|
||||
source_point_ptr = &source_point;
|
||||
}
|
||||
|
||||
API_CALL (UpdateLayeredWindow, (GDK_WINDOW_HWND (window), NULL,
|
||||
&window_position, window_size_ptr,
|
||||
hdc, source_point_ptr,
|
||||
0, &blender, ULW_ALPHA));
|
||||
}
|
||||
|
||||
void
|
||||
gdk_win32_window_do_move_resize_drag (GdkWindow *window,
|
||||
gint x,
|
||||
@@ -4950,67 +5061,24 @@ gdk_win32_window_do_move_resize_drag (GdkWindow *window,
|
||||
(rect.left != new_rect.left ||
|
||||
rect.top != new_rect.top))
|
||||
{
|
||||
POINT window_position;
|
||||
SIZE window_size;
|
||||
BLENDFUNCTION blender;
|
||||
HDC hdc;
|
||||
SIZE *window_size_ptr;
|
||||
POINT source_point = { 0, 0 };
|
||||
POINT *source_point_ptr;
|
||||
|
||||
context->native_move_resize_pending = FALSE;
|
||||
|
||||
_gdk_win32_do_emit_configure_event (window, new_rect);
|
||||
|
||||
/* Turn client area into window area */
|
||||
_gdk_win32_adjust_client_rect (window, &new_rect);
|
||||
|
||||
/* Convert GDK screen coordinates to W32 desktop coordinates */
|
||||
new_rect.left -= _gdk_offset_x * impl->window_scale;
|
||||
new_rect.right -= _gdk_offset_x * impl->window_scale;
|
||||
new_rect.top -= _gdk_offset_y * impl->window_scale;
|
||||
new_rect.bottom -= _gdk_offset_y * impl->window_scale;
|
||||
|
||||
window_position.x = new_rect.left;
|
||||
window_position.y = new_rect.top;
|
||||
window_size.cx = new_rect.right - new_rect.left;
|
||||
window_size.cy = new_rect.bottom - new_rect.top;
|
||||
|
||||
blender.BlendOp = AC_SRC_OVER;
|
||||
blender.BlendFlags = 0;
|
||||
blender.AlphaFormat = AC_SRC_ALPHA;
|
||||
blender.SourceConstantAlpha = impl->layered_opacity * 255;
|
||||
|
||||
/* Size didn't change, so move immediately, no need to wait for redraw */
|
||||
/* Strictly speaking, we don't need to supply hdc, source_point and
|
||||
* window_size here. However, without these arguments
|
||||
* the window moves but does not update its contents on Windows 7 when
|
||||
* desktop composition is off. This forces us to provide hdc and
|
||||
* source_point. window_size is here to avoid the function
|
||||
* inexplicably failing with error 317.
|
||||
*/
|
||||
if (impl->layered)
|
||||
{
|
||||
if (gdk_screen_is_composited (gdk_window_get_screen (window)))
|
||||
{
|
||||
hdc = NULL;
|
||||
window_size_ptr = NULL;
|
||||
source_point_ptr = NULL;
|
||||
}
|
||||
else
|
||||
{
|
||||
hdc = cairo_win32_surface_get_dc (impl->cache_surface);
|
||||
window_size_ptr = &window_size;
|
||||
source_point_ptr = &source_point;
|
||||
}
|
||||
|
||||
API_CALL (UpdateLayeredWindow, (GDK_WINDOW_HWND (window), NULL,
|
||||
&window_position, window_size_ptr,
|
||||
hdc, source_point_ptr,
|
||||
0, &blender, ULW_ALPHA));
|
||||
gdk_win32_update_layered_window_from_cache (window, &new_rect);
|
||||
}
|
||||
else
|
||||
{
|
||||
SIZE window_size;
|
||||
POINT window_position;
|
||||
|
||||
gdk_win32_get_window_size_and_position_from_client_rect (window,
|
||||
&new_rect,
|
||||
&window_size,
|
||||
&window_position);
|
||||
|
||||
API_CALL (SetWindowPos, (GDK_WINDOW_HWND (window),
|
||||
SWP_NOZORDER_SPECIFIED,
|
||||
window_position.x, window_position.y,
|
||||
@@ -5618,11 +5686,20 @@ gdk_win32_window_set_opacity (GdkWindow *window,
|
||||
|
||||
impl = GDK_WINDOW_IMPL_WIN32 (window->impl);
|
||||
|
||||
impl->layered_opacity = opacity;
|
||||
|
||||
if (impl->layered)
|
||||
/* Layered windows have opacity applied elsewhere */
|
||||
return;
|
||||
{
|
||||
if (impl->layered_opacity != opacity)
|
||||
{
|
||||
RECT window_rect;
|
||||
|
||||
impl->layered_opacity = opacity;
|
||||
|
||||
gdk_win32_get_window_client_area_rect (window, impl->window_scale, &window_rect);
|
||||
gdk_win32_update_layered_window_from_cache (window, &window_rect);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
exstyle = GetWindowLong (GDK_WINDOW_HWND (window), GWL_EXSTYLE);
|
||||
|
||||
@@ -5804,14 +5881,10 @@ static cairo_surface_t *
|
||||
gdk_win32_ref_cairo_surface_layered (GdkWindow *window,
|
||||
GdkWindowImplWin32 *impl)
|
||||
{
|
||||
gint x, y, width, height;
|
||||
gint width, height;
|
||||
RECT window_rect;
|
||||
|
||||
gdk_window_get_position (window, &x, &y);
|
||||
window_rect.left = x * impl->window_scale;
|
||||
window_rect.top = y * impl->window_scale;
|
||||
window_rect.right = window_rect.left + gdk_window_get_width (window) * impl->window_scale;
|
||||
window_rect.bottom = window_rect.top + gdk_window_get_height (window) * impl->window_scale;
|
||||
gdk_win32_get_window_client_area_rect (window, impl->window_scale, &window_rect);
|
||||
|
||||
/* Turn client area into window area */
|
||||
_gdk_win32_adjust_client_rect (window, &window_rect);
|
||||
|
||||
@@ -29,8 +29,8 @@
|
||||
#include "gdkkeysyms.h"
|
||||
|
||||
|
||||
#define HAS_FOCUS(toplevel) \
|
||||
((toplevel)->has_focus || (toplevel)->has_pointer_focus)
|
||||
#define APPEARS_FOCUSED(toplevel) \
|
||||
((toplevel)->has_focus || (toplevel)->has_focus_window || (toplevel)->has_pointer_focus)
|
||||
|
||||
static void gdk_x11_device_manager_core_finalize (GObject *object);
|
||||
static void gdk_x11_device_manager_core_constructed (GObject *object);
|
||||
@@ -842,7 +842,7 @@ _gdk_device_manager_core_handle_focus (GdkWindow *window,
|
||||
if (toplevel->focus_window == original)
|
||||
return;
|
||||
|
||||
had_focus = HAS_FOCUS (toplevel);
|
||||
had_focus = APPEARS_FOCUSED (toplevel);
|
||||
x11_screen = GDK_X11_SCREEN (gdk_window_get_screen (window));
|
||||
|
||||
switch (detail)
|
||||
@@ -904,7 +904,7 @@ _gdk_device_manager_core_handle_focus (GdkWindow *window,
|
||||
break;
|
||||
}
|
||||
|
||||
if (HAS_FOCUS (toplevel) != had_focus)
|
||||
if (APPEARS_FOCUSED (toplevel) != had_focus)
|
||||
{
|
||||
GdkEvent *event;
|
||||
|
||||
|
||||
@@ -1027,7 +1027,8 @@ handle_property_change (GdkX11DeviceManagerXI2 *device_manager,
|
||||
device = g_hash_table_lookup (device_manager->id_table,
|
||||
GUINT_TO_POINTER (ev->deviceid));
|
||||
|
||||
if (ev->property == gdk_x11_get_xatom_by_name ("Wacom Serial IDs"))
|
||||
if (device != NULL &&
|
||||
ev->property == gdk_x11_get_xatom_by_name ("Wacom Serial IDs"))
|
||||
{
|
||||
GdkDeviceTool *tool = NULL;
|
||||
guint serial_id = 0, tool_id = 0;
|
||||
|
||||
@@ -1555,7 +1555,6 @@ _gdk_x11_display_open (const gchar *display_name)
|
||||
gchar *argv[1];
|
||||
|
||||
XClassHint *class_hint;
|
||||
gulong pid;
|
||||
gint ignore;
|
||||
gint maj, min;
|
||||
|
||||
@@ -1726,11 +1725,15 @@ _gdk_x11_display_open (const gchar *display_name)
|
||||
if (gdk_sm_client_id)
|
||||
set_sm_client_id (display, gdk_sm_client_id);
|
||||
|
||||
pid = getpid ();
|
||||
XChangeProperty (display_x11->xdisplay,
|
||||
display_x11->leader_window,
|
||||
gdk_x11_get_xatom_by_name_for_display (display, "_NET_WM_PID"),
|
||||
XA_CARDINAL, 32, PropModeReplace, (guchar *) & pid, 1);
|
||||
if (!gdk_running_in_sandbox ())
|
||||
{
|
||||
/* if sandboxed, we're likely in a pid namespace and would only confuse the wm with this */
|
||||
pid_t pid = getpid ();
|
||||
XChangeProperty (display_x11->xdisplay,
|
||||
display_x11->leader_window,
|
||||
gdk_x11_get_xatom_by_name_for_display (display, "_NET_WM_PID"),
|
||||
XA_CARDINAL, 32, PropModeReplace, (guchar *) & pid, 1);
|
||||
}
|
||||
|
||||
/* We don't yet know a valid time. */
|
||||
display_x11->user_time = 0;
|
||||
@@ -3072,6 +3075,16 @@ gdk_x11_display_get_default_seat (GdkDisplay *display)
|
||||
|
||||
seats = gdk_display_list_seats (display);
|
||||
|
||||
/* Shortcut only one seat being available.
|
||||
* This path always triggers for core events, so we can freely use XInput below. */
|
||||
if (g_list_length (seats) == 1)
|
||||
{
|
||||
GdkSeat *seat = seats->data;
|
||||
|
||||
g_list_free (seats);
|
||||
return seat;
|
||||
}
|
||||
|
||||
gdk_x11_display_error_trap_push (display);
|
||||
result = XIGetClientPointer (GDK_DISPLAY_XDISPLAY (display),
|
||||
None, &device_id);
|
||||
@@ -3112,7 +3125,7 @@ gdk_x11_display_get_monitor (GdkDisplay *display,
|
||||
{
|
||||
GdkX11Display *x11_display = GDK_X11_DISPLAY (display);
|
||||
|
||||
if (0 <= monitor_num || monitor_num < x11_display->monitors->len)
|
||||
if (0 <= monitor_num && monitor_num < x11_display->monitors->len)
|
||||
return (GdkMonitor *)x11_display->monitors->pdata[monitor_num];
|
||||
|
||||
return NULL;
|
||||
|
||||
@@ -2701,7 +2701,7 @@ drag_context_grab (GdkDragContext *context)
|
||||
|
||||
g_set_object (&x11_context->grab_seat, seat);
|
||||
|
||||
gdk_error_trap_push ();
|
||||
gdk_x11_display_error_trap_push (gdk_window_get_display (x11_context->ipc_window));
|
||||
|
||||
for (i = 0; i < G_N_ELEMENTS (grab_keys); ++i)
|
||||
{
|
||||
@@ -2753,6 +2753,8 @@ drag_context_grab (GdkDragContext *context)
|
||||
}
|
||||
}
|
||||
|
||||
gdk_x11_display_error_trap_pop_ignored (gdk_window_get_display (x11_context->ipc_window));
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
@@ -32,8 +32,8 @@ static gboolean gdk_event_source_dispatch (GSource *source,
|
||||
gpointer user_data);
|
||||
static void gdk_event_source_finalize (GSource *source);
|
||||
|
||||
#define HAS_FOCUS(toplevel) \
|
||||
((toplevel)->has_focus || (toplevel)->has_pointer_focus)
|
||||
#define APPEARS_FOCUSED(toplevel) \
|
||||
((toplevel)->has_focus || (toplevel)->has_focus_window || (toplevel)->has_pointer_focus)
|
||||
|
||||
struct _GdkEventSource
|
||||
{
|
||||
@@ -148,10 +148,10 @@ handle_focus_change (GdkEventCrossing *event)
|
||||
if (!event->focus || toplevel->has_focus_window)
|
||||
return;
|
||||
|
||||
had_focus = HAS_FOCUS (toplevel);
|
||||
had_focus = APPEARS_FOCUSED (toplevel);
|
||||
toplevel->has_pointer_focus = focus_in;
|
||||
|
||||
if (HAS_FOCUS (toplevel) != had_focus)
|
||||
if (APPEARS_FOCUSED (toplevel) != had_focus)
|
||||
{
|
||||
GdkEvent *focus_event;
|
||||
|
||||
|
||||
@@ -856,6 +856,9 @@ gdk_x11_screen_init_gl (GdkScreen *screen)
|
||||
|
||||
dpy = gdk_x11_display_get_xdisplay (display);
|
||||
|
||||
if (!epoxy_has_glx (dpy))
|
||||
return FALSE;
|
||||
|
||||
if (!glXQueryExtension (dpy, &error_base, &event_base))
|
||||
return FALSE;
|
||||
|
||||
|
||||
@@ -334,7 +334,6 @@ extern const gint _gdk_x11_event_mask_table_size;
|
||||
#define GDK_WINDOW_SCREEN(win) (gdk_window_get_screen (win))
|
||||
#define GDK_WINDOW_DISPLAY(win) (GDK_X11_SCREEN (GDK_WINDOW_SCREEN (win))->display)
|
||||
#define GDK_WINDOW_XROOTWIN(win) (GDK_X11_SCREEN (GDK_WINDOW_SCREEN (win))->xroot_window)
|
||||
#define GDK_GC_DISPLAY(gc) (GDK_SCREEN_DISPLAY (GDK_GC_X11(gc)->screen))
|
||||
#define GDK_WINDOW_IS_X11(win) (GDK_IS_WINDOW_IMPL_X11 ((win)->impl))
|
||||
|
||||
/* override some macros from gdkx.h with direct-access variants */
|
||||
|
||||
@@ -658,7 +658,8 @@ init_randr13 (GdkScreen *screen, gboolean *changed)
|
||||
XRRModeInfo *xmode = &resources->modes[j];
|
||||
if (xmode->id == crtc->mode)
|
||||
{
|
||||
refresh_rate = (1000 * xmode->dotClock) / (xmode->hTotal *xmode->vTotal);
|
||||
if (xmode->hTotal != 0 && xmode->vTotal != 0)
|
||||
refresh_rate = (1000 * xmode->dotClock) / (xmode->hTotal * xmode->vTotal);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
+22
-19
@@ -902,7 +902,6 @@ setup_toplevel_window (GdkWindow *window,
|
||||
XID xid = GDK_WINDOW_XID (window);
|
||||
GdkX11Screen *x11_screen = GDK_X11_SCREEN (GDK_WINDOW_SCREEN (parent));
|
||||
XSizeHints size_hints;
|
||||
long pid;
|
||||
Window leader_window;
|
||||
|
||||
set_wm_protocols (window);
|
||||
@@ -933,12 +932,16 @@ setup_toplevel_window (GdkWindow *window,
|
||||
/* This will set WM_CLIENT_MACHINE and WM_LOCALE_NAME */
|
||||
XSetWMProperties (xdisplay, xid, NULL, NULL, NULL, 0, NULL, NULL, NULL);
|
||||
|
||||
pid = getpid ();
|
||||
XChangeProperty (xdisplay, xid,
|
||||
gdk_x11_get_xatom_by_name_for_display (x11_screen->display, "_NET_WM_PID"),
|
||||
XA_CARDINAL, 32,
|
||||
PropModeReplace,
|
||||
(guchar *)&pid, 1);
|
||||
if (!gdk_running_in_sandbox ())
|
||||
{
|
||||
/* if sandboxed, we're likely in a pid namespace and would only confuse the wm with this */
|
||||
pid_t pid = getpid ();
|
||||
XChangeProperty (xdisplay, xid,
|
||||
gdk_x11_get_xatom_by_name_for_display (x11_screen->display, "_NET_WM_PID"),
|
||||
XA_CARDINAL, 32,
|
||||
PropModeReplace,
|
||||
(guchar *)&pid, 1);
|
||||
}
|
||||
|
||||
leader_window = GDK_X11_DISPLAY (x11_screen->display)->leader_window;
|
||||
if (!leader_window)
|
||||
@@ -1147,6 +1150,9 @@ _gdk_x11_display_create_window_impl (GdkDisplay *display,
|
||||
if (attributes_mask & GDK_WA_TYPE_HINT)
|
||||
gdk_window_set_type_hint (window, attributes->type_hint);
|
||||
|
||||
if (!window->input_only)
|
||||
gdk_window_x11_set_background (window, NULL);
|
||||
|
||||
gdk_x11_event_source_select_events ((GdkEventSource *) display_x11->event_source,
|
||||
GDK_WINDOW_XID (window), event_mask,
|
||||
StructureNotifyMask | PropertyChangeMask);
|
||||
@@ -2979,17 +2985,8 @@ gdk_window_x11_set_background (GdkWindow *window,
|
||||
|
||||
if (pattern == NULL)
|
||||
{
|
||||
GdkWindow *parent;
|
||||
|
||||
/* X throws BadMatch if the parent has a different depth when
|
||||
* using ParentRelative */
|
||||
parent = gdk_window_get_parent (window);
|
||||
if (parent && window->depth != parent->depth)
|
||||
XSetWindowBackgroundPixmap (GDK_WINDOW_XDISPLAY (window),
|
||||
GDK_WINDOW_XID (window), None);
|
||||
else
|
||||
XSetWindowBackgroundPixmap (GDK_WINDOW_XDISPLAY (window),
|
||||
GDK_WINDOW_XID (window), ParentRelative);
|
||||
XSetWindowBackgroundPixmap (GDK_WINDOW_XDISPLAY (window),
|
||||
GDK_WINDOW_XID (window), None);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -5281,6 +5278,9 @@ emulate_resize_drag (GdkWindow *window,
|
||||
{
|
||||
MoveResizeData *mv_resize = get_move_resize_data (GDK_WINDOW_DISPLAY (window), TRUE);
|
||||
|
||||
if (mv_resize->moveresize_window != NULL)
|
||||
return; /* already a drag operation in progress */
|
||||
|
||||
mv_resize->is_resize = TRUE;
|
||||
mv_resize->moveresize_button = button;
|
||||
mv_resize->resize_edge = edge;
|
||||
@@ -5311,7 +5311,10 @@ emulate_move_drag (GdkWindow *window,
|
||||
guint32 timestamp)
|
||||
{
|
||||
MoveResizeData *mv_resize = get_move_resize_data (GDK_WINDOW_DISPLAY (window), TRUE);
|
||||
|
||||
|
||||
if (mv_resize->moveresize_window != NULL)
|
||||
return; /* already a drag operation in progress */
|
||||
|
||||
mv_resize->is_resize = FALSE;
|
||||
mv_resize->device = device;
|
||||
mv_resize->moveresize_button = button;
|
||||
|
||||
+14
-8
@@ -23,6 +23,7 @@ AM_CPPFLAGS = \
|
||||
$(GTK_BASE_CFLAGS_DEFINES) \
|
||||
$(GTK_PLAT_CFLAGS_DEFINES) \
|
||||
-DX11_DATA_PREFIX=\"$(X11_PREFIX)\" \
|
||||
-DISO_CODES_PREFIX=\"$(ISO_CODES_PREFIX)\" \
|
||||
-I$(top_builddir) \
|
||||
-I$(top_builddir)/gtk \
|
||||
-I$(top_srcdir) \
|
||||
@@ -468,6 +469,7 @@ gtk_private_h_sources = \
|
||||
gtkdialogprivate.h \
|
||||
gtkdndprivate.h \
|
||||
gtkemojichooser.h \
|
||||
gtkemojicompletion.h \
|
||||
gtkentryprivate.h \
|
||||
gtkeventcontrollerprivate.h \
|
||||
gtkfilechooserembed.h \
|
||||
@@ -481,6 +483,7 @@ gtk_private_h_sources = \
|
||||
gtkfilesystemmodel.h \
|
||||
gtkfontchooserprivate.h \
|
||||
gtkfontchooserutils.h \
|
||||
gtkfontchooserwidgetprivate.h \
|
||||
gtkgestureprivate.h \
|
||||
gtkgesturedragprivate.h \
|
||||
gtkgesturelongpressprivate.h \
|
||||
@@ -745,6 +748,7 @@ gtk_base_c_sources = \
|
||||
gtkdrawingarea.c \
|
||||
gtkeditable.c \
|
||||
gtkemojichooser.c \
|
||||
gtkemojicompletion.c \
|
||||
gtkentry.c \
|
||||
gtkentrybuffer.c \
|
||||
gtkentrycompletion.c \
|
||||
@@ -810,7 +814,6 @@ gtk_base_c_sources = \
|
||||
gtklockbutton.c \
|
||||
gtkmain.c \
|
||||
gtkmagnifier.c \
|
||||
gtkmarshalers.c \
|
||||
gtkmenu.c \
|
||||
gtkmenubar.c \
|
||||
gtkmenubutton.c \
|
||||
@@ -847,7 +850,6 @@ gtk_base_c_sources = \
|
||||
gtkprintsettings.c \
|
||||
gtkprintutils.c \
|
||||
gtkprivate.c \
|
||||
gtkprivatetypebuiltins.c \
|
||||
gtkprogressbar.c \
|
||||
gtkprogresstracker.c \
|
||||
gtkpixelcache.c \
|
||||
@@ -870,7 +872,6 @@ gtk_base_c_sources = \
|
||||
gtkrenderbackground.c \
|
||||
gtkrenderborder.c \
|
||||
gtkrendericon.c \
|
||||
gtkresources.c \
|
||||
gtkrevealer.c \
|
||||
gtkroundedbox.c \
|
||||
gtkscale.c \
|
||||
@@ -946,7 +947,6 @@ gtk_base_c_sources = \
|
||||
gtktreestore.c \
|
||||
gtktreeview.c \
|
||||
gtktreeviewcolumn.c \
|
||||
gtktypebuiltins.c \
|
||||
gtkutils.c \
|
||||
gtkvolumebutton.c \
|
||||
gtkviewport.c \
|
||||
@@ -956,7 +956,9 @@ gtk_base_c_sources = \
|
||||
gtkwindowgroup.c \
|
||||
gtkwin32draw.c \
|
||||
gtkwin32theme.c \
|
||||
gdkpixbufutils.c
|
||||
gdkpixbufutils.c \
|
||||
language-names.c \
|
||||
script-names.c
|
||||
|
||||
if USE_QUARTZ
|
||||
gtk_base_c_sources += \
|
||||
@@ -1126,10 +1128,11 @@ gtk_built_sources = \
|
||||
gtkresources.c \
|
||||
gtk.gresource.xml \
|
||||
gtktypebuiltins.c \
|
||||
gtktypefuncs.c \
|
||||
gtkmarshalers.c \
|
||||
gtkprivatetypebuiltins.c
|
||||
|
||||
nodist_gtk_c_sources += $(gtk_built_sources)
|
||||
|
||||
stamp_files = \
|
||||
stamp-gtkmarshalers.h \
|
||||
stamp-gtktypebuiltins.h \
|
||||
@@ -1425,7 +1428,7 @@ gtktypefuncs.c: stamp-gtktypebuiltins.h stamp-gtkprivatetypebuiltins.h $(top_src
|
||||
sort | uniq | \
|
||||
$(SED) '{ s/^/*tp++ = /; s/$$/();/; s/^.*\(gdk_x11\|gtk_plug_\|gtk_socket_\).*$$/#ifdef GDK_WINDOWING_X11\n&\n#endif/; }' >> xgen-gtf \
|
||||
&& cp xgen-gtf $@ && rm -f xgen-gtf
|
||||
gtktestutils.c: gtktypefuncs.c
|
||||
$(srcdir)/gtktestutils.c: gtktypefuncs.c
|
||||
|
||||
# target platform:
|
||||
lib_LTLIBRARIES = libgtk-3.la
|
||||
@@ -1477,7 +1480,8 @@ gtk_3_FILES = \
|
||||
$(gtk_base_c_sources) \
|
||||
$(gtk_os_win32_c_sources) \
|
||||
$(gtk_use_win32_c_sources) \
|
||||
$(gtk_dbus_built_sources)
|
||||
$(gtk_dbus_built_sources) \
|
||||
$(gtk_built_sources)
|
||||
|
||||
gtk_3_EXCLUDES = dummy
|
||||
gtk_3_HEADERS_DIR = $(gtkincludedir)
|
||||
@@ -1593,9 +1597,11 @@ Gtk_3_0_gir_SCANNERFLAGS = \
|
||||
--add-include-path=$(top_builddir)/gdk \
|
||||
--include-uninstalled=$(top_builddir)/gdk/Gdk-3.0.gir
|
||||
Gtk_3_0_gir_INCLUDES = Atk-1.0
|
||||
Gtk_3_0_gir_C_INCLUDES = gtk/gtk.h gtk/gtk-a11y.h
|
||||
if USE_X11
|
||||
Gtk_3_0_gir_SCANNERFLAGS += --add-include-path=$(top_builddir)/gdk/x11
|
||||
Gtk_3_0_gir_INCLUDES += xlib-2.0
|
||||
Gtk_3_0_gir_C_INCLUDES += gtk/gtkx.h
|
||||
endif
|
||||
Gtk_3_0_gir_CFLAGS = \
|
||||
$(AM_CPPFLAGS) \
|
||||
|
||||
@@ -604,7 +604,7 @@ gtk_entry_accessible_notify_gtk (GObject *obj,
|
||||
}
|
||||
else
|
||||
{
|
||||
atk_object_set_description (priv->icons[GTK_ENTRY_ICON_PRIMARY],
|
||||
atk_object_set_description (priv->icons[GTK_ENTRY_ICON_SECONDARY],
|
||||
"");
|
||||
}
|
||||
}
|
||||
@@ -1433,7 +1433,7 @@ delete_text_cb (GtkEditable *editable,
|
||||
g_signal_emit_by_name (accessible,
|
||||
"text-changed::delete",
|
||||
start,
|
||||
end);
|
||||
end - start);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
|
||||
@@ -1226,18 +1226,18 @@ gtk_icon_view_accessible_connect_model_signals (GtkIconView *icon_view)
|
||||
GObject *obj;
|
||||
|
||||
obj = G_OBJECT (icon_view->priv->model);
|
||||
g_signal_connect_data (obj, "row-changed",
|
||||
(GCallback) gtk_icon_view_accessible_model_row_changed,
|
||||
icon_view, NULL, 0);
|
||||
g_signal_connect_data (obj, "row-inserted",
|
||||
(GCallback) gtk_icon_view_accessible_model_row_inserted,
|
||||
icon_view, NULL, G_CONNECT_AFTER);
|
||||
g_signal_connect_data (obj, "row-deleted",
|
||||
(GCallback) gtk_icon_view_accessible_model_row_deleted,
|
||||
icon_view, NULL, G_CONNECT_AFTER);
|
||||
g_signal_connect_data (obj, "rows-reordered",
|
||||
(GCallback) gtk_icon_view_accessible_model_rows_reordered,
|
||||
icon_view, NULL, G_CONNECT_AFTER);
|
||||
g_signal_connect_object (obj, "row-changed",
|
||||
G_CALLBACK (gtk_icon_view_accessible_model_row_changed),
|
||||
icon_view, 0);
|
||||
g_signal_connect_object (obj, "row-inserted",
|
||||
G_CALLBACK (gtk_icon_view_accessible_model_row_inserted),
|
||||
icon_view, G_CONNECT_AFTER);
|
||||
g_signal_connect_object (obj, "row-deleted",
|
||||
G_CALLBACK (gtk_icon_view_accessible_model_row_deleted),
|
||||
icon_view, G_CONNECT_AFTER);
|
||||
g_signal_connect_object (obj, "rows-reordered",
|
||||
G_CALLBACK (gtk_icon_view_accessible_model_rows_reordered),
|
||||
icon_view, G_CONNECT_AFTER);
|
||||
}
|
||||
|
||||
static void
|
||||
|
||||
@@ -84,7 +84,7 @@ gtk_label_accessible_link_impl_get_hyperlink (AtkHyperlinkImpl *atk_impl)
|
||||
{
|
||||
GtkLabelAccessibleLinkImpl *impl = (GtkLabelAccessibleLinkImpl *)atk_impl;
|
||||
|
||||
return g_object_ref (impl->link);
|
||||
return ATK_HYPERLINK (g_object_ref (impl->link));
|
||||
}
|
||||
|
||||
static void
|
||||
|
||||
@@ -92,12 +92,12 @@ gtk_scrolled_window_accessible_initialize (AtkObject *obj,
|
||||
|
||||
window = GTK_SCROLLED_WINDOW (data);
|
||||
|
||||
g_signal_connect_data (gtk_scrolled_window_get_hscrollbar (window), "notify::visible",
|
||||
G_CALLBACK (visibility_changed),
|
||||
obj, NULL, FALSE);
|
||||
g_signal_connect_data (gtk_scrolled_window_get_vscrollbar (window), "notify::visible",
|
||||
G_CALLBACK (visibility_changed),
|
||||
obj, NULL, FALSE);
|
||||
g_signal_connect_object (gtk_scrolled_window_get_hscrollbar (window), "notify::visible",
|
||||
G_CALLBACK (visibility_changed),
|
||||
obj, 0);
|
||||
g_signal_connect_object (gtk_scrolled_window_get_vscrollbar (window), "notify::visible",
|
||||
G_CALLBACK (visibility_changed),
|
||||
obj, 0);
|
||||
|
||||
obj->role = ATK_ROLE_SCROLL_PANE;
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user