Compare commits
19 Commits
gpu-fix-la
...
matthiasc/
Author | SHA1 | Date | |
---|---|---|---|
|
39c5c5a561 | ||
|
69a0d4c7d7 | ||
|
7fe48792ee | ||
|
57a75f760d | ||
|
bc618470bf | ||
|
f56ba41893 | ||
|
854591a5f9 | ||
|
c9e02edfc3 | ||
|
12ed685013 | ||
|
ac991483f2 | ||
|
f3d84fd513 | ||
|
318faf7b0d | ||
|
fdc72775ab | ||
|
b9684c6036 | ||
|
408ea049de | ||
|
1bd13c819b | ||
|
6559e34cac | ||
|
ef4d3f172d | ||
|
8d3593af55 |
1
.gitignore
vendored
@@ -1,2 +1 @@
|
|||||||
/subprojects/*/
|
/subprojects/*/
|
||||||
.flatpak-builder/
|
|
||||||
|
145
.gitlab-ci.yml
@@ -24,22 +24,14 @@ stages:
|
|||||||
variables:
|
variables:
|
||||||
COMMON_MESON_FLAGS: "-Dwerror=true -Dcairo:werror=false -Dgi-docgen:werror=false -Dgraphene:werror=false -Dlibepoxy:werror=false -Dlibsass:werror=false -Dpango:werror=false -Dsassc:werror=false -Dgdk-pixbuf:werror=false -Dglib:werror=false -Dlibcloudproviders:werror=false -Dlibpng:werror=false -Dlibtiff:werror=false -Dsysprof:werror=false -Dwayland-protocols:werror=false -Dharfbuzz:werror=false -Dfreetype2:werror=false -Dfontconfig:werror=false -Dfribidi:werror=false -Dlibffi:werror=false -Dlibjpeg-turbo:werror=false -Dmutest:werror=false -Dpixman:werror=false -Dproxy-libintl:werror=false"
|
COMMON_MESON_FLAGS: "-Dwerror=true -Dcairo:werror=false -Dgi-docgen:werror=false -Dgraphene:werror=false -Dlibepoxy:werror=false -Dlibsass:werror=false -Dpango:werror=false -Dsassc:werror=false -Dgdk-pixbuf:werror=false -Dglib:werror=false -Dlibcloudproviders:werror=false -Dlibpng:werror=false -Dlibtiff:werror=false -Dsysprof:werror=false -Dwayland-protocols:werror=false -Dharfbuzz:werror=false -Dfreetype2:werror=false -Dfontconfig:werror=false -Dfribidi:werror=false -Dlibffi:werror=false -Dlibjpeg-turbo:werror=false -Dmutest:werror=false -Dpixman:werror=false -Dproxy-libintl:werror=false"
|
||||||
BACKEND_FLAGS: "-Dx11-backend=true -Dwayland-backend=true -Dbroadway-backend=true"
|
BACKEND_FLAGS: "-Dx11-backend=true -Dwayland-backend=true -Dbroadway-backend=true"
|
||||||
FEATURE_FLAGS: "-Dvulkan=enabled -Dcloudproviders=enabled -Dbuild-testsuite=true -Dintrospection=enabled"
|
FEATURE_FLAGS: "-Dvulkan=enabled -Dcloudproviders=enabled -Ddemos=false -Dbuild-examples=false -Dbuild-tests=false -Dbuild-testsuite=true"
|
||||||
MESON_TEST_TIMEOUT_MULTIPLIER: 3
|
MESON_TEST_TIMEOUT_MULTIPLIER: 3
|
||||||
FEDORA_IMAGE: "registry.gitlab.gnome.org/gnome/gtk/fedora:v49"
|
FEDORA_IMAGE: "registry.gitlab.gnome.org/gnome/gtk/fedora:v42"
|
||||||
|
|
||||||
workflow:
|
workflow:
|
||||||
rules:
|
rules:
|
||||||
# run merge request pipelines
|
|
||||||
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
|
|
||||||
# do not run branch pipelines if corresponding merge requests exist...
|
|
||||||
# (this avoids duplicate pipelines)
|
|
||||||
- if: $CI_COMMIT_BRANCH && $CI_OPEN_MERGE_REQUESTS
|
|
||||||
when: never
|
|
||||||
# ...but otherwise run branch pipelines
|
|
||||||
- if: $CI_COMMIT_BRANCH
|
|
||||||
# run tag pipelines
|
|
||||||
- if: $CI_COMMIT_TAG
|
- if: $CI_COMMIT_TAG
|
||||||
|
- if: $CI_COMMIT_BRANCH
|
||||||
|
|
||||||
default:
|
default:
|
||||||
retry:
|
retry:
|
||||||
@@ -65,10 +57,15 @@ style-check-diff:
|
|||||||
reports:
|
reports:
|
||||||
junit:
|
junit:
|
||||||
- "${CI_PROJECT_DIR}/_build/report-x11.xml"
|
- "${CI_PROJECT_DIR}/_build/report-x11.xml"
|
||||||
|
- "${CI_PROJECT_DIR}/_build/report-x11_unstable.xml"
|
||||||
- "${CI_PROJECT_DIR}/_build/report-wayland.xml"
|
- "${CI_PROJECT_DIR}/_build/report-wayland.xml"
|
||||||
- "${CI_PROJECT_DIR}/_build/report-wayland_gl.xml"
|
- "${CI_PROJECT_DIR}/_build/report-wayland_unstable.xml"
|
||||||
- "${CI_PROJECT_DIR}/_build/report-wayland_gles2.xml"
|
- "${CI_PROJECT_DIR}/_build/report-wayland_gles.xml"
|
||||||
|
- "${CI_PROJECT_DIR}/_build/report-wayland_gles_unstable.xml"
|
||||||
|
- "${CI_PROJECT_DIR}/_build/report-wayland_smalltexture.xml"
|
||||||
|
- "${CI_PROJECT_DIR}/_build/report-wayland_smalltexture_unstable.xml"
|
||||||
- "${CI_PROJECT_DIR}/_build/report-broadway.xml"
|
- "${CI_PROJECT_DIR}/_build/report-broadway.xml"
|
||||||
|
- "${CI_PROJECT_DIR}/_build/report-broadway_unstable.xml"
|
||||||
name: "gtk-${CI_COMMIT_REF_NAME}"
|
name: "gtk-${CI_COMMIT_REF_NAME}"
|
||||||
paths:
|
paths:
|
||||||
- "${CI_PROJECT_DIR}/_build/meson-logs"
|
- "${CI_PROJECT_DIR}/_build/meson-logs"
|
||||||
@@ -79,7 +76,6 @@ style-check-diff:
|
|||||||
- "${CI_PROJECT_DIR}/_build/testsuite/tools/output/*/*"
|
- "${CI_PROJECT_DIR}/_build/testsuite/tools/output/*/*"
|
||||||
- "${CI_PROJECT_DIR}/_build/testsuite/gsk/compare/*/*/*.png"
|
- "${CI_PROJECT_DIR}/_build/testsuite/gsk/compare/*/*/*.png"
|
||||||
- "${CI_PROJECT_DIR}/_build/testsuite/css/output/*/*.syscap"
|
- "${CI_PROJECT_DIR}/_build/testsuite/css/output/*/*.syscap"
|
||||||
- "${CI_PROJECT_DIR}/_build/testsuite/headless/*/*.log"
|
|
||||||
- "${CI_PROJECT_DIR}/_build_hello/meson-logs"
|
- "${CI_PROJECT_DIR}/_build_hello/meson-logs"
|
||||||
cache:
|
cache:
|
||||||
key: "$CI_JOB_NAME"
|
key: "$CI_JOB_NAME"
|
||||||
@@ -95,28 +91,7 @@ fedora-x86_64:
|
|||||||
script:
|
script:
|
||||||
- .gitlab-ci/show-info-linux.sh
|
- .gitlab-ci/show-info-linux.sh
|
||||||
- export PATH="$HOME/.local/bin:$PATH"
|
- export PATH="$HOME/.local/bin:$PATH"
|
||||||
- meson subprojects download
|
- pip3 install --user meson~=0.64
|
||||||
- meson subprojects update --reset
|
|
||||||
- meson setup
|
|
||||||
${COMMON_MESON_FLAGS}
|
|
||||||
${EXTRA_MESON_FLAGS}
|
|
||||||
${BACKEND_FLAGS}
|
|
||||||
${FEATURE_FLAGS}
|
|
||||||
_build
|
|
||||||
- meson compile -C _build
|
|
||||||
- .gitlab-ci/run-tests.sh _build x11 gtk
|
|
||||||
# only repeat test runs that are likely affected by test setups
|
|
||||||
- .gitlab-ci/run-tests.sh _build wayland_gl gtk:gdk,gtk:gsk-gl
|
|
||||||
|
|
||||||
release-build:
|
|
||||||
extends: .build-fedora-default
|
|
||||||
stage: build
|
|
||||||
needs: []
|
|
||||||
variables:
|
|
||||||
EXTRA_MESON_FLAGS: "--buildtype=release"
|
|
||||||
script:
|
|
||||||
- .gitlab-ci/show-info-linux.sh
|
|
||||||
- export PATH="$HOME/.local/bin:$PATH"
|
|
||||||
- meson subprojects download
|
- meson subprojects download
|
||||||
- meson subprojects update --reset
|
- meson subprojects update --reset
|
||||||
- mkdir _install
|
- mkdir _install
|
||||||
@@ -131,11 +106,13 @@ release-build:
|
|||||||
- meson install -C _build
|
- meson install -C _build
|
||||||
- PKG_CONFIG_PATH=${CI_PROJECT_DIR}/_install/lib64/pkgconfig:${CI_PROJECT_DIR}/_install/share/pkgconfig meson setup _build_hello examples/hello
|
- PKG_CONFIG_PATH=${CI_PROJECT_DIR}/_install/lib64/pkgconfig:${CI_PROJECT_DIR}/_install/share/pkgconfig meson setup _build_hello examples/hello
|
||||||
- LD_LIBRARY_PATH=${CI_PROJECT_DIR}/_install/lib64 meson compile -C _build_hello
|
- LD_LIBRARY_PATH=${CI_PROJECT_DIR}/_install/lib64 meson compile -C _build_hello
|
||||||
- .gitlab-ci/run-tests.sh _build wayland gtk
|
- .gitlab-ci/run-tests.sh _build x11
|
||||||
# only repeat test runs that are likely affected by test setups
|
- .gitlab-ci/run-tests.sh _build wayland
|
||||||
- .gitlab-ci/run-tests.sh _build wayland_gles2 gtk:gdk,gtk:gsk-gl
|
- .gitlab-ci/run-tests.sh _build wayland_gles
|
||||||
|
- .gitlab-ci/run-tests.sh _build wayland_smalltexture
|
||||||
|
- .gitlab-ci/run-tests.sh _build broadway
|
||||||
|
|
||||||
fedora-clang:
|
release-build:
|
||||||
extends: .build-fedora-default
|
extends: .build-fedora-default
|
||||||
stage: build
|
stage: build
|
||||||
needs: []
|
needs: []
|
||||||
@@ -144,7 +121,7 @@ fedora-clang:
|
|||||||
script:
|
script:
|
||||||
- .gitlab-ci/show-info-linux.sh
|
- .gitlab-ci/show-info-linux.sh
|
||||||
- export PATH="$HOME/.local/bin:$PATH"
|
- export PATH="$HOME/.local/bin:$PATH"
|
||||||
- export CC=clang
|
- pip3 install --user meson~=0.64
|
||||||
- meson subprojects download
|
- meson subprojects download
|
||||||
- meson subprojects update --reset
|
- meson subprojects update --reset
|
||||||
- meson setup
|
- meson setup
|
||||||
@@ -154,6 +131,7 @@ fedora-clang:
|
|||||||
${FEATURE_FLAGS}
|
${FEATURE_FLAGS}
|
||||||
_build
|
_build
|
||||||
- meson compile -C _build
|
- meson compile -C _build
|
||||||
|
- .gitlab-ci/run-tests.sh _build x11
|
||||||
|
|
||||||
fedora-mingw64:
|
fedora-mingw64:
|
||||||
extends: .build-fedora-default
|
extends: .build-fedora-default
|
||||||
@@ -174,11 +152,23 @@ fedora-mingw64:
|
|||||||
script:
|
script:
|
||||||
- .gitlab-ci/show-info-linux.sh
|
- .gitlab-ci/show-info-linux.sh
|
||||||
- export PATH="$HOME/.local/bin:$PATH"
|
- export PATH="$HOME/.local/bin:$PATH"
|
||||||
- pip3 install --user meson~=1.0
|
- pip3 install --user meson~=0.64
|
||||||
- meson subprojects download
|
- meson subprojects download
|
||||||
- meson subprojects update --reset
|
- meson subprojects update --reset
|
||||||
- meson -Dintrospection=disabled -Dgraphene:introspection=disabled _build
|
# Test that mingw64-meson still fails. If it has stopped failing, the CI
|
||||||
- meson compile -C _build
|
# will fail and now you should remove the hack that follows this.
|
||||||
|
- FAILED=false
|
||||||
|
- mingw64-meson --version || FAILED=true
|
||||||
|
- test $FAILED = false && echo "mingw64-meson works now, remove the hack" && exit 1
|
||||||
|
# HACK: Running mingw64-meson directly fails on the CI with:
|
||||||
|
# /usr/bin/mingw64-meson: line 92: fg: no job control
|
||||||
|
# Because rpm is not evaluating %__meson and it gets interpreted as a job
|
||||||
|
# specifier. So we fix that and run it ourselves.
|
||||||
|
- rpm --eval "%{mingw64_meson}" > mingw64-meson.sh
|
||||||
|
- sed -i -e 's/%__meson/meson/' mingw64-meson.sh
|
||||||
|
- chmod +x mingw64-meson.sh
|
||||||
|
- ./mingw64-meson.sh -Dintrospection=disabled -Dgraphene:introspection=disabled _build
|
||||||
|
- ninja -C _build
|
||||||
|
|
||||||
.mingw-defaults:
|
.mingw-defaults:
|
||||||
stage: build
|
stage: build
|
||||||
@@ -209,48 +199,32 @@ msys2-mingw64:
|
|||||||
paths:
|
paths:
|
||||||
- "${CI_PROJECT_DIR}/_build/gtkdll.tar.gz"
|
- "${CI_PROJECT_DIR}/_build/gtkdll.tar.gz"
|
||||||
|
|
||||||
macos-x86_64:
|
macos:
|
||||||
|
# Sadly, this fails regularly, and its failure is never enlightening
|
||||||
|
allow_failure: true
|
||||||
rules:
|
rules:
|
||||||
# Do not run in forks as the runner is not available there.
|
|
||||||
- if: $CI_PROJECT_NAMESPACE == "GNOME"
|
- if: $CI_PROJECT_NAMESPACE == "GNOME"
|
||||||
stage: build
|
stage: build
|
||||||
tags:
|
tags:
|
||||||
- macosintel
|
- macos
|
||||||
needs: []
|
needs: []
|
||||||
variables:
|
|
||||||
MESON_FORCE_BACKTRACKE: 1
|
|
||||||
TMPDIR: /Users/Shared/work/tmp
|
|
||||||
SDKROOT: /opt/sdks/MacOSX10.13.4.sdk
|
|
||||||
PIP_CACHE_DIR: /Users/Shared/build/cache
|
|
||||||
PIPENV_CACHE_DIR: $PIP_CACHE_DIR
|
|
||||||
PYTHONPYCACHEPREFIX: $PIP_CACHE_DIR
|
|
||||||
EXTRA_MESON_FLAGS: "-Dgobject-introspection:werror=false"
|
|
||||||
before_script:
|
before_script:
|
||||||
# Not using ccache on purpose as it accelerates the build so much that it
|
|
||||||
# can trigger race conditions in the gobject-introspection subproject.
|
|
||||||
- bash .gitlab-ci/show-info-osx.sh
|
- bash .gitlab-ci/show-info-osx.sh
|
||||||
- /opt/macports/bin/python3.10 -m venv .venv
|
- pip3 install --user meson~=0.64
|
||||||
- ln -s /opt/cmake/CMake.app/Contents/bin/cmake .venv/bin
|
- pip3 install --user ninja
|
||||||
- ln -s /opt/pkg-config/bin/pkg-config .venv/bin
|
- export PATH=/Users/gitlabrunner/Library/Python/3.7/bin:$PATH
|
||||||
- ln -s /opt/bison/bin/bison .venv/bin
|
- export MESON_FORCE_BACKTRACE=1
|
||||||
- source .venv/bin/activate
|
|
||||||
- pip3 install meson==1.2.0
|
|
||||||
- pip3 install ninja==1.11.1
|
|
||||||
- pip3 install /Users/Shared/build/pkgs/PyGObject-3.44.0-cp310-cp310-macosx_10_13_x86_64.whl
|
|
||||||
/Users/Shared/build/pkgs/pycairo-1.23.0-cp310-cp310-macosx_10_13_x86_64.whl
|
|
||||||
script:
|
script:
|
||||||
- meson setup
|
- meson setup ${COMMON_MESON_FLAGS}
|
||||||
${COMMON_MESON_FLAGS}
|
|
||||||
${EXTRA_MESON_FLAGS}
|
|
||||||
-Dx11-backend=false
|
-Dx11-backend=false
|
||||||
-Dbroadway-backend=true
|
-Dbroadway-backend=true
|
||||||
-Dmacos-backend=true
|
-Dmacos-backend=true
|
||||||
-Dmedia-gstreamer=disabled
|
-Dmedia-gstreamer=disabled
|
||||||
-Dintrospection=enabled
|
-Dintrospection=disabled
|
||||||
-Dcpp_std=c++11
|
-Dcpp_std=c++11
|
||||||
-Dpixman:tests=disabled
|
-Dpixman:tests=disabled
|
||||||
-Dlibjpeg-turbo:simd=disabled
|
-Dlibjpeg-turbo:simd=disabled
|
||||||
-Dbuild-demos=false
|
-Ddemos=false
|
||||||
-Dbuild-tests=false
|
-Dbuild-tests=false
|
||||||
-Dbuild-examples=false
|
-Dbuild-examples=false
|
||||||
-Dbuild-testsuite=false
|
-Dbuild-testsuite=false
|
||||||
@@ -394,11 +368,10 @@ static-scan:
|
|||||||
EXTRA_MESON_FLAGS: "--buildtype=debug"
|
EXTRA_MESON_FLAGS: "--buildtype=debug"
|
||||||
script:
|
script:
|
||||||
- export PATH="$HOME/.local/bin:$PATH"
|
- export PATH="$HOME/.local/bin:$PATH"
|
||||||
|
- pip3 install --user meson~=0.64
|
||||||
- meson setup
|
- meson setup
|
||||||
${COMMON_MESON_FLAGS}
|
${COMMON_MESON_FLAGS}
|
||||||
${EXTRA_MESON_FLAGS}
|
${EXTRA_MESON_FLAGS}
|
||||||
${BACKEND_FLAGS}
|
|
||||||
${FEATURE_FLAGS}
|
|
||||||
_scan_build
|
_scan_build
|
||||||
- ninja -C _scan_build scan-build
|
- ninja -C _scan_build scan-build
|
||||||
artifacts:
|
artifacts:
|
||||||
@@ -413,28 +386,18 @@ asan-build:
|
|||||||
tags: [ asan ]
|
tags: [ asan ]
|
||||||
stage: analysis
|
stage: analysis
|
||||||
needs: []
|
needs: []
|
||||||
|
when: manual
|
||||||
variables:
|
variables:
|
||||||
script:
|
script:
|
||||||
- export PATH="$HOME/.local/bin:$PATH"
|
- export PATH="$HOME/.local/bin:$PATH"
|
||||||
- CC=clang meson setup
|
- pip3 install --user meson~=0.64
|
||||||
--buildtype=debugoptimized
|
- CC=clang meson setup --buildtype=debugoptimized -Db_sanitize=address -Db_lundef=false -Dintrospection=disabled -Df16c=disabled _build
|
||||||
-Db_sanitize=address
|
|
||||||
-Db_lundef=false
|
|
||||||
-Dbuild-demos=false
|
|
||||||
-Dbuild-tests=false
|
|
||||||
-Dbuild-examples=false
|
|
||||||
-Dintrospection=disabled
|
|
||||||
-Df16c=disabled
|
|
||||||
_build
|
|
||||||
- ninja -C _build
|
- ninja -C _build
|
||||||
- .gitlab-ci/run-tests.sh _build wayland gtk
|
- .gitlab-ci/run-tests.sh _build wayland
|
||||||
artifacts:
|
artifacts:
|
||||||
when: always
|
|
||||||
reports:
|
|
||||||
junit:
|
|
||||||
- "${CI_PROJECT_DIR}/_build/report-wayland.xml"
|
|
||||||
paths:
|
paths:
|
||||||
- "${CI_PROJECT_DIR}/_build/meson-logs"
|
- _build/meson-logs
|
||||||
|
allow_failure: true
|
||||||
|
|
||||||
reference:
|
reference:
|
||||||
image: $FEDORA_IMAGE
|
image: $FEDORA_IMAGE
|
||||||
@@ -442,16 +405,16 @@ reference:
|
|||||||
needs: []
|
needs: []
|
||||||
script:
|
script:
|
||||||
- export PATH="$HOME/.local/bin:$PATH"
|
- export PATH="$HOME/.local/bin:$PATH"
|
||||||
|
- pip3 install --user meson~=0.64
|
||||||
- meson setup
|
- meson setup
|
||||||
${COMMON_MESON_FLAGS}
|
${COMMON_MESON_FLAGS}
|
||||||
--buildtype=release
|
--buildtype=release
|
||||||
--force-fallback-for=gdk-pixbuf,pango
|
--force-fallback-for=gdk-pixbuf,pango
|
||||||
-Dintrospection=enabled
|
-Dintrospection=enabled
|
||||||
-Ddocumentation=true
|
|
||||||
-Dgtk_doc=true
|
-Dgtk_doc=true
|
||||||
-Dgdk-pixbuf:gtk_doc=true
|
-Dgdk-pixbuf:gtk_doc=true
|
||||||
-Dpango:gtk_doc=true
|
-Dpango:gtk_doc=true
|
||||||
-Dbuild-demos=false
|
-Ddemos=false
|
||||||
-Dbuild-examples=false
|
-Dbuild-examples=false
|
||||||
-Dbuild-tests=false
|
-Dbuild-tests=false
|
||||||
-Dbuild-testsuite=false
|
-Dbuild-testsuite=false
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
FROM fedora:39
|
FROM fedora:38
|
||||||
|
|
||||||
RUN dnf -y install \
|
RUN dnf -y install \
|
||||||
adwaita-icon-theme \
|
adwaita-icon-theme \
|
||||||
@@ -32,7 +32,7 @@ RUN dnf -y install \
|
|||||||
glib2-static \
|
glib2-static \
|
||||||
glibc-devel \
|
glibc-devel \
|
||||||
glibc-headers \
|
glibc-headers \
|
||||||
glslc \
|
gnome-desktop-testing \
|
||||||
gnupg2 \
|
gnupg2 \
|
||||||
gobject-introspection-devel \
|
gobject-introspection-devel \
|
||||||
graphene-devel \
|
graphene-devel \
|
||||||
@@ -73,14 +73,10 @@ RUN dnf -y install \
|
|||||||
mesa-dri-drivers \
|
mesa-dri-drivers \
|
||||||
mesa-libEGL-devel \
|
mesa-libEGL-devel \
|
||||||
mesa-libGLES-devel \
|
mesa-libGLES-devel \
|
||||||
meson \
|
|
||||||
mutter \
|
|
||||||
ninja-build \
|
ninja-build \
|
||||||
pango-devel \
|
pango-devel \
|
||||||
pcre-devel \
|
pcre-devel \
|
||||||
pcre-static \
|
pcre-static \
|
||||||
pipewire \
|
|
||||||
pipewire-gstreamer \
|
|
||||||
python3 \
|
python3 \
|
||||||
python3-docutils \
|
python3-docutils \
|
||||||
python3-gobject \
|
python3-gobject \
|
||||||
@@ -88,7 +84,6 @@ RUN dnf -y install \
|
|||||||
python3-markdown \
|
python3-markdown \
|
||||||
python3-packaging \
|
python3-packaging \
|
||||||
python3-pip \
|
python3-pip \
|
||||||
python3-pydbus \
|
|
||||||
python3-pygments \
|
python3-pygments \
|
||||||
python3-typogrify \
|
python3-typogrify \
|
||||||
python3-wheel \
|
python3-wheel \
|
||||||
@@ -100,7 +95,6 @@ RUN dnf -y install \
|
|||||||
weston \
|
weston \
|
||||||
weston-libs \
|
weston-libs \
|
||||||
which \
|
which \
|
||||||
wireplumber \
|
|
||||||
xorg-x11-server-Xvfb \
|
xorg-x11-server-Xvfb \
|
||||||
&& dnf clean all
|
&& dnf clean all
|
||||||
|
|
||||||
|
@@ -23,8 +23,8 @@ flatpak build ${builddir} meson \
|
|||||||
-Dbuild-testsuite=false \
|
-Dbuild-testsuite=false \
|
||||||
-Dbuild-examples=false \
|
-Dbuild-examples=false \
|
||||||
-Dintrospection=disabled \
|
-Dintrospection=disabled \
|
||||||
-Dbuild-demos=true \
|
-Ddemos=true \
|
||||||
-Ddemo-profile=devel \
|
-Dprofile=devel \
|
||||||
_flatpak_build
|
_flatpak_build
|
||||||
|
|
||||||
flatpak build ${builddir} ninja -C _flatpak_build install
|
flatpak build ${builddir} ninja -C _flatpak_build install
|
||||||
|
@@ -324,7 +324,7 @@ for line in args.infile:
|
|||||||
units.append(unit)
|
units.append(unit)
|
||||||
|
|
||||||
report = {}
|
report = {}
|
||||||
report['date'] = datetime.datetime.now(datetime.UTC)
|
report['date'] = datetime.datetime.utcnow()
|
||||||
report['locale_date'] = report['date'].strftime("%c")
|
report['locale_date'] = report['date'].strftime("%c")
|
||||||
report['project_name'] = args.project_name
|
report['project_name'] = args.project_name
|
||||||
report['backend'] = args.backend
|
report['backend'] = args.backend
|
||||||
|
@@ -44,7 +44,7 @@ outfile = args.output
|
|||||||
testsuites = ET.Element('testsuites')
|
testsuites = ET.Element('testsuites')
|
||||||
testsuites.set('id', '{}/{}'.format(args.job_id, args.branch))
|
testsuites.set('id', '{}/{}'.format(args.job_id, args.branch))
|
||||||
testsuites.set('package', args.project_name)
|
testsuites.set('package', args.project_name)
|
||||||
testsuites.set('timestamp', datetime.datetime.now(datetime.UTC).isoformat(timespec='minutes'))
|
testsuites.set('timestamp', datetime.datetime.utcnow().isoformat(timespec='minutes'))
|
||||||
|
|
||||||
suites = {}
|
suites = {}
|
||||||
for line in args.infile:
|
for line in args.infile:
|
||||||
|
@@ -138,8 +138,7 @@ if [ $run == 1 ]; then
|
|||||||
echo -e "\e[1;32mRUNNING\e[0m: ${base} as ${TAG}"
|
echo -e "\e[1;32mRUNNING\e[0m: ${base} as ${TAG}"
|
||||||
${CMD} run \
|
${CMD} run \
|
||||||
--rm \
|
--rm \
|
||||||
--userns=keep-id \
|
--volume "$(pwd)/..:/home/user/app" \
|
||||||
--volume "$(pwd)/..:/home/user/app:rw,z" \
|
|
||||||
--workdir "/home/user/app" \
|
--workdir "/home/user/app" \
|
||||||
--tty \
|
--tty \
|
||||||
--interactive "${TAG}" \
|
--interactive "${TAG}" \
|
||||||
|
@@ -1,32 +0,0 @@
|
|||||||
#!/usr/bin/sh
|
|
||||||
#
|
|
||||||
builddir=$1
|
|
||||||
suite=$2
|
|
||||||
unit=$3
|
|
||||||
|
|
||||||
echo "** builddir: ${builddir}"
|
|
||||||
echo "** suite: ${suite}"
|
|
||||||
echo "** unit: ${unit}"
|
|
||||||
|
|
||||||
export XDG_RUNTIME_DIR="$(mktemp -p $(pwd) -d xdg-runtime-XXXXXX)"
|
|
||||||
|
|
||||||
weston --backend=headless-backend.so --socket=wayland-5 --idle-time=0 &
|
|
||||||
compositor=$!
|
|
||||||
|
|
||||||
export WAYLAND_DISPLAY=wayland-5
|
|
||||||
|
|
||||||
meson test -C ${builddir} \
|
|
||||||
--print-errorlogs \
|
|
||||||
--setup=wayland \
|
|
||||||
--suite=${suite} \
|
|
||||||
--no-suite=failing \
|
|
||||||
--no-suite=flaky \
|
|
||||||
--no-suite=wayland_failing \
|
|
||||||
--no-suite=gsk-compare-broadway \
|
|
||||||
--verbose \
|
|
||||||
"${unit}"
|
|
||||||
|
|
||||||
exit_code=$?
|
|
||||||
kill ${compositor}
|
|
||||||
|
|
||||||
exit ${exit_code}
|
|
@@ -1,36 +1,39 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
set -x
|
set +x
|
||||||
set +e
|
set +e
|
||||||
|
|
||||||
srcdir=$( pwd )
|
srcdir=$( pwd )
|
||||||
builddir=$1
|
builddir=$1
|
||||||
setup=$2
|
backend=$2
|
||||||
suite=$3
|
|
||||||
multiplier=${MESON_TEST_TIMEOUT_MULTIPLIER:-1}
|
|
||||||
|
|
||||||
# Ignore memory leaks lower in dependencies
|
# Ignore memory leaks lower in dependencies
|
||||||
export LSAN_OPTIONS=suppressions=$srcdir/lsan.supp:print_suppressions=0:detect_leaks=0:allocator_may_return_null=1
|
export LSAN_OPTIONS=suppressions=$srcdir/lsan.supp:print_suppressions=0:verbosity=1:log_threads=1
|
||||||
export G_SLICE=always-malloc
|
export G_SLICE=always-malloc
|
||||||
|
|
||||||
case "${setup}" in
|
case "${backend}" in
|
||||||
x11*)
|
x11)
|
||||||
xvfb-run -a -s "-screen 0 1024x768x24 -noreset" \
|
xvfb-run -a -s "-screen 0 1024x768x24 -noreset" \
|
||||||
meson test -C ${builddir} \
|
meson test -C ${builddir} \
|
||||||
--quiet \
|
--timeout-multiplier "${MESON_TEST_TIMEOUT_MULTIPLIER}" \
|
||||||
--timeout-multiplier "${multiplier}" \
|
|
||||||
--print-errorlogs \
|
--print-errorlogs \
|
||||||
--setup=${setup} \
|
--setup=${backend} \
|
||||||
--suite=${suite//,/ --suite=} \
|
--suite=gtk \
|
||||||
--no-suite=failing \
|
--no-suite=failing \
|
||||||
--no-suite=${setup}_failing \
|
|
||||||
--no-suite=flaky \
|
--no-suite=flaky \
|
||||||
--no-suite=headless \
|
|
||||||
--no-suite=gsk-compare-broadway
|
--no-suite=gsk-compare-broadway
|
||||||
|
|
||||||
# Store the exit code for the CI run, but always
|
# Store the exit code for the CI run, but always
|
||||||
# generate the reports
|
# generate the reports
|
||||||
exit_code=$?
|
exit_code=$?
|
||||||
|
|
||||||
|
xvfb-run -a -s "-screen 0 1024x768x24 -noreset" \
|
||||||
|
meson test -C ${builddir} \
|
||||||
|
--timeout-multiplier "${MESON_TEST_TIMEOUT_MULTIPLIER}" \
|
||||||
|
--print-errorlogs \
|
||||||
|
--setup=${backend}_unstable \
|
||||||
|
--suite=flaky \
|
||||||
|
--suite=failing || true
|
||||||
;;
|
;;
|
||||||
|
|
||||||
wayland*)
|
wayland*)
|
||||||
@@ -41,22 +44,26 @@ case "${setup}" in
|
|||||||
export WAYLAND_DISPLAY=wayland-5
|
export WAYLAND_DISPLAY=wayland-5
|
||||||
|
|
||||||
meson test -C ${builddir} \
|
meson test -C ${builddir} \
|
||||||
--quiet \
|
--timeout-multiplier "${MESON_TEST_TIMEOUT_MULTIPLIER}" \
|
||||||
--timeout-multiplier "${multiplier}" \
|
|
||||||
--print-errorlogs \
|
--print-errorlogs \
|
||||||
--setup=${setup} \
|
--setup=${backend} \
|
||||||
--suite=${suite//,/ --suite=} \
|
--suite=gtk \
|
||||||
--no-suite=failing \
|
--no-suite=failing \
|
||||||
--no-suite=${setup}_failing \
|
|
||||||
--no-suite=flaky \
|
--no-suite=flaky \
|
||||||
--no-suite=headless \
|
|
||||||
--no-suite=gsk-compare-broadway
|
--no-suite=gsk-compare-broadway
|
||||||
exit_code=$?
|
exit_code=$?
|
||||||
|
|
||||||
|
meson test -C ${builddir} \
|
||||||
|
--timeout-multiplier "${MESON_TEST_TIMEOUT_MULTIPLIER}" \
|
||||||
|
--print-errorlogs \
|
||||||
|
--setup=${backend}_unstable \
|
||||||
|
--suite=flaky \
|
||||||
|
--suite=failing || true
|
||||||
|
|
||||||
kill ${compositor}
|
kill ${compositor}
|
||||||
;;
|
;;
|
||||||
|
|
||||||
broadway*)
|
broadway)
|
||||||
export XDG_RUNTIME_DIR="$(mktemp -p $(pwd) -d xdg-runtime-XXXXXX)"
|
export XDG_RUNTIME_DIR="$(mktemp -p $(pwd) -d xdg-runtime-XXXXXX)"
|
||||||
|
|
||||||
${builddir}/gdk/broadway/gtk4-broadwayd :5 &
|
${builddir}/gdk/broadway/gtk4-broadwayd :5 &
|
||||||
@@ -64,22 +71,29 @@ case "${setup}" in
|
|||||||
export BROADWAY_DISPLAY=:5
|
export BROADWAY_DISPLAY=:5
|
||||||
|
|
||||||
meson test -C ${builddir} \
|
meson test -C ${builddir} \
|
||||||
--quiet \
|
--timeout-multiplier "${MESON_TEST_TIMEOUT_MULTIPLIER}" \
|
||||||
--timeout-multiplier "${multiplier}" \
|
|
||||||
--print-errorlogs \
|
--print-errorlogs \
|
||||||
--setup=${setup} \
|
--setup=${backend} \
|
||||||
--suite=${suite//,/ --suite=} \
|
--suite=gtk \
|
||||||
--no-suite=failing \
|
--no-suite=failing \
|
||||||
--no-suite=${setup}_failing \
|
|
||||||
--no-suite=flaky \
|
--no-suite=flaky \
|
||||||
--no-suite=headless \
|
|
||||||
--no-suite=gsk-compare-opengl
|
--no-suite=gsk-compare-opengl
|
||||||
|
|
||||||
|
# don't let Broadway failures fail the run, for now
|
||||||
|
exit_code=0
|
||||||
|
|
||||||
|
meson test -C ${builddir} \
|
||||||
|
--timeout-multiplier "${MESON_TEST_TIMEOUT_MULTIPLIER}" \
|
||||||
|
--print-errorlogs \
|
||||||
|
--setup=${backend}_unstable \
|
||||||
|
--suite=flaky \
|
||||||
|
--suite=failing || true
|
||||||
|
|
||||||
kill ${server}
|
kill ${server}
|
||||||
;;
|
;;
|
||||||
|
|
||||||
*)
|
*)
|
||||||
echo "Failed to add ${setup} to .gitlab-ci/run-tests.sh"
|
echo "Failed to add ${backend} to .gitlab-ci/run-tests.sh"
|
||||||
exit 1
|
exit 1
|
||||||
;;
|
;;
|
||||||
|
|
||||||
@@ -87,19 +101,20 @@ esac
|
|||||||
|
|
||||||
cd ${builddir}
|
cd ${builddir}
|
||||||
|
|
||||||
$srcdir/.gitlab-ci/meson-junit-report.py \
|
for suffix in "" "_unstable"; do
|
||||||
|
$srcdir/.gitlab-ci/meson-junit-report.py \
|
||||||
--project-name=gtk \
|
--project-name=gtk \
|
||||||
--backend="${setup}" \
|
--backend="${backend}${suffix}" \
|
||||||
--job-id="${CI_JOB_NAME}" \
|
--job-id="${CI_JOB_NAME}" \
|
||||||
--output="report-${setup}.xml" \
|
--output="report-${backend}${suffix}.xml" \
|
||||||
"meson-logs/testlog-${setup}.json"
|
"meson-logs/testlog-${backend}${suffix}.json"
|
||||||
|
$srcdir/.gitlab-ci/meson-html-report.py \
|
||||||
$srcdir/.gitlab-ci/meson-html-report.py \
|
|
||||||
--project-name=gtk \
|
--project-name=gtk \
|
||||||
--backend="${setup}" \
|
--backend="${backend}${suffix}" \
|
||||||
--job-id="${CI_JOB_NAME}" \
|
--job-id="${CI_JOB_NAME}" \
|
||||||
--reftest-output-dir="testsuite/reftests/output/${setup}" \
|
--reftest-output-dir="testsuite/reftests/output/${backend}${suffix}" \
|
||||||
--output="report-${setup}.html" \
|
--output="report-${backend}${suffix}.html" \
|
||||||
"meson-logs/testlog-${setup}.json"
|
"meson-logs/testlog-${backend}${suffix}.json"
|
||||||
|
done
|
||||||
|
|
||||||
exit $exit_code
|
exit $exit_code
|
||||||
|
@@ -6,7 +6,7 @@ call "C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\Auxiliar
|
|||||||
|
|
||||||
:: FIXME: make warnings fatal
|
:: FIXME: make warnings fatal
|
||||||
pip3 install --upgrade --user meson~=0.64 || goto :error
|
pip3 install --upgrade --user meson~=0.64 || goto :error
|
||||||
meson setup -Dbackend_max_links=1 -Ddebug=false -Dmedia-gstreamer=disabled -Dvulkan=disabled _build || goto :error
|
meson -Ddebug=false -Dmedia-gstreamer=disabled _build || goto :error
|
||||||
ninja -C _build || goto :error
|
ninja -C _build || goto :error
|
||||||
|
|
||||||
goto :EOF
|
goto :EOF
|
||||||
|
@@ -32,9 +32,7 @@ pacman --noconfirm -S --needed \
|
|||||||
mingw-w64-$MSYS2_ARCH-fribidi \
|
mingw-w64-$MSYS2_ARCH-fribidi \
|
||||||
mingw-w64-$MSYS2_ARCH-gst-plugins-bad-libs \
|
mingw-w64-$MSYS2_ARCH-gst-plugins-bad-libs \
|
||||||
mingw-w64-$MSYS2_ARCH-shared-mime-info \
|
mingw-w64-$MSYS2_ARCH-shared-mime-info \
|
||||||
mingw-w64-$MSYS2_ARCH-python-gobject \
|
mingw-w64-$MSYS2_ARCH-python-gobject
|
||||||
mingw-w64-$MSYS2_ARCH-shaderc \
|
|
||||||
mingw-w64-$MSYS2_ARCH-vulkan
|
|
||||||
|
|
||||||
mkdir -p _ccache
|
mkdir -p _ccache
|
||||||
export CCACHE_BASEDIR="$(pwd)"
|
export CCACHE_BASEDIR="$(pwd)"
|
||||||
@@ -48,6 +46,7 @@ meson \
|
|||||||
-Dx11-backend=false \
|
-Dx11-backend=false \
|
||||||
-Dwayland-backend=false \
|
-Dwayland-backend=false \
|
||||||
-Dwin32-backend=true \
|
-Dwin32-backend=true \
|
||||||
|
-Dvulkan=disabled \
|
||||||
-Dintrospection=enabled \
|
-Dintrospection=enabled \
|
||||||
-Dgtk:werror=true \
|
-Dgtk:werror=true \
|
||||||
_build
|
_build
|
||||||
|
45
AUTHORS
@@ -7,7 +7,7 @@ Peter Mattis <petm@xcf.berkeley.edu>
|
|||||||
Spencer Kimball <spencer@xcf.berkeley.edu>
|
Spencer Kimball <spencer@xcf.berkeley.edu>
|
||||||
Josh MacDonald <jmacd@xcf.berkeley.edu>
|
Josh MacDonald <jmacd@xcf.berkeley.edu>
|
||||||
|
|
||||||
The team that build GTK 2 (in alphabetical order)
|
The Team that build GTK 2 (in alphabetical order)
|
||||||
-------------------------------------------------
|
-------------------------------------------------
|
||||||
Shawn T. Amundson <amundson@gtk.org>
|
Shawn T. Amundson <amundson@gtk.org>
|
||||||
Jerome Bolliet <bolliet@gtk.org>
|
Jerome Bolliet <bolliet@gtk.org>
|
||||||
@@ -28,8 +28,9 @@ Jay Painter <jpaint@gtk.org>
|
|||||||
Manish Singh <manish@gtk.org>
|
Manish Singh <manish@gtk.org>
|
||||||
Owen Taylor <otaylor@gtk.org>
|
Owen Taylor <otaylor@gtk.org>
|
||||||
|
|
||||||
The team that built GTK 3
|
The current team (GTK 3 and 4)
|
||||||
-------------------------
|
------------------------------
|
||||||
|
|
||||||
Jonas Ådahl <jadahl@gmail.com>
|
Jonas Ådahl <jadahl@gmail.com>
|
||||||
Tim Bäder <mail@baedert.org>
|
Tim Bäder <mail@baedert.org>
|
||||||
Emmanuele Bassi <ebassi@gnome.org>
|
Emmanuele Bassi <ebassi@gnome.org>
|
||||||
@@ -39,16 +40,6 @@ Carlos Garnacho <mrgarnacho@gmail.com>
|
|||||||
Alexander Larsson <alexl@redhat.com>
|
Alexander Larsson <alexl@redhat.com>
|
||||||
Benjamin Otte <otte@gnome.org>
|
Benjamin Otte <otte@gnome.org>
|
||||||
|
|
||||||
The current team (GTK 4)
|
|
||||||
------------------------
|
|
||||||
Jonas Ådahl <jadahl@gmail.com>
|
|
||||||
Emmanuele Bassi <ebassi@gnome.org>
|
|
||||||
Christian Hergert <chergert@gnome.org>
|
|
||||||
Chun-wei Fan <fanchunwei@src.gnome.org>
|
|
||||||
Matthias Clasen <mclasen@redhat.com>
|
|
||||||
Carlos Garnacho <mrgarnacho@gmail.com>
|
|
||||||
Benjamin Otte <otte@gnome.org>
|
|
||||||
|
|
||||||
|
|
||||||
There are many others who have contributed patches; we thank them,
|
There are many others who have contributed patches; we thank them,
|
||||||
GTK is much better because of them.
|
GTK is much better because of them.
|
||||||
@@ -58,15 +49,35 @@ Over time, GTK has incorporated some pieces of software which
|
|||||||
started as independent projects. We list the original authors here:
|
started as independent projects. We list the original authors here:
|
||||||
|
|
||||||
|
|
||||||
|
MS-Windows theme engine
|
||||||
|
-----------------------
|
||||||
|
Raymond Penners
|
||||||
|
Dom Lachowicz
|
||||||
|
|
||||||
|
|
||||||
|
Pixbuf theme engine
|
||||||
|
-------------------
|
||||||
|
Owen Taylor
|
||||||
|
|
||||||
|
|
||||||
IME input method
|
IME input method
|
||||||
----------------
|
----------------
|
||||||
Takuro Ashie
|
Takuro Ashie
|
||||||
Kazuki IWAMOTO
|
Kazuki IWAMOTO
|
||||||
|
|
||||||
MacOS backend
|
|
||||||
-------------
|
Mac OS X backend
|
||||||
|
----------------
|
||||||
Anders Carlsson
|
Anders Carlsson
|
||||||
|
|
||||||
GtkInspector (originally gtkparasite)
|
|
||||||
-------------------------------------
|
DirectFB backend
|
||||||
|
----------------
|
||||||
|
Denis Oliver Kropp
|
||||||
|
Sven Neumann
|
||||||
|
Mike Emmel
|
||||||
|
|
||||||
|
|
||||||
|
gtkparasite
|
||||||
|
-----------
|
||||||
Christian Hammond
|
Christian Hammond
|
||||||
|
@@ -35,7 +35,8 @@ The issue tracker is meant to be used for actionable issues only.
|
|||||||
|
|
||||||
You should not open a new issue for security related questions.
|
You should not open a new issue for security related questions.
|
||||||
|
|
||||||
When in doubt, follow [security](https://security.gnome.org/).
|
When in doubt, send an email to the [security](mailto:security@gnome.org)
|
||||||
|
mailing list.
|
||||||
|
|
||||||
### Bug reports
|
### Bug reports
|
||||||
|
|
||||||
@@ -243,11 +244,13 @@ people committing to GTK to follow a few rules:
|
|||||||
code, you should always ask. If your change is minor and you've been
|
code, you should always ask. If your change is minor and you've been
|
||||||
working on GTK for a while it probably isn't necessary to ask. But when
|
working on GTK for a while it probably isn't necessary to ask. But when
|
||||||
in doubt, ask. Even if your change is correct, somebody may know a
|
in doubt, ask. Even if your change is correct, somebody may know a
|
||||||
better way to do things.
|
better way to do things. If you are making changes to GTK, you should
|
||||||
The `gtk` [room on matrix](https://matrix.to/#/#gtk:gnome.org) is also a
|
be subscribed to the [gtk-devel](https://mail.gnome.org/mailman/listinfo/gtk-devel-list)
|
||||||
good place to find GTK developers to discuss changes, but if you live
|
mailing list; this is a good place to ask about intended changes.
|
||||||
outside of the EU/US time zones, the [gtk tag on the GNOME Discourse instance](https://discourse.gnome.org/tag/gtk)
|
The `#gtk` IRC channel on irc.gnome.org is also a good place to find GTK
|
||||||
is the most certain and preferred method.
|
developers to discuss changes, but if you live outside of the EU/US time
|
||||||
|
zones, an email to the gtk-devel mailing list is the most certain and
|
||||||
|
preferred method.
|
||||||
|
|
||||||
0. Ask _first_.
|
0. Ask _first_.
|
||||||
|
|
||||||
|
745
NEWS
@@ -1,743 +1,6 @@
|
|||||||
Overview of Changes in 4.13.6, xx-xx-xxxx
|
Overview of Changes in 4.11.2, xx-xx-xxxx
|
||||||
=========================================
|
=========================================
|
||||||
|
|
||||||
Overview of Changes in 4.13.5, 07-01-2024
|
|
||||||
=========================================
|
|
||||||
|
|
||||||
This release adds two new GSK renderers called vulkan and ngl,
|
|
||||||
that are built from the same sources. The new renderers can
|
|
||||||
handle many corner cases correctly that the current gl renderer
|
|
||||||
does not handle, and they offer advantages such as antialiasing
|
|
||||||
and supersampled gradients.
|
|
||||||
|
|
||||||
The new renderers are still considered experimental, and GTK
|
|
||||||
will only use them if they are explicitly selected using the
|
|
||||||
GSK_RENDERER environment variable.
|
|
||||||
|
|
||||||
As part of this work, the GSK include files have been rearranged.
|
|
||||||
It is no longer necessary to include renderer-specific headers for
|
|
||||||
ngl and vulkan (and doing so will trigger deprecation warnings),
|
|
||||||
and their constructors are always available.
|
|
||||||
|
|
||||||
The previously available experimental GdkVulkanContext APIs and
|
|
||||||
the old Vulkan renderer have been removed.
|
|
||||||
|
|
||||||
Vulkan is now enabled by default, and Linux distributions should
|
|
||||||
build GTK with Vulkan support. This requires the glslc shader
|
|
||||||
compiler as a new dependency.
|
|
||||||
|
|
||||||
Vulkan is now also used for dmabuf support.
|
|
||||||
|
|
||||||
* GtkDropdown:
|
|
||||||
- Fix display of initial selection
|
|
||||||
|
|
||||||
* GtkShortcutsWindow:
|
|
||||||
- Make the window adapt to smaller screen widths
|
|
||||||
|
|
||||||
* GtkTextView:
|
|
||||||
- Fix a possible NULL dereference in history
|
|
||||||
|
|
||||||
* GDK:
|
|
||||||
- Make the png loader safer against overflows
|
|
||||||
|
|
||||||
* GL:
|
|
||||||
- Fix some errors in handling of texture formats and mipmaps
|
|
||||||
|
|
||||||
|
|
||||||
Overview of Changes in 4.13.4, 30-12-2023
|
|
||||||
=========================================
|
|
||||||
|
|
||||||
* GtkFileDialog:
|
|
||||||
- Return an error if no file is selected
|
|
||||||
|
|
||||||
* GtkFileLauncher:
|
|
||||||
- Add a writable property
|
|
||||||
|
|
||||||
* GtkFileChooserNative:
|
|
||||||
- Make closing portal file dialogs work
|
|
||||||
|
|
||||||
* GtkEmojiChooser:
|
|
||||||
- Update Emoji data to CLDR v43
|
|
||||||
|
|
||||||
* GtkStringList:
|
|
||||||
- Add item-type and n-itmes properties
|
|
||||||
|
|
||||||
* Input:
|
|
||||||
- Respect GTK grabs on DND events
|
|
||||||
- Fix crossing event generation for enter/leave
|
|
||||||
|
|
||||||
* Wayland:
|
|
||||||
- Avoid recreating wl_buffers needlessly
|
|
||||||
- Be more careful when loading cursors
|
|
||||||
|
|
||||||
* Dmabuf:
|
|
||||||
- Add support for all Dmabuf formats
|
|
||||||
- Tweak the offload code a bit, allow offloading translucent
|
|
||||||
textures, as long as they are raised. Decline to offload
|
|
||||||
with fractional scales.
|
|
||||||
|
|
||||||
* Accessibility:
|
|
||||||
- Add a few more accessible roles
|
|
||||||
|
|
||||||
* GL:
|
|
||||||
- Use GLES by default
|
|
||||||
- Tweak GDK_DEBUG values. The new values are
|
|
||||||
gl-disable-gl, gl-disable-gles and gl-prefer-gl.
|
|
||||||
The gl-legacy and nograbs values have been dropped.
|
|
||||||
|
|
||||||
* Css:
|
|
||||||
- Reduce memory consumption during theme loading
|
|
||||||
- Fix opacity handling
|
|
||||||
|
|
||||||
* Theme:
|
|
||||||
- Refresh some of the included symbolic icons
|
|
||||||
|
|
||||||
* MacOs:
|
|
||||||
- Silence secure-restore message
|
|
||||||
|
|
||||||
* Build:
|
|
||||||
- Require Vulkan 1.3
|
|
||||||
|
|
||||||
* Translation updates:
|
|
||||||
Chinese (China)
|
|
||||||
Czech
|
|
||||||
Hebrew
|
|
||||||
Icelandic
|
|
||||||
Polish
|
|
||||||
Russian
|
|
||||||
|
|
||||||
|
|
||||||
Overview of Changes in 4.13.3, 15-11-2023
|
|
||||||
=========================================
|
|
||||||
|
|
||||||
* GtkGraphicsOffload: A new widget to support passthrough
|
|
||||||
of dmabuf textures with subsurfaces on Wayland
|
|
||||||
|
|
||||||
* GtkListView:
|
|
||||||
- reduce tree indentation
|
|
||||||
|
|
||||||
* GtkInspector:
|
|
||||||
- Show more GL information
|
|
||||||
- Add a subsurface overlay
|
|
||||||
- Improve the fps overlay
|
|
||||||
|
|
||||||
* GDK
|
|
||||||
- Allow implicit modifiers for dmabufs
|
|
||||||
- Support more dmabuf formats: NV16, NV61, NV24, NV42
|
|
||||||
and 3-plane YUV formats
|
|
||||||
|
|
||||||
* GSK
|
|
||||||
- Fix padding of icons in the GL atlas
|
|
||||||
- Fix handling of texture-scale nodes in cairo
|
|
||||||
- Treat texture-scale nodes more faithfully in GL
|
|
||||||
|
|
||||||
* Accessibility:
|
|
||||||
- Tweak the accessible name computation for corner cases
|
|
||||||
|
|
||||||
* The GTK/GDK/GSK_DEBUG environment variables now
|
|
||||||
work in productions as well as in debug builds
|
|
||||||
|
|
||||||
* Translation updates
|
|
||||||
Catalan
|
|
||||||
French
|
|
||||||
Russian
|
|
||||||
|
|
||||||
|
|
||||||
Overview of Changes in 4.13.2, 22-10-2023
|
|
||||||
=========================================
|
|
||||||
|
|
||||||
* GtkPrintdialog:
|
|
||||||
- New async-style api to replace GtkPrintOperation
|
|
||||||
|
|
||||||
* GtkEmojiChooser:
|
|
||||||
- Add more languages: Bengali, Hindi, Japanese, Finnish,
|
|
||||||
Thai and Norwegian bokmål
|
|
||||||
|
|
||||||
* Accessibility:
|
|
||||||
- Fix some utf8 handling issues
|
|
||||||
|
|
||||||
* GDK:
|
|
||||||
- Add support for dmabuf textures, with GdkDmabufTextureBuilder
|
|
||||||
- Add a few more supported memory formats for textures
|
|
||||||
|
|
||||||
* GSK:
|
|
||||||
- Add a fast-path for masking color
|
|
||||||
- Add support for importing dmabuf textures
|
|
||||||
- Handle GLES better by using some extensions
|
|
||||||
|
|
||||||
* Translation updates:
|
|
||||||
Catalan
|
|
||||||
Russian
|
|
||||||
Turkish
|
|
||||||
|
|
||||||
|
|
||||||
Overview of Changes in 4.13.1, 28-09-2023
|
|
||||||
=========================================
|
|
||||||
|
|
||||||
* GtkTooltip:
|
|
||||||
- Don't cross native boundaries when looking for tooltips
|
|
||||||
|
|
||||||
* GtkCenterLayout, GtkEntry, GtkSearchEntry:
|
|
||||||
- Fix some issues with baseline handling
|
|
||||||
|
|
||||||
* GtkColorButton, GtkFontButton:
|
|
||||||
- Propagate focus-on-click
|
|
||||||
|
|
||||||
* GtkFileChooser:
|
|
||||||
- Make "Visit file" scroll to the file
|
|
||||||
|
|
||||||
* GtkSwitch:
|
|
||||||
- Respect text direction
|
|
||||||
|
|
||||||
* GtkWindow:
|
|
||||||
- Don't assume titlebars are GtkHeaderBars
|
|
||||||
|
|
||||||
* Printing:
|
|
||||||
- Fix some problems with the portal implementation
|
|
||||||
- Add a new simple print API: GtkPrintDialog
|
|
||||||
|
|
||||||
* Paths:
|
|
||||||
- GskPathMeasure performance has been improved
|
|
||||||
- Add custom contours for circles, rounded rectangles and rectangles
|
|
||||||
- Simplify GskPathPoint handling
|
|
||||||
- gsk_path_point_get_closest_point now returns the distance as well
|
|
||||||
- Make GskPathBuilder simplify curves
|
|
||||||
|
|
||||||
* Input:
|
|
||||||
- Handle (some) single-key compose sequences
|
|
||||||
- Fix active state tracking with sensitivity changes and grabs
|
|
||||||
|
|
||||||
* GSK:
|
|
||||||
- Make the repeated gradients match between GL and cairo
|
|
||||||
- Make rounded rect shrinking match between Vulkan, GL and cairo
|
|
||||||
- Fix parsing of text nodes with color glyphs
|
|
||||||
- Restrict an optimization to the cases where it is crrect
|
|
||||||
- Fix rendering of shadows with opacity
|
|
||||||
- The Vulkan renderer now requires Vulkan 1.2
|
|
||||||
- GL: Transition gradients unpremultiplied
|
|
||||||
- GL: Fix clipping of shadows
|
|
||||||
- GL: Some optimizations
|
|
||||||
- Broadway: Fix memory leaks in the renderer
|
|
||||||
|
|
||||||
* Wayland:
|
|
||||||
- Make activation more reliable
|
|
||||||
|
|
||||||
* macOS:
|
|
||||||
- Clamp damage regions to the surface size
|
|
||||||
|
|
||||||
* Tools:
|
|
||||||
- gtk4-path-tool gained restrict and reverse commands
|
|
||||||
- gtk4-path-tool show and render can show control points
|
|
||||||
|
|
||||||
* Demos:
|
|
||||||
- Add a demo for hit testing with paths
|
|
||||||
|
|
||||||
* Build:
|
|
||||||
- Fix build problems with C++ compilers
|
|
||||||
|
|
||||||
* Deprecations:
|
|
||||||
- gtk_window_present_with_time
|
|
||||||
|
|
||||||
* Translation updates
|
|
||||||
Brazilian Portuguese
|
|
||||||
British English
|
|
||||||
Catalan
|
|
||||||
Chinese (China)
|
|
||||||
Czech
|
|
||||||
Danish
|
|
||||||
Dutch
|
|
||||||
Esperanto
|
|
||||||
Galician
|
|
||||||
Georgian
|
|
||||||
Italian
|
|
||||||
Korean
|
|
||||||
Latvian
|
|
||||||
Lithuanian
|
|
||||||
Persian
|
|
||||||
Polish
|
|
||||||
Punjabi
|
|
||||||
Slovenian
|
|
||||||
Turkish
|
|
||||||
|
|
||||||
|
|
||||||
Overview of Changes in 4.13.0, 25-08-2023
|
|
||||||
=========================================
|
|
||||||
|
|
||||||
* GskPath, GskPathBuilder, GskPathMeasure:
|
|
||||||
Data types and APIs for path rendering. These APIs are still
|
|
||||||
considered experimental, and may change until 4.14. Please try
|
|
||||||
them out and give us feedback. Documentation can be found
|
|
||||||
here: https://docs.gtk.org/gsk4/paths.html
|
|
||||||
|
|
||||||
* GtkGridView:
|
|
||||||
- Fix a crash when scrolling
|
|
||||||
|
|
||||||
* GtkColumnView:
|
|
||||||
- Fix a refcounting issue in the new scroll_to api
|
|
||||||
|
|
||||||
* GtkTreeView
|
|
||||||
- Fix style classes for sort arrows
|
|
||||||
|
|
||||||
* GtkEntry:
|
|
||||||
- Improve tracking of user changes (for undo)
|
|
||||||
|
|
||||||
* GtkNotebook:
|
|
||||||
- Fix a critical when switching pages
|
|
||||||
|
|
||||||
* GtkColor/FontDialogButton:
|
|
||||||
- Make these widgets activatable
|
|
||||||
|
|
||||||
* GtkMenuButton:
|
|
||||||
- Fix problems with focus handling
|
|
||||||
- Fix problems with DND
|
|
||||||
- Make flags a settable property
|
|
||||||
|
|
||||||
* GtkShortcutsWindow:
|
|
||||||
- Add API to build shortcuts windows programmatically
|
|
||||||
|
|
||||||
* Printing
|
|
||||||
- Fix the cpdb backend build
|
|
||||||
|
|
||||||
* MacOS:
|
|
||||||
- Make file filters work again
|
|
||||||
|
|
||||||
* GSK:
|
|
||||||
- Fix issues with color matrix nodes
|
|
||||||
|
|
||||||
* Wayland:
|
|
||||||
- Fix a crash with compositors other than gnome-shell
|
|
||||||
|
|
||||||
* Deprecations:
|
|
||||||
- Remaining GtkTreeModel-related types
|
|
||||||
|
|
||||||
* Demos:
|
|
||||||
- Add a few path demos to gtk4-demo
|
|
||||||
|
|
||||||
* Tools:
|
|
||||||
- gtk4-path-tool provides a commandline interface for paths
|
|
||||||
|
|
||||||
* Translation updates:
|
|
||||||
Basque
|
|
||||||
Catalan
|
|
||||||
Finnish
|
|
||||||
Galician
|
|
||||||
Georgian
|
|
||||||
German
|
|
||||||
Greek
|
|
||||||
Indonesian
|
|
||||||
Kazakh
|
|
||||||
Persian
|
|
||||||
Polish
|
|
||||||
Romanian
|
|
||||||
Spanish
|
|
||||||
Swedish
|
|
||||||
Turkish
|
|
||||||
Ukrainian
|
|
||||||
|
|
||||||
|
|
||||||
Overview of Changes in 4.12.0, 05-08-2023
|
|
||||||
=========================================
|
|
||||||
|
|
||||||
* List widgets:
|
|
||||||
- Add scroll_to APIs
|
|
||||||
|
|
||||||
* GtkFileLauncher:
|
|
||||||
- Add an always-ask property
|
|
||||||
|
|
||||||
* GtkTextView:
|
|
||||||
- Make backspace behavior match GtkEntry
|
|
||||||
|
|
||||||
* gsk:
|
|
||||||
- Fix handling of luminance in mask nodes
|
|
||||||
|
|
||||||
* Text rendering:
|
|
||||||
- Automate the setting of gtk-hint-font-metrics from the
|
|
||||||
scale factor. This improves font rendering in flatpaks
|
|
||||||
|
|
||||||
* Wayland:
|
|
||||||
- Fix behavior of stylus buttons
|
|
||||||
- Support suspended window state
|
|
||||||
|
|
||||||
* Vulkan:
|
|
||||||
- Many improvements
|
|
||||||
|
|
||||||
* Tools:
|
|
||||||
- Add gtk4-rendernode-tool
|
|
||||||
|
|
||||||
* Debugging:
|
|
||||||
- Drop the GTK_DEBUG_TOUCHSCREEN flag
|
|
||||||
|
|
||||||
* Build:
|
|
||||||
- Some build options have been renamed:
|
|
||||||
gtk_doc -> documentation
|
|
||||||
update_screenshots -> screenshots
|
|
||||||
The old names still work
|
|
||||||
|
|
||||||
* Translation updates:
|
|
||||||
Georgian
|
|
||||||
Greek
|
|
||||||
Hebrew
|
|
||||||
Persian
|
|
||||||
Vietnamese
|
|
||||||
|
|
||||||
* Contributors:
|
|
||||||
Aleksandr Melman
|
|
||||||
Alexander Mikhaylenko
|
|
||||||
Alexander Shopov
|
|
||||||
Alexandre Franke
|
|
||||||
Alice Mikhaylenko
|
|
||||||
António Fernandes
|
|
||||||
Arjan Molenaar
|
|
||||||
Asier Sarasua Garmendia
|
|
||||||
Balázs Meskó
|
|
||||||
Balázs Úr
|
|
||||||
Barnabás Pőcze
|
|
||||||
Bart Jacobs
|
|
||||||
Benjamin Otte
|
|
||||||
Bilal Elmoussaoui
|
|
||||||
Boyuan Yang
|
|
||||||
Bruce Cowan
|
|
||||||
Calvin Walton
|
|
||||||
Cam Cook
|
|
||||||
Chris Mayo
|
|
||||||
Christian Hergert
|
|
||||||
Christopher Davis
|
|
||||||
Chun-wei Fan
|
|
||||||
Corey Berla
|
|
||||||
Danial Behzadi
|
|
||||||
Daniel Boles
|
|
||||||
Daniel Rusek
|
|
||||||
Efstathios Iosifidis
|
|
||||||
Ekaterine Papava
|
|
||||||
Emin Tufan Çetin
|
|
||||||
Emmanuele Bassi
|
|
||||||
Erik Schilling
|
|
||||||
Fabio Tomat
|
|
||||||
FeRD (Frank Dana)
|
|
||||||
Fina Wilke
|
|
||||||
FineFindus
|
|
||||||
Fran Dieguez
|
|
||||||
G.Willems
|
|
||||||
Georges Basile Stavracas Neto
|
|
||||||
Guillaume Bernard
|
|
||||||
Hugo Carvalho
|
|
||||||
Ivan Molodetskikh
|
|
||||||
Jason Francis
|
|
||||||
Jonas Ådahl
|
|
||||||
Jordan Petridis
|
|
||||||
Jordi Mas
|
|
||||||
José Expósito
|
|
||||||
José Roberto de Souza
|
|
||||||
Khalid Abu Shawarib
|
|
||||||
Kévin Commaille
|
|
||||||
Leônidas Araújo
|
|
||||||
Luca Bacci
|
|
||||||
Ludovico de Nittis
|
|
||||||
Lukáš Tyrychtr
|
|
||||||
Marc-André Lureau
|
|
||||||
Marco Trevisan (Treviño)
|
|
||||||
Matt Turner
|
|
||||||
Matthias Clasen
|
|
||||||
Maximiliano Sandoval R
|
|
||||||
Michael Catanzaro
|
|
||||||
Michel Dänzer
|
|
||||||
Mohammed Sadiq
|
|
||||||
Nathan Follens
|
|
||||||
Nelson Benítez León
|
|
||||||
Ngọc Quân Trần
|
|
||||||
Niels De Graef
|
|
||||||
Olivier Crête
|
|
||||||
Patrick Griffis
|
|
||||||
Piotr Drąg
|
|
||||||
Sabri Ünal
|
|
||||||
Sebastian Keller
|
|
||||||
Sophie Herold
|
|
||||||
Sébastien Le Roux
|
|
||||||
Takao Fujiwara
|
|
||||||
Thomas Lange
|
|
||||||
Yiğit Burak
|
|
||||||
Yosef Or Boczko
|
|
||||||
Yuri Chornoivan
|
|
||||||
Zander Brown
|
|
||||||
al_SeveR
|
|
||||||
dgsasha
|
|
||||||
sumibi-yakitori
|
|
||||||
tszymanski
|
|
||||||
velsinki
|
|
||||||
Алексей Шилин
|
|
||||||
Арсений Засыпкин
|
|
||||||
|
|
||||||
Overview of Changes in 4.11.4, 03-07-2023
|
|
||||||
=========================================
|
|
||||||
|
|
||||||
* GtkFileChooser:
|
|
||||||
- Default to sorting folders first
|
|
||||||
- Fix a crash when visiting recent files
|
|
||||||
|
|
||||||
* GtkTextView:
|
|
||||||
- Fix corner cases in word navigation
|
|
||||||
|
|
||||||
* GtkMenuButton:
|
|
||||||
- Normalize label layout
|
|
||||||
|
|
||||||
* GtkDropDown:
|
|
||||||
- Add support for sections
|
|
||||||
|
|
||||||
* GtkVideo:
|
|
||||||
- Make the overlay icon clickable
|
|
||||||
|
|
||||||
* GtkWindow:
|
|
||||||
- Clear the resize cursors to avoid artifacts
|
|
||||||
|
|
||||||
* GtkFileDialog:
|
|
||||||
- Always set initial-folder
|
|
||||||
|
|
||||||
* GtkDropDown:
|
|
||||||
- Update on expression changes
|
|
||||||
|
|
||||||
* GtkMapListModel:
|
|
||||||
- Implement GtkSectionModel
|
|
||||||
|
|
||||||
* Accessibility:
|
|
||||||
- Improvements all over the place: GtkButton, GtkPasswordEntry,
|
|
||||||
GtkFontChooserDialog, GtkColorChooserDialog, GtkShortcutsWindow,
|
|
||||||
GtkMenuButton, GtkAboutDialog, GtkFileChooserDialog, GtkStackSidebar,
|
|
||||||
GtkStackSwitcher, GtkMediaControls, GtkColorDialogButton, GtkDropDown,
|
|
||||||
GtkInfoBar, GtkNotebook, GtkPrintUnixDialog, GtkModelButton
|
|
||||||
- Make name computation follow the ARIA spec more closely
|
|
||||||
- Adapt name computation for the common 'nested button' scenario
|
|
||||||
- Change many containers to use `generic` instead of `group`
|
|
||||||
- Use `generic` as the default role
|
|
||||||
- Use `application` instead of `window` for windows
|
|
||||||
- Add properties for accessible names of not directly exposed
|
|
||||||
widgets in GtkListView, GtkGridView and GtkColumnView
|
|
||||||
|
|
||||||
* DND:
|
|
||||||
- Fix criticals when drops are rejected
|
|
||||||
|
|
||||||
* X11:
|
|
||||||
- Fix regressions in GLX setup
|
|
||||||
|
|
||||||
* Windows:
|
|
||||||
- Center newly created transient windows
|
|
||||||
|
|
||||||
* Vulkan:
|
|
||||||
- Add antialiasing for gradients
|
|
||||||
- Do less work on clipped away nodes
|
|
||||||
- Redo image uploading
|
|
||||||
- Support different image depths and formats
|
|
||||||
- Add a pipeline cache
|
|
||||||
|
|
||||||
* Demos:
|
|
||||||
- gtk4-demo: Improve window sizing
|
|
||||||
- gtk4-demo: Improve focus behavior
|
|
||||||
- gtk4-demo: Add many missing a11y properties
|
|
||||||
|
|
||||||
* Tools:
|
|
||||||
- gtk4-builder-tool: Make render an alias screenshot
|
|
||||||
|
|
||||||
* Inspector:
|
|
||||||
- Show more information in the a11y tab
|
|
||||||
- Add an accessibility overlay with warnings and recommendations
|
|
||||||
- Limit the width of the a11y tab
|
|
||||||
|
|
||||||
* Build:
|
|
||||||
- Require GLib 2.76
|
|
||||||
- Make asan builds work again
|
|
||||||
- Fix the build if ld is not ld.bdf
|
|
||||||
|
|
||||||
* Translation updates:
|
|
||||||
Brazilian Portuguese
|
|
||||||
Catalan
|
|
||||||
Czech
|
|
||||||
Georgian
|
|
||||||
|
|
||||||
|
|
||||||
Overview of Changes in 4.11.3, 05-06-2023
|
|
||||||
=========================================
|
|
||||||
|
|
||||||
* GtkGridView:
|
|
||||||
- Respect css border-spacing
|
|
||||||
- Don't leak the factories
|
|
||||||
|
|
||||||
* GtkListView:
|
|
||||||
- Don't leak the factories
|
|
||||||
|
|
||||||
* GtkColumnView:
|
|
||||||
- Support displaying sections
|
|
||||||
|
|
||||||
* GtkNotebook:
|
|
||||||
- Make the pages model implement GtkSelectionModel
|
|
||||||
|
|
||||||
* GtkScrolledWindow:
|
|
||||||
- Propagate child measure size whenever possible
|
|
||||||
|
|
||||||
* GtkPopoverMenu:
|
|
||||||
- Avoid unnecessary left padding
|
|
||||||
|
|
||||||
* GtkSearchEntry:
|
|
||||||
- Improve size allocation for the clear icon
|
|
||||||
|
|
||||||
* GtkBoxLayout:
|
|
||||||
- Fix a regression from recent baseline work
|
|
||||||
|
|
||||||
* CSS:
|
|
||||||
- Add new binding-friendly css provider apis
|
|
||||||
|
|
||||||
* Theme:
|
|
||||||
- Show focus in the shortcuts window
|
|
||||||
|
|
||||||
* GDK:
|
|
||||||
- Support grayscale and alpha texture formats for loading
|
|
||||||
and saving to png and tiff, and in GL
|
|
||||||
- Fix some regressions in GL context initialization
|
|
||||||
|
|
||||||
* GSK:
|
|
||||||
- Support grayscale and alpha texture formats in the GL renderer
|
|
||||||
- Support straight alpha textures in the GL renderer
|
|
||||||
- Many improvements to the experimental Vulkan renderer
|
|
||||||
|
|
||||||
* Wayland:
|
|
||||||
- Make exporting surface handles more flexible
|
|
||||||
|
|
||||||
* X11:
|
|
||||||
- Trap XRandr errors
|
|
||||||
- Stop using passive grabs during DND
|
|
||||||
|
|
||||||
* Windows:
|
|
||||||
- Many cleanups and simplifications
|
|
||||||
|
|
||||||
* Tests:
|
|
||||||
- Improve test coverage
|
|
||||||
|
|
||||||
* Build:
|
|
||||||
- Some build options have been renamed:
|
|
||||||
demos -> build-demos
|
|
||||||
profile -> demo-profile
|
|
||||||
The old names still work
|
|
||||||
|
|
||||||
* Deprecations:
|
|
||||||
- gtk_css_provider_load_from_data
|
|
||||||
- gdk_wayland_toplevel_unexport_handle
|
|
||||||
- gdk_pixbuf_get_from_surface
|
|
||||||
- gdk_pixbuf_get_from_texture
|
|
||||||
- gtk_image_new_from_pixbuf
|
|
||||||
- gtk_image_set_from_pixbuf
|
|
||||||
- gtk_picture_new_for_pixbuf
|
|
||||||
- gtk_picture_set_pixbuf
|
|
||||||
|
|
||||||
* Translation updates:
|
|
||||||
Basque
|
|
||||||
Catalan
|
|
||||||
Georgian
|
|
||||||
Russian
|
|
||||||
Turkish
|
|
||||||
|
|
||||||
|
|
||||||
Overview of Changes in 4.11.2, 09-05-2023
|
|
||||||
=========================================
|
|
||||||
|
|
||||||
* GtkGLArea:
|
|
||||||
- Add an allowed-apis property
|
|
||||||
|
|
||||||
* GtkListBox:
|
|
||||||
- Fix a problem with gtk_list_box_remove_all
|
|
||||||
|
|
||||||
* Add the GtkSectionModel interface, and implement it in most
|
|
||||||
of our list models
|
|
||||||
|
|
||||||
* GtkListView:
|
|
||||||
- Support displaying sections
|
|
||||||
|
|
||||||
* GtkCenterBox:
|
|
||||||
- Add a shrink-center-last property
|
|
||||||
|
|
||||||
* GtkButton, GtkMenuButton:
|
|
||||||
- Add a can-shrink property
|
|
||||||
|
|
||||||
* GtkPopover:
|
|
||||||
- Fix problems with grabs
|
|
||||||
|
|
||||||
* GtkFileChooser:
|
|
||||||
- Fix a problem with removing files
|
|
||||||
- Make the date, time and location columns work
|
|
||||||
- Fix filtering in the save entry popup
|
|
||||||
- A few memory leak fixes
|
|
||||||
- Handle webdav in the pathbar
|
|
||||||
|
|
||||||
* GtkBox:
|
|
||||||
- Support baselines in vertical orientation with GtkBox:baseline-child
|
|
||||||
|
|
||||||
* Dialogs:
|
|
||||||
- Destroy windows promptly when the async callback finishes
|
|
||||||
- Detect absence of the OpenURI portal and fall back
|
|
||||||
|
|
||||||
* Theme:
|
|
||||||
- Add explicit style classes to a number of widgets
|
|
||||||
- Fix some contrast issues in the dark theme
|
|
||||||
|
|
||||||
* Accessibility:
|
|
||||||
- Fix alert dialogs in the a11y tree
|
|
||||||
- Improve accessibility of GtkShortcutsWindow
|
|
||||||
|
|
||||||
* Layout:
|
|
||||||
- Some fixes to baseline alignment
|
|
||||||
- Separate GTK_ALIGN_BASELINE_CENTER and _FILL
|
|
||||||
|
|
||||||
* CSS:
|
|
||||||
- Fix a crash with color transitions
|
|
||||||
|
|
||||||
* GSK:
|
|
||||||
- Fix problems with negative scales
|
|
||||||
- Improve scaling of offscreens for (cross-fades, masks, blends)
|
|
||||||
|
|
||||||
* GL:
|
|
||||||
- Add GdkGLTextureBuilder, a more flexible api for creating textures
|
|
||||||
- Support setting update regions for GL textures
|
|
||||||
- Ensure that we work with GLES 2
|
|
||||||
|
|
||||||
* Vulkan:
|
|
||||||
- More fixes to the experimental Vulkan renderer
|
|
||||||
- Rework glyph caching
|
|
||||||
|
|
||||||
* Wayland:
|
|
||||||
- Don't destroy wl_surfaces on hide
|
|
||||||
- Plug leaks of compositor-side resources
|
|
||||||
|
|
||||||
* X11:
|
|
||||||
- Fix artifacts in gnome-shell frame decorations
|
|
||||||
|
|
||||||
* Windows:
|
|
||||||
- Fix GL context initialization
|
|
||||||
|
|
||||||
* Inspector:
|
|
||||||
- Improve the action list
|
|
||||||
- Improve the accessibility pane
|
|
||||||
- Fix a crash
|
|
||||||
|
|
||||||
* Tools:
|
|
||||||
- gtk4-node-editor: Improve scaling
|
|
||||||
- gtk4-node-editor: Preserve aspect ratio of textures
|
|
||||||
- gtk4-node-editor: Add some smarter editing
|
|
||||||
- gtk4-demo: Make the stylus demo work with mice
|
|
||||||
|
|
||||||
* Deprecations:
|
|
||||||
- gtk_widget_get_allocated_width/height/baseline
|
|
||||||
- GTK_ALIGN_BASELINE
|
|
||||||
|
|
||||||
* Translation updates
|
|
||||||
Bulgarian
|
|
||||||
Chinese (China)
|
|
||||||
Friulian
|
|
||||||
Galician
|
|
||||||
Hebrew
|
|
||||||
Persian
|
|
||||||
Polish
|
|
||||||
Portuguese
|
|
||||||
`Russian
|
|
||||||
Turkish
|
|
||||||
|
|
||||||
|
|
||||||
Overview of Changes in 4.11.1, 03-04-2023
|
Overview of Changes in 4.11.1, 03-04-2023
|
||||||
=========================================
|
=========================================
|
||||||
|
|
||||||
@@ -1506,7 +769,7 @@ Overview of Changes in 4.7.0, 07-05-2022
|
|||||||
- Event handling fixes
|
- Event handling fixes
|
||||||
- Fix keyboard input on popovers
|
- Fix keyboard input on popovers
|
||||||
- Support OpenGL-based video playback
|
- Support OpenGL-based video playback
|
||||||
- Support fullscreen
|
- Suport fullscreen
|
||||||
- Improve native filechoooser size allocation
|
- Improve native filechoooser size allocation
|
||||||
- Use CALayer and IOSurface for rendering
|
- Use CALayer and IOSurface for rendering
|
||||||
- Use a per-monitor CVDisplayLink
|
- Use a per-monitor CVDisplayLink
|
||||||
@@ -1903,7 +1166,7 @@ Overview of Changes in 4.4.0
|
|||||||
- Activate when moving focus
|
- Activate when moving focus
|
||||||
|
|
||||||
* GtkLabel:
|
* GtkLabel:
|
||||||
- Properly ignore double underscores for mnemonics
|
- Propertly ignore double underscores for mnemonics
|
||||||
|
|
||||||
* GtkPopoverMenu:
|
* GtkPopoverMenu:
|
||||||
- Fix focus cycling
|
- Fix focus cycling
|
||||||
@@ -2450,7 +1713,7 @@ Overview of Changes in 4.1.0
|
|||||||
- Set sort arrows in CSS
|
- Set sort arrows in CSS
|
||||||
- Set menu button arrows in CSS
|
- Set menu button arrows in CSS
|
||||||
- Make scrollbars larger
|
- Make scrollbars larger
|
||||||
- Support circular menubuttons
|
- Supprt circular menubuttons
|
||||||
|
|
||||||
* CSS:
|
* CSS:
|
||||||
- Implement transform-origin
|
- Implement transform-origin
|
||||||
|
40
README.md
@@ -67,13 +67,6 @@ building for:
|
|||||||
- [Graphene](https://github.com/ebassi/graphene)
|
- [Graphene](https://github.com/ebassi/graphene)
|
||||||
- [Xkb-common](https://github.com/xkbcommon/libxkbcommon)
|
- [Xkb-common](https://github.com/xkbcommon/libxkbcommon)
|
||||||
|
|
||||||
If you are building the Wayland backend, you will also need:
|
|
||||||
|
|
||||||
- Wayland-client
|
|
||||||
- Wayland-protocols
|
|
||||||
- Wayland-cursor
|
|
||||||
- Wayland-EGL
|
|
||||||
|
|
||||||
If you are building the X11 backend, you will also need:
|
If you are building the X11 backend, you will also need:
|
||||||
|
|
||||||
- Xlib, and the following X extensions:
|
- Xlib, and the following X extensions:
|
||||||
@@ -86,24 +79,32 @@ If you are building the X11 backend, you will also need:
|
|||||||
- xdamage
|
- xdamage
|
||||||
- xcomposite
|
- xcomposite
|
||||||
|
|
||||||
|
If you are building the Wayland backend, you will also need:
|
||||||
|
|
||||||
|
- Wayland-client
|
||||||
|
- Wayland-protocols
|
||||||
|
- Wayland-cursor
|
||||||
|
- Wayland-EGL
|
||||||
|
|
||||||
Once you have all the necessary dependencies, you can build GTK by using
|
Once you have all the necessary dependencies, you can build GTK by using
|
||||||
Meson:
|
Meson:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
$ meson setup _build
|
$ meson _build .
|
||||||
$ meson compile -C_build
|
$ cd _build
|
||||||
|
$ ninja
|
||||||
```
|
```
|
||||||
|
|
||||||
You can run the test suite using:
|
You can run the test suite using:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
$ meson test -C_build
|
$ meson test
|
||||||
```
|
```
|
||||||
|
|
||||||
And, finally, you can install GTK using:
|
And, finally, you can install GTK using:
|
||||||
|
|
||||||
```
|
```
|
||||||
$ sudo meson install -C_build
|
$ sudo ninja install
|
||||||
```
|
```
|
||||||
|
|
||||||
Complete information about installing GTK and related libraries
|
Complete information about installing GTK and related libraries
|
||||||
@@ -115,12 +116,19 @@ docs/reference/gtk/html/gtk-building.html
|
|||||||
|
|
||||||
Or [online](https://docs.gtk.org/gtk4/building.html)
|
Or [online](https://docs.gtk.org/gtk4/building.html)
|
||||||
|
|
||||||
Building from git
|
Default branch renamed to `main`
|
||||||
-----------------
|
--------------------------------
|
||||||
|
|
||||||
The GTK sources are hosted on [gitlab.gnome.org](http://gitlab.gnome.org). The main
|
The default development branch of GTK has been renamed to `main`.
|
||||||
development branch is called `main`, and stable branches are named after their minor
|
To update your local checkout, use:
|
||||||
version, for example `gtk-4-10`.
|
```sh
|
||||||
|
git checkout master
|
||||||
|
git branch -m master main
|
||||||
|
git fetch
|
||||||
|
git branch --unset-upstream
|
||||||
|
git branch -u origin/main
|
||||||
|
git symbolic-ref refs/remotes/origin/HEAD refs/remotes/origin/main
|
||||||
|
```
|
||||||
|
|
||||||
How to report bugs
|
How to report bugs
|
||||||
------------------
|
------------------
|
||||||
|
@@ -185,8 +185,9 @@
|
|||||||
"builddir" : true,
|
"builddir" : true,
|
||||||
"config-opts" : [
|
"config-opts" : [
|
||||||
"--libdir=/app/lib",
|
"--libdir=/app/lib",
|
||||||
|
"-Dvulkan=disabled",
|
||||||
"-Dbuildtype=debugoptimized",
|
"-Dbuildtype=debugoptimized",
|
||||||
"-Ddemo-profile=devel"
|
"-Dprofile=devel"
|
||||||
],
|
],
|
||||||
"sources" : [
|
"sources" : [
|
||||||
{
|
{
|
||||||
@@ -199,6 +200,7 @@
|
|||||||
],
|
],
|
||||||
"build-options" : {
|
"build-options" : {
|
||||||
"env" : {
|
"env" : {
|
||||||
|
"GSK_RENDERER" : "opengl"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -114,8 +114,9 @@
|
|||||||
"builddir" : true,
|
"builddir" : true,
|
||||||
"config-opts" : [
|
"config-opts" : [
|
||||||
"--libdir=/app/lib",
|
"--libdir=/app/lib",
|
||||||
|
"-Dvulkan=disabled",
|
||||||
"-Dbuildtype=debugoptimized",
|
"-Dbuildtype=debugoptimized",
|
||||||
"-Ddemo-profile=devel"
|
"-Dprofile=devel"
|
||||||
],
|
],
|
||||||
"sources" : [
|
"sources" : [
|
||||||
{
|
{
|
||||||
|
@@ -114,8 +114,9 @@
|
|||||||
"builddir" : true,
|
"builddir" : true,
|
||||||
"config-opts" : [
|
"config-opts" : [
|
||||||
"--libdir=/app/lib",
|
"--libdir=/app/lib",
|
||||||
|
"-Dvulkan=disabled",
|
||||||
"-Dbuildtype=debugoptimized",
|
"-Dbuildtype=debugoptimized",
|
||||||
"-Ddemo-profile=devel"
|
"-Dprofile=devel"
|
||||||
],
|
],
|
||||||
"sources" : [
|
"sources" : [
|
||||||
{
|
{
|
||||||
@@ -129,6 +130,8 @@
|
|||||||
"build-options" : {
|
"build-options" : {
|
||||||
"env" : {
|
"env" : {
|
||||||
"DBUS_SESSION_BUS_ADDRESS" : "''",
|
"DBUS_SESSION_BUS_ADDRESS" : "''",
|
||||||
|
"GSK_RENDERER" : "opengl",
|
||||||
|
"GDK_DEBUG" : "vulkan-disable",
|
||||||
"G_ENABLE_DEBUG" : "true"
|
"G_ENABLE_DEBUG" : "true"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -114,8 +114,9 @@
|
|||||||
"builddir" : true,
|
"builddir" : true,
|
||||||
"config-opts" : [
|
"config-opts" : [
|
||||||
"--libdir=/app/lib",
|
"--libdir=/app/lib",
|
||||||
|
"-Dvulkan=disabled",
|
||||||
"-Dbuildtype=debugoptimized",
|
"-Dbuildtype=debugoptimized",
|
||||||
"-Ddemo-profile=devel"
|
"-Dprofile=devel"
|
||||||
],
|
],
|
||||||
"sources" : [
|
"sources" : [
|
||||||
{
|
{
|
||||||
@@ -129,6 +130,8 @@
|
|||||||
"build-options" : {
|
"build-options" : {
|
||||||
"env" : {
|
"env" : {
|
||||||
"DBUS_SESSION_BUS_ADDRESS" : "''",
|
"DBUS_SESSION_BUS_ADDRESS" : "''",
|
||||||
|
"GSK_RENDERER" : "opengl",
|
||||||
|
"GDK_DEBUG" : "vulkan-disable",
|
||||||
"G_ENABLE_DEBUG" : "true"
|
"G_ENABLE_DEBUG" : "true"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,201 +0,0 @@
|
|||||||
#!/usr/bin/env python3
|
|
||||||
#
|
|
||||||
# SPDX-FileCopyrightText: 2022 Collabora Inc.
|
|
||||||
# 2023 Emmanuele Bassi
|
|
||||||
#
|
|
||||||
# SPDX-License-Identifier: LGPL-2.1-or-later
|
|
||||||
#
|
|
||||||
# Original author: Xavier Claessens <xclaesse@gmail.com>
|
|
||||||
|
|
||||||
import argparse
|
|
||||||
import textwrap
|
|
||||||
from pathlib import Path
|
|
||||||
|
|
||||||
|
|
||||||
# Disable line length warnings as wrapping the C code templates would be hard
|
|
||||||
# flake8: noqa: E501
|
|
||||||
|
|
||||||
|
|
||||||
def gen_versions_macros(args, current_major_version, current_minor_version, current_micro_version):
|
|
||||||
with args.out_path.open("w", encoding="utf-8") as ofile, args.in_path.open(
|
|
||||||
"r", encoding="utf-8"
|
|
||||||
) as ifile:
|
|
||||||
for line in ifile.readlines():
|
|
||||||
if "@GDK_VERSIONS@" in line:
|
|
||||||
ofile.write(
|
|
||||||
textwrap.dedent(
|
|
||||||
f"""\
|
|
||||||
/**
|
|
||||||
* GDK_MAJOR_VERSION:
|
|
||||||
*
|
|
||||||
* The major version component of the library's version, e.g. "1" for "1.2.3".
|
|
||||||
*/
|
|
||||||
#define GDK_MAJOR_VERSION ({current_major_version})
|
|
||||||
|
|
||||||
/**
|
|
||||||
* GDK_MINOR_VERSION:
|
|
||||||
*
|
|
||||||
* The minor version component of the library's version, e.g. "2" for "1.2.3".
|
|
||||||
*/
|
|
||||||
#define GDK_MINOR_VERSION ({current_minor_version})
|
|
||||||
|
|
||||||
/**
|
|
||||||
* GDK_MICRO_VERSION:
|
|
||||||
*
|
|
||||||
* The micro version component of the library's version, e.g. "3" for "1.2.3".
|
|
||||||
*/
|
|
||||||
#define GDK_MICRO_VERSION ({current_micro_version})
|
|
||||||
"""
|
|
||||||
)
|
|
||||||
)
|
|
||||||
for minor in range(0, current_minor_version + 2, 2):
|
|
||||||
ofile.write(
|
|
||||||
textwrap.dedent(
|
|
||||||
f"""\
|
|
||||||
/**
|
|
||||||
* GDK_VERSION_{current_major_version}_{minor}:
|
|
||||||
*
|
|
||||||
* A macro that evaluates to the {current_major_version}.{minor} version of GTK, in a format
|
|
||||||
* that can be used by the C pre-processor.
|
|
||||||
*
|
|
||||||
* Since: {current_major_version}.{minor}
|
|
||||||
*/
|
|
||||||
#define GDK_VERSION_{current_major_version}_{minor} (G_ENCODE_VERSION ({current_major_version}, {minor}))
|
|
||||||
"""
|
|
||||||
)
|
|
||||||
)
|
|
||||||
else:
|
|
||||||
ofile.write(line)
|
|
||||||
|
|
||||||
|
|
||||||
def gen_visibility_macros(args, current_major_version, current_minor_version, current_micro_version):
|
|
||||||
"""
|
|
||||||
Generates a set of macros for each minor stable version of GTK
|
|
||||||
|
|
||||||
- GDK_DEPRECATED
|
|
||||||
- GDK_DEPRECATED_IN_…
|
|
||||||
- GDK_DEPRECATED_MACRO_IN_…
|
|
||||||
- GDK_DEPRECATED_ENUMERATOR_IN_…
|
|
||||||
- GDK_DEPRECATED_TYPE_IN_…
|
|
||||||
|
|
||||||
- GDK_AVAILABLE_IN_ALL
|
|
||||||
- GDK_AVAILABLE_IN_…
|
|
||||||
- GDK_AVAILABLE_STATIC_INLINE_IN_…
|
|
||||||
- GDK_AVAILABLE_MACRO_IN_…
|
|
||||||
- GDK_AVAILABLE_ENUMERATOR_IN_…
|
|
||||||
- GDK_AVAILABLE_TYPE_IN_…
|
|
||||||
|
|
||||||
- GDK_UNAVAILABLE(maj,min)
|
|
||||||
- GDK_UNAVAILABLE_STATIC_INLINE(maj,min)
|
|
||||||
"""
|
|
||||||
|
|
||||||
ns = args.namespace
|
|
||||||
with args.out_path.open("w", encoding="utf-8") as f:
|
|
||||||
f.write(
|
|
||||||
textwrap.dedent(
|
|
||||||
f"""\
|
|
||||||
#pragma once
|
|
||||||
|
|
||||||
#if (defined(_WIN32) || defined(__CYGWIN__)) && !defined({ns}_STATIC_COMPILATION)
|
|
||||||
# define _{ns}_EXPORT __declspec(dllexport)
|
|
||||||
# define _{ns}_IMPORT __declspec(dllimport)
|
|
||||||
#elif __GNUC__ >= 4
|
|
||||||
# define _{ns}_EXPORT __attribute__((visibility("default")))
|
|
||||||
# define _{ns}_IMPORT
|
|
||||||
#else
|
|
||||||
# define _{ns}_EXPORT
|
|
||||||
# define _{ns}_IMPORT
|
|
||||||
#endif
|
|
||||||
#ifdef GTK_COMPILATION
|
|
||||||
# define _{ns}_API _{ns}_EXPORT
|
|
||||||
#else
|
|
||||||
# define _{ns}_API _{ns}_IMPORT
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define _{ns}_EXTERN _{ns}_API extern
|
|
||||||
|
|
||||||
#define {ns}_VAR _{ns}_EXTERN
|
|
||||||
#define {ns}_AVAILABLE_IN_ALL _{ns}_EXTERN
|
|
||||||
|
|
||||||
#ifdef GDK_DISABLE_DEPRECATION_WARNINGS
|
|
||||||
#define {ns}_DEPRECATED _{ns}_EXTERN
|
|
||||||
#define {ns}_DEPRECATED_FOR(f) _{ns}_EXTERN
|
|
||||||
#define {ns}_UNAVAILABLE(maj,min) _{ns}_EXTERN
|
|
||||||
#define {ns}_UNAVAILABLE_STATIC_INLINE(maj,min)
|
|
||||||
#else
|
|
||||||
#define {ns}_DEPRECATED G_DEPRECATED _{ns}_EXTERN
|
|
||||||
#define {ns}_DEPRECATED_FOR(f) G_DEPRECATED_FOR(f) _{ns}_EXTERN
|
|
||||||
#define {ns}_UNAVAILABLE(maj,min) G_UNAVAILABLE(maj,min) _{ns}_EXTERN
|
|
||||||
#define {ns}_UNAVAILABLE_STATIC_INLINE(maj,min) G_UNAVAILABLE(maj,min)
|
|
||||||
#endif
|
|
||||||
"""
|
|
||||||
)
|
|
||||||
)
|
|
||||||
for minor in range(0, current_minor_version + 2, 2):
|
|
||||||
f.write(
|
|
||||||
textwrap.dedent(
|
|
||||||
f"""
|
|
||||||
#if GDK_VERSION_MIN_REQUIRED >= GDK_VERSION_4_{minor}
|
|
||||||
#define {ns}_DEPRECATED_IN_{current_major_version}_{minor} {ns}_DEPRECATED
|
|
||||||
#define {ns}_DEPRECATED_IN_{current_major_version}_{minor}_FOR(f) {ns}_DEPRECATED_FOR (f)
|
|
||||||
#define {ns}_DEPRECATED_MACRO_IN_{current_major_version}_{minor} GDK_DEPRECATED_MACRO
|
|
||||||
#define {ns}_DEPRECATED_MACRO_IN_{current_major_version}_{minor}_FOR(f) GDK_DEPRECATED_MACRO_FOR (f)
|
|
||||||
#define {ns}_DEPRECATED_ENUMERATOR_IN_{current_major_version}_{minor} GDK_DEPRECATED_ENUMERATOR
|
|
||||||
#define {ns}_DEPRECATED_ENUMERATOR_IN_{current_major_version}_{minor}_FOR(f) GDK_DEPRECATED_ENUMERATOR_FOR (f)
|
|
||||||
#define {ns}_DEPRECATED_TYPE_IN_{current_major_version}_{minor} GDK_DEPRECATED_TYPE
|
|
||||||
#define {ns}_DEPRECATED_TYPE_IN_{current_major_version}_{minor}_FOR(f) GDK_DEPRECATED_TYPE_FOR (f)
|
|
||||||
#else
|
|
||||||
#define {ns}_DEPRECATED_IN_{current_major_version}_{minor} _{ns}_EXTERN
|
|
||||||
#define {ns}_DEPRECATED_IN_{current_major_version}_{minor}_FOR(f) _{ns}_EXTERN
|
|
||||||
#define {ns}_DEPRECATED_MACRO_IN_{current_major_version}_{minor}
|
|
||||||
#define {ns}_DEPRECATED_MACRO_IN_{current_major_version}_{minor}_FOR(f)
|
|
||||||
#define {ns}_DEPRECATED_ENUMERATOR_IN_{current_major_version}_{minor}
|
|
||||||
#define {ns}_DEPRECATED_ENUMERATOR_IN_{current_major_version}_{minor}_FOR(f)
|
|
||||||
#define {ns}_DEPRECATED_TYPE_IN_{current_major_version}_{minor}
|
|
||||||
#define {ns}_DEPRECATED_TYPE_IN_{current_major_version}_{minor}_FOR(f)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if GDK_VERSION_MAX_ALLOWED < GDK_VERSION_{current_major_version}_{minor}
|
|
||||||
#define {ns}_AVAILABLE_IN_{current_major_version}_{minor} {ns}_UNAVAILABLE ({current_major_version}, {minor})
|
|
||||||
#define {ns}_AVAILABLE_STATIC_INLINE_IN_{current_major_version}_{minor} GDK_UNAVAILABLE_STATIC_INLINE ({current_major_version}, {minor})
|
|
||||||
#define {ns}_AVAILABLE_MACRO_IN_{current_major_version}_{minor} GDK_UNAVAILABLE_MACRO ({current_major_version}, {minor})
|
|
||||||
#define {ns}_AVAILABLE_ENUMERATOR_IN_{current_major_version}_{minor} GDK_UNAVAILABLE_ENUMERATOR ({current_major_version}, {minor})
|
|
||||||
#define {ns}_AVAILABLE_TYPE_IN_{current_major_version}_{minor} GDK_UNAVAILABLE_TYPE ({current_major_version}, {minor})
|
|
||||||
#else
|
|
||||||
#define {ns}_AVAILABLE_IN_{current_major_version}_{minor} _{ns}_EXTERN
|
|
||||||
#define {ns}_AVAILABLE_STATIC_INLINE_IN_{current_major_version}_{minor}
|
|
||||||
#define {ns}_AVAILABLE_MACRO_IN_{current_major_version}_{minor}
|
|
||||||
#define {ns}_AVAILABLE_ENUMERATOR_IN_{current_major_version}_{minor}
|
|
||||||
#define {ns}_AVAILABLE_TYPE_IN_{current_major_version}_{minor}
|
|
||||||
#endif
|
|
||||||
"""
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
parser = argparse.ArgumentParser()
|
|
||||||
parser.add_argument("gtk_version", help="Current GLib version")
|
|
||||||
subparsers = parser.add_subparsers()
|
|
||||||
|
|
||||||
versions_parser = subparsers.add_parser(
|
|
||||||
"versions-macros", help="Generate versions macros"
|
|
||||||
)
|
|
||||||
versions_parser.add_argument("in_path", help="input file", type=Path)
|
|
||||||
versions_parser.add_argument("out_path", help="output file", type=Path)
|
|
||||||
versions_parser.set_defaults(func=gen_versions_macros)
|
|
||||||
|
|
||||||
visibility_parser = subparsers.add_parser(
|
|
||||||
"visibility-macros", help="Generate visibility macros"
|
|
||||||
)
|
|
||||||
visibility_parser.add_argument("namespace", help="Macro namespace")
|
|
||||||
visibility_parser.add_argument("out_path", help="output file", type=Path)
|
|
||||||
visibility_parser.set_defaults(func=gen_visibility_macros)
|
|
||||||
|
|
||||||
args = parser.parse_args()
|
|
||||||
version = [int(i) for i in args.gtk_version.split(".")]
|
|
||||||
args.func(args, version[0], version[1], version[2])
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
main()
|
|
@@ -1,41 +0,0 @@
|
|||||||
#ifndef _MSC_VER
|
|
||||||
#pragma error "This header is for Microsoft VC or clang-cl only."
|
|
||||||
#endif /* _MSC_VER */
|
|
||||||
|
|
||||||
/* Make MSVC more pedantic, this is a recommended pragma list
|
|
||||||
* from _Win32_Programming_ by Rector and Newcomer.
|
|
||||||
*/
|
|
||||||
#ifndef __clang__
|
|
||||||
#pragma warning(error:4002) /* too many actual parameters for macro */
|
|
||||||
#pragma warning(error:4003) /* not enough actual parameters for macro */
|
|
||||||
#pragma warning(1:4010) /* single-line comment contains line-continuation character */
|
|
||||||
#pragma warning(error:4013) /* 'function' undefined; assuming extern returning int */
|
|
||||||
#pragma warning(1:4016) /* no function return type; using int as default */
|
|
||||||
#pragma warning(error:4020) /* too many actual parameters */
|
|
||||||
#pragma warning(error:4021) /* too few actual parameters */
|
|
||||||
#pragma warning(error:4027) /* function declared without formal parameter list */
|
|
||||||
#pragma warning(error:4029) /* declared formal parameter list different from definition */
|
|
||||||
#pragma warning(error:4033) /* 'function' must return a value */
|
|
||||||
#pragma warning(error:4035) /* 'function' : no return value */
|
|
||||||
#pragma warning(error:4045) /* array bounds overflow */
|
|
||||||
#pragma warning(error:4047) /* different levels of indirection */
|
|
||||||
#pragma warning(error:4049) /* terminating line number emission */
|
|
||||||
#pragma warning(error:4053) /* An expression of type void was used as an operand */
|
|
||||||
#pragma warning(error:4071) /* no function prototype given */
|
|
||||||
#pragma warning(disable:4101) /* unreferenced local variable */
|
|
||||||
#pragma warning(error:4150)
|
|
||||||
|
|
||||||
/* G_NORETURN */
|
|
||||||
#pragma warning(error:4646) /* function declared with __declspec(noreturn) has non-void return type */
|
|
||||||
#pragma warning(error:4715) /* 'function': not all control paths return a value */
|
|
||||||
#pragma warning(error:4098) /* 'void' function returning a value */
|
|
||||||
|
|
||||||
#pragma warning(disable:4244) /* No possible loss of data warnings */
|
|
||||||
#pragma warning(disable:4305) /* No truncation from int to char warnings */
|
|
||||||
|
|
||||||
#pragma warning(error:4819) /* The file contains a character that cannot be represented in the current code page */
|
|
||||||
#endif /* __clang__ */
|
|
||||||
|
|
||||||
/* work around Microsoft's premature attempt to deprecate the C-Library */
|
|
||||||
#define _CRT_SECURE_NO_WARNINGS
|
|
||||||
#define _CRT_NONSTDC_NO_WARNINGS
|
|
@@ -483,8 +483,6 @@ constraint_editor_window_class_init (ConstraintEditorWindowClass *class)
|
|||||||
GObjectClass *object_class = G_OBJECT_CLASS (class);
|
GObjectClass *object_class = G_OBJECT_CLASS (class);
|
||||||
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (class);
|
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (class);
|
||||||
|
|
||||||
g_type_ensure (CONSTRAINT_VIEW_TYPE);
|
|
||||||
|
|
||||||
object_class->dispose = constraint_editor_window_dispose;
|
object_class->dispose = constraint_editor_window_dispose;
|
||||||
|
|
||||||
gtk_widget_class_set_template_from_resource (widget_class,
|
gtk_widget_class_set_template_from_resource (widget_class,
|
||||||
|
@@ -20,7 +20,8 @@
|
|||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
|
||||||
#include "constraint-editor.h"
|
#include "constraint-editor.h"
|
||||||
#include "constraint-view.h"
|
|
||||||
|
G_GNUC_BEGIN_IGNORE_DEPRECATIONS
|
||||||
|
|
||||||
struct _ConstraintEditor
|
struct _ConstraintEditor
|
||||||
{
|
{
|
||||||
@@ -65,7 +66,7 @@ static const char *
|
|||||||
get_target_name (GtkConstraintTarget *target)
|
get_target_name (GtkConstraintTarget *target)
|
||||||
{
|
{
|
||||||
if (target == NULL)
|
if (target == NULL)
|
||||||
return "Super";
|
return "super";
|
||||||
else if (GTK_IS_WIDGET (target))
|
else if (GTK_IS_WIDGET (target))
|
||||||
return gtk_widget_get_name (GTK_WIDGET (target));
|
return gtk_widget_get_name (GTK_WIDGET (target));
|
||||||
else if (GTK_IS_CONSTRAINT_GUIDE (target))
|
else if (GTK_IS_CONSTRAINT_GUIDE (target))
|
||||||
@@ -79,29 +80,62 @@ constraint_target_combo (GListModel *model,
|
|||||||
GtkWidget *combo,
|
GtkWidget *combo,
|
||||||
gboolean is_source)
|
gboolean is_source)
|
||||||
{
|
{
|
||||||
GtkStringList *targets;
|
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
targets = gtk_string_list_new (NULL);
|
gtk_combo_box_text_append (GTK_COMBO_BOX_TEXT (combo), "super", "Super");
|
||||||
|
|
||||||
gtk_string_list_append (targets, "Super");
|
|
||||||
|
|
||||||
if (model)
|
if (model)
|
||||||
{
|
{
|
||||||
for (i = 0; i < g_list_model_get_n_items (model); i++)
|
for (i = 0; i < g_list_model_get_n_items (model); i++)
|
||||||
{
|
{
|
||||||
GObject *item = g_list_model_get_object (model, i);
|
GObject *item = g_list_model_get_object (model, i);
|
||||||
|
const char *name;
|
||||||
|
|
||||||
if (GTK_IS_CONSTRAINT (item))
|
if (GTK_IS_CONSTRAINT (item))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
gtk_string_list_append (targets, get_target_name (GTK_CONSTRAINT_TARGET (item)));
|
name = get_target_name (GTK_CONSTRAINT_TARGET (item));
|
||||||
|
|
||||||
|
gtk_combo_box_text_append (GTK_COMBO_BOX_TEXT (combo), name, name);
|
||||||
g_object_unref (item);
|
g_object_unref (item);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
gtk_drop_down_set_model (GTK_DROP_DOWN (combo), G_LIST_MODEL (targets));
|
static void
|
||||||
g_object_unref (targets);
|
constraint_attribute_combo (GtkWidget *combo,
|
||||||
|
gboolean is_source)
|
||||||
|
{
|
||||||
|
if (is_source)
|
||||||
|
gtk_combo_box_text_append (GTK_COMBO_BOX_TEXT (combo), "none", "None");
|
||||||
|
gtk_combo_box_text_append (GTK_COMBO_BOX_TEXT (combo), "left", "Left");
|
||||||
|
gtk_combo_box_text_append (GTK_COMBO_BOX_TEXT (combo), "right", "Right");
|
||||||
|
gtk_combo_box_text_append (GTK_COMBO_BOX_TEXT (combo), "top", "Top");
|
||||||
|
gtk_combo_box_text_append (GTK_COMBO_BOX_TEXT (combo), "bottom", "Bottom");
|
||||||
|
gtk_combo_box_text_append (GTK_COMBO_BOX_TEXT (combo), "start", "Start");
|
||||||
|
gtk_combo_box_text_append (GTK_COMBO_BOX_TEXT (combo), "end", "End");
|
||||||
|
gtk_combo_box_text_append (GTK_COMBO_BOX_TEXT (combo), "width", "Width");
|
||||||
|
gtk_combo_box_text_append (GTK_COMBO_BOX_TEXT (combo), "height", "Height");
|
||||||
|
gtk_combo_box_text_append (GTK_COMBO_BOX_TEXT (combo), "center-x", "Center X");
|
||||||
|
gtk_combo_box_text_append (GTK_COMBO_BOX_TEXT (combo), "center-y", "Center Y");
|
||||||
|
gtk_combo_box_text_append (GTK_COMBO_BOX_TEXT (combo), "baseline", "Baseline");
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
constraint_relation_combo (GtkWidget *combo)
|
||||||
|
{
|
||||||
|
gtk_combo_box_text_append (GTK_COMBO_BOX_TEXT (combo), "le", "≤");
|
||||||
|
gtk_combo_box_text_append (GTK_COMBO_BOX_TEXT (combo), "eq", "=");
|
||||||
|
gtk_combo_box_text_append (GTK_COMBO_BOX_TEXT (combo), "ge", "≥");
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
constraint_strength_combo (GtkWidget *combo)
|
||||||
|
{
|
||||||
|
gtk_combo_box_text_append (GTK_COMBO_BOX_TEXT (combo), "weak", "Weak");
|
||||||
|
gtk_combo_box_text_append (GTK_COMBO_BOX_TEXT (combo), "medium", "Medium");
|
||||||
|
gtk_combo_box_text_append (GTK_COMBO_BOX_TEXT (combo), "strong", "Strong");
|
||||||
|
gtk_combo_box_text_append (GTK_COMBO_BOX_TEXT (combo), "required", "Required");
|
||||||
}
|
}
|
||||||
|
|
||||||
static gpointer
|
static gpointer
|
||||||
@@ -113,7 +147,7 @@ get_target (GListModel *model,
|
|||||||
if (id == NULL)
|
if (id == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
if (strcmp ("Super", id) == 0)
|
if (strcmp ("super", id) == 0)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
for (i = 0; i < g_list_model_get_n_items (model); i++)
|
for (i = 0; i < g_list_model_get_n_items (model); i++)
|
||||||
@@ -137,65 +171,16 @@ get_target (GListModel *model,
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
select_target (GtkDropDown *combo,
|
|
||||||
const char *target_name)
|
|
||||||
{
|
|
||||||
GListModel *model = gtk_drop_down_get_model (combo);
|
|
||||||
|
|
||||||
for (unsigned int i = 0; i < g_list_model_get_n_items (model); i++)
|
|
||||||
{
|
|
||||||
GtkStringObject *s = g_list_model_get_item (model, i);
|
|
||||||
|
|
||||||
g_object_unref (s);
|
|
||||||
if (strcmp (target_name, gtk_string_object_get_string (s)) == 0)
|
|
||||||
{
|
|
||||||
gtk_drop_down_set_selected (GTK_DROP_DOWN (combo), i);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static GtkConstraintAttribute
|
static GtkConstraintAttribute
|
||||||
get_attr (unsigned int id)
|
get_target_attr (const char *id)
|
||||||
{
|
{
|
||||||
switch (id)
|
GtkConstraintAttribute attr;
|
||||||
{
|
GEnumClass *class = g_type_class_ref (GTK_TYPE_CONSTRAINT_ATTRIBUTE);
|
||||||
case 0: return GTK_CONSTRAINT_ATTRIBUTE_NONE;
|
GEnumValue *value = g_enum_get_value_by_nick (class, id);
|
||||||
case 1: return GTK_CONSTRAINT_ATTRIBUTE_LEFT;
|
attr = value->value;
|
||||||
case 2: return GTK_CONSTRAINT_ATTRIBUTE_RIGHT;
|
g_type_class_unref (class);
|
||||||
case 3: return GTK_CONSTRAINT_ATTRIBUTE_TOP;
|
|
||||||
case 4: return GTK_CONSTRAINT_ATTRIBUTE_BOTTOM;
|
|
||||||
case 5: return GTK_CONSTRAINT_ATTRIBUTE_START;
|
|
||||||
case 6: return GTK_CONSTRAINT_ATTRIBUTE_END;
|
|
||||||
case 7: return GTK_CONSTRAINT_ATTRIBUTE_WIDTH;
|
|
||||||
case 8: return GTK_CONSTRAINT_ATTRIBUTE_HEIGHT;
|
|
||||||
case 9: return GTK_CONSTRAINT_ATTRIBUTE_CENTER_X;
|
|
||||||
case 10: return GTK_CONSTRAINT_ATTRIBUTE_CENTER_Y;
|
|
||||||
case 11: return GTK_CONSTRAINT_ATTRIBUTE_BASELINE;
|
|
||||||
default: g_assert_not_reached ();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static unsigned int
|
return attr;
|
||||||
get_attr_id (GtkConstraintAttribute attr)
|
|
||||||
{
|
|
||||||
switch (attr)
|
|
||||||
{
|
|
||||||
case GTK_CONSTRAINT_ATTRIBUTE_NONE: return 0;
|
|
||||||
case GTK_CONSTRAINT_ATTRIBUTE_LEFT: return 1;
|
|
||||||
case GTK_CONSTRAINT_ATTRIBUTE_RIGHT: return 2;
|
|
||||||
case GTK_CONSTRAINT_ATTRIBUTE_TOP: return 3;
|
|
||||||
case GTK_CONSTRAINT_ATTRIBUTE_BOTTOM: return 4;
|
|
||||||
case GTK_CONSTRAINT_ATTRIBUTE_START: return 5;
|
|
||||||
case GTK_CONSTRAINT_ATTRIBUTE_END: return 6;
|
|
||||||
case GTK_CONSTRAINT_ATTRIBUTE_WIDTH: return 7;
|
|
||||||
case GTK_CONSTRAINT_ATTRIBUTE_HEIGHT: return 8;
|
|
||||||
case GTK_CONSTRAINT_ATTRIBUTE_CENTER_X: return 9;
|
|
||||||
case GTK_CONSTRAINT_ATTRIBUTE_CENTER_Y: return 10;
|
|
||||||
case GTK_CONSTRAINT_ATTRIBUTE_BASELINE: return 11;
|
|
||||||
default: g_assert_not_reached ();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static const char *
|
static const char *
|
||||||
@@ -210,27 +195,15 @@ get_attr_nick (GtkConstraintAttribute attr)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static GtkConstraintRelation
|
static GtkConstraintRelation
|
||||||
get_relation (unsigned int id)
|
get_relation (const char *id)
|
||||||
{
|
{
|
||||||
switch (id)
|
GtkConstraintRelation relation;
|
||||||
{
|
GEnumClass *class = g_type_class_ref (GTK_TYPE_CONSTRAINT_RELATION);
|
||||||
case 0: return GTK_CONSTRAINT_RELATION_LE;
|
GEnumValue *value = g_enum_get_value_by_nick (class, id);
|
||||||
case 1: return GTK_CONSTRAINT_RELATION_EQ;
|
relation = value->value;
|
||||||
case 2: return GTK_CONSTRAINT_RELATION_GE;
|
g_type_class_unref (class);
|
||||||
default: g_assert_not_reached ();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static unsigned int
|
return relation;
|
||||||
get_relation_id (GtkConstraintRelation relation)
|
|
||||||
{
|
|
||||||
switch (relation)
|
|
||||||
{
|
|
||||||
case GTK_CONSTRAINT_RELATION_LE: return 0;
|
|
||||||
case GTK_CONSTRAINT_RELATION_EQ: return 1;
|
|
||||||
case GTK_CONSTRAINT_RELATION_GE: return 2;
|
|
||||||
default: g_assert_not_reached ();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static const char *
|
static const char *
|
||||||
@@ -261,29 +234,15 @@ get_relation_display_name (GtkConstraintRelation relation)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static GtkConstraintStrength
|
static GtkConstraintStrength
|
||||||
get_strength (unsigned int id)
|
get_strength (const char *id)
|
||||||
{
|
|
||||||
switch (id)
|
|
||||||
{
|
|
||||||
case 0: return GTK_CONSTRAINT_STRENGTH_WEAK;
|
|
||||||
case 1: return GTK_CONSTRAINT_STRENGTH_MEDIUM;
|
|
||||||
case 2: return GTK_CONSTRAINT_STRENGTH_STRONG;
|
|
||||||
case 3: return GTK_CONSTRAINT_STRENGTH_REQUIRED;
|
|
||||||
default: g_assert_not_reached ();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static unsigned int
|
|
||||||
get_strength_id (GtkConstraintStrength strength)
|
|
||||||
{
|
{
|
||||||
switch (strength)
|
GtkConstraintStrength strength;
|
||||||
{
|
GEnumClass *class = g_type_class_ref (GTK_TYPE_CONSTRAINT_STRENGTH);
|
||||||
case GTK_CONSTRAINT_STRENGTH_WEAK: return 0;
|
GEnumValue *value = g_enum_get_value_by_nick (class, id);
|
||||||
case GTK_CONSTRAINT_STRENGTH_MEDIUM: return 1;
|
strength = value->value;
|
||||||
case GTK_CONSTRAINT_STRENGTH_STRONG: return 2;
|
g_type_class_unref (class);
|
||||||
case GTK_CONSTRAINT_STRENGTH_REQUIRED: return 3;
|
|
||||||
default: g_assert_not_reached ();
|
return strength;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static const char *
|
static const char *
|
||||||
@@ -335,7 +294,7 @@ static void
|
|||||||
create_constraint (GtkButton *button,
|
create_constraint (GtkButton *button,
|
||||||
ConstraintEditor *editor)
|
ConstraintEditor *editor)
|
||||||
{
|
{
|
||||||
gpointer obj;
|
const char *id;
|
||||||
gpointer target;
|
gpointer target;
|
||||||
GtkConstraintAttribute target_attr;
|
GtkConstraintAttribute target_attr;
|
||||||
gpointer source;
|
gpointer source;
|
||||||
@@ -346,27 +305,25 @@ create_constraint (GtkButton *button,
|
|||||||
int strength;
|
int strength;
|
||||||
GtkConstraint *constraint;
|
GtkConstraint *constraint;
|
||||||
|
|
||||||
obj = gtk_drop_down_get_selected_item (GTK_DROP_DOWN (editor->target));
|
id = gtk_combo_box_get_active_id (GTK_COMBO_BOX (editor->target));
|
||||||
if (obj)
|
target = get_target (editor->model, id);
|
||||||
target = get_target (editor->model, gtk_string_object_get_string (GTK_STRING_OBJECT (obj)));
|
id = gtk_combo_box_get_active_id (GTK_COMBO_BOX (editor->target_attr));
|
||||||
else
|
target_attr = get_target_attr (id);
|
||||||
target = NULL;
|
|
||||||
target_attr = get_attr (gtk_drop_down_get_selected (GTK_DROP_DOWN (editor->target_attr)));
|
|
||||||
|
|
||||||
obj = gtk_drop_down_get_selected_item (GTK_DROP_DOWN (editor->source));
|
id = gtk_combo_box_get_active_id (GTK_COMBO_BOX (editor->source));
|
||||||
if (obj)
|
source = get_target (editor->model, id);
|
||||||
source = get_target (editor->model, gtk_string_object_get_string (GTK_STRING_OBJECT (obj)));
|
id = gtk_combo_box_get_active_id (GTK_COMBO_BOX (editor->source_attr));
|
||||||
else
|
source_attr = get_target_attr (id);
|
||||||
source = NULL;
|
|
||||||
source_attr = get_attr (gtk_drop_down_get_selected (GTK_DROP_DOWN(editor->source_attr)));
|
|
||||||
|
|
||||||
relation = get_relation (gtk_drop_down_get_selected (GTK_DROP_DOWN (editor->relation)));
|
id = gtk_combo_box_get_active_id (GTK_COMBO_BOX (editor->relation));
|
||||||
|
relation = get_relation (id);
|
||||||
|
|
||||||
multiplier = g_ascii_strtod (gtk_editable_get_text (GTK_EDITABLE (editor->multiplier)), NULL);
|
multiplier = g_ascii_strtod (gtk_editable_get_text (GTK_EDITABLE (editor->multiplier)), NULL);
|
||||||
|
|
||||||
constant = g_ascii_strtod (gtk_editable_get_text (GTK_EDITABLE (editor->constant)), NULL);
|
constant = g_ascii_strtod (gtk_editable_get_text (GTK_EDITABLE (editor->constant)), NULL);
|
||||||
|
|
||||||
strength = get_strength (gtk_drop_down_get_selected (GTK_DROP_DOWN (editor->strength)));
|
id = gtk_combo_box_get_active_id (GTK_COMBO_BOX (editor->strength));
|
||||||
|
strength = get_strength (id);
|
||||||
|
|
||||||
constraint = gtk_constraint_new (target, target_attr,
|
constraint = gtk_constraint_new (target, target_attr,
|
||||||
relation,
|
relation,
|
||||||
@@ -381,9 +338,12 @@ create_constraint (GtkButton *button,
|
|||||||
static void
|
static void
|
||||||
source_attr_changed (ConstraintEditor *editor)
|
source_attr_changed (ConstraintEditor *editor)
|
||||||
{
|
{
|
||||||
if (get_attr (gtk_drop_down_get_selected (GTK_DROP_DOWN (editor->source_attr))) == GTK_CONSTRAINT_ATTRIBUTE_NONE)
|
const char *id;
|
||||||
|
|
||||||
|
id = gtk_combo_box_get_active_id (GTK_COMBO_BOX (editor->source_attr));
|
||||||
|
if (strcmp (id, "none") == 0)
|
||||||
{
|
{
|
||||||
gtk_drop_down_set_selected (GTK_DROP_DOWN (editor->source), GTK_INVALID_LIST_POSITION);
|
gtk_combo_box_set_active (GTK_COMBO_BOX (editor->source), -1);
|
||||||
gtk_editable_set_text (GTK_EDITABLE (editor->multiplier), "");
|
gtk_editable_set_text (GTK_EDITABLE (editor->multiplier), "");
|
||||||
gtk_widget_set_sensitive (editor->source, FALSE);
|
gtk_widget_set_sensitive (editor->source, FALSE);
|
||||||
gtk_widget_set_sensitive (editor->multiplier, FALSE);
|
gtk_widget_set_sensitive (editor->multiplier, FALSE);
|
||||||
@@ -449,7 +409,7 @@ update_preview (ConstraintEditor *editor)
|
|||||||
GString *str;
|
GString *str;
|
||||||
const char *name;
|
const char *name;
|
||||||
const char *attr;
|
const char *attr;
|
||||||
const char *relation;
|
char *relation;
|
||||||
const char *multiplier;
|
const char *multiplier;
|
||||||
const char *constant;
|
const char *constant;
|
||||||
double c, m;
|
double c, m;
|
||||||
@@ -459,22 +419,23 @@ update_preview (ConstraintEditor *editor)
|
|||||||
|
|
||||||
str = g_string_new ("");
|
str = g_string_new ("");
|
||||||
|
|
||||||
name = gtk_string_object_get_string (GTK_STRING_OBJECT (gtk_drop_down_get_selected_item (GTK_DROP_DOWN (editor->target))));
|
name = gtk_combo_box_get_active_id (GTK_COMBO_BOX (editor->target));
|
||||||
attr = get_attr_nick (get_attr (gtk_drop_down_get_selected ((GTK_DROP_DOWN (editor->target_attr)))));
|
attr = gtk_combo_box_get_active_id (GTK_COMBO_BOX (editor->target_attr));
|
||||||
relation = get_relation_nick (get_relation (gtk_drop_down_get_selected (GTK_DROP_DOWN (editor->relation))));
|
relation = gtk_combo_box_text_get_active_text (GTK_COMBO_BOX_TEXT (editor->relation));
|
||||||
|
|
||||||
if (name == NULL)
|
if (name == NULL)
|
||||||
name = "[ ]";
|
name = "[ ]";
|
||||||
|
|
||||||
g_string_append_printf (str, "%s.%s %s ", name, attr, relation);
|
g_string_append_printf (str, "%s.%s %s ", name, attr, relation);
|
||||||
|
g_free (relation);
|
||||||
|
|
||||||
constant = gtk_editable_get_text (GTK_EDITABLE (editor->constant));
|
constant = gtk_editable_get_text (GTK_EDITABLE (editor->constant));
|
||||||
c = g_ascii_strtod (constant, NULL);
|
c = g_ascii_strtod (constant, NULL);
|
||||||
|
|
||||||
attr = get_attr_nick (get_attr (gtk_drop_down_get_selected (GTK_DROP_DOWN (editor->source_attr))));
|
attr = gtk_combo_box_get_active_id (GTK_COMBO_BOX (editor->source_attr));
|
||||||
if (strcmp (attr, "none") != 0)
|
if (strcmp (attr, "none") != 0)
|
||||||
{
|
{
|
||||||
name = gtk_string_object_get_string (GTK_STRING_OBJECT (gtk_drop_down_get_selected_item (GTK_DROP_DOWN (editor->source))));
|
name = gtk_combo_box_get_active_id (GTK_COMBO_BOX (editor->source));
|
||||||
multiplier = gtk_editable_get_text (GTK_EDITABLE (editor->multiplier));
|
multiplier = gtk_editable_get_text (GTK_EDITABLE (editor->multiplier));
|
||||||
m = g_ascii_strtod (multiplier, NULL);
|
m = g_ascii_strtod (multiplier, NULL);
|
||||||
|
|
||||||
@@ -502,18 +463,12 @@ update_preview (ConstraintEditor *editor)
|
|||||||
static void
|
static void
|
||||||
update_button (ConstraintEditor *editor)
|
update_button (ConstraintEditor *editor)
|
||||||
{
|
{
|
||||||
gpointer obj;
|
const char *target = gtk_combo_box_get_active_id (GTK_COMBO_BOX (editor->target));
|
||||||
const char *target;
|
const char *source = gtk_combo_box_get_active_id (GTK_COMBO_BOX (editor->source));
|
||||||
const char *source;
|
const char *source_attr = gtk_combo_box_get_active_id (GTK_COMBO_BOX (editor->source_attr));
|
||||||
GtkConstraintAttribute source_attr = get_attr (gtk_drop_down_get_selected (GTK_DROP_DOWN (editor->source_attr)));
|
|
||||||
|
|
||||||
obj = gtk_drop_down_get_selected_item (GTK_DROP_DOWN (editor->target));
|
if (target &&
|
||||||
target = obj ? gtk_string_object_get_string (GTK_STRING_OBJECT (obj)) : NULL;
|
(source || (source_attr && get_target_attr (source_attr) == GTK_CONSTRAINT_ATTRIBUTE_NONE)))
|
||||||
|
|
||||||
obj = gtk_drop_down_get_selected_item (GTK_DROP_DOWN (editor->source));
|
|
||||||
source = obj ? gtk_string_object_get_string (GTK_STRING_OBJECT (obj)) : NULL;
|
|
||||||
|
|
||||||
if (target && (source || (source_attr == GTK_CONSTRAINT_ATTRIBUTE_NONE)))
|
|
||||||
gtk_widget_set_sensitive (editor->button, TRUE);
|
gtk_widget_set_sensitive (editor->button, TRUE);
|
||||||
else
|
else
|
||||||
gtk_widget_set_sensitive (editor->button, FALSE);
|
gtk_widget_set_sensitive (editor->button, FALSE);
|
||||||
@@ -531,7 +486,12 @@ constraint_editor_constructed (GObject *object)
|
|||||||
ConstraintEditor *editor = CONSTRAINT_EDITOR (object);
|
ConstraintEditor *editor = CONSTRAINT_EDITOR (object);
|
||||||
|
|
||||||
constraint_target_combo (editor->model, editor->target, FALSE);
|
constraint_target_combo (editor->model, editor->target, FALSE);
|
||||||
|
constraint_attribute_combo (editor->target_attr, FALSE);
|
||||||
|
constraint_relation_combo (editor->relation);
|
||||||
constraint_target_combo (editor->model, editor->source, TRUE);
|
constraint_target_combo (editor->model, editor->source, TRUE);
|
||||||
|
constraint_attribute_combo (editor->source_attr, TRUE);
|
||||||
|
|
||||||
|
constraint_strength_combo (editor->strength);
|
||||||
|
|
||||||
if (editor->constraint)
|
if (editor->constraint)
|
||||||
{
|
{
|
||||||
@@ -539,24 +499,30 @@ constraint_editor_constructed (GObject *object)
|
|||||||
GtkConstraintAttribute attr;
|
GtkConstraintAttribute attr;
|
||||||
GtkConstraintRelation relation;
|
GtkConstraintRelation relation;
|
||||||
GtkConstraintStrength strength;
|
GtkConstraintStrength strength;
|
||||||
|
const char *nick;
|
||||||
char *val;
|
char *val;
|
||||||
double multiplier;
|
double multiplier;
|
||||||
double constant;
|
double constant;
|
||||||
|
|
||||||
target = gtk_constraint_get_target (editor->constraint);
|
target = gtk_constraint_get_target (editor->constraint);
|
||||||
select_target (GTK_DROP_DOWN (editor->target), get_target_name (target));
|
nick = get_target_name (target);
|
||||||
|
gtk_combo_box_set_active_id (GTK_COMBO_BOX (editor->target), nick);
|
||||||
|
|
||||||
attr = gtk_constraint_get_target_attribute (editor->constraint);
|
attr = gtk_constraint_get_target_attribute (editor->constraint);
|
||||||
gtk_drop_down_set_selected (GTK_DROP_DOWN (editor->target_attr), get_attr_id (attr));
|
nick = get_attr_nick (attr);
|
||||||
|
gtk_combo_box_set_active_id (GTK_COMBO_BOX (editor->target_attr), nick);
|
||||||
|
|
||||||
target = gtk_constraint_get_source (editor->constraint);
|
target = gtk_constraint_get_source (editor->constraint);
|
||||||
select_target (GTK_DROP_DOWN (editor->source), get_target_name (target));
|
nick = get_target_name (target);
|
||||||
|
gtk_combo_box_set_active_id (GTK_COMBO_BOX (editor->source), nick);
|
||||||
|
|
||||||
attr = gtk_constraint_get_source_attribute (editor->constraint);
|
attr = gtk_constraint_get_source_attribute (editor->constraint);
|
||||||
gtk_drop_down_set_selected (GTK_DROP_DOWN (editor->source_attr), get_attr_id (attr));
|
nick = get_attr_nick (attr);
|
||||||
|
gtk_combo_box_set_active_id (GTK_COMBO_BOX (editor->source_attr), nick);
|
||||||
|
|
||||||
relation = gtk_constraint_get_relation (editor->constraint);
|
relation = gtk_constraint_get_relation (editor->constraint);
|
||||||
gtk_drop_down_set_selected (GTK_DROP_DOWN (editor->relation), get_relation_id (relation));
|
nick = get_relation_nick (relation);
|
||||||
|
gtk_combo_box_set_active_id (GTK_COMBO_BOX (editor->relation), nick);
|
||||||
|
|
||||||
multiplier = gtk_constraint_get_multiplier (editor->constraint);
|
multiplier = gtk_constraint_get_multiplier (editor->constraint);
|
||||||
val = g_strdup_printf ("%g", multiplier);
|
val = g_strdup_printf ("%g", multiplier);
|
||||||
@@ -569,16 +535,17 @@ constraint_editor_constructed (GObject *object)
|
|||||||
g_free (val);
|
g_free (val);
|
||||||
|
|
||||||
strength = gtk_constraint_get_strength (editor->constraint);
|
strength = gtk_constraint_get_strength (editor->constraint);
|
||||||
gtk_drop_down_set_selected (GTK_DROP_DOWN (editor->strength), get_strength_id (strength));
|
nick = get_strength_nick (strength);
|
||||||
|
gtk_combo_box_set_active_id (GTK_COMBO_BOX (editor->strength), nick);
|
||||||
|
|
||||||
gtk_button_set_label (GTK_BUTTON (editor->button), "Apply");
|
gtk_button_set_label (GTK_BUTTON (editor->button), "Apply");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
gtk_drop_down_set_selected (GTK_DROP_DOWN (editor->target_attr), get_attr_id (GTK_CONSTRAINT_ATTRIBUTE_LEFT));
|
gtk_combo_box_set_active_id (GTK_COMBO_BOX (editor->target_attr), "left");
|
||||||
gtk_drop_down_set_selected (GTK_DROP_DOWN (editor->source_attr), get_attr_id (GTK_CONSTRAINT_ATTRIBUTE_LEFT));
|
gtk_combo_box_set_active_id (GTK_COMBO_BOX (editor->source_attr), "left");
|
||||||
gtk_drop_down_set_selected (GTK_DROP_DOWN (editor->relation), get_relation_id (GTK_CONSTRAINT_RELATION_EQ));
|
gtk_combo_box_set_active_id (GTK_COMBO_BOX (editor->relation), "eq");
|
||||||
gtk_drop_down_set_selected (GTK_DROP_DOWN (editor->strength), get_strength_id (GTK_CONSTRAINT_STRENGTH_REQUIRED));
|
gtk_combo_box_set_active_id (GTK_COMBO_BOX (editor->strength), "required");
|
||||||
|
|
||||||
gtk_editable_set_text (GTK_EDITABLE (editor->multiplier), "1.0");
|
gtk_editable_set_text (GTK_EDITABLE (editor->multiplier), "1.0");
|
||||||
gtk_editable_set_text (GTK_EDITABLE (editor->constant), "0.0");
|
gtk_editable_set_text (GTK_EDITABLE (editor->constant), "0.0");
|
||||||
|
@@ -1,21 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<interface>
|
<interface>
|
||||||
<object class="GtkStringList" id="targets">
|
|
||||||
<items>
|
|
||||||
<item>None</item>
|
|
||||||
<item>Left</item>
|
|
||||||
<item>Right</item>
|
|
||||||
<item>Top</item>
|
|
||||||
<item>Bottom</item>
|
|
||||||
<item>Start</item>
|
|
||||||
<item>End</item>
|
|
||||||
<item>Width</item>
|
|
||||||
<item>Height</item>
|
|
||||||
<item>Center X</item>
|
|
||||||
<item>Center Y</item>
|
|
||||||
<item>Baseline</item>
|
|
||||||
</items>
|
|
||||||
</object>
|
|
||||||
<template class="ConstraintEditor" parent="GtkWidget">
|
<template class="ConstraintEditor" parent="GtkWidget">
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkGrid" id="grid">
|
<object class="GtkGrid" id="grid">
|
||||||
@@ -35,9 +19,9 @@
|
|||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkDropDown" id="target">
|
<object class="GtkComboBoxText" id="target">
|
||||||
<signal name="notify::selected" handler="update_preview" swapped="yes"/>
|
<signal name="changed" handler="update_preview" swapped="yes"/>
|
||||||
<signal name="notify::selected" handler="update_button" swapped="yes"/>
|
<signal name="changed" handler="update_button" swapped="yes"/>
|
||||||
<layout>
|
<layout>
|
||||||
<property name="column">1</property>
|
<property name="column">1</property>
|
||||||
<property name="row">1</property>
|
<property name="row">1</property>
|
||||||
@@ -45,9 +29,8 @@
|
|||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkDropDown" id="target_attr">
|
<object class="GtkComboBoxText" id="target_attr">
|
||||||
<property name="model">targets</property>
|
<signal name="changed" handler="update_preview" swapped="yes"/>
|
||||||
<signal name="notify::selected" handler="update_preview" swapped="yes"/>
|
|
||||||
<layout>
|
<layout>
|
||||||
<property name="column">2</property>
|
<property name="column">2</property>
|
||||||
<property name="row">1</property>
|
<property name="row">1</property>
|
||||||
@@ -64,17 +47,8 @@
|
|||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkDropDown" id="relation">
|
<object class="GtkComboBoxText" id="relation">
|
||||||
<signal name="notify::selected" handler="update_preview" swapped="yes"/>
|
<signal name="changed" handler="update_preview" swapped="yes"/>
|
||||||
<property name="model">
|
|
||||||
<object class="GtkStringList">
|
|
||||||
<items>
|
|
||||||
<item>≤</item>
|
|
||||||
<item>=</item>
|
|
||||||
<item>≥</item>
|
|
||||||
</items>
|
|
||||||
</object>
|
|
||||||
</property>
|
|
||||||
<layout>
|
<layout>
|
||||||
<property name="column">1</property>
|
<property name="column">1</property>
|
||||||
<property name="row">2</property>
|
<property name="row">2</property>
|
||||||
@@ -91,9 +65,9 @@
|
|||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkDropDown" id="source">
|
<object class="GtkComboBoxText" id="source">
|
||||||
<signal name="notify::selected" handler="update_preview" swapped="yes"/>
|
<signal name="changed" handler="update_preview" swapped="yes"/>
|
||||||
<signal name="notify::selected" handler="update_button" swapped="yes"/>
|
<signal name="changed" handler="update_button" swapped="yes"/>
|
||||||
<layout>
|
<layout>
|
||||||
<property name="column">1</property>
|
<property name="column">1</property>
|
||||||
<property name="row">3</property>
|
<property name="row">3</property>
|
||||||
@@ -101,11 +75,10 @@
|
|||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkDropDown" id="source_attr">
|
<object class="GtkComboBoxText" id="source_attr">
|
||||||
<property name="model">targets</property>
|
<signal name="changed" handler="update_preview" swapped="yes"/>
|
||||||
<signal name="notify::selected" handler="update_preview" swapped="yes"/>
|
<signal name="changed" handler="source_attr_changed" swapped="yes"/>
|
||||||
<signal name="notify::selected" handler="source_attr_changed" swapped="yes"/>
|
<signal name="changed" handler="update_button" swapped="yes"/>
|
||||||
<signal name="notify::selected" handler="update_button" swapped="yes"/>
|
|
||||||
<layout>
|
<layout>
|
||||||
<property name="column">2</property>
|
<property name="column">2</property>
|
||||||
<property name="row">3</property>
|
<property name="row">3</property>
|
||||||
@@ -158,17 +131,7 @@
|
|||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkDropDown" id="strength">
|
<object class="GtkComboBoxText" id="strength">
|
||||||
<property name="model">
|
|
||||||
<object class="GtkStringList">
|
|
||||||
<items>
|
|
||||||
<item>Weak</item>
|
|
||||||
<item>Medium</item>
|
|
||||||
<item>Strong</item>
|
|
||||||
<item>Required</item>
|
|
||||||
</items>
|
|
||||||
</object>
|
|
||||||
</property>
|
|
||||||
<layout>
|
<layout>
|
||||||
<property name="column">1</property>
|
<property name="column">1</property>
|
||||||
<property name="row">6</property>
|
<property name="row">6</property>
|
||||||
|
@@ -21,6 +21,8 @@
|
|||||||
|
|
||||||
#include "guide-editor.h"
|
#include "guide-editor.h"
|
||||||
|
|
||||||
|
G_GNUC_BEGIN_IGNORE_DEPRECATIONS
|
||||||
|
|
||||||
struct _GuideEditor
|
struct _GuideEditor
|
||||||
{
|
{
|
||||||
GtkWidget parent_instance;
|
GtkWidget parent_instance;
|
||||||
@@ -57,30 +59,25 @@ static guint signals[LAST_SIGNAL];
|
|||||||
|
|
||||||
G_DEFINE_TYPE(GuideEditor, guide_editor, GTK_TYPE_WIDGET);
|
G_DEFINE_TYPE(GuideEditor, guide_editor, GTK_TYPE_WIDGET);
|
||||||
|
|
||||||
static GtkConstraintStrength
|
static void
|
||||||
get_strength (unsigned int id)
|
guide_strength_combo (GtkWidget *combo)
|
||||||
{
|
{
|
||||||
switch (id)
|
gtk_combo_box_text_append (GTK_COMBO_BOX_TEXT (combo), "weak", "Weak");
|
||||||
{
|
gtk_combo_box_text_append (GTK_COMBO_BOX_TEXT (combo), "medium", "Medium");
|
||||||
case 0: return GTK_CONSTRAINT_STRENGTH_WEAK;
|
gtk_combo_box_text_append (GTK_COMBO_BOX_TEXT (combo), "strong", "Strong");
|
||||||
case 1: return GTK_CONSTRAINT_STRENGTH_MEDIUM;
|
gtk_combo_box_text_append (GTK_COMBO_BOX_TEXT (combo), "required", "Required");
|
||||||
case 2: return GTK_CONSTRAINT_STRENGTH_STRONG;
|
|
||||||
case 3: return GTK_CONSTRAINT_STRENGTH_REQUIRED;
|
|
||||||
default: g_assert_not_reached ();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static unsigned int
|
static GtkConstraintStrength
|
||||||
get_strength_id (GtkConstraintStrength strength)
|
get_strength (const char *id)
|
||||||
{
|
{
|
||||||
switch (strength)
|
GtkConstraintStrength strength;
|
||||||
{
|
GEnumClass *class = g_type_class_ref (GTK_TYPE_CONSTRAINT_STRENGTH);
|
||||||
case GTK_CONSTRAINT_STRENGTH_WEAK: return 0;
|
GEnumValue *value = g_enum_get_value_by_nick (class, id);
|
||||||
case GTK_CONSTRAINT_STRENGTH_MEDIUM: return 1;
|
strength = value->value;
|
||||||
case GTK_CONSTRAINT_STRENGTH_STRONG: return 2;
|
g_type_class_unref (class);
|
||||||
case GTK_CONSTRAINT_STRENGTH_REQUIRED: return 3;
|
|
||||||
default: g_assert_not_reached ();
|
return strength;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static const char *
|
static const char *
|
||||||
@@ -121,11 +118,11 @@ static void
|
|||||||
create_guide (GtkButton *button,
|
create_guide (GtkButton *button,
|
||||||
GuideEditor *editor)
|
GuideEditor *editor)
|
||||||
{
|
{
|
||||||
|
const char *id;
|
||||||
int strength;
|
int strength;
|
||||||
const char *name;
|
const char *name;
|
||||||
int w, h;
|
int w, h;
|
||||||
GtkConstraintGuide *guide;
|
GtkConstraintGuide *guide;
|
||||||
unsigned int id;
|
|
||||||
|
|
||||||
if (editor->guide)
|
if (editor->guide)
|
||||||
guide = g_object_ref (editor->guide);
|
guide = g_object_ref (editor->guide);
|
||||||
@@ -147,7 +144,7 @@ create_guide (GtkButton *button,
|
|||||||
h = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (editor->max_height));
|
h = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (editor->max_height));
|
||||||
gtk_constraint_guide_set_max_size (guide, w, h);
|
gtk_constraint_guide_set_max_size (guide, w, h);
|
||||||
|
|
||||||
id = gtk_drop_down_get_selected (GTK_DROP_DOWN (editor->strength));
|
id = gtk_combo_box_get_active_id (GTK_COMBO_BOX (editor->strength));
|
||||||
strength = get_strength (id);
|
strength = get_strength (id);
|
||||||
gtk_constraint_guide_set_strength (guide, strength);
|
gtk_constraint_guide_set_strength (guide, strength);
|
||||||
|
|
||||||
@@ -194,9 +191,14 @@ guide_editor_constructed (GObject *object)
|
|||||||
{
|
{
|
||||||
GuideEditor *editor = GUIDE_EDITOR (object);
|
GuideEditor *editor = GUIDE_EDITOR (object);
|
||||||
|
|
||||||
|
guide_strength_combo (editor->strength);
|
||||||
|
|
||||||
g_signal_connect (editor->min_width, "input", G_CALLBACK (min_input), NULL);
|
g_signal_connect (editor->min_width, "input", G_CALLBACK (min_input), NULL);
|
||||||
|
|
||||||
g_signal_connect (editor->min_height, "input", G_CALLBACK (min_input), NULL);
|
g_signal_connect (editor->min_height, "input", G_CALLBACK (min_input), NULL);
|
||||||
|
|
||||||
g_signal_connect (editor->max_width, "input", G_CALLBACK (max_input), NULL);
|
g_signal_connect (editor->max_width, "input", G_CALLBACK (max_input), NULL);
|
||||||
|
|
||||||
g_signal_connect (editor->max_height, "input", G_CALLBACK (max_input), NULL);
|
g_signal_connect (editor->max_height, "input", G_CALLBACK (max_input), NULL);
|
||||||
|
|
||||||
if (editor->guide)
|
if (editor->guide)
|
||||||
@@ -222,7 +224,8 @@ guide_editor_constructed (GObject *object)
|
|||||||
gtk_spin_button_set_value (GTK_SPIN_BUTTON (editor->max_height), h);
|
gtk_spin_button_set_value (GTK_SPIN_BUTTON (editor->max_height), h);
|
||||||
|
|
||||||
strength = gtk_constraint_guide_get_strength (editor->guide);
|
strength = gtk_constraint_guide_get_strength (editor->guide);
|
||||||
gtk_drop_down_set_selected (GTK_DROP_DOWN (editor->strength), get_strength_id (strength));
|
nick = get_strength_nick (strength);
|
||||||
|
gtk_combo_box_set_active_id (GTK_COMBO_BOX (editor->strength), nick);
|
||||||
|
|
||||||
gtk_button_set_label (GTK_BUTTON (editor->button), "Apply");
|
gtk_button_set_label (GTK_BUTTON (editor->button), "Apply");
|
||||||
}
|
}
|
||||||
@@ -242,7 +245,7 @@ guide_editor_constructed (GObject *object)
|
|||||||
gtk_spin_button_set_value (GTK_SPIN_BUTTON (editor->max_width), G_MAXINT);
|
gtk_spin_button_set_value (GTK_SPIN_BUTTON (editor->max_width), G_MAXINT);
|
||||||
gtk_spin_button_set_value (GTK_SPIN_BUTTON (editor->max_height), G_MAXINT);
|
gtk_spin_button_set_value (GTK_SPIN_BUTTON (editor->max_height), G_MAXINT);
|
||||||
|
|
||||||
gtk_drop_down_set_selected (GTK_DROP_DOWN (editor->strength), get_strength_id (GTK_CONSTRAINT_STRENGTH_MEDIUM));
|
gtk_combo_box_set_active_id (GTK_COMBO_BOX (editor->strength), "medium");
|
||||||
|
|
||||||
gtk_button_set_label (GTK_BUTTON (editor->button), "Create");
|
gtk_button_set_label (GTK_BUTTON (editor->button), "Create");
|
||||||
}
|
}
|
||||||
|
@@ -167,17 +167,7 @@
|
|||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkDropDown" id="strength">
|
<object class="GtkComboBoxText" id="strength">
|
||||||
<property name="model">
|
|
||||||
<object class="GtkStringList">
|
|
||||||
<items>
|
|
||||||
<item>Weak</item>
|
|
||||||
<item>Medium</item>
|
|
||||||
<item>Strong</item>
|
|
||||||
<item>Required</item>
|
|
||||||
</items>
|
|
||||||
</object>
|
|
||||||
</property>
|
|
||||||
<layout>
|
<layout>
|
||||||
<property name="column">1</property>
|
<property name="column">1</property>
|
||||||
<property name="row">4</property>
|
<property name="row">4</property>
|
||||||
|
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 1.7 KiB |
@@ -2,6 +2,8 @@
|
|||||||
|
|
||||||
#include <gtk/gtk.h>
|
#include <gtk/gtk.h>
|
||||||
|
|
||||||
|
G_GNUC_BEGIN_IGNORE_DEPRECATIONS
|
||||||
|
|
||||||
typedef GtkApplication DemoApplication;
|
typedef GtkApplication DemoApplication;
|
||||||
typedef GtkApplicationClass DemoApplicationClass;
|
typedef GtkApplicationClass DemoApplicationClass;
|
||||||
|
|
||||||
@@ -35,7 +37,7 @@ show_action_dialog (GSimpleAction *action)
|
|||||||
{
|
{
|
||||||
GtkAlertDialog *dialog;
|
GtkAlertDialog *dialog;
|
||||||
|
|
||||||
dialog = gtk_alert_dialog_new ("You activated action: \"%s\"",
|
dialog = gtk_alert_dialog_new ("You activated action: \"%s\n",
|
||||||
g_action_get_name (G_ACTION (action)));
|
g_action_get_name (G_ACTION (action)));
|
||||||
gtk_alert_dialog_show (dialog, NULL);
|
gtk_alert_dialog_show (dialog, NULL);
|
||||||
g_object_unref (dialog);
|
g_object_unref (dialog);
|
||||||
@@ -214,41 +216,6 @@ activate_quit (GSimpleAction *action,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
delete_messages (gpointer data)
|
|
||||||
{
|
|
||||||
g_list_free_full ((GList *)data, g_free);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
pop_message (GtkWidget *status)
|
|
||||||
{
|
|
||||||
GList *messages = (GList *) g_object_steal_data (G_OBJECT (status), "messages");
|
|
||||||
|
|
||||||
if (messages)
|
|
||||||
{
|
|
||||||
char *message = messages->data;
|
|
||||||
messages = g_list_remove (messages, message);
|
|
||||||
|
|
||||||
g_object_set_data_full (G_OBJECT (status), "messages",
|
|
||||||
messages, delete_messages);
|
|
||||||
|
|
||||||
gtk_label_set_label (GTK_LABEL (status), message);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
push_message (GtkWidget *status,
|
|
||||||
const char *message)
|
|
||||||
{
|
|
||||||
GList *messages = (GList *) g_object_steal_data (G_OBJECT (status), "messages");
|
|
||||||
|
|
||||||
gtk_label_set_label (GTK_LABEL (status), message);
|
|
||||||
messages = g_list_prepend (messages, g_strdup (message));
|
|
||||||
g_object_set_data_full (G_OBJECT (status), "messages",
|
|
||||||
messages, delete_messages);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
update_statusbar (GtkTextBuffer *buffer,
|
update_statusbar (GtkTextBuffer *buffer,
|
||||||
DemoApplicationWindow *window)
|
DemoApplicationWindow *window)
|
||||||
@@ -259,7 +226,7 @@ update_statusbar (GtkTextBuffer *buffer,
|
|||||||
GtkTextIter iter;
|
GtkTextIter iter;
|
||||||
|
|
||||||
/* clear any previous message, underflow is allowed */
|
/* clear any previous message, underflow is allowed */
|
||||||
pop_message (window->status);
|
gtk_statusbar_pop (GTK_STATUSBAR (window->status), 0);
|
||||||
|
|
||||||
count = gtk_text_buffer_get_char_count (buffer);
|
count = gtk_text_buffer_get_char_count (buffer);
|
||||||
|
|
||||||
@@ -273,7 +240,7 @@ update_statusbar (GtkTextBuffer *buffer,
|
|||||||
msg = g_strdup_printf ("Cursor at row %d column %d - %d chars in document",
|
msg = g_strdup_printf ("Cursor at row %d column %d - %d chars in document",
|
||||||
row, col, count);
|
row, col, count);
|
||||||
|
|
||||||
push_message (window->status, msg);
|
gtk_statusbar_push (GTK_STATUSBAR (window->status), 0, msg);
|
||||||
|
|
||||||
g_free (msg);
|
g_free (msg);
|
||||||
}
|
}
|
||||||
|
@@ -76,13 +76,8 @@
|
|||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkLabel" id="status">
|
<object class="GtkStatusbar" id="status">
|
||||||
<property name="hexpand">1</property>
|
<property name="hexpand">1</property>
|
||||||
<property name="xalign">0</property>
|
|
||||||
<property name="margin-start">2</property>
|
|
||||||
<property name="margin-end">2</property>
|
|
||||||
<property name="margin-top">2</property>
|
|
||||||
<property name="margin-bottom">2</property>
|
|
||||||
<layout>
|
<layout>
|
||||||
<property name="column">0</property>
|
<property name="column">0</property>
|
||||||
<property name="row">3</property>
|
<property name="row">3</property>
|
||||||
|
@@ -162,10 +162,6 @@ create_page4 (GtkWidget *assistant)
|
|||||||
gtk_assistant_set_page_type (GTK_ASSISTANT (assistant), progress_bar, GTK_ASSISTANT_PAGE_PROGRESS);
|
gtk_assistant_set_page_type (GTK_ASSISTANT (assistant), progress_bar, GTK_ASSISTANT_PAGE_PROGRESS);
|
||||||
gtk_assistant_set_page_title (GTK_ASSISTANT (assistant), progress_bar, "Applying changes");
|
gtk_assistant_set_page_title (GTK_ASSISTANT (assistant), progress_bar, "Applying changes");
|
||||||
|
|
||||||
gtk_accessible_update_property (GTK_ACCESSIBLE (progress_bar),
|
|
||||||
GTK_ACCESSIBLE_PROPERTY_LABEL, "Applying changes",
|
|
||||||
-1);
|
|
||||||
|
|
||||||
/* This prevents the assistant window from being
|
/* This prevents the assistant window from being
|
||||||
* closed while we're "busy" applying changes.
|
* closed while we're "busy" applying changes.
|
||||||
*/
|
*/
|
||||||
|
@@ -116,8 +116,7 @@ effective_align (GtkAlign align,
|
|||||||
return direction == GTK_TEXT_DIR_RTL ? GTK_ALIGN_START : GTK_ALIGN_END;
|
return direction == GTK_TEXT_DIR_RTL ? GTK_ALIGN_START : GTK_ALIGN_END;
|
||||||
case GTK_ALIGN_FILL:
|
case GTK_ALIGN_FILL:
|
||||||
case GTK_ALIGN_CENTER:
|
case GTK_ALIGN_CENTER:
|
||||||
case GTK_ALIGN_BASELINE_FILL:
|
case GTK_ALIGN_BASELINE:
|
||||||
case GTK_ALIGN_BASELINE_CENTER:
|
|
||||||
default:
|
default:
|
||||||
return align;
|
return align;
|
||||||
}
|
}
|
||||||
@@ -259,8 +258,7 @@ blur_overlay_get_child_position (BlurOverlay *overlay,
|
|||||||
case GTK_ALIGN_END:
|
case GTK_ALIGN_END:
|
||||||
alloc->x += width - alloc->width;
|
alloc->x += width - alloc->width;
|
||||||
break;
|
break;
|
||||||
case GTK_ALIGN_BASELINE_FILL:
|
case GTK_ALIGN_BASELINE:
|
||||||
case GTK_ALIGN_BASELINE_CENTER:
|
|
||||||
default:
|
default:
|
||||||
g_assert_not_reached ();
|
g_assert_not_reached ();
|
||||||
break;
|
break;
|
||||||
@@ -283,8 +281,7 @@ blur_overlay_get_child_position (BlurOverlay *overlay,
|
|||||||
case GTK_ALIGN_END:
|
case GTK_ALIGN_END:
|
||||||
alloc->y += height - alloc->height;
|
alloc->y += height - alloc->height;
|
||||||
break;
|
break;
|
||||||
case GTK_ALIGN_BASELINE_FILL:
|
case GTK_ALIGN_BASELINE:
|
||||||
case GTK_ALIGN_BASELINE_CENTER:
|
|
||||||
default:
|
default:
|
||||||
g_assert_not_reached ();
|
g_assert_not_reached ();
|
||||||
break;
|
break;
|
||||||
|
@@ -18,7 +18,8 @@
|
|||||||
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#pragma once
|
#ifndef __BLUR_OVERLAY_H__
|
||||||
|
#define __BLUR_OVERLAY_H__
|
||||||
|
|
||||||
#include <gtk/gtk.h>
|
#include <gtk/gtk.h>
|
||||||
|
|
||||||
@@ -50,12 +51,18 @@ struct _BlurOverlayClass
|
|||||||
GtkAllocation *allocation);
|
GtkAllocation *allocation);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
GDK_AVAILABLE_IN_ALL
|
||||||
GType blur_overlay_get_type (void) G_GNUC_CONST;
|
GType blur_overlay_get_type (void) G_GNUC_CONST;
|
||||||
|
GDK_AVAILABLE_IN_ALL
|
||||||
GtkWidget *blur_overlay_new (void);
|
GtkWidget *blur_overlay_new (void);
|
||||||
|
GDK_AVAILABLE_IN_ALL
|
||||||
void blur_overlay_add_overlay (BlurOverlay *overlay,
|
void blur_overlay_add_overlay (BlurOverlay *overlay,
|
||||||
GtkWidget *widget,
|
GtkWidget *widget,
|
||||||
double blur);
|
double blur);
|
||||||
|
GDK_AVAILABLE_IN_ALL
|
||||||
void blur_overlay_set_child (BlurOverlay *overlay,
|
void blur_overlay_set_child (BlurOverlay *overlay,
|
||||||
GtkWidget *widget);
|
GtkWidget *widget);
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
|
#endif /* __BLUR_OVERLAY_H__ */
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
/* Builder
|
/* Builder
|
||||||
* #Keywords: GMenu, GtkPopoverMenuBar, GtkBuilder, GtkShortcutController, toolbar
|
* #Keywords: GMenu, GtkPopoverMenuBar, GtkBuilder, GtkStatusBar, GtkShortcutController, toolbar
|
||||||
*
|
*
|
||||||
* Demonstrates a traditional interface, loaded from a XML description,
|
* Demonstrates a traditional interface, loaded from a XML description,
|
||||||
* and shows how to connect actions to the menu items and toolbar buttons.
|
* and shows how to connect actions to the menu items and toolbar buttons.
|
||||||
@@ -37,34 +37,30 @@ remove_timeout (gpointer data)
|
|||||||
g_source_remove (id);
|
g_source_remove (id);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
G_GNUC_BEGIN_IGNORE_DEPRECATIONS
|
||||||
pop_message (gpointer data)
|
|
||||||
|
static gboolean
|
||||||
|
pop_status (gpointer data)
|
||||||
{
|
{
|
||||||
GtkWidget *status = data;
|
gtk_statusbar_pop (GTK_STATUSBAR (data), 0);
|
||||||
|
g_object_set_data (G_OBJECT (data), "timeout", NULL);
|
||||||
gtk_label_set_label (GTK_LABEL (status), "");
|
|
||||||
g_object_set_data (G_OBJECT (status), "timeout", GUINT_TO_POINTER (0));
|
|
||||||
|
|
||||||
return G_SOURCE_REMOVE;
|
return G_SOURCE_REMOVE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
status_message (GtkWidget *status,
|
status_message (GtkStatusbar *status,
|
||||||
const char *text)
|
const char *text)
|
||||||
{
|
{
|
||||||
guint id;
|
guint id;
|
||||||
|
|
||||||
id = GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (status), "timeout"));
|
gtk_statusbar_push (GTK_STATUSBAR (status), 0, text);
|
||||||
if (id)
|
id = g_timeout_add (5000, pop_status, status);
|
||||||
g_source_remove (id);
|
|
||||||
|
|
||||||
gtk_label_set_text (GTK_LABEL (status), text);
|
|
||||||
|
|
||||||
id = g_timeout_add (5000, pop_message, status);
|
|
||||||
|
|
||||||
g_object_set_data_full (G_OBJECT (status), "timeout", GUINT_TO_POINTER (id), remove_timeout);
|
g_object_set_data_full (G_OBJECT (status), "timeout", GUINT_TO_POINTER (id), remove_timeout);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
G_GNUC_END_IGNORE_DEPRECATIONS
|
||||||
|
|
||||||
static void
|
static void
|
||||||
help_activate (GSimpleAction *action,
|
help_activate (GSimpleAction *action,
|
||||||
GVariant *parameter,
|
GVariant *parameter,
|
||||||
@@ -73,7 +69,7 @@ help_activate (GSimpleAction *action,
|
|||||||
GtkWidget *status;
|
GtkWidget *status;
|
||||||
|
|
||||||
status = GTK_WIDGET (g_object_get_data (G_OBJECT (user_data), "status"));
|
status = GTK_WIDGET (g_object_get_data (G_OBJECT (user_data), "status"));
|
||||||
status_message (status, "Help not available");
|
status_message (GTK_STATUSBAR (status), "Help not available");
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -86,7 +82,7 @@ not_implemented (GSimpleAction *action,
|
|||||||
|
|
||||||
text = g_strdup_printf ("Action “%s” not implemented", g_action_get_name (G_ACTION (action)));
|
text = g_strdup_printf ("Action “%s” not implemented", g_action_get_name (G_ACTION (action)));
|
||||||
status = GTK_WIDGET (g_object_get_data (G_OBJECT (user_data), "status"));
|
status = GTK_WIDGET (g_object_get_data (G_OBJECT (user_data), "status"));
|
||||||
status_message (status, text);
|
status_message (GTK_STATUSBAR (status), text);
|
||||||
g_free (text);
|
g_free (text);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.1 KiB |
@@ -4,9 +4,6 @@
|
|||||||
<object class="GtkWindow" id="window">
|
<object class="GtkWindow" id="window">
|
||||||
<property name="resizable">1</property>
|
<property name="resizable">1</property>
|
||||||
<property name="title">Clipboard</property>
|
<property name="title">Clipboard</property>
|
||||||
<accessibility>
|
|
||||||
<relation name="described-by">label</relation>
|
|
||||||
</accessibility>
|
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkBox">
|
<object class="GtkBox">
|
||||||
<property name="orientation">vertical</property>
|
<property name="orientation">vertical</property>
|
||||||
@@ -16,7 +13,7 @@
|
|||||||
<property name="margin-bottom">12</property>
|
<property name="margin-bottom">12</property>
|
||||||
<property name="spacing">12</property>
|
<property name="spacing">12</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkLabel" id="label">
|
<object class="GtkLabel">
|
||||||
<property name="label">“Copy” will copy the selected data the clipboard, “Paste” will show the current clipboard contents. You can also drag the data to the bottom.</property>
|
<property name="label">“Copy” will copy the selected data the clipboard, “Paste” will show the current clipboard contents. You can also drag the data to the bottom.</property>
|
||||||
<property name="wrap">1</property>
|
<property name="wrap">1</property>
|
||||||
<property name="max-width-chars">40</property>
|
<property name="max-width-chars">40</property>
|
||||||
@@ -27,9 +24,6 @@
|
|||||||
<property name="spacing">12</property>
|
<property name="spacing">12</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkDropDown" id="source_chooser">
|
<object class="GtkDropDown" id="source_chooser">
|
||||||
<accessibility>
|
|
||||||
<property name="label">Source Type</property>
|
|
||||||
</accessibility>
|
|
||||||
<property name="valign">center</property>
|
<property name="valign">center</property>
|
||||||
<property name="model">
|
<property name="model">
|
||||||
<object class="GtkStringList">
|
<object class="GtkStringList">
|
||||||
@@ -60,9 +54,6 @@
|
|||||||
<property name="name">Text</property>
|
<property name="name">Text</property>
|
||||||
<property name="child">
|
<property name="child">
|
||||||
<object class="GtkEntry" id="source_text">
|
<object class="GtkEntry" id="source_text">
|
||||||
<accessibility>
|
|
||||||
<property name="label">Text Drag Source</property>
|
|
||||||
</accessibility>
|
|
||||||
<property name="valign">center</property>
|
<property name="valign">center</property>
|
||||||
<signal name="notify::text" handler="text_changed_cb" object="copy_button"/>
|
<signal name="notify::text" handler="text_changed_cb" object="copy_button"/>
|
||||||
<property name="text">Copy this!</property>
|
<property name="text">Copy this!</property>
|
||||||
@@ -75,9 +66,6 @@
|
|||||||
<property name="name">Color</property>
|
<property name="name">Color</property>
|
||||||
<property name="child">
|
<property name="child">
|
||||||
<object class="GtkColorDialogButton" id="source_color">
|
<object class="GtkColorDialogButton" id="source_color">
|
||||||
<accessibility>
|
|
||||||
<property name="label">Color Drag Source</property>
|
|
||||||
</accessibility>
|
|
||||||
<property name="dialog">
|
<property name="dialog">
|
||||||
<object class="GtkColorDialog">
|
<object class="GtkColorDialog">
|
||||||
</object>
|
</object>
|
||||||
@@ -99,17 +87,14 @@
|
|||||||
</style>
|
</style>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkToggleButton" id="image_rose">
|
<object class="GtkToggleButton" id="image_rose">
|
||||||
<accessibility>
|
|
||||||
<property name="label">Photo Drag Source</property>
|
|
||||||
</accessibility>
|
|
||||||
<property name="active">1</property>
|
<property name="active">1</property>
|
||||||
<child>
|
<child>
|
||||||
|
<object class="GtkDragSource">
|
||||||
|
<signal name="prepare" handler="drag_prepare"/>
|
||||||
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkImage">
|
<object class="GtkImage">
|
||||||
<accessibility>
|
|
||||||
<property name="label">Portland Rose Photo</property>
|
|
||||||
</accessibility>
|
|
||||||
<style>
|
<style>
|
||||||
<class name="large-icons"/>
|
<class name="large-icons"/>
|
||||||
</style>
|
</style>
|
||||||
@@ -120,9 +105,6 @@
|
|||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkToggleButton" id="image_floppy">
|
<object class="GtkToggleButton" id="image_floppy">
|
||||||
<accessibility>
|
|
||||||
<property name="label">Icon Drag Source</property>
|
|
||||||
</accessibility>
|
|
||||||
<property name="group">image_rose</property>
|
<property name="group">image_rose</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkDragSource">
|
<object class="GtkDragSource">
|
||||||
@@ -131,9 +113,6 @@
|
|||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkImage">
|
<object class="GtkImage">
|
||||||
<accessibility>
|
|
||||||
<property name="label">Floppy Buddy Icon</property>
|
|
||||||
</accessibility>
|
|
||||||
<style>
|
<style>
|
||||||
<class name="large-icons"/>
|
<class name="large-icons"/>
|
||||||
</style>
|
</style>
|
||||||
@@ -144,9 +123,6 @@
|
|||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkToggleButton" id="image_logo">
|
<object class="GtkToggleButton" id="image_logo">
|
||||||
<accessibility>
|
|
||||||
<property name="label">SVG Drag Source</property>
|
|
||||||
</accessibility>
|
|
||||||
<property name="group">image_floppy</property>
|
<property name="group">image_floppy</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkDragSource">
|
<object class="GtkDragSource">
|
||||||
@@ -155,9 +131,6 @@
|
|||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkImage">
|
<object class="GtkImage">
|
||||||
<accessibility>
|
|
||||||
<property name="label">gtk-demo logo</property>
|
|
||||||
</accessibility>
|
|
||||||
<style>
|
<style>
|
||||||
<class name="large-icons"/>
|
<class name="large-icons"/>
|
||||||
</style>
|
</style>
|
||||||
@@ -175,9 +148,6 @@
|
|||||||
<property name="name">File</property>
|
<property name="name">File</property>
|
||||||
<property name="child">
|
<property name="child">
|
||||||
<object class="GtkButton" id="source_file">
|
<object class="GtkButton" id="source_file">
|
||||||
<accessibility>
|
|
||||||
<property name="label">File Drag Source</property>
|
|
||||||
</accessibility>
|
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkDragSource">
|
<object class="GtkDragSource">
|
||||||
<property name="propagation-phase">capture</property>
|
<property name="propagation-phase">capture</property>
|
||||||
@@ -202,9 +172,6 @@
|
|||||||
<property name="name">Folder</property>
|
<property name="name">Folder</property>
|
||||||
<property name="child">
|
<property name="child">
|
||||||
<object class="GtkButton" id="source_folder">
|
<object class="GtkButton" id="source_folder">
|
||||||
<accessibility>
|
|
||||||
<property name="label">Folder Drag Source</property>
|
|
||||||
</accessibility>
|
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkDragSource">
|
<object class="GtkDragSource">
|
||||||
<property name="propagation-phase">capture</property>
|
<property name="propagation-phase">capture</property>
|
||||||
@@ -258,7 +225,7 @@
|
|||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkLabel" id="paste_label">
|
<object class="GtkLabel">
|
||||||
<property name="xalign">0</property>
|
<property name="xalign">0</property>
|
||||||
<binding name="label">
|
<binding name="label">
|
||||||
<lookup name="visible-child-name" type="GtkStack">
|
<lookup name="visible-child-name" type="GtkStack">
|
||||||
@@ -285,9 +252,6 @@
|
|||||||
<property name="name">Text</property>
|
<property name="name">Text</property>
|
||||||
<property name="child">
|
<property name="child">
|
||||||
<object class="GtkLabel">
|
<object class="GtkLabel">
|
||||||
<accessibility>
|
|
||||||
<relation name="labelled-by">paste_label</relation>
|
|
||||||
</accessibility>
|
|
||||||
<property name="halign">end</property>
|
<property name="halign">end</property>
|
||||||
<property name="valign">center</property>
|
<property name="valign">center</property>
|
||||||
<property name="xalign">0</property>
|
<property name="xalign">0</property>
|
||||||
@@ -301,9 +265,6 @@
|
|||||||
<property name="name">Image</property>
|
<property name="name">Image</property>
|
||||||
<property name="child">
|
<property name="child">
|
||||||
<object class="GtkImage">
|
<object class="GtkImage">
|
||||||
<accessibility>
|
|
||||||
<relation name="labelled-by">paste_label</relation>
|
|
||||||
</accessibility>
|
|
||||||
<property name="halign">end</property>
|
<property name="halign">end</property>
|
||||||
<property name="valign">center</property>
|
<property name="valign">center</property>
|
||||||
<style>
|
<style>
|
||||||
@@ -322,9 +283,6 @@
|
|||||||
<property name="valign">center</property>
|
<property name="valign">center</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkColorSwatch">
|
<object class="GtkColorSwatch">
|
||||||
<accessibility>
|
|
||||||
<relation name="labelled-by">paste_label</relation>
|
|
||||||
</accessibility>
|
|
||||||
<property name="accessible-role">img</property>
|
<property name="accessible-role">img</property>
|
||||||
<property name="can-focus">0</property>
|
<property name="can-focus">0</property>
|
||||||
<property name="selectable">0</property>
|
<property name="selectable">0</property>
|
||||||
@@ -340,9 +298,6 @@
|
|||||||
<property name="name">File</property>
|
<property name="name">File</property>
|
||||||
<property name="child">
|
<property name="child">
|
||||||
<object class="GtkLabel">
|
<object class="GtkLabel">
|
||||||
<accessibility>
|
|
||||||
<relation name="labelled-by">paste_label</relation>
|
|
||||||
</accessibility>
|
|
||||||
<property name="halign">end</property>
|
<property name="halign">end</property>
|
||||||
<property name="valign">center</property>
|
<property name="valign">center</property>
|
||||||
<property name="xalign">0</property>
|
<property name="xalign">0</property>
|
||||||
|
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.5 KiB |
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.3 KiB |
Before Width: | Height: | Size: 1019 B After Width: | Height: | Size: 985 B |
@@ -6,6 +6,8 @@
|
|||||||
|
|
||||||
#include <gtk/gtk.h>
|
#include <gtk/gtk.h>
|
||||||
|
|
||||||
|
G_GNUC_BEGIN_IGNORE_DEPRECATIONS
|
||||||
|
|
||||||
static void
|
static void
|
||||||
show_parsing_error (GtkCssProvider *provider,
|
show_parsing_error (GtkCssProvider *provider,
|
||||||
GtkCssSection *section,
|
GtkCssSection *section,
|
||||||
@@ -47,23 +49,20 @@ css_text_changed (GtkTextBuffer *buffer,
|
|||||||
gtk_text_buffer_remove_all_tags (buffer, &start, &end);
|
gtk_text_buffer_remove_all_tags (buffer, &start, &end);
|
||||||
|
|
||||||
text = gtk_text_buffer_get_text (buffer, &start, &end, FALSE);
|
text = gtk_text_buffer_get_text (buffer, &start, &end, FALSE);
|
||||||
gtk_css_provider_load_from_string (provider, text);
|
gtk_css_provider_load_from_data (provider, text, -1);
|
||||||
g_free (text);
|
g_free (text);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
clear_provider (gpointer data)
|
|
||||||
{
|
|
||||||
GtkStyleProvider *provider = data;
|
|
||||||
|
|
||||||
gtk_style_context_remove_provider_for_display (gdk_display_get_default (), provider);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
apply_css (GtkWidget *widget, GtkStyleProvider *provider)
|
apply_css (GtkWidget *widget, GtkStyleProvider *provider)
|
||||||
{
|
{
|
||||||
gtk_style_context_add_provider_for_display (gdk_display_get_default (), provider, G_MAXUINT);
|
GtkWidget *child;
|
||||||
g_object_set_data_full (G_OBJECT (widget), "provider", provider, clear_provider);
|
|
||||||
|
gtk_style_context_add_provider (gtk_widget_get_style_context (widget), provider, G_MAXUINT);
|
||||||
|
for (child = gtk_widget_get_first_child (widget);
|
||||||
|
child != NULL;
|
||||||
|
child = gtk_widget_get_next_sibling (child))
|
||||||
|
apply_css (child, provider);
|
||||||
}
|
}
|
||||||
|
|
||||||
GtkWidget *
|
GtkWidget *
|
||||||
@@ -82,7 +81,6 @@ do_css_basics (GtkWidget *do_widget)
|
|||||||
gtk_window_set_title (GTK_WINDOW (window), "CSS Basics");
|
gtk_window_set_title (GTK_WINDOW (window), "CSS Basics");
|
||||||
gtk_window_set_transient_for (GTK_WINDOW (window), GTK_WINDOW (do_widget));
|
gtk_window_set_transient_for (GTK_WINDOW (window), GTK_WINDOW (do_widget));
|
||||||
gtk_window_set_default_size (GTK_WINDOW (window), 400, 300);
|
gtk_window_set_default_size (GTK_WINDOW (window), 400, 300);
|
||||||
gtk_widget_add_css_class (window, "demo");
|
|
||||||
g_object_add_weak_pointer (G_OBJECT (window), (gpointer *)&window);
|
g_object_add_weak_pointer (G_OBJECT (window), (gpointer *)&window);
|
||||||
|
|
||||||
text = gtk_text_buffer_new (NULL);
|
text = gtk_text_buffer_new (NULL);
|
||||||
|
@@ -4,24 +4,23 @@
|
|||||||
* anymore. :)
|
* anymore. :)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* This resets all properties to their defaults values
|
/* This CSS resets all properties to their defaults values
|
||||||
* and overrides all user settings and the theme in use
|
* and overrides all user settings and the theme in use */
|
||||||
*/
|
@import url("resource://css_basics/reset.css");
|
||||||
@import url("resource://css_shadows/reset.css");
|
|
||||||
|
|
||||||
/* Set a very futuristic style by default */
|
/* Set a very futuristic style by default */
|
||||||
.demo * {
|
* {
|
||||||
color: green;
|
color: green;
|
||||||
font-family: Monospace;
|
font-family: Monospace;
|
||||||
border: 1px solid;
|
border: 1px solid;
|
||||||
}
|
}
|
||||||
|
|
||||||
window.demo {
|
window {
|
||||||
background-color: white;
|
background-color: white;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Make sure selections are visible */
|
/* Make sure selections are visible */
|
||||||
.demo selection {
|
selection {
|
||||||
background-color: darkGreen;
|
background-color: darkGreen;
|
||||||
color: black;
|
color: black;
|
||||||
}
|
}
|
||||||
|
@@ -50,7 +50,7 @@ update_css_for_blend_mode (GtkCssProvider *provider,
|
|||||||
blend_mode,
|
blend_mode,
|
||||||
blend_mode);
|
blend_mode);
|
||||||
|
|
||||||
gtk_css_provider_load_from_string (provider, css);
|
gtk_css_provider_load_from_data (provider, css, -1);
|
||||||
|
|
||||||
g_bytes_unref (bytes);
|
g_bytes_unref (bytes);
|
||||||
g_free (css);
|
g_free (css);
|
||||||
|
@@ -6,6 +6,8 @@
|
|||||||
|
|
||||||
#include <gtk/gtk.h>
|
#include <gtk/gtk.h>
|
||||||
|
|
||||||
|
G_GNUC_BEGIN_IGNORE_DEPRECATIONS
|
||||||
|
|
||||||
static void
|
static void
|
||||||
show_parsing_error (GtkCssProvider *provider,
|
show_parsing_error (GtkCssProvider *provider,
|
||||||
GtkCssSection *section,
|
GtkCssSection *section,
|
||||||
@@ -48,23 +50,33 @@ css_text_changed (GtkTextBuffer *buffer,
|
|||||||
gtk_text_buffer_remove_all_tags (buffer, &start, &end);
|
gtk_text_buffer_remove_all_tags (buffer, &start, &end);
|
||||||
|
|
||||||
text = gtk_text_buffer_get_text (buffer, &start, &end, FALSE);
|
text = gtk_text_buffer_get_text (buffer, &start, &end, FALSE);
|
||||||
gtk_css_provider_load_from_string (provider, text);
|
gtk_css_provider_load_from_data (provider, text, -1);
|
||||||
g_free (text);
|
g_free (text);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
clear_provider (gpointer data)
|
drawing_area_draw (GtkDrawingArea *da,
|
||||||
|
cairo_t *cr,
|
||||||
|
int width,
|
||||||
|
int height,
|
||||||
|
gpointer data)
|
||||||
{
|
{
|
||||||
GtkStyleProvider *provider = data;
|
GtkStyleContext *context = gtk_widget_get_style_context (GTK_WIDGET (da));
|
||||||
|
|
||||||
gtk_style_context_remove_provider_for_display (gdk_display_get_default (), provider);
|
gtk_render_background (context, cr, 0, 0, width, height);
|
||||||
|
gtk_render_frame (context, cr, 0, 0, width, height);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
apply_css (GtkWidget *widget, GtkStyleProvider *provider)
|
apply_css (GtkWidget *widget, GtkStyleProvider *provider)
|
||||||
{
|
{
|
||||||
gtk_style_context_add_provider_for_display (gdk_display_get_default (), provider, G_MAXUINT);
|
GtkWidget *child;
|
||||||
g_object_set_data_full (G_OBJECT (widget), "provider", provider, clear_provider);
|
|
||||||
|
gtk_style_context_add_provider (gtk_widget_get_style_context (widget), provider, G_MAXUINT);
|
||||||
|
for (child = gtk_widget_get_first_child (widget);
|
||||||
|
child != NULL;
|
||||||
|
child = gtk_widget_get_next_sibling (child))
|
||||||
|
apply_css (child, provider);
|
||||||
}
|
}
|
||||||
|
|
||||||
GtkWidget *
|
GtkWidget *
|
||||||
@@ -83,17 +95,16 @@ do_css_multiplebgs (GtkWidget *do_widget)
|
|||||||
gtk_window_set_title (GTK_WINDOW (window), "Multiple Backgrounds");
|
gtk_window_set_title (GTK_WINDOW (window), "Multiple Backgrounds");
|
||||||
gtk_window_set_transient_for (GTK_WINDOW (window), GTK_WINDOW (do_widget));
|
gtk_window_set_transient_for (GTK_WINDOW (window), GTK_WINDOW (do_widget));
|
||||||
gtk_window_set_default_size (GTK_WINDOW (window), 400, 300);
|
gtk_window_set_default_size (GTK_WINDOW (window), 400, 300);
|
||||||
gtk_widget_add_css_class (window, "demo");
|
|
||||||
g_object_add_weak_pointer (G_OBJECT (window), (gpointer *)&window);
|
g_object_add_weak_pointer (G_OBJECT (window), (gpointer *)&window);
|
||||||
|
|
||||||
overlay = gtk_overlay_new ();
|
overlay = gtk_overlay_new ();
|
||||||
gtk_window_set_child (GTK_WINDOW (window), overlay);
|
gtk_window_set_child (GTK_WINDOW (window), overlay);
|
||||||
|
|
||||||
child = gtk_drawing_area_new ();
|
child = gtk_drawing_area_new ();
|
||||||
/* Don't set a draw_func, since we are only interested in CSS drawing,
|
|
||||||
* which happens automatically.
|
|
||||||
*/
|
|
||||||
gtk_widget_set_name (child, "canvas");
|
gtk_widget_set_name (child, "canvas");
|
||||||
|
gtk_drawing_area_set_draw_func (GTK_DRAWING_AREA (child),
|
||||||
|
drawing_area_draw,
|
||||||
|
NULL, NULL);
|
||||||
gtk_overlay_set_child (GTK_OVERLAY (overlay), child);
|
gtk_overlay_set_child (GTK_OVERLAY (overlay), child);
|
||||||
|
|
||||||
child = gtk_button_new ();
|
child = gtk_button_new ();
|
||||||
|
@@ -7,6 +7,8 @@
|
|||||||
|
|
||||||
#include <gtk/gtk.h>
|
#include <gtk/gtk.h>
|
||||||
|
|
||||||
|
G_GNUC_BEGIN_IGNORE_DEPRECATIONS
|
||||||
|
|
||||||
static void
|
static void
|
||||||
show_parsing_error (GtkCssProvider *provider,
|
show_parsing_error (GtkCssProvider *provider,
|
||||||
GtkCssSection *section,
|
GtkCssSection *section,
|
||||||
@@ -49,23 +51,20 @@ css_text_changed (GtkTextBuffer *buffer,
|
|||||||
gtk_text_buffer_remove_all_tags (buffer, &start, &end);
|
gtk_text_buffer_remove_all_tags (buffer, &start, &end);
|
||||||
|
|
||||||
text = gtk_text_buffer_get_text (buffer, &start, &end, FALSE);
|
text = gtk_text_buffer_get_text (buffer, &start, &end, FALSE);
|
||||||
gtk_css_provider_load_from_string (provider, text);
|
gtk_css_provider_load_from_data (provider, text, -1);
|
||||||
g_free (text);
|
g_free (text);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
clear_provider (gpointer data)
|
|
||||||
{
|
|
||||||
GtkStyleProvider *provider = data;
|
|
||||||
|
|
||||||
gtk_style_context_remove_provider_for_display (gdk_display_get_default (), provider);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
apply_css (GtkWidget *widget, GtkStyleProvider *provider)
|
apply_css (GtkWidget *widget, GtkStyleProvider *provider)
|
||||||
{
|
{
|
||||||
gtk_style_context_add_provider_for_display (gdk_display_get_default (), provider, G_MAXUINT);
|
GtkWidget *child;
|
||||||
g_object_set_data_full (G_OBJECT (widget), "provider", provider, clear_provider);
|
|
||||||
|
gtk_style_context_add_provider (gtk_widget_get_style_context (widget), provider, G_MAXUINT);
|
||||||
|
for (child = gtk_widget_get_first_child (widget);
|
||||||
|
child != NULL;
|
||||||
|
child = gtk_widget_get_next_sibling (child))
|
||||||
|
apply_css (child, provider);
|
||||||
}
|
}
|
||||||
|
|
||||||
GtkWidget *
|
GtkWidget *
|
||||||
@@ -84,7 +83,6 @@ do_css_pixbufs (GtkWidget *do_widget)
|
|||||||
gtk_window_set_title (GTK_WINDOW (window), "Animated Backgrounds");
|
gtk_window_set_title (GTK_WINDOW (window), "Animated Backgrounds");
|
||||||
gtk_window_set_transient_for (GTK_WINDOW (window), GTK_WINDOW (do_widget));
|
gtk_window_set_transient_for (GTK_WINDOW (window), GTK_WINDOW (do_widget));
|
||||||
gtk_window_set_default_size (GTK_WINDOW (window), 400, 300);
|
gtk_window_set_default_size (GTK_WINDOW (window), 400, 300);
|
||||||
gtk_widget_add_css_class (window, "demo");
|
|
||||||
g_object_add_weak_pointer (G_OBJECT (window), (gpointer *)&window);
|
g_object_add_weak_pointer (G_OBJECT (window), (gpointer *)&window);
|
||||||
|
|
||||||
paned = gtk_paned_new (GTK_ORIENTATION_VERTICAL);
|
paned = gtk_paned_new (GTK_ORIENTATION_VERTICAL);
|
||||||
|
@@ -50,7 +50,7 @@
|
|||||||
100% { background-size: 12px, 96px, 12px, 96px, 12px, 96px, 12px, 96px, auto; }
|
100% { background-size: 12px, 96px, 12px, 96px, 12px, 96px, 12px, 96px, auto; }
|
||||||
}
|
}
|
||||||
|
|
||||||
window.demo {
|
window {
|
||||||
background-image: url("resource://css_pixbufs/images/apple-red.png"),
|
background-image: url("resource://css_pixbufs/images/apple-red.png"),
|
||||||
url("resource://css_pixbufs/images/gnome-applets.png"),
|
url("resource://css_pixbufs/images/gnome-applets.png"),
|
||||||
url("resource://css_pixbufs/images/gnome-calendar.png"),
|
url("resource://css_pixbufs/images/gnome-calendar.png"),
|
||||||
@@ -66,11 +66,11 @@ window.demo {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Make the text editor has a nice style */
|
/* Make the text editor has a nice style */
|
||||||
window.demo .view, scrollbar, separator {
|
.view, scrollbar, separator {
|
||||||
color: black;
|
color: black;
|
||||||
background-color: rgba(255,255,255,0.5);
|
background-color: rgba(255,255,255,0.5);
|
||||||
}
|
}
|
||||||
|
|
||||||
window.demo .view:selected {
|
.view:selected {
|
||||||
background-color: rgba(127,127,255,0.5);
|
background-color: rgba(127,127,255,0.5);
|
||||||
}
|
}
|
||||||
|
@@ -5,6 +5,8 @@
|
|||||||
|
|
||||||
#include <gtk/gtk.h>
|
#include <gtk/gtk.h>
|
||||||
|
|
||||||
|
G_GNUC_BEGIN_IGNORE_DEPRECATIONS
|
||||||
|
|
||||||
static void
|
static void
|
||||||
show_parsing_error (GtkCssProvider *provider,
|
show_parsing_error (GtkCssProvider *provider,
|
||||||
GtkCssSection *section,
|
GtkCssSection *section,
|
||||||
@@ -46,23 +48,20 @@ css_text_changed (GtkTextBuffer *buffer,
|
|||||||
gtk_text_buffer_remove_all_tags (buffer, &start, &end);
|
gtk_text_buffer_remove_all_tags (buffer, &start, &end);
|
||||||
|
|
||||||
text = gtk_text_buffer_get_text (buffer, &start, &end, FALSE);
|
text = gtk_text_buffer_get_text (buffer, &start, &end, FALSE);
|
||||||
gtk_css_provider_load_from_string (provider, text);
|
gtk_css_provider_load_from_data (provider, text, -1);
|
||||||
g_free (text);
|
g_free (text);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
clear_provider (gpointer data)
|
|
||||||
{
|
|
||||||
GtkStyleProvider *provider = data;
|
|
||||||
|
|
||||||
gtk_style_context_remove_provider_for_display (gdk_display_get_default (), provider);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
apply_css (GtkWidget *widget, GtkStyleProvider *provider)
|
apply_css (GtkWidget *widget, GtkStyleProvider *provider)
|
||||||
{
|
{
|
||||||
gtk_style_context_add_provider_for_display (gdk_display_get_default (), provider, G_MAXUINT);
|
GtkWidget *child;
|
||||||
g_object_set_data_full (G_OBJECT (widget), "provider", provider, clear_provider);
|
|
||||||
|
gtk_style_context_add_provider (gtk_widget_get_style_context (widget), provider, G_MAXUINT);
|
||||||
|
for (child = gtk_widget_get_first_child (widget);
|
||||||
|
child != NULL;
|
||||||
|
child = gtk_widget_get_next_sibling (child))
|
||||||
|
apply_css (child, provider);
|
||||||
}
|
}
|
||||||
|
|
||||||
static GtkWidget *
|
static GtkWidget *
|
||||||
@@ -102,7 +101,6 @@ do_css_shadows (GtkWidget *do_widget)
|
|||||||
gtk_window_set_title (GTK_WINDOW (window), "Shadows");
|
gtk_window_set_title (GTK_WINDOW (window), "Shadows");
|
||||||
gtk_window_set_transient_for (GTK_WINDOW (window), GTK_WINDOW (do_widget));
|
gtk_window_set_transient_for (GTK_WINDOW (window), GTK_WINDOW (do_widget));
|
||||||
gtk_window_set_default_size (GTK_WINDOW (window), 400, 300);
|
gtk_window_set_default_size (GTK_WINDOW (window), 400, 300);
|
||||||
gtk_widget_add_css_class (window, "demo");
|
|
||||||
g_object_add_weak_pointer (G_OBJECT (window), (gpointer *)&window);
|
g_object_add_weak_pointer (G_OBJECT (window), (gpointer *)&window);
|
||||||
|
|
||||||
paned = gtk_paned_new (GTK_ORIENTATION_VERTICAL);
|
paned = gtk_paned_new (GTK_ORIENTATION_VERTICAL);
|
||||||
@@ -144,7 +142,7 @@ do_css_shadows (GtkWidget *do_widget)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!gtk_widget_get_visible (window))
|
if (!gtk_widget_get_visible (window))
|
||||||
gtk_window_present (GTK_WINDOW (window));
|
gtk_widget_set_visible (window, TRUE);
|
||||||
else
|
else
|
||||||
gtk_window_destroy (GTK_WINDOW (window));
|
gtk_window_destroy (GTK_WINDOW (window));
|
||||||
|
|
||||||
|
@@ -5,13 +5,12 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/* This CSS resets all properties to their defaults values
|
/* This CSS resets all properties to their defaults values
|
||||||
* and overrides all user settings and the theme in use
|
* and overrides all user settings and the theme in use */
|
||||||
*/
|
|
||||||
@import url("resource://css_shadows/reset.css");
|
@import url("resource://css_shadows/reset.css");
|
||||||
@import url("resource://css_shadows/cssview.css");
|
@import url("resource://css_shadows/cssview.css");
|
||||||
|
|
||||||
/* Get a nice background for the window */
|
/* Get a nice background for the window */
|
||||||
window.demo.background {
|
.background {
|
||||||
background-color: #4870bc;
|
background-color: #4870bc;
|
||||||
background-image: linear-gradient(to left, transparent, rgba(255,255,255,.07) 50%, transparent 50%),
|
background-image: linear-gradient(to left, transparent, rgba(255,255,255,.07) 50%, transparent 50%),
|
||||||
linear-gradient(to left, transparent, rgba(255,255,255,.13) 50%, transparent 50%),
|
linear-gradient(to left, transparent, rgba(255,255,255,.13) 50%, transparent 50%),
|
||||||
@@ -20,7 +19,7 @@ window.demo.background {
|
|||||||
background-size: 29px, 59px, 73px, 109px;
|
background-size: 29px, 59px, 73px, 109px;
|
||||||
}
|
}
|
||||||
|
|
||||||
window.demo button {
|
button {
|
||||||
color: black;
|
color: black;
|
||||||
padding: 10px;
|
padding: 10px;
|
||||||
border-radius: 5px;
|
border-radius: 5px;
|
||||||
@@ -28,15 +27,18 @@ window.demo button {
|
|||||||
border: 1px transparent solid;
|
border: 1px transparent solid;
|
||||||
}
|
}
|
||||||
|
|
||||||
window.demo button:hover {
|
button:hover {
|
||||||
text-shadow: 3px 3px 5px alpha(black, 0.75);
|
text-shadow: 3px 3px 5px alpha(black, 0.75);
|
||||||
-gtk-icon-shadow: 3px 3px 5px alpha(black, 0.75);
|
-gtk-icon-shadow: 3px 3px 5px alpha(black, 0.75);
|
||||||
box-shadow: 3px 3px 5px alpha(black, 0.5) inset;
|
box-shadow: 3px 3px 5px alpha(black, 0.5) inset;
|
||||||
border: solid 1px alpha(black, 0.75);
|
border: solid 1px alpha(black, 0.75);
|
||||||
}
|
}
|
||||||
|
|
||||||
window.demo button:active {
|
button:active {
|
||||||
padding: 11px 9px 9px 11px;
|
padding: 11px 9px 9px 11px;
|
||||||
text-shadow: 1px 1px 2.5px alpha(black, 0.6);
|
text-shadow: 1px 1px 2.5px alpha(black, 0.6);
|
||||||
-gtk-icon-shadow: 1px 1px 2.5px alpha(black, 0.6);
|
-gtk-icon-shadow: 1px 1px 2.5px alpha(black, 0.6);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@@ -1,21 +1,21 @@
|
|||||||
/* Make the text editor has a nice style */
|
/* Make the text editor has a nice style */
|
||||||
window.demo .view {
|
.view {
|
||||||
color: #2e3436;
|
color: #2e3436;
|
||||||
font-family: Monospace;
|
font-family: Monospace;
|
||||||
background-color: alpha(white, 0.30);
|
background-color: alpha(white, 0.30);
|
||||||
}
|
}
|
||||||
|
|
||||||
window.demo .view:selected {
|
.view:selected {
|
||||||
color: white;
|
color: white;
|
||||||
background-color: #4a90d9;
|
background-color: #4a90d9;
|
||||||
}
|
}
|
||||||
|
|
||||||
window.demo scrollbar trough,
|
scrollbar trough,
|
||||||
.scrollbars-junction {
|
.scrollbars-junction {
|
||||||
background-color: alpha(white, 0.80);
|
background-color: alpha(white, 0.80);
|
||||||
}
|
}
|
||||||
|
|
||||||
window.demo scrollbar slider {
|
scrollbar slider {
|
||||||
border-width: 3px;
|
border-width: 3px;
|
||||||
border-style: solid;
|
border-style: solid;
|
||||||
border-radius: 10px;
|
border-radius: 10px;
|
||||||
@@ -24,11 +24,11 @@ window.demo scrollbar slider {
|
|||||||
background-color: #999;
|
background-color: #999;
|
||||||
}
|
}
|
||||||
|
|
||||||
window.demo scrollbar slider:hover {
|
scrollbar slider:hover {
|
||||||
background-color: #555;
|
background-color: #555;
|
||||||
}
|
}
|
||||||
|
|
||||||
window.demo paned separator {
|
paned separator {
|
||||||
background-color: alpha(white, 0.80);
|
background-color: alpha(white, 0.80);
|
||||||
background-image: linear-gradient(transparent, transparent 1px, #999 1px, #999 4px, transparent 4px);
|
background-image: linear-gradient(transparent, transparent 1px, #999 1px, #999 4px, transparent 4px);
|
||||||
background-size: 40px auto;
|
background-size: 40px auto;
|
||||||
@@ -36,6 +36,6 @@ window.demo paned separator {
|
|||||||
background-position: center;
|
background-position: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
window.demo paned separator:hover {
|
paned separator:hover {
|
||||||
background-image: linear-gradient(transparent, transparent 1px, #555 1px, #555 4px, transparent 4px);
|
background-image: linear-gradient(transparent, transparent 1px, #555 1px, #555 4px, transparent 4px);
|
||||||
}
|
}
|
||||||
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB |
@@ -127,7 +127,6 @@
|
|||||||
<file>fishbowl.ui</file>
|
<file>fishbowl.ui</file>
|
||||||
<file>gtkfishbowl.c</file>
|
<file>gtkfishbowl.c</file>
|
||||||
<file>gtkfishbowl.h</file>
|
<file>gtkfishbowl.h</file>
|
||||||
<file>tiger.node</file>
|
|
||||||
</gresource>
|
</gresource>
|
||||||
<gresource prefix="/frames">
|
<gresource prefix="/frames">
|
||||||
<file>frames.ui</file>
|
<file>frames.ui</file>
|
||||||
@@ -196,9 +195,6 @@
|
|||||||
<gresource prefix="/listview_settings">
|
<gresource prefix="/listview_settings">
|
||||||
<file>listview_settings.ui</file>
|
<file>listview_settings.ui</file>
|
||||||
</gresource>
|
</gresource>
|
||||||
<gresource prefix="/listview_settings2">
|
|
||||||
<file>listview_settings2.ui</file>
|
|
||||||
</gresource>
|
|
||||||
<gresource prefix="/listview_ucd_data/">
|
<gresource prefix="/listview_ucd_data/">
|
||||||
<file>ucdnames.data</file>
|
<file>ucdnames.data</file>
|
||||||
</gresource>
|
</gresource>
|
||||||
@@ -316,7 +312,6 @@
|
|||||||
<file>listview_minesweeper.c</file>
|
<file>listview_minesweeper.c</file>
|
||||||
<file>listview_selections.c</file>
|
<file>listview_selections.c</file>
|
||||||
<file>listview_settings.c</file>
|
<file>listview_settings.c</file>
|
||||||
<file>listview_settings2.c</file>
|
|
||||||
<file>listview_ucd.c</file>
|
<file>listview_ucd.c</file>
|
||||||
<file>listview_weather.c</file>
|
<file>listview_weather.c</file>
|
||||||
<file>listview_words.c</file>
|
<file>listview_words.c</file>
|
||||||
@@ -336,11 +331,6 @@
|
|||||||
<file>paintable_symbolic.c</file>
|
<file>paintable_symbolic.c</file>
|
||||||
<file>panes.c</file>
|
<file>panes.c</file>
|
||||||
<file>password_entry.c</file>
|
<file>password_entry.c</file>
|
||||||
<file>path_fill.c</file>
|
|
||||||
<file>path_maze.c</file>
|
|
||||||
<file>path_spinner.c</file>
|
|
||||||
<file>path_walk.c</file>
|
|
||||||
<file>path_text.c</file>
|
|
||||||
<file>peg_solitaire.c</file>
|
<file>peg_solitaire.c</file>
|
||||||
<file>pickers.c</file>
|
<file>pickers.c</file>
|
||||||
<file>printing.c</file>
|
<file>printing.c</file>
|
||||||
@@ -426,13 +416,6 @@
|
|||||||
<gresource prefix="/fontrendering">
|
<gresource prefix="/fontrendering">
|
||||||
<file>fontrendering.ui</file>
|
<file>fontrendering.ui</file>
|
||||||
</gresource>
|
</gresource>
|
||||||
<gresource prefix="/path_walk">
|
|
||||||
<file>path_walk.ui</file>
|
|
||||||
<file compressed="true">path_world.txt</file>
|
|
||||||
</gresource>
|
|
||||||
<gresource prefix="/path_text">
|
|
||||||
<file>path_text.ui</file>
|
|
||||||
</gresource>
|
|
||||||
<gresource prefix="/org/gtk/Demo4">
|
<gresource prefix="/org/gtk/Demo4">
|
||||||
<file>icons/16x16/actions/application-exit.png</file>
|
<file>icons/16x16/actions/application-exit.png</file>
|
||||||
<file>icons/16x16/actions/document-new.png</file>
|
<file>icons/16x16/actions/document-new.png</file>
|
||||||
|
@@ -208,13 +208,7 @@
|
|||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkLabel" id="statusbar1">
|
<object class="GtkStatusbar" id="statusbar1"/>
|
||||||
<property name="xalign">0</property>
|
|
||||||
<property name="margin-start">2</property>
|
|
||||||
<property name="margin-end">2</property>
|
|
||||||
<property name="margin-top">2</property>
|
|
||||||
<property name="margin-bottom">2</property>
|
|
||||||
</object>
|
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
|
@@ -75,9 +75,7 @@ query_tooltip (GtkWidget *widget,
|
|||||||
gtk_grid_attach (GTK_GRID (grid), label, 0, 2, 1, 1);
|
gtk_grid_attach (GTK_GRID (grid), label, 0, 2, 1, 1);
|
||||||
|
|
||||||
precision = 1;
|
precision = 1;
|
||||||
s = NULL;
|
|
||||||
do {
|
do {
|
||||||
g_free (s);
|
|
||||||
s = g_strdup_printf ("%.*f", precision, self->scale);
|
s = g_strdup_printf ("%.*f", precision, self->scale);
|
||||||
l = strlen (s) - 1;
|
l = strlen (s) - 1;
|
||||||
while (s[l] == '0')
|
while (s[l] == '0')
|
||||||
@@ -389,8 +387,6 @@ demo3_widget_class_init (Demo3WidgetClass *class)
|
|||||||
gtk_widget_class_set_template_from_resource (widget_class, "/menu/demo3widget.ui");
|
gtk_widget_class_set_template_from_resource (widget_class, "/menu/demo3widget.ui");
|
||||||
gtk_widget_class_bind_template_child (widget_class, Demo3Widget, menu);
|
gtk_widget_class_bind_template_child (widget_class, Demo3Widget, menu);
|
||||||
gtk_widget_class_bind_template_callback (widget_class, pressed_cb);
|
gtk_widget_class_bind_template_callback (widget_class, pressed_cb);
|
||||||
|
|
||||||
gtk_widget_class_set_accessible_role (widget_class, GTK_ACCESSIBLE_ROLE_IMG);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
GtkWidget *
|
GtkWidget *
|
||||||
|
@@ -19,14 +19,8 @@
|
|||||||
</item>
|
</item>
|
||||||
</menu>
|
</menu>
|
||||||
<template class="Demo3Widget">
|
<template class="Demo3Widget">
|
||||||
<accessibility>
|
|
||||||
<property name="label">Demo image</property>
|
|
||||||
</accessibility>
|
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkPopoverMenu" id="menu">
|
<object class="GtkPopoverMenu" id="menu">
|
||||||
<accessibility>
|
|
||||||
<property name="label">Context menu</property>
|
|
||||||
</accessibility>
|
|
||||||
<property name="has-arrow">0</property>
|
<property name="has-arrow">0</property>
|
||||||
<property name="menu-model">model</property>
|
<property name="menu-model">model</property>
|
||||||
</object>
|
</object>
|
||||||
|
@@ -18,7 +18,8 @@
|
|||||||
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#pragma once
|
#ifndef __DEMO_TAGGED_ENTRY_H__
|
||||||
|
#define __DEMO_TAGGED_ENTRY_H__
|
||||||
|
|
||||||
#include <gtk/gtk.h>
|
#include <gtk/gtk.h>
|
||||||
|
|
||||||
@@ -56,3 +57,5 @@ void demo_tagged_entry_tag_set_has_close_button (DemoTaggedEntryTag *
|
|||||||
gboolean has_close_button);
|
gboolean has_close_button);
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
|
#endif /* __DEMO_TAGGED_ENTRY_H__ */
|
||||||
|
@@ -34,7 +34,7 @@ transition (GtkWidget *widget,
|
|||||||
{
|
{
|
||||||
DemoWidget *self = DEMO_WIDGET (widget);
|
DemoWidget *self = DEMO_WIDGET (widget);
|
||||||
DemoLayout *demo_layout = DEMO_LAYOUT (gtk_widget_get_layout_manager (widget));
|
DemoLayout *demo_layout = DEMO_LAYOUT (gtk_widget_get_layout_manager (widget));
|
||||||
gint64 now = gdk_frame_clock_get_frame_time (frame_clock);
|
gint64 now = g_get_monotonic_time ();
|
||||||
|
|
||||||
gtk_widget_queue_allocate (widget);
|
gtk_widget_queue_allocate (widget);
|
||||||
|
|
||||||
@@ -66,13 +66,11 @@ clicked (GtkGestureClick *gesture,
|
|||||||
gpointer data)
|
gpointer data)
|
||||||
{
|
{
|
||||||
DemoWidget *self = data;
|
DemoWidget *self = data;
|
||||||
GdkFrameClock *frame_clock;
|
|
||||||
|
|
||||||
if (self->tick_id != 0)
|
if (self->tick_id != 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
frame_clock = gtk_widget_get_frame_clock (GTK_WIDGET (self));
|
self->start_time = g_get_monotonic_time ();
|
||||||
self->start_time = gdk_frame_clock_get_frame_time (frame_clock);
|
|
||||||
self->tick_id = gtk_widget_add_tick_callback (GTK_WIDGET (self), transition, NULL, NULL);
|
self->tick_id = gtk_widget_add_tick_callback (GTK_WIDGET (self), transition, NULL, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -70,7 +70,7 @@ set_color (CanvasItem *item,
|
|||||||
css = g_strdup_printf ("#%s { background: %s; }", name, str);
|
css = g_strdup_printf ("#%s { background: %s; }", name, str);
|
||||||
|
|
||||||
provider = gtk_css_provider_new ();
|
provider = gtk_css_provider_new ();
|
||||||
gtk_css_provider_load_from_string (provider, css);
|
gtk_css_provider_load_from_data (provider, css, -1);
|
||||||
gtk_style_context_add_provider_for_display (gtk_widget_get_display (item->label), GTK_STYLE_PROVIDER (provider), 700);
|
gtk_style_context_add_provider_for_display (gtk_widget_get_display (item->label), GTK_STYLE_PROVIDER (provider), 700);
|
||||||
item->provider = GTK_STYLE_PROVIDER (provider);
|
item->provider = GTK_STYLE_PROVIDER (provider);
|
||||||
|
|
||||||
@@ -109,21 +109,15 @@ static void
|
|||||||
apply_transform (CanvasItem *item)
|
apply_transform (CanvasItem *item)
|
||||||
{
|
{
|
||||||
GskTransform *transform;
|
GskTransform *transform;
|
||||||
graphene_rect_t bounds;
|
|
||||||
double x, y;
|
double x, y;
|
||||||
|
|
||||||
/* Add css padding and margin */
|
x = gtk_widget_get_allocated_width (item->label) / 2.0;
|
||||||
if (!gtk_widget_compute_bounds (item->label, item->label, &bounds))
|
y = gtk_widget_get_allocated_height (item->label) / 2.0;
|
||||||
return;
|
item->r = sqrt (x*x + y*y);
|
||||||
|
|
||||||
x = bounds.size.width / 2.;
|
|
||||||
y = bounds.size.height / 2.;
|
|
||||||
|
|
||||||
item->r = sqrt (x * x + y * y);
|
|
||||||
|
|
||||||
transform = gsk_transform_translate (NULL, &(graphene_point_t) { item->r, item->r });
|
transform = gsk_transform_translate (NULL, &(graphene_point_t) { item->r, item->r });
|
||||||
transform = gsk_transform_rotate (transform, item->angle + item->delta);
|
transform = gsk_transform_rotate (transform, item->angle + item->delta);
|
||||||
transform = gsk_transform_translate (transform, &GRAPHENE_POINT_INIT (-x, -y));
|
transform = gsk_transform_translate (transform, &(graphene_point_t) { -x, -y });
|
||||||
|
|
||||||
gtk_fixed_set_child_transform (GTK_FIXED (item->fixed), item->label, transform);
|
gtk_fixed_set_child_transform (GTK_FIXED (item->fixed), item->label, transform);
|
||||||
gsk_transform_unref (transform);
|
gsk_transform_unref (transform);
|
||||||
@@ -162,39 +156,27 @@ click_done (GtkGesture *gesture)
|
|||||||
gtk_widget_insert_after (item, canvas, last_child);
|
gtk_widget_insert_after (item, canvas, last_child);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* GtkSettings treats `GTK_THEME=foo:dark` as theme name `foo`, variant `dark`,
|
|
||||||
* and our embedded CSS files let `foo-dark` work as an alias for `foo:dark`. */
|
|
||||||
static gboolean
|
|
||||||
has_dark_suffix (const char *theme)
|
|
||||||
{
|
|
||||||
return g_str_has_suffix (theme, ":dark") ||
|
|
||||||
g_str_has_suffix (theme, "-dark");
|
|
||||||
}
|
|
||||||
|
|
||||||
/* So we can make a good guess whether the current theme is dark by checking for
|
|
||||||
* either: it is suffixed `[:-]dark`, or Settings:…prefer-dark-theme is TRUE. */
|
|
||||||
static gboolean
|
static gboolean
|
||||||
theme_is_dark (void)
|
theme_is_dark (void)
|
||||||
{
|
{
|
||||||
const char *env_theme;
|
|
||||||
GtkSettings *settings;
|
GtkSettings *settings;
|
||||||
char *theme;
|
char *theme;
|
||||||
gboolean prefer_dark;
|
gboolean prefer_dark;
|
||||||
gboolean dark;
|
gboolean dark;
|
||||||
|
|
||||||
/* Like GtkSettings, 1st see if theme is overridden by environment variable */
|
|
||||||
env_theme = g_getenv ("GTK_THEME");
|
|
||||||
if (env_theme != NULL)
|
|
||||||
return has_dark_suffix (env_theme);
|
|
||||||
|
|
||||||
/* If not, test Settings:…theme-name in the same way OR :…prefer-dark-theme */
|
|
||||||
settings = gtk_settings_get_default ();
|
settings = gtk_settings_get_default ();
|
||||||
g_object_get (settings,
|
g_object_get (settings,
|
||||||
"gtk-theme-name", &theme,
|
"gtk-theme-name", &theme,
|
||||||
"gtk-application-prefer-dark-theme", &prefer_dark,
|
"gtk-application-prefer-dark-theme", &prefer_dark,
|
||||||
NULL);
|
NULL);
|
||||||
dark = prefer_dark || has_dark_suffix (theme);
|
|
||||||
|
if ((strcmp (theme, "Adwaita") == 0 && prefer_dark) || strcmp (theme, "HighContrastInverse") == 0)
|
||||||
|
dark = TRUE;
|
||||||
|
else
|
||||||
|
dark = FALSE;
|
||||||
|
|
||||||
g_free (theme);
|
g_free (theme);
|
||||||
|
|
||||||
return dark;
|
return dark;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -760,7 +742,9 @@ do_dnd (GtkWidget *do_widget)
|
|||||||
GtkCssProvider *provider;
|
GtkCssProvider *provider;
|
||||||
GString *css;
|
GString *css;
|
||||||
|
|
||||||
button = gtk_color_dialog_button_new (gtk_color_dialog_new ());
|
G_GNUC_BEGIN_IGNORE_DEPRECATIONS
|
||||||
|
button = gtk_color_button_new ();
|
||||||
|
G_GNUC_END_IGNORE_DEPRECATIONS
|
||||||
g_object_unref (g_object_ref_sink (button));
|
g_object_unref (g_object_ref_sink (button));
|
||||||
|
|
||||||
provider = gtk_css_provider_new ();
|
provider = gtk_css_provider_new ();
|
||||||
@@ -775,7 +759,7 @@ do_dnd (GtkWidget *do_widget)
|
|||||||
g_string_append_printf (css, ".canvasitem.%s { background: %s; }\n", colors[i], colors[i]);
|
g_string_append_printf (css, ".canvasitem.%s { background: %s; }\n", colors[i], colors[i]);
|
||||||
|
|
||||||
provider = gtk_css_provider_new ();
|
provider = gtk_css_provider_new ();
|
||||||
gtk_css_provider_load_from_string (provider, css->str);
|
gtk_css_provider_load_from_data (provider, css->str, css->len);
|
||||||
gtk_style_context_add_provider_for_display (gdk_display_get_default (),
|
gtk_style_context_add_provider_for_display (gdk_display_get_default (),
|
||||||
GTK_STYLE_PROVIDER (provider),
|
GTK_STYLE_PROVIDER (provider),
|
||||||
800);
|
800);
|
||||||
|
@@ -334,17 +334,11 @@ do_drawingarea (GtkWidget *do_widget)
|
|||||||
gtk_widget_set_vexpand (frame, TRUE);
|
gtk_widget_set_vexpand (frame, TRUE);
|
||||||
gtk_box_append (GTK_BOX (vbox), frame);
|
gtk_box_append (GTK_BOX (vbox), frame);
|
||||||
|
|
||||||
da = g_object_new (GTK_TYPE_DRAWING_AREA,
|
da = gtk_drawing_area_new ();
|
||||||
"accessible-role", GTK_ACCESSIBLE_ROLE_IMG,
|
|
||||||
NULL);
|
|
||||||
gtk_frame_set_child (GTK_FRAME (frame), da);
|
|
||||||
gtk_accessible_update_relation (GTK_ACCESSIBLE (da),
|
|
||||||
GTK_ACCESSIBLE_RELATION_LABELLED_BY, label, NULL,
|
|
||||||
-1);
|
|
||||||
|
|
||||||
gtk_drawing_area_set_content_width (GTK_DRAWING_AREA (da), 100);
|
gtk_drawing_area_set_content_width (GTK_DRAWING_AREA (da), 100);
|
||||||
gtk_drawing_area_set_content_height (GTK_DRAWING_AREA (da), 100);
|
gtk_drawing_area_set_content_height (GTK_DRAWING_AREA (da), 100);
|
||||||
gtk_drawing_area_set_draw_func (GTK_DRAWING_AREA (da), groups_draw, NULL, NULL);
|
gtk_drawing_area_set_draw_func (GTK_DRAWING_AREA (da), groups_draw, NULL, NULL);
|
||||||
|
gtk_frame_set_child (GTK_FRAME (frame), da);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Create the scribble area
|
* Create the scribble area
|
||||||
@@ -358,17 +352,11 @@ do_drawingarea (GtkWidget *do_widget)
|
|||||||
gtk_widget_set_vexpand (frame, TRUE);
|
gtk_widget_set_vexpand (frame, TRUE);
|
||||||
gtk_box_append (GTK_BOX (vbox), frame);
|
gtk_box_append (GTK_BOX (vbox), frame);
|
||||||
|
|
||||||
da = g_object_new (GTK_TYPE_DRAWING_AREA,
|
da = gtk_drawing_area_new ();
|
||||||
"accessible-role", GTK_ACCESSIBLE_ROLE_IMG,
|
|
||||||
NULL);
|
|
||||||
gtk_frame_set_child (GTK_FRAME (frame), da);
|
|
||||||
gtk_accessible_update_relation (GTK_ACCESSIBLE (da),
|
|
||||||
GTK_ACCESSIBLE_RELATION_LABELLED_BY, label, NULL,
|
|
||||||
-1);
|
|
||||||
|
|
||||||
gtk_drawing_area_set_content_width (GTK_DRAWING_AREA (da), 100);
|
gtk_drawing_area_set_content_width (GTK_DRAWING_AREA (da), 100);
|
||||||
gtk_drawing_area_set_content_height (GTK_DRAWING_AREA (da), 100);
|
gtk_drawing_area_set_content_height (GTK_DRAWING_AREA (da), 100);
|
||||||
gtk_drawing_area_set_draw_func (GTK_DRAWING_AREA (da), scribble_draw, NULL, NULL);
|
gtk_drawing_area_set_draw_func (GTK_DRAWING_AREA (da), scribble_draw, NULL, NULL);
|
||||||
|
gtk_frame_set_child (GTK_FRAME (frame), da);
|
||||||
|
|
||||||
g_signal_connect (da, "resize",
|
g_signal_connect (da, "resize",
|
||||||
G_CALLBACK (scribble_resize), NULL);
|
G_CALLBACK (scribble_resize), NULL);
|
||||||
@@ -384,7 +372,7 @@ do_drawingarea (GtkWidget *do_widget)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!gtk_widget_get_visible (window))
|
if (!gtk_widget_get_visible (window))
|
||||||
gtk_window_present (GTK_WINDOW (window));
|
gtk_widget_set_visible (window, TRUE);
|
||||||
else
|
else
|
||||||
gtk_window_destroy (GTK_WINDOW (window));
|
gtk_window_destroy (GTK_WINDOW (window));
|
||||||
|
|
||||||
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.3 KiB |
@@ -95,13 +95,6 @@ do_entry_completion (GtkWidget *do_widget)
|
|||||||
entry = gtk_entry_new ();
|
entry = gtk_entry_new ();
|
||||||
gtk_box_append (GTK_BOX (vbox), entry);
|
gtk_box_append (GTK_BOX (vbox), entry);
|
||||||
|
|
||||||
gtk_accessible_update_relation (GTK_ACCESSIBLE (entry),
|
|
||||||
GTK_ACCESSIBLE_RELATION_LABELLED_BY, label, NULL,
|
|
||||||
-1);
|
|
||||||
gtk_accessible_update_property (GTK_ACCESSIBLE (entry),
|
|
||||||
GTK_ACCESSIBLE_PROPERTY_AUTOCOMPLETE, GTK_ACCESSIBLE_AUTOCOMPLETE_LIST,
|
|
||||||
-1);
|
|
||||||
|
|
||||||
/* Create the completion object */
|
/* Create the completion object */
|
||||||
completion = gtk_entry_completion_new ();
|
completion = gtk_entry_completion_new ();
|
||||||
|
|
||||||
|
@@ -43,10 +43,6 @@ do_entry_undo (GtkWidget *do_widget)
|
|||||||
entry = gtk_entry_new ();
|
entry = gtk_entry_new ();
|
||||||
gtk_editable_set_enable_undo (GTK_EDITABLE (entry), TRUE);
|
gtk_editable_set_enable_undo (GTK_EDITABLE (entry), TRUE);
|
||||||
gtk_box_append (GTK_BOX (vbox), entry);
|
gtk_box_append (GTK_BOX (vbox), entry);
|
||||||
|
|
||||||
gtk_accessible_update_relation (GTK_ACCESSIBLE (entry),
|
|
||||||
GTK_ACCESSIBLE_RELATION_LABELLED_BY, label, NULL,
|
|
||||||
-1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!gtk_widget_get_visible (window))
|
if (!gtk_widget_get_visible (window))
|
||||||
|
@@ -22,15 +22,11 @@ validate_more_details (GtkEntry *entry,
|
|||||||
{
|
{
|
||||||
gtk_widget_set_tooltip_text (GTK_WIDGET (entry), "Must have details first");
|
gtk_widget_set_tooltip_text (GTK_WIDGET (entry), "Must have details first");
|
||||||
gtk_widget_add_css_class (GTK_WIDGET (entry), "error");
|
gtk_widget_add_css_class (GTK_WIDGET (entry), "error");
|
||||||
gtk_accessible_update_state (GTK_ACCESSIBLE (entry),
|
|
||||||
GTK_ACCESSIBLE_STATE_INVALID, GTK_ACCESSIBLE_INVALID_TRUE,
|
|
||||||
-1);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
gtk_widget_set_tooltip_text (GTK_WIDGET (entry), "");
|
gtk_widget_set_tooltip_text (GTK_WIDGET (entry), "");
|
||||||
gtk_widget_remove_css_class (GTK_WIDGET (entry), "error");
|
gtk_widget_remove_css_class (GTK_WIDGET (entry), "error");
|
||||||
gtk_accessible_reset_state (GTK_ACCESSIBLE (entry), GTK_ACCESSIBLE_STATE_INVALID);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -48,18 +44,10 @@ mode_switch_state_set (GtkSwitch *sw,
|
|||||||
{
|
{
|
||||||
gtk_widget_set_visible (label, FALSE);
|
gtk_widget_set_visible (label, FALSE);
|
||||||
gtk_switch_set_state (sw, state);
|
gtk_switch_set_state (sw, state);
|
||||||
gtk_accessible_reset_relation (GTK_ACCESSIBLE (sw), GTK_ACCESSIBLE_RELATION_ERROR_MESSAGE);
|
|
||||||
gtk_accessible_reset_state (GTK_ACCESSIBLE (sw), GTK_ACCESSIBLE_STATE_INVALID);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
gtk_widget_set_visible (label, TRUE);
|
gtk_widget_set_visible (label, TRUE);
|
||||||
gtk_accessible_update_relation (GTK_ACCESSIBLE (sw),
|
|
||||||
GTK_ACCESSIBLE_RELATION_ERROR_MESSAGE, label,
|
|
||||||
-1);
|
|
||||||
gtk_accessible_update_state (GTK_ACCESSIBLE (sw),
|
|
||||||
GTK_ACCESSIBLE_STATE_INVALID, GTK_ACCESSIBLE_INVALID_TRUE,
|
|
||||||
-1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
@@ -85,9 +73,6 @@ level_scale_value_changed (GtkRange *range,
|
|||||||
{
|
{
|
||||||
gtk_switch_set_state (GTK_SWITCH (sw), FALSE);
|
gtk_switch_set_state (GTK_SWITCH (sw), FALSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
gtk_accessible_reset_relation (GTK_ACCESSIBLE (sw), GTK_ACCESSIBLE_RELATION_ERROR_MESSAGE);
|
|
||||||
gtk_accessible_reset_state (GTK_ACCESSIBLE (sw), GTK_ACCESSIBLE_STATE_INVALID);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
GtkWidget *
|
GtkWidget *
|
||||||
|
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.4 KiB |
@@ -10,6 +10,8 @@
|
|||||||
#include <glib/gi18n.h>
|
#include <glib/gi18n.h>
|
||||||
#include <gtk/gtk.h>
|
#include <gtk/gtk.h>
|
||||||
|
|
||||||
|
G_GNUC_BEGIN_IGNORE_DEPRECATIONS
|
||||||
|
|
||||||
static GtkWidget *window = NULL;
|
static GtkWidget *window = NULL;
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -43,22 +45,21 @@ do_expander (GtkWidget *do_widget)
|
|||||||
if (!window)
|
if (!window)
|
||||||
{
|
{
|
||||||
toplevel = GTK_WIDGET (gtk_widget_get_root (do_widget));
|
toplevel = GTK_WIDGET (gtk_widget_get_root (do_widget));
|
||||||
window = gtk_window_new ();
|
window = gtk_message_dialog_new_with_markup (GTK_WINDOW (toplevel),
|
||||||
gtk_window_set_title (GTK_WINDOW (window), "Expander");
|
0,
|
||||||
gtk_window_set_transient_for (GTK_WINDOW (window), GTK_WINDOW (toplevel));
|
GTK_MESSAGE_ERROR,
|
||||||
area = gtk_box_new (GTK_ORIENTATION_VERTICAL, 10);
|
GTK_BUTTONS_CLOSE,
|
||||||
gtk_widget_set_margin_start (area, 10);
|
"<big><b>%s</b></big>",
|
||||||
gtk_widget_set_margin_end (area, 10);
|
"Something went wrong");
|
||||||
gtk_widget_set_margin_top (area, 10);
|
gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (window),
|
||||||
gtk_widget_set_margin_bottom (area, 10);
|
"Here are some more details "
|
||||||
gtk_window_set_child (GTK_WINDOW (window), area);
|
"but not the full story.");
|
||||||
label = gtk_label_new ("<big><b>Something went wrong</b></big>");
|
|
||||||
gtk_label_set_use_markup (GTK_LABEL (label), TRUE);
|
area = gtk_message_dialog_get_message_area (GTK_MESSAGE_DIALOG (window));
|
||||||
gtk_box_append (GTK_BOX (area), label);
|
|
||||||
label = gtk_label_new ("Here are some more details but not the full story");
|
label = gtk_widget_get_last_child (area);
|
||||||
gtk_label_set_wrap (GTK_LABEL (label), FALSE);
|
gtk_label_set_wrap (GTK_LABEL (label), FALSE);
|
||||||
gtk_widget_set_vexpand (label, FALSE);
|
gtk_widget_set_vexpand (label, FALSE);
|
||||||
gtk_box_append (GTK_BOX (area), label);
|
|
||||||
|
|
||||||
expander = gtk_expander_new ("Details:");
|
expander = gtk_expander_new ("Details:");
|
||||||
gtk_widget_set_vexpand (expander, TRUE);
|
gtk_widget_set_vexpand (expander, TRUE);
|
||||||
@@ -121,7 +122,7 @@ do_expander (GtkWidget *do_widget)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!gtk_widget_get_visible (window))
|
if (!gtk_widget_get_visible (window))
|
||||||
gtk_window_present (GTK_WINDOW (window));
|
gtk_widget_set_visible (window, TRUE);
|
||||||
else
|
else
|
||||||
gtk_window_destroy (GTK_WINDOW (window));
|
gtk_window_destroy (GTK_WINDOW (window));
|
||||||
|
|
||||||
|
@@ -11,9 +11,6 @@
|
|||||||
#include "gtkgears.h"
|
#include "gtkgears.h"
|
||||||
#include "gskshaderpaintable.h"
|
#include "gskshaderpaintable.h"
|
||||||
|
|
||||||
#include "nodewidget.h"
|
|
||||||
#include "graphwidget.h"
|
|
||||||
|
|
||||||
const char *const css =
|
const char *const css =
|
||||||
".blurred-button {"
|
".blurred-button {"
|
||||||
" box-shadow: 0px 0px 5px 10px rgba(0, 0, 0, 0.5);"
|
" box-shadow: 0px 0px 5px 10px rgba(0, 0, 0, 0.5);"
|
||||||
@@ -71,11 +68,13 @@ create_blurred_button (void)
|
|||||||
return w;
|
return w;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
G_GNUC_BEGIN_IGNORE_DEPRECATIONS
|
||||||
static GtkWidget *
|
static GtkWidget *
|
||||||
create_font_button (void)
|
create_font_button (void)
|
||||||
{
|
{
|
||||||
return gtk_font_dialog_button_new (gtk_font_dialog_new ());
|
return gtk_font_button_new ();
|
||||||
}
|
}
|
||||||
|
G_GNUC_END_IGNORE_DEPRECATIONS
|
||||||
|
|
||||||
static GtkWidget *
|
static GtkWidget *
|
||||||
create_level_bar (void)
|
create_level_bar (void)
|
||||||
@@ -204,18 +203,6 @@ create_menu_button (void)
|
|||||||
return w;
|
return w;
|
||||||
}
|
}
|
||||||
|
|
||||||
static GtkWidget *
|
|
||||||
create_tiger (void)
|
|
||||||
{
|
|
||||||
return node_widget_new ("/fishbowl/tiger.node");
|
|
||||||
}
|
|
||||||
|
|
||||||
static GtkWidget *
|
|
||||||
create_graph (void)
|
|
||||||
{
|
|
||||||
return graph_widget_new ();
|
|
||||||
}
|
|
||||||
|
|
||||||
static const struct {
|
static const struct {
|
||||||
const char *name;
|
const char *name;
|
||||||
GtkWidget * (*create_func) (void);
|
GtkWidget * (*create_func) (void);
|
||||||
@@ -233,8 +220,6 @@ static const struct {
|
|||||||
{ "Switch", create_switch },
|
{ "Switch", create_switch },
|
||||||
{ "Menubutton", create_menu_button },
|
{ "Menubutton", create_menu_button },
|
||||||
{ "Shader", create_cogs },
|
{ "Shader", create_cogs },
|
||||||
{ "Tiger", create_tiger },
|
|
||||||
{ "Graph", create_graph },
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static int selected_widget_type = -1;
|
static int selected_widget_type = -1;
|
||||||
@@ -316,7 +301,7 @@ do_fishbowl (GtkWidget *do_widget)
|
|||||||
if (provider == NULL)
|
if (provider == NULL)
|
||||||
{
|
{
|
||||||
provider = gtk_css_provider_new ();
|
provider = gtk_css_provider_new ();
|
||||||
gtk_css_provider_load_from_string (provider, css);
|
gtk_css_provider_load_from_data (provider, css, -1);
|
||||||
gtk_style_context_add_provider_for_display (gdk_display_get_default (),
|
gtk_style_context_add_provider_for_display (gdk_display_get_default (),
|
||||||
GTK_STYLE_PROVIDER (provider),
|
GTK_STYLE_PROVIDER (provider),
|
||||||
GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
|
GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
|
||||||
@@ -325,20 +310,11 @@ do_fishbowl (GtkWidget *do_widget)
|
|||||||
if (!window)
|
if (!window)
|
||||||
{
|
{
|
||||||
GtkBuilder *builder;
|
GtkBuilder *builder;
|
||||||
GtkBuilderScope *scope;
|
|
||||||
GtkWidget *bowl;
|
GtkWidget *bowl;
|
||||||
|
|
||||||
g_type_ensure (GTK_TYPE_FISHBOWL);
|
g_type_ensure (GTK_TYPE_FISHBOWL);
|
||||||
|
|
||||||
scope = gtk_builder_cscope_new ();
|
builder = gtk_builder_new_from_resource ("/fishbowl/fishbowl.ui");
|
||||||
gtk_builder_cscope_add_callback (GTK_BUILDER_CSCOPE (scope), fishbowl_prev_button_clicked_cb);
|
|
||||||
gtk_builder_cscope_add_callback (GTK_BUILDER_CSCOPE (scope), fishbowl_next_button_clicked_cb);
|
|
||||||
gtk_builder_cscope_add_callback (GTK_BUILDER_CSCOPE (scope), fishbowl_changes_toggled_cb);
|
|
||||||
gtk_builder_cscope_add_callback (GTK_BUILDER_CSCOPE (scope), format_header_cb);
|
|
||||||
|
|
||||||
builder = gtk_builder_new ();
|
|
||||||
gtk_builder_set_scope (builder, scope);
|
|
||||||
gtk_builder_add_from_resource (builder, "/fishbowl/fishbowl.ui", NULL);
|
|
||||||
window = GTK_WIDGET (gtk_builder_get_object (builder, "window"));
|
window = GTK_WIDGET (gtk_builder_get_object (builder, "window"));
|
||||||
g_object_add_weak_pointer (G_OBJECT (window), (gpointer *)&window);
|
g_object_add_weak_pointer (G_OBJECT (window), (gpointer *)&window);
|
||||||
|
|
||||||
@@ -350,7 +326,6 @@ do_fishbowl (GtkWidget *do_widget)
|
|||||||
|
|
||||||
gtk_widget_realize (window);
|
gtk_widget_realize (window);
|
||||||
g_object_unref (builder);
|
g_object_unref (builder);
|
||||||
g_object_unref (scope);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!gtk_widget_get_visible (window))
|
if (!gtk_widget_get_visible (window))
|
||||||
|
@@ -1294,18 +1294,18 @@ add_axis (hb_face_t *hb_face,
|
|||||||
|
|
||||||
axis_label = gtk_label_new (name);
|
axis_label = gtk_label_new (name);
|
||||||
gtk_widget_set_halign (axis_label, GTK_ALIGN_START);
|
gtk_widget_set_halign (axis_label, GTK_ALIGN_START);
|
||||||
gtk_widget_set_valign (axis_label, GTK_ALIGN_BASELINE_FILL);
|
gtk_widget_set_valign (axis_label, GTK_ALIGN_BASELINE);
|
||||||
gtk_grid_attach (GTK_GRID (demo->variations_grid), axis_label, 0, i, 1, 1);
|
gtk_grid_attach (GTK_GRID (demo->variations_grid), axis_label, 0, i, 1, 1);
|
||||||
adjustment = gtk_adjustment_new (value, ax->min_value, ax->max_value,
|
adjustment = gtk_adjustment_new (value, ax->min_value, ax->max_value,
|
||||||
1.0, 10.0, 0.0);
|
1.0, 10.0, 0.0);
|
||||||
axis_scale = gtk_scale_new (GTK_ORIENTATION_HORIZONTAL, adjustment);
|
axis_scale = gtk_scale_new (GTK_ORIENTATION_HORIZONTAL, adjustment);
|
||||||
gtk_scale_add_mark (GTK_SCALE (axis_scale), ax->default_value, GTK_POS_TOP, NULL);
|
gtk_scale_add_mark (GTK_SCALE (axis_scale), ax->default_value, GTK_POS_TOP, NULL);
|
||||||
gtk_widget_set_valign (axis_scale, GTK_ALIGN_BASELINE_FILL);
|
gtk_widget_set_valign (axis_scale, GTK_ALIGN_BASELINE);
|
||||||
gtk_widget_set_hexpand (axis_scale, TRUE);
|
gtk_widget_set_hexpand (axis_scale, TRUE);
|
||||||
gtk_widget_set_size_request (axis_scale, 100, -1);
|
gtk_widget_set_size_request (axis_scale, 100, -1);
|
||||||
gtk_grid_attach (GTK_GRID (demo->variations_grid), axis_scale, 1, i, 1, 1);
|
gtk_grid_attach (GTK_GRID (demo->variations_grid), axis_scale, 1, i, 1, 1);
|
||||||
axis_entry = gtk_entry_new ();
|
axis_entry = gtk_entry_new ();
|
||||||
gtk_widget_set_valign (axis_entry, GTK_ALIGN_BASELINE_FILL);
|
gtk_widget_set_valign (axis_entry, GTK_ALIGN_BASELINE);
|
||||||
gtk_editable_set_width_chars (GTK_EDITABLE (axis_entry), 4);
|
gtk_editable_set_width_chars (GTK_EDITABLE (axis_entry), 4);
|
||||||
gtk_editable_set_max_width_chars (GTK_EDITABLE (axis_entry), 4);
|
gtk_editable_set_max_width_chars (GTK_EDITABLE (axis_entry), 4);
|
||||||
gtk_widget_set_hexpand (axis_entry, FALSE);
|
gtk_widget_set_hexpand (axis_entry, FALSE);
|
||||||
@@ -1562,14 +1562,14 @@ update_font_variations (void)
|
|||||||
label = gtk_label_new ("Instance");
|
label = gtk_label_new ("Instance");
|
||||||
gtk_label_set_xalign (GTK_LABEL (label), 0);
|
gtk_label_set_xalign (GTK_LABEL (label), 0);
|
||||||
gtk_widget_set_halign (label, GTK_ALIGN_START);
|
gtk_widget_set_halign (label, GTK_ALIGN_START);
|
||||||
gtk_widget_set_valign (label, GTK_ALIGN_BASELINE_FILL);
|
gtk_widget_set_valign (label, GTK_ALIGN_BASELINE);
|
||||||
gtk_grid_attach (GTK_GRID (demo->variations_grid), label, 0, -1, 1, 1);
|
gtk_grid_attach (GTK_GRID (demo->variations_grid), label, 0, -1, 1, 1);
|
||||||
|
|
||||||
strings = gtk_string_list_new (NULL);
|
strings = gtk_string_list_new (NULL);
|
||||||
combo = gtk_drop_down_new (G_LIST_MODEL (strings), NULL);
|
combo = gtk_drop_down_new (G_LIST_MODEL (strings), NULL);
|
||||||
|
|
||||||
gtk_widget_set_halign (combo, GTK_ALIGN_START);
|
gtk_widget_set_halign (combo, GTK_ALIGN_START);
|
||||||
gtk_widget_set_valign (combo, GTK_ALIGN_BASELINE_FILL);
|
gtk_widget_set_valign (combo, GTK_ALIGN_BASELINE);
|
||||||
|
|
||||||
gtk_string_list_append (strings, "");
|
gtk_string_list_append (strings, "");
|
||||||
|
|
||||||
@@ -1586,7 +1586,7 @@ update_font_variations (void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
gtk_grid_attach (GTK_GRID (demo->variations_grid), combo, 1, -1, 3, 1);
|
gtk_grid_attach (GTK_GRID (demo->variations_grid), combo, 1, -1, 3, 1);
|
||||||
g_signal_connect (combo, "notify::selected", G_CALLBACK (instance_changed), NULL);
|
g_signal_connect (combo, "notify::selecte", G_CALLBACK (instance_changed), NULL);
|
||||||
demo->instance_combo = combo;
|
demo->instance_combo = combo;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -59,9 +59,6 @@
|
|||||||
<property name="spacing">6</property>
|
<property name="spacing">6</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkFontDialogButton" id="font">
|
<object class="GtkFontDialogButton" id="font">
|
||||||
<accessibility>
|
|
||||||
<property name="label">Font</property>
|
|
||||||
</accessibility>
|
|
||||||
<property name="dialog">
|
<property name="dialog">
|
||||||
<object class="GtkFontDialog">
|
<object class="GtkFontDialog">
|
||||||
</object>
|
</object>
|
||||||
@@ -76,7 +73,7 @@
|
|||||||
<property name="column-spacing">10</property>
|
<property name="column-spacing">10</property>
|
||||||
<property name="row-spacing">10</property>
|
<property name="row-spacing">10</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkLabel" id="size_label">
|
<object class="GtkLabel">
|
||||||
<property name="label">Size</property>
|
<property name="label">Size</property>
|
||||||
<property name="xalign">0</property>
|
<property name="xalign">0</property>
|
||||||
<property name="valign">baseline</property>
|
<property name="valign">baseline</property>
|
||||||
@@ -92,9 +89,6 @@
|
|||||||
<property name="width-request">100</property>
|
<property name="width-request">100</property>
|
||||||
<property name="valign">baseline</property>
|
<property name="valign">baseline</property>
|
||||||
<property name="adjustment">size_adjustment</property>
|
<property name="adjustment">size_adjustment</property>
|
||||||
<accessibility>
|
|
||||||
<relation name="labelled-by">size_label</relation>
|
|
||||||
</accessibility>
|
|
||||||
<layout>
|
<layout>
|
||||||
<property name="column">1</property>
|
<property name="column">1</property>
|
||||||
<property name="row">0</property>
|
<property name="row">0</property>
|
||||||
@@ -107,9 +101,6 @@
|
|||||||
<property name="max-width-chars">4</property>
|
<property name="max-width-chars">4</property>
|
||||||
<property name="hexpand">0</property>
|
<property name="hexpand">0</property>
|
||||||
<property name="valign">baseline</property>
|
<property name="valign">baseline</property>
|
||||||
<accessibility>
|
|
||||||
<relation name="labelled-by">size_label</relation>
|
|
||||||
</accessibility>
|
|
||||||
<signal name="activate" handler="basic_entry_activated"
|
<signal name="activate" handler="basic_entry_activated"
|
||||||
object="size_adjustment" swapped="false"/>
|
object="size_adjustment" swapped="false"/>
|
||||||
<layout>
|
<layout>
|
||||||
@@ -119,7 +110,7 @@
|
|||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkLabel" id="letterspacing_label">
|
<object class="GtkLabel">
|
||||||
<property name="label">Letterspacing</property>
|
<property name="label">Letterspacing</property>
|
||||||
<property name="xalign">0</property>
|
<property name="xalign">0</property>
|
||||||
<property name="valign">baseline</property>
|
<property name="valign">baseline</property>
|
||||||
@@ -135,9 +126,6 @@
|
|||||||
<property name="width-request">100</property>
|
<property name="width-request">100</property>
|
||||||
<property name="valign">baseline</property>
|
<property name="valign">baseline</property>
|
||||||
<property name="adjustment">letterspacing_adjustment</property>
|
<property name="adjustment">letterspacing_adjustment</property>
|
||||||
<accessibility>
|
|
||||||
<relation name="labelled-by">letterspacing_label</relation>
|
|
||||||
</accessibility>
|
|
||||||
<layout>
|
<layout>
|
||||||
<property name="column">1</property>
|
<property name="column">1</property>
|
||||||
<property name="row">1</property>
|
<property name="row">1</property>
|
||||||
@@ -150,9 +138,6 @@
|
|||||||
<property name="max-width-chars">4</property>
|
<property name="max-width-chars">4</property>
|
||||||
<property name="hexpand">0</property>
|
<property name="hexpand">0</property>
|
||||||
<property name="valign">baseline</property>
|
<property name="valign">baseline</property>
|
||||||
<accessibility>
|
|
||||||
<relation name="labelled-by">letterspacing_label</relation>
|
|
||||||
</accessibility>
|
|
||||||
<signal name="activate" handler="basic_entry_activated"
|
<signal name="activate" handler="basic_entry_activated"
|
||||||
object="letterspacing_adjustment" swapped="false"/>
|
object="letterspacing_adjustment" swapped="false"/>
|
||||||
<layout>
|
<layout>
|
||||||
@@ -162,7 +147,7 @@
|
|||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkLabel" id="line_height_label">
|
<object class="GtkLabel">
|
||||||
<property name="label">Line Height</property>
|
<property name="label">Line Height</property>
|
||||||
<property name="xalign">0</property>
|
<property name="xalign">0</property>
|
||||||
<property name="valign">baseline</property>
|
<property name="valign">baseline</property>
|
||||||
@@ -178,9 +163,6 @@
|
|||||||
<property name="width-request">100</property>
|
<property name="width-request">100</property>
|
||||||
<property name="valign">baseline</property>
|
<property name="valign">baseline</property>
|
||||||
<property name="adjustment">line_height_adjustment</property>
|
<property name="adjustment">line_height_adjustment</property>
|
||||||
<accessibility>
|
|
||||||
<relation name="labelled-by">line_height_label</relation>
|
|
||||||
</accessibility>
|
|
||||||
<layout>
|
<layout>
|
||||||
<property name="column">1</property>
|
<property name="column">1</property>
|
||||||
<property name="row">2</property>
|
<property name="row">2</property>
|
||||||
@@ -193,9 +175,6 @@
|
|||||||
<property name="max-width-chars">4</property>
|
<property name="max-width-chars">4</property>
|
||||||
<property name="hexpand">0</property>
|
<property name="hexpand">0</property>
|
||||||
<property name="valign">baseline</property>
|
<property name="valign">baseline</property>
|
||||||
<accessibility>
|
|
||||||
<relation name="labelled-by">line_height_label</relation>
|
|
||||||
</accessibility>
|
|
||||||
<signal name="activate" handler="basic_entry_activated"
|
<signal name="activate" handler="basic_entry_activated"
|
||||||
object="line_height_adjustment" swapped="false"/>
|
object="line_height_adjustment" swapped="false"/>
|
||||||
<layout>
|
<layout>
|
||||||
@@ -205,7 +184,7 @@
|
|||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkLabel" id="foreground_label">
|
<object class="GtkLabel">
|
||||||
<property name="label">Foreground</property>
|
<property name="label">Foreground</property>
|
||||||
<property name="xalign">0</property>
|
<property name="xalign">0</property>
|
||||||
<property name="valign">baseline</property>
|
<property name="valign">baseline</property>
|
||||||
@@ -223,9 +202,6 @@
|
|||||||
</property>
|
</property>
|
||||||
<property name="valign">baseline</property>
|
<property name="valign">baseline</property>
|
||||||
<property name="rgba">black</property>
|
<property name="rgba">black</property>
|
||||||
<accessibility>
|
|
||||||
<relation name="labelled-by">foreground_label</relation>
|
|
||||||
</accessibility>
|
|
||||||
<signal name="notify::rgba" handler="color_set_cb"/>
|
<signal name="notify::rgba" handler="color_set_cb"/>
|
||||||
<layout>
|
<layout>
|
||||||
<property name="column">1</property>
|
<property name="column">1</property>
|
||||||
@@ -234,7 +210,7 @@
|
|||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkLabel" id="background_label">
|
<object class="GtkLabel">
|
||||||
<property name="label">Background</property>
|
<property name="label">Background</property>
|
||||||
<property name="xalign">0</property>
|
<property name="xalign">0</property>
|
||||||
<property name="valign">baseline</property>
|
<property name="valign">baseline</property>
|
||||||
@@ -252,9 +228,6 @@
|
|||||||
</property>
|
</property>
|
||||||
<property name="valign">baseline</property>
|
<property name="valign">baseline</property>
|
||||||
<property name="rgba">white</property>
|
<property name="rgba">white</property>
|
||||||
<accessibility>
|
|
||||||
<relation name="labelled-by">background_label</relation>
|
|
||||||
</accessibility>
|
|
||||||
<signal name="notify::rgba" handler="color_set_cb"/>
|
<signal name="notify::rgba" handler="color_set_cb"/>
|
||||||
<layout>
|
<layout>
|
||||||
<property name="column">1</property>
|
<property name="column">1</property>
|
||||||
@@ -267,9 +240,6 @@
|
|||||||
<property name="icon-name">object-flip-vertical-symbolic</property>
|
<property name="icon-name">object-flip-vertical-symbolic</property>
|
||||||
<property name="halign">start</property>
|
<property name="halign">start</property>
|
||||||
<property name="valign">center</property>
|
<property name="valign">center</property>
|
||||||
<accessibility>
|
|
||||||
<property name="label">Swap colors</property>
|
|
||||||
</accessibility>
|
|
||||||
<style>
|
<style>
|
||||||
<class name="circular"/>
|
<class name="circular"/>
|
||||||
</style>
|
</style>
|
||||||
@@ -371,9 +341,6 @@
|
|||||||
<property name="yalign">0</property>
|
<property name="yalign">0</property>
|
||||||
<property name="valign">start</property>
|
<property name="valign">start</property>
|
||||||
<property name="selectable">1</property>
|
<property name="selectable">1</property>
|
||||||
<accessibility>
|
|
||||||
<property name="label">Font example</property>
|
|
||||||
</accessibility>
|
|
||||||
</object>
|
</object>
|
||||||
</property>
|
</property>
|
||||||
</object>
|
</object>
|
||||||
@@ -383,9 +350,6 @@
|
|||||||
<property name="name">entry</property>
|
<property name="name">entry</property>
|
||||||
<property name="child">
|
<property name="child">
|
||||||
<object class="GtkTextView" id="entry">
|
<object class="GtkTextView" id="entry">
|
||||||
<accessibility>
|
|
||||||
<property name="label">Example text</property>
|
|
||||||
</accessibility>
|
|
||||||
<property name="buffer">
|
<property name="buffer">
|
||||||
<object class="GtkTextBuffer">
|
<object class="GtkTextBuffer">
|
||||||
<property name="text">Grumpy wizards make toxic brew for the evil Queen and Jack. A quick movement of the enemy will jeopardize six gunboats. The job of waxing linoleum frequently peeves chintzy kids. My girl wove six dozen plaid jackets before she quit. Twelve ziggurats quickly jumped a finch box.
|
<property name="text">Grumpy wizards make toxic brew for the evil Queen and Jack. A quick movement of the enemy will jeopardize six gunboats. The job of waxing linoleum frequently peeves chintzy kids. My girl wove six dozen plaid jackets before she quit. Twelve ziggurats quickly jumped a finch box.
|
||||||
@@ -482,9 +446,6 @@
|
|||||||
<property name="icon-name">document-edit-symbolic</property>
|
<property name="icon-name">document-edit-symbolic</property>
|
||||||
<property name="halign">end</property>
|
<property name="halign">end</property>
|
||||||
<property name="valign">end</property>
|
<property name="valign">end</property>
|
||||||
<accessibility>
|
|
||||||
<property name="label">Edit text</property>
|
|
||||||
</accessibility>
|
|
||||||
<signal name="clicked" handler="font_features_toggle_edit"/>
|
<signal name="clicked" handler="font_features_toggle_edit"/>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
|
@@ -42,8 +42,8 @@ val_to_xy (GtkFontPlane *plane,
|
|||||||
double u, v;
|
double u, v;
|
||||||
int width, height;
|
int width, height;
|
||||||
|
|
||||||
width = gtk_widget_get_width (GTK_WIDGET (plane));
|
width = gtk_widget_get_allocated_width (GTK_WIDGET (plane));
|
||||||
height = gtk_widget_get_height (GTK_WIDGET (plane));
|
height = gtk_widget_get_allocated_height (GTK_WIDGET (plane));
|
||||||
|
|
||||||
u = adjustment_get_normalized_value (plane->width_adj);
|
u = adjustment_get_normalized_value (plane->width_adj);
|
||||||
v = adjustment_get_normalized_value (plane->weight_adj);
|
v = adjustment_get_normalized_value (plane->weight_adj);
|
||||||
@@ -62,8 +62,8 @@ plane_snapshot (GtkWidget *widget,
|
|||||||
cairo_t *cr;
|
cairo_t *cr;
|
||||||
|
|
||||||
val_to_xy (plane, &x, &y);
|
val_to_xy (plane, &x, &y);
|
||||||
width = gtk_widget_get_width (widget);
|
width = gtk_widget_get_allocated_width (widget);
|
||||||
height = gtk_widget_get_height (widget);
|
height = gtk_widget_get_allocated_height (widget);
|
||||||
|
|
||||||
cr = gtk_snapshot_append_cairo (snapshot,
|
cr = gtk_snapshot_append_cairo (snapshot,
|
||||||
&GRAPHENE_RECT_INIT (0, 0, width, height));
|
&GRAPHENE_RECT_INIT (0, 0, width, height));
|
||||||
@@ -131,8 +131,8 @@ update_value (GtkFontPlane *plane,
|
|||||||
GtkWidget *widget = GTK_WIDGET (plane);
|
GtkWidget *widget = GTK_WIDGET (plane);
|
||||||
double u, v;
|
double u, v;
|
||||||
|
|
||||||
u = CLAMP (x * (1.0 / gtk_widget_get_width (widget)), 0, 1);
|
u = CLAMP (x * (1.0 / gtk_widget_get_allocated_width (widget)), 0, 1);
|
||||||
v = CLAMP (1 - y * (1.0 / gtk_widget_get_height (widget)), 0, 1);
|
v = CLAMP (1 - y * (1.0 / gtk_widget_get_allocated_height (widget)), 0, 1);
|
||||||
|
|
||||||
adjustment_set_normalized_value (plane->width_adj, u);
|
adjustment_set_normalized_value (plane->width_adj, u);
|
||||||
adjustment_set_normalized_value (plane->weight_adj, v);
|
adjustment_set_normalized_value (plane->weight_adj, v);
|
||||||
|
@@ -15,7 +15,8 @@
|
|||||||
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#pragma once
|
#ifndef __GTK_FONT_PLANE_H__
|
||||||
|
#define __GTK_FONT_PLANE_H__
|
||||||
|
|
||||||
#include <gtk/gtk.h>
|
#include <gtk/gtk.h>
|
||||||
|
|
||||||
@@ -59,3 +60,5 @@ GtkWidget * gtk_font_plane_new (GtkAdjustment *width_adj,
|
|||||||
GtkAdjustment *weight_adj);
|
GtkAdjustment *weight_adj);
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
|
#endif /* __GTK_FONT_PLANE_H__ */
|
||||||
|
@@ -43,7 +43,6 @@ update_image (void)
|
|||||||
cairo_t *cr;
|
cairo_t *cr;
|
||||||
GdkPixbuf *pixbuf;
|
GdkPixbuf *pixbuf;
|
||||||
GdkPixbuf *pixbuf2;
|
GdkPixbuf *pixbuf2;
|
||||||
GdkTexture *texture;
|
|
||||||
cairo_font_options_t *fopt;
|
cairo_font_options_t *fopt;
|
||||||
cairo_hint_style_t hintstyle;
|
cairo_hint_style_t hintstyle;
|
||||||
cairo_hint_metrics_t hintmetrics;
|
cairo_hint_metrics_t hintmetrics;
|
||||||
@@ -121,17 +120,8 @@ update_image (void)
|
|||||||
cairo_destroy (cr);
|
cairo_destroy (cr);
|
||||||
g_object_unref (layout);
|
g_object_unref (layout);
|
||||||
|
|
||||||
pixbuf = gdk_pixbuf_new_from_data (cairo_image_surface_get_data (surface),
|
pixbuf = gdk_pixbuf_get_from_surface (surface, 0, 0, cairo_image_surface_get_width (surface), cairo_image_surface_get_height (surface));
|
||||||
GDK_COLORSPACE_RGB, TRUE, 8,
|
pixbuf2 = gdk_pixbuf_scale_simple (pixbuf, gdk_pixbuf_get_width (pixbuf) * scale, gdk_pixbuf_get_height (pixbuf) * scale, GDK_INTERP_NEAREST);
|
||||||
cairo_image_surface_get_width (surface),
|
|
||||||
cairo_image_surface_get_height (surface),
|
|
||||||
cairo_image_surface_get_stride (surface),
|
|
||||||
NULL, NULL);
|
|
||||||
|
|
||||||
pixbuf2 = gdk_pixbuf_scale_simple (pixbuf,
|
|
||||||
gdk_pixbuf_get_width (pixbuf) * scale,
|
|
||||||
gdk_pixbuf_get_height (pixbuf) * scale,
|
|
||||||
GDK_INTERP_NEAREST);
|
|
||||||
|
|
||||||
g_object_unref (pixbuf);
|
g_object_unref (pixbuf);
|
||||||
cairo_surface_destroy (surface);
|
cairo_surface_destroy (surface);
|
||||||
@@ -288,25 +278,15 @@ retry:
|
|||||||
pango_layout_iter_free (iter);
|
pango_layout_iter_free (iter);
|
||||||
g_object_unref (layout);
|
g_object_unref (layout);
|
||||||
|
|
||||||
pixbuf = gdk_pixbuf_new_from_data (cairo_image_surface_get_data (surface),
|
pixbuf = gdk_pixbuf_get_from_surface (surface, 0, 0, cairo_image_surface_get_width (surface), cairo_image_surface_get_height (surface));
|
||||||
GDK_COLORSPACE_RGB, TRUE, 8,
|
pixbuf2 = gdk_pixbuf_scale_simple (pixbuf, gdk_pixbuf_get_width (pixbuf) * scale, gdk_pixbuf_get_height (pixbuf) * scale, GDK_INTERP_NEAREST);
|
||||||
cairo_image_surface_get_width (surface),
|
|
||||||
cairo_image_surface_get_height (surface),
|
|
||||||
cairo_image_surface_get_stride (surface),
|
|
||||||
NULL, NULL);
|
|
||||||
|
|
||||||
pixbuf2 = gdk_pixbuf_scale_simple (pixbuf,
|
|
||||||
gdk_pixbuf_get_width (pixbuf) * scale,
|
|
||||||
gdk_pixbuf_get_height (pixbuf) * scale,
|
|
||||||
GDK_INTERP_NEAREST);
|
|
||||||
g_object_unref (pixbuf);
|
g_object_unref (pixbuf);
|
||||||
cairo_surface_destroy (surface);
|
cairo_surface_destroy (surface);
|
||||||
}
|
}
|
||||||
|
|
||||||
texture = gdk_texture_new_for_pixbuf (pixbuf2);
|
gtk_picture_set_pixbuf (GTK_PICTURE (image), pixbuf2);
|
||||||
gtk_picture_set_paintable (GTK_PICTURE (image), GDK_PAINTABLE (texture));
|
|
||||||
g_object_unref (pixbuf2);
|
g_object_unref (pixbuf2);
|
||||||
g_object_unref (texture);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean fading = FALSE;
|
static gboolean fading = FALSE;
|
||||||
|
@@ -39,7 +39,7 @@
|
|||||||
<property name="row-spacing">10</property>
|
<property name="row-spacing">10</property>
|
||||||
<property name="column-spacing">10</property>
|
<property name="column-spacing">10</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkLabel" id="text_label">
|
<object class="GtkLabel">
|
||||||
<property name="margin-start">10</property>
|
<property name="margin-start">10</property>
|
||||||
<property name="label">Text</property>
|
<property name="label">Text</property>
|
||||||
<property name="xalign">1</property>
|
<property name="xalign">1</property>
|
||||||
@@ -57,13 +57,10 @@
|
|||||||
<layout>
|
<layout>
|
||||||
<property name="column">2</property>
|
<property name="column">2</property>
|
||||||
</layout>
|
</layout>
|
||||||
<accessibility>
|
|
||||||
<relation name="labelled-by">text_label</relation>
|
|
||||||
</accessibility>
|
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkLabel" id="font_label">
|
<object class="GtkLabel">
|
||||||
<property name="margin-start">10</property>
|
<property name="margin-start">10</property>
|
||||||
<property name="label">Font</property>
|
<property name="label">Font</property>
|
||||||
<property name="xalign">1</property>
|
<property name="xalign">1</property>
|
||||||
@@ -78,9 +75,6 @@
|
|||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkFontDialogButton" id="font_button">
|
<object class="GtkFontDialogButton" id="font_button">
|
||||||
<accessibility>
|
|
||||||
<relation name="labelled-by">font_label</relation>
|
|
||||||
</accessibility>
|
|
||||||
<property name="dialog">
|
<property name="dialog">
|
||||||
<object class="GtkFontDialog">
|
<object class="GtkFontDialog">
|
||||||
</object>
|
</object>
|
||||||
@@ -192,9 +186,6 @@
|
|||||||
<property name="icon-name">list-add-symbolic</property>
|
<property name="icon-name">list-add-symbolic</property>
|
||||||
<property name="halign">center</property>
|
<property name="halign">center</property>
|
||||||
<property name="valign">center</property>
|
<property name="valign">center</property>
|
||||||
<accessibility>
|
|
||||||
<property name="label">Zoom in</property>
|
|
||||||
</accessibility>
|
|
||||||
<style>
|
<style>
|
||||||
<class name="circular"/>
|
<class name="circular"/>
|
||||||
</style>
|
</style>
|
||||||
@@ -220,9 +211,6 @@
|
|||||||
<property name="icon-name">list-remove-symbolic</property>
|
<property name="icon-name">list-remove-symbolic</property>
|
||||||
<property name="halign">center</property>
|
<property name="halign">center</property>
|
||||||
<property name="valign">center</property>
|
<property name="valign">center</property>
|
||||||
<accessibility>
|
|
||||||
<property name="label">Zoom out</property>
|
|
||||||
</accessibility>
|
|
||||||
<style>
|
<style>
|
||||||
<class name="circular"/>
|
<class name="circular"/>
|
||||||
</style>
|
</style>
|
||||||
@@ -263,9 +251,6 @@
|
|||||||
<property name="vexpand">1</property>
|
<property name="vexpand">1</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkPicture" id="image">
|
<object class="GtkPicture" id="image">
|
||||||
<accessibility>
|
|
||||||
<property name="label">Font rendering example</property>
|
|
||||||
</accessibility>
|
|
||||||
<property name="halign">center</property>
|
<property name="halign">center</property>
|
||||||
<property name="valign">center</property>
|
<property name="valign">center</property>
|
||||||
<property name="can-shrink">0</property>
|
<property name="can-shrink">0</property>
|
||||||
|
@@ -337,7 +337,7 @@ create_gltransition_window (GtkWidget *do_widget)
|
|||||||
1, 1, 1, 1);
|
1, 1, 1, 1);
|
||||||
|
|
||||||
provider = gtk_css_provider_new ();
|
provider = gtk_css_provider_new ();
|
||||||
gtk_css_provider_load_from_string (provider, "button.small { padding: 0; }");
|
gtk_css_provider_load_from_data (provider, "button.small { padding: 0; }", -1);
|
||||||
gtk_style_context_add_provider_for_display (gdk_display_get_default (),
|
gtk_style_context_add_provider_for_display (gdk_display_get_default (),
|
||||||
GTK_STYLE_PROVIDER (provider),
|
GTK_STYLE_PROVIDER (provider),
|
||||||
GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
|
GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
|
||||||
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB |
@@ -1,153 +0,0 @@
|
|||||||
#include "graphwidget.h"
|
|
||||||
|
|
||||||
struct _GraphWidget
|
|
||||||
{
|
|
||||||
GtkWidget parent_instance;
|
|
||||||
|
|
||||||
GskPath *path;
|
|
||||||
GskStroke *stroke;
|
|
||||||
GdkRGBA color;
|
|
||||||
|
|
||||||
guint tick_cb;
|
|
||||||
guint64 start_time;
|
|
||||||
|
|
||||||
double period;
|
|
||||||
double amplitude;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct _GraphWidgetClass
|
|
||||||
{
|
|
||||||
GtkWidgetClass parent_class;
|
|
||||||
};
|
|
||||||
|
|
||||||
G_DEFINE_TYPE (GraphWidget, graph_widget, GTK_TYPE_WIDGET)
|
|
||||||
|
|
||||||
static void
|
|
||||||
update_path (GraphWidget *self,
|
|
||||||
float amplitude)
|
|
||||||
{
|
|
||||||
graphene_point_t p[20];
|
|
||||||
GskPathBuilder *builder;
|
|
||||||
|
|
||||||
g_clear_pointer (&self->path, gsk_path_unref);
|
|
||||||
|
|
||||||
for (int i = 0; i < 20; i++)
|
|
||||||
{
|
|
||||||
p[i].x = 10 * i;
|
|
||||||
p[i].y = 50;
|
|
||||||
|
|
||||||
if (i % 4 == 1 || i % 4 == 2)
|
|
||||||
{
|
|
||||||
if (i % 8 < 4)
|
|
||||||
p[i].y += amplitude;
|
|
||||||
else
|
|
||||||
p[i].y -= amplitude;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
builder = gsk_path_builder_new ();
|
|
||||||
gsk_path_builder_move_to (builder, p[0].x, p[0].y);
|
|
||||||
|
|
||||||
for (int i = 0; i < 20; i += 4)
|
|
||||||
gsk_path_builder_cubic_to (builder,
|
|
||||||
p[i+1].x, p[i+1].y,
|
|
||||||
p[i+2].x, p[i+2].y,
|
|
||||||
p[i+3].x, p[i+3].y);
|
|
||||||
|
|
||||||
self->path = gsk_path_builder_free_to_path (builder);
|
|
||||||
}
|
|
||||||
|
|
||||||
static gboolean
|
|
||||||
tick_cb (GtkWidget *widget,
|
|
||||||
GdkFrameClock *frame_clock,
|
|
||||||
gpointer user_data)
|
|
||||||
{
|
|
||||||
GraphWidget *self = GRAPH_WIDGET (widget);
|
|
||||||
guint64 now;
|
|
||||||
double angle;
|
|
||||||
|
|
||||||
now = gdk_frame_clock_get_frame_time (frame_clock);
|
|
||||||
|
|
||||||
if (self->start_time == 0)
|
|
||||||
self->start_time = now;
|
|
||||||
|
|
||||||
angle = 360 * (now - self->start_time) / (double)(self->period * G_TIME_SPAN_MINUTE);
|
|
||||||
update_path (self, sin (angle) * self->amplitude);
|
|
||||||
|
|
||||||
gtk_widget_queue_draw (widget);
|
|
||||||
|
|
||||||
return G_SOURCE_CONTINUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
graph_widget_init (GraphWidget *self)
|
|
||||||
{
|
|
||||||
self->color.red = g_random_double_range (0, 1);
|
|
||||||
self->color.green = g_random_double_range (0, 1);
|
|
||||||
self->color.blue = g_random_double_range (0, 1);
|
|
||||||
self->color.alpha = 1;
|
|
||||||
|
|
||||||
self->period = g_random_double_range (0.5, 1);
|
|
||||||
self->amplitude = g_random_double_range (10, 25);
|
|
||||||
|
|
||||||
self->stroke = gsk_stroke_new (2);
|
|
||||||
|
|
||||||
update_path (self, 0);
|
|
||||||
|
|
||||||
self->start_time = 0;
|
|
||||||
self->tick_cb = gtk_widget_add_tick_callback (GTK_WIDGET (self), tick_cb, NULL, NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
graph_widget_dispose (GObject *object)
|
|
||||||
{
|
|
||||||
GraphWidget *self = GRAPH_WIDGET (object);
|
|
||||||
|
|
||||||
g_clear_pointer (&self->path, gsk_path_unref);
|
|
||||||
gsk_stroke_free (self->stroke);
|
|
||||||
|
|
||||||
G_OBJECT_CLASS (graph_widget_parent_class)->dispose (object);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
graph_widget_snapshot (GtkWidget *widget,
|
|
||||||
GtkSnapshot *snapshot)
|
|
||||||
{
|
|
||||||
GraphWidget *self = GRAPH_WIDGET (widget);
|
|
||||||
|
|
||||||
gtk_snapshot_append_stroke (snapshot, self->path, self->stroke, &self->color);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
graph_widget_measure (GtkWidget *widget,
|
|
||||||
GtkOrientation orientation,
|
|
||||||
int for_size,
|
|
||||||
int *minimum,
|
|
||||||
int *natural,
|
|
||||||
int *minimum_baseline,
|
|
||||||
int *natural_baseline)
|
|
||||||
{
|
|
||||||
if (orientation == GTK_ORIENTATION_HORIZONTAL)
|
|
||||||
*minimum = *natural = 200;
|
|
||||||
else
|
|
||||||
*minimum = *natural = 100;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static void
|
|
||||||
graph_widget_class_init (GraphWidgetClass *class)
|
|
||||||
{
|
|
||||||
GObjectClass *object_class = G_OBJECT_CLASS (class);
|
|
||||||
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (class);
|
|
||||||
|
|
||||||
object_class->dispose = graph_widget_dispose;
|
|
||||||
|
|
||||||
widget_class->snapshot = graph_widget_snapshot;
|
|
||||||
widget_class->measure = graph_widget_measure;
|
|
||||||
}
|
|
||||||
|
|
||||||
GtkWidget *
|
|
||||||
graph_widget_new (void)
|
|
||||||
{
|
|
||||||
return g_object_new (GRAPH_TYPE_WIDGET, NULL);
|
|
||||||
}
|
|
@@ -1,8 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
#include <gtk/gtk.h>
|
|
||||||
|
|
||||||
#define GRAPH_TYPE_WIDGET (graph_widget_get_type ())
|
|
||||||
G_DECLARE_FINAL_TYPE (GraphWidget, graph_widget, GRAPH, WIDGET, GtkWidget)
|
|
||||||
|
|
||||||
GtkWidget * graph_widget_new (void);
|
|
@@ -17,7 +17,8 @@
|
|||||||
* Authors: Matthias Clasen <mclasen@redhat.com>
|
* Authors: Matthias Clasen <mclasen@redhat.com>
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#pragma once
|
#ifndef __GSK_SHADER_PAINTABLE_H__
|
||||||
|
#define __GSK_SHADER_PAINTABLE_H__
|
||||||
|
|
||||||
#include <gdk/gdk.h>
|
#include <gdk/gdk.h>
|
||||||
#include <gsk/gsk.h>
|
#include <gsk/gsk.h>
|
||||||
@@ -26,18 +27,27 @@ G_BEGIN_DECLS
|
|||||||
|
|
||||||
#define GSK_TYPE_SHADER_PAINTABLE (gsk_shader_paintable_get_type ())
|
#define GSK_TYPE_SHADER_PAINTABLE (gsk_shader_paintable_get_type ())
|
||||||
|
|
||||||
|
GDK_AVAILABLE_IN_ALL
|
||||||
G_DECLARE_FINAL_TYPE (GskShaderPaintable, gsk_shader_paintable, GSK, SHADER_PAINTABLE, GObject)
|
G_DECLARE_FINAL_TYPE (GskShaderPaintable, gsk_shader_paintable, GSK, SHADER_PAINTABLE, GObject)
|
||||||
|
|
||||||
|
GDK_AVAILABLE_IN_ALL
|
||||||
GdkPaintable * gsk_shader_paintable_new (GskGLShader *shader,
|
GdkPaintable * gsk_shader_paintable_new (GskGLShader *shader,
|
||||||
GBytes *data);
|
GBytes *data);
|
||||||
|
|
||||||
|
GDK_AVAILABLE_IN_ALL
|
||||||
GskGLShader * gsk_shader_paintable_get_shader (GskShaderPaintable *self);
|
GskGLShader * gsk_shader_paintable_get_shader (GskShaderPaintable *self);
|
||||||
|
GDK_AVAILABLE_IN_ALL
|
||||||
void gsk_shader_paintable_set_shader (GskShaderPaintable *self,
|
void gsk_shader_paintable_set_shader (GskShaderPaintable *self,
|
||||||
GskGLShader *shader);
|
GskGLShader *shader);
|
||||||
|
GDK_AVAILABLE_IN_ALL
|
||||||
GBytes * gsk_shader_paintable_get_args (GskShaderPaintable *self);
|
GBytes * gsk_shader_paintable_get_args (GskShaderPaintable *self);
|
||||||
|
GDK_AVAILABLE_IN_ALL
|
||||||
void gsk_shader_paintable_set_args (GskShaderPaintable *self,
|
void gsk_shader_paintable_set_args (GskShaderPaintable *self,
|
||||||
GBytes *data);
|
GBytes *data);
|
||||||
|
GDK_AVAILABLE_IN_ALL
|
||||||
void gsk_shader_paintable_update_time (GskShaderPaintable *self,
|
void gsk_shader_paintable_update_time (GskShaderPaintable *self,
|
||||||
int time_idx,
|
int time_idx,
|
||||||
gint64 frame_time);
|
gint64 frame_time);
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
|
#endif /* __GSK_SHADER_PAINTABLE_H__ */
|
||||||
|
@@ -15,7 +15,8 @@
|
|||||||
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#pragma once
|
#ifndef __GTK_FISHBOWL_H__
|
||||||
|
#define __GTK_FISHBOWL_H__
|
||||||
|
|
||||||
#include <gtk/gtk.h>
|
#include <gtk/gtk.h>
|
||||||
|
|
||||||
@@ -64,3 +65,5 @@ void gtk_fishbowl_set_creation_func (GtkFishbowl *fishbowl,
|
|||||||
GtkFishCreationFunc creation_func);
|
GtkFishCreationFunc creation_func);
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
|
#endif /* __GTK_FISHBOWL_H__ */
|
||||||
|
@@ -840,24 +840,24 @@ gtk_gears_unrealize (GtkWidget *widget)
|
|||||||
GtkGearsPrivate *priv = gtk_gears_get_instance_private ((GtkGears *) widget);
|
GtkGearsPrivate *priv = gtk_gears_get_instance_private ((GtkGears *) widget);
|
||||||
|
|
||||||
gtk_gl_area_make_current (glarea);
|
gtk_gl_area_make_current (glarea);
|
||||||
if (gtk_gl_area_get_error (glarea) == NULL)
|
if (gtk_gl_area_get_error (glarea) != NULL)
|
||||||
{
|
return;
|
||||||
/* Release the resources associated with OpenGL */
|
|
||||||
if (priv->gear_vbo[0] != 0)
|
|
||||||
glDeleteBuffers (1, &(priv->gear_vbo[0]));
|
|
||||||
|
|
||||||
if (priv->gear_vbo[1] != 0)
|
/* Release the resources associated with OpenGL */
|
||||||
glDeleteBuffers (1, &(priv->gear_vbo[1]));
|
if (priv->gear_vbo[0] != 0)
|
||||||
|
glDeleteBuffers (1, &(priv->gear_vbo[0]));
|
||||||
|
|
||||||
if (priv->gear_vbo[2] != 0)
|
if (priv->gear_vbo[1] != 0)
|
||||||
glDeleteBuffers (1, &(priv->gear_vbo[2]));
|
glDeleteBuffers (1, &(priv->gear_vbo[1]));
|
||||||
|
|
||||||
if (priv->vao != 0)
|
if (priv->gear_vbo[2] != 0)
|
||||||
glDeleteVertexArrays (1, &priv->vao);
|
glDeleteBuffers (1, &(priv->gear_vbo[2]));
|
||||||
|
|
||||||
if (priv->program != 0)
|
if (priv->vao != 0)
|
||||||
glDeleteProgram (priv->program);
|
glDeleteVertexArrays (1, &priv->vao);
|
||||||
}
|
|
||||||
|
if (priv->program != 0)
|
||||||
|
glDeleteProgram (priv->program);
|
||||||
|
|
||||||
priv->ModelViewProjectionMatrix_location = 0;
|
priv->ModelViewProjectionMatrix_location = 0;
|
||||||
priv->NormalMatrix_location = 0;
|
priv->NormalMatrix_location = 0;
|
||||||
|
@@ -1,4 +1,5 @@
|
|||||||
#pragma once
|
#ifndef __GTK_GEARS_H__
|
||||||
|
#define __GTK_GEARS_H__
|
||||||
|
|
||||||
#include <gtk/gtk.h>
|
#include <gtk/gtk.h>
|
||||||
|
|
||||||
@@ -43,3 +44,5 @@ void gtk_gears_set_fps_label (GtkGears *gears,
|
|||||||
|
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
|
#endif /* __GTK_GEARS_H__ */
|
||||||
|
@@ -1,4 +1,5 @@
|
|||||||
#pragma once
|
#ifndef __GTK_SHADER_BIN_H__
|
||||||
|
#define __GTK_SHADER_BIN_H__
|
||||||
|
|
||||||
#include <gtk/gtk.h>
|
#include <gtk/gtk.h>
|
||||||
|
|
||||||
@@ -18,3 +19,5 @@ void gtk_shader_bin_set_child (GtkShaderBin *self,
|
|||||||
GtkWidget *gtk_shader_bin_get_child (GtkShaderBin *self);
|
GtkWidget *gtk_shader_bin_get_child (GtkShaderBin *self);
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
|
#endif /* __GTK_SHADER_BIN_H__ */
|
||||||
|
@@ -1,4 +1,5 @@
|
|||||||
#pragma once
|
#ifndef __GTK_SHADER_STACK_H__
|
||||||
|
#define __GTK_SHADER_STACK_H__
|
||||||
|
|
||||||
#include <gtk/gtk.h>
|
#include <gtk/gtk.h>
|
||||||
|
|
||||||
@@ -18,3 +19,5 @@ void gtk_shader_stack_set_active (GtkShaderStack *self,
|
|||||||
int index);
|
int index);
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
|
#endif /* __GTK_SHADER_STACK_H__ */
|
||||||
|
@@ -1,4 +1,5 @@
|
|||||||
#pragma once
|
#ifndef __GTK_SHADERTOY_H__
|
||||||
|
#define __GTK_SHADERTOY_H__
|
||||||
|
|
||||||
#include <gtk/gtk.h>
|
#include <gtk/gtk.h>
|
||||||
|
|
||||||
@@ -29,3 +30,5 @@ void gtk_shadertoy_set_image_shader (GtkShadertoy *shadertoy,
|
|||||||
const char *shader);
|
const char *shader);
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
|
#endif /* __GTK_SHADERTOY_H__ */
|
||||||
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.4 KiB |
@@ -18,7 +18,6 @@ do_headerbar (GtkWidget *do_widget)
|
|||||||
GtkWidget *header;
|
GtkWidget *header;
|
||||||
GtkWidget *button;
|
GtkWidget *button;
|
||||||
GtkWidget *box;
|
GtkWidget *box;
|
||||||
GtkWidget *content;
|
|
||||||
|
|
||||||
if (!window)
|
if (!window)
|
||||||
{
|
{
|
||||||
@@ -38,26 +37,16 @@ do_headerbar (GtkWidget *do_widget)
|
|||||||
box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
|
box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
|
||||||
gtk_widget_add_css_class (box, "linked");
|
gtk_widget_add_css_class (box, "linked");
|
||||||
button = gtk_button_new_from_icon_name ("go-previous-symbolic");
|
button = gtk_button_new_from_icon_name ("go-previous-symbolic");
|
||||||
gtk_widget_set_tooltip_text (button, "Back");
|
|
||||||
gtk_box_append (GTK_BOX (box), button);
|
gtk_box_append (GTK_BOX (box), button);
|
||||||
button = gtk_button_new_from_icon_name ("go-next-symbolic");
|
button = gtk_button_new_from_icon_name ("go-next-symbolic");
|
||||||
gtk_widget_set_tooltip_text (button, "Forward");
|
|
||||||
gtk_box_append (GTK_BOX (box), button);
|
gtk_box_append (GTK_BOX (box), button);
|
||||||
|
|
||||||
gtk_header_bar_pack_start (GTK_HEADER_BAR (header), box);
|
gtk_header_bar_pack_start (GTK_HEADER_BAR (header), box);
|
||||||
button = gtk_switch_new ();
|
gtk_header_bar_pack_start (GTK_HEADER_BAR (header), gtk_switch_new ());
|
||||||
gtk_accessible_update_property (GTK_ACCESSIBLE (button),
|
|
||||||
GTK_ACCESSIBLE_PROPERTY_LABEL, "Change something",
|
|
||||||
-1);
|
|
||||||
gtk_header_bar_pack_start (GTK_HEADER_BAR (header), button);
|
|
||||||
|
|
||||||
gtk_window_set_titlebar (GTK_WINDOW (window), header);
|
gtk_window_set_titlebar (GTK_WINDOW (window), header);
|
||||||
|
|
||||||
content = gtk_text_view_new ();
|
gtk_window_set_child (GTK_WINDOW (window), gtk_text_view_new ());
|
||||||
gtk_accessible_update_property (GTK_ACCESSIBLE (content),
|
|
||||||
GTK_ACCESSIBLE_PROPERTY_LABEL, "Content",
|
|
||||||
-1);
|
|
||||||
gtk_window_set_child (GTK_WINDOW (window), content);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!gtk_widget_get_visible (window))
|
if (!gtk_widget_get_visible (window))
|
||||||
|
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 1.5 KiB |
@@ -354,18 +354,10 @@ do_iconscroll (GtkWidget *do_widget)
|
|||||||
if (!window)
|
if (!window)
|
||||||
{
|
{
|
||||||
GtkBuilder *builder;
|
GtkBuilder *builder;
|
||||||
GtkBuilderScope *scope;
|
|
||||||
GtkWidget *label;
|
GtkWidget *label;
|
||||||
guint id;
|
guint id;
|
||||||
|
|
||||||
scope = gtk_builder_cscope_new ();
|
builder = gtk_builder_new_from_resource ("/iconscroll/iconscroll.ui");
|
||||||
gtk_builder_cscope_add_callback (GTK_BUILDER_CSCOPE (scope), iconscroll_prev_clicked_cb);
|
|
||||||
gtk_builder_cscope_add_callback (GTK_BUILDER_CSCOPE (scope), iconscroll_next_clicked_cb);
|
|
||||||
|
|
||||||
builder = gtk_builder_new ();
|
|
||||||
gtk_builder_set_scope (builder, scope);
|
|
||||||
|
|
||||||
gtk_builder_add_from_resource (builder, "/iconscroll/iconscroll.ui", NULL);
|
|
||||||
window = GTK_WIDGET (gtk_builder_get_object (builder, "window"));
|
window = GTK_WIDGET (gtk_builder_get_object (builder, "window"));
|
||||||
g_object_add_weak_pointer (G_OBJECT (window), (gpointer *)&window);
|
g_object_add_weak_pointer (G_OBJECT (window), (gpointer *)&window);
|
||||||
gtk_window_set_display (GTK_WINDOW (window),
|
gtk_window_set_display (GTK_WINDOW (window),
|
||||||
@@ -378,12 +370,11 @@ do_iconscroll (GtkWidget *do_widget)
|
|||||||
set_widget_type (0);
|
set_widget_type (0);
|
||||||
|
|
||||||
label = GTK_WIDGET (gtk_builder_get_object (builder, "fps_label"));
|
label = GTK_WIDGET (gtk_builder_get_object (builder, "fps_label"));
|
||||||
id = g_timeout_add_full (G_PRIORITY_HIGH, 500, update_fps, label, NULL);
|
id = g_timeout_add (500, update_fps, label);
|
||||||
g_object_set_data_full (G_OBJECT (label), "timeout",
|
g_object_set_data_full (G_OBJECT (label), "timeout",
|
||||||
GUINT_TO_POINTER (id), remove_timeout);
|
GUINT_TO_POINTER (id), remove_timeout);
|
||||||
|
|
||||||
g_object_unref (builder);
|
g_object_unref (builder);
|
||||||
g_object_unref (scope);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!gtk_widget_get_visible (window))
|
if (!gtk_widget_get_visible (window))
|
||||||
|
@@ -164,18 +164,12 @@ do_image_scaling (GtkWidget *do_widget)
|
|||||||
scale = gtk_scale_new_with_range (GTK_ORIENTATION_HORIZONTAL, -10., 10., 0.1);
|
scale = gtk_scale_new_with_range (GTK_ORIENTATION_HORIZONTAL, -10., 10., 0.1);
|
||||||
gtk_scale_add_mark (GTK_SCALE (scale), 0., GTK_POS_TOP, NULL);
|
gtk_scale_add_mark (GTK_SCALE (scale), 0., GTK_POS_TOP, NULL);
|
||||||
gtk_widget_set_tooltip_text (scale, "Zoom");
|
gtk_widget_set_tooltip_text (scale, "Zoom");
|
||||||
gtk_accessible_update_property (GTK_ACCESSIBLE (scale),
|
|
||||||
GTK_ACCESSIBLE_PROPERTY_LABEL, "Zoom",
|
|
||||||
-1);
|
|
||||||
gtk_range_set_value (GTK_RANGE (scale), 0.);
|
gtk_range_set_value (GTK_RANGE (scale), 0.);
|
||||||
gtk_widget_set_hexpand (scale, TRUE);
|
gtk_widget_set_hexpand (scale, TRUE);
|
||||||
gtk_box_append (GTK_BOX (box2), scale);
|
gtk_box_append (GTK_BOX (box2), scale);
|
||||||
|
|
||||||
dropdown = gtk_drop_down_new (G_LIST_MODEL (gtk_string_list_new ((const char *[]){ "Linear", "Nearest", "Trilinear", NULL })), NULL);
|
dropdown = gtk_drop_down_new (G_LIST_MODEL (gtk_string_list_new ((const char *[]){ "Linear", "Nearest", "Trilinear", NULL })), NULL);
|
||||||
gtk_widget_set_tooltip_text (dropdown, "Filter");
|
gtk_widget_set_tooltip_text (dropdown, "Filter");
|
||||||
gtk_accessible_update_property (GTK_ACCESSIBLE (dropdown),
|
|
||||||
GTK_ACCESSIBLE_PROPERTY_LABEL, "Filter",
|
|
||||||
-1);
|
|
||||||
gtk_box_append (GTK_BOX (box2), dropdown);
|
gtk_box_append (GTK_BOX (box2), dropdown);
|
||||||
|
|
||||||
g_object_bind_property (dropdown, "selected", widget, "filter", G_BINDING_DEFAULT);
|
g_object_bind_property (dropdown, "selected", widget, "filter", G_BINDING_DEFAULT);
|
||||||
|
@@ -30,7 +30,6 @@ progressive_prepared_callback (GdkPixbufLoader *loader,
|
|||||||
{
|
{
|
||||||
GdkPixbuf *pixbuf;
|
GdkPixbuf *pixbuf;
|
||||||
GtkWidget *picture;
|
GtkWidget *picture;
|
||||||
GdkTexture *texture;
|
|
||||||
|
|
||||||
picture = GTK_WIDGET (data);
|
picture = GTK_WIDGET (data);
|
||||||
|
|
||||||
@@ -41,9 +40,7 @@ progressive_prepared_callback (GdkPixbufLoader *loader,
|
|||||||
*/
|
*/
|
||||||
gdk_pixbuf_fill (pixbuf, 0xaaaaaaff);
|
gdk_pixbuf_fill (pixbuf, 0xaaaaaaff);
|
||||||
|
|
||||||
texture = gdk_texture_new_for_pixbuf (pixbuf);
|
gtk_picture_set_pixbuf (GTK_PICTURE (picture), pixbuf);
|
||||||
gtk_picture_set_paintable (GTK_PICTURE (picture), GDK_PAINTABLE (texture));
|
|
||||||
g_object_unref (texture);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -54,18 +51,22 @@ progressive_updated_callback (GdkPixbufLoader *loader,
|
|||||||
int height,
|
int height,
|
||||||
gpointer data)
|
gpointer data)
|
||||||
{
|
{
|
||||||
GtkWidget *picture = GTK_WIDGET (data);
|
GtkWidget *picture;
|
||||||
GdkTexture *texture;
|
GdkPixbuf *pixbuf;
|
||||||
|
|
||||||
texture = gdk_texture_new_for_pixbuf (gdk_pixbuf_loader_get_pixbuf (loader));
|
picture = GTK_WIDGET (data);
|
||||||
gtk_picture_set_paintable (GTK_PICTURE (picture), GDK_PAINTABLE (texture));
|
|
||||||
g_object_unref (texture);
|
pixbuf = gdk_pixbuf_loader_get_pixbuf (loader);
|
||||||
|
gtk_picture_set_pixbuf (GTK_PICTURE (picture), NULL);
|
||||||
|
gtk_picture_set_pixbuf (GTK_PICTURE (picture), pixbuf);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
progressive_timeout (gpointer data)
|
progressive_timeout (gpointer data)
|
||||||
{
|
{
|
||||||
GtkWidget *picture = GTK_WIDGET (data);
|
GtkWidget *picture;
|
||||||
|
|
||||||
|
picture = GTK_WIDGET (data);
|
||||||
|
|
||||||
/* This shows off fully-paranoid error handling, so looks scary.
|
/* This shows off fully-paranoid error handling, so looks scary.
|
||||||
* You could factor out the error handling code into a nice separate
|
* You could factor out the error handling code into a nice separate
|
||||||
|
@@ -1,4 +1,5 @@
|
|||||||
#pragma once
|
#ifndef LANGUAGE_NAMES_H
|
||||||
|
#define LANGUAGE_NAMES_H
|
||||||
|
|
||||||
#include <pango/pango.h>
|
#include <pango/pango.h>
|
||||||
|
|
||||||
@@ -8,3 +9,5 @@ const char * get_language_name (PangoLanguage *language);
|
|||||||
const char * get_language_name_for_tag (guint32 tag);
|
const char * get_language_name_for_tag (guint32 tag);
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
|
#endif
|
||||||
|
@@ -64,8 +64,6 @@
|
|||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkLabel" id="short_time_label">
|
<object class="GtkLabel" id="short_time_label">
|
||||||
<property name="hexpand">1</property>
|
|
||||||
<property name="xalign">1</property>
|
|
||||||
<property name="valign">baseline</property>
|
<property name="valign">baseline</property>
|
||||||
<property name="label" translatable="yes">38m</property>
|
<property name="label" translatable="yes">38m</property>
|
||||||
<style>
|
<style>
|
||||||
|
@@ -49,7 +49,6 @@
|
|||||||
<property name="halign">start</property>
|
<property name="halign">start</property>
|
||||||
<property name="valign">center</property>
|
<property name="valign">center</property>
|
||||||
<property name="hexpand">1</property>
|
<property name="hexpand">1</property>
|
||||||
<property name="mnemonic-widget">switch</property>
|
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
@@ -74,7 +73,6 @@
|
|||||||
<property name="halign">start</property>
|
<property name="halign">start</property>
|
||||||
<property name="valign">center</property>
|
<property name="valign">center</property>
|
||||||
<property name="hexpand">1</property>
|
<property name="hexpand">1</property>
|
||||||
<property name="mnemonic-widget">check</property>
|
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
@@ -112,7 +110,6 @@
|
|||||||
<property name="margin-start">10</property>
|
<property name="margin-start">10</property>
|
||||||
<property name="margin-end">10</property>
|
<property name="margin-end">10</property>
|
||||||
<property name="opacity">0</property>
|
<property name="opacity">0</property>
|
||||||
<property name="accessible-role">status</property>
|
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
@@ -153,11 +150,10 @@
|
|||||||
<property name="halign">start</property>
|
<property name="halign">start</property>
|
||||||
<property name="valign">center</property>
|
<property name="valign">center</property>
|
||||||
<property name="hexpand">1</property>
|
<property name="hexpand">1</property>
|
||||||
<property name="mnemonic-widget">scale</property>
|
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkScale" id="scale">
|
<object class="GtkScale">
|
||||||
<property name="halign">end</property>
|
<property name="halign">end</property>
|
||||||
<property name="valign">center</property>
|
<property name="valign">center</property>
|
||||||
<property name="draw-value">0</property>
|
<property name="draw-value">0</property>
|
||||||
@@ -189,11 +185,10 @@
|
|||||||
<property name="halign">start</property>
|
<property name="halign">start</property>
|
||||||
<property name="valign">center</property>
|
<property name="valign">center</property>
|
||||||
<property name="hexpand">1</property>
|
<property name="hexpand">1</property>
|
||||||
<property name="mnemonic-widget">spin</property>
|
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkSpinButton" id="spin">
|
<object class="GtkSpinButton">
|
||||||
<property name="halign">end</property>
|
<property name="halign">end</property>
|
||||||
<property name="valign">center</property>
|
<property name="valign">center</property>
|
||||||
<property name="adjustment">
|
<property name="adjustment">
|
||||||
@@ -222,11 +217,10 @@
|
|||||||
<property name="halign">start</property>
|
<property name="halign">start</property>
|
||||||
<property name="valign">center</property>
|
<property name="valign">center</property>
|
||||||
<property name="hexpand">1</property>
|
<property name="hexpand">1</property>
|
||||||
<property name="mnemonic-widget">dropdown</property>
|
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkDropDown" id="dropdown">
|
<object class="GtkDropDown">
|
||||||
<property name="halign">end</property>
|
<property name="halign">end</property>
|
||||||
<property name="valign">center</property>
|
<property name="valign">center</property>
|
||||||
<property name="model">
|
<property name="model">
|
||||||
@@ -258,11 +252,10 @@
|
|||||||
<property name="halign">start</property>
|
<property name="halign">start</property>
|
||||||
<property name="valign">center</property>
|
<property name="valign">center</property>
|
||||||
<property name="hexpand">1</property>
|
<property name="hexpand">1</property>
|
||||||
<property name="mnemonic-widget">entry</property>
|
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkEntry" id="entry">
|
<object class="GtkEntry">
|
||||||
<property name="halign">end</property>
|
<property name="halign">end</property>
|
||||||
<property name="valign">center</property>
|
<property name="valign">center</property>
|
||||||
<property name="placeholder-text">Type here…</property>
|
<property name="placeholder-text">Type here…</property>
|
||||||
|
@@ -52,10 +52,6 @@ setup_listitem_cb (GtkListItemFactory *factory,
|
|||||||
|
|
||||||
box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 12);
|
box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 12);
|
||||||
image = gtk_image_new ();
|
image = gtk_image_new ();
|
||||||
gtk_accessible_update_property (GTK_ACCESSIBLE (image),
|
|
||||||
GTK_ACCESSIBLE_PROPERTY_LABEL,
|
|
||||||
"App icon",
|
|
||||||
-1);
|
|
||||||
gtk_image_set_icon_size (GTK_IMAGE (image), GTK_ICON_SIZE_LARGE);
|
gtk_image_set_icon_size (GTK_IMAGE (image), GTK_ICON_SIZE_LARGE);
|
||||||
gtk_box_append (GTK_BOX (box), image);
|
gtk_box_append (GTK_BOX (box), image);
|
||||||
label = gtk_label_new ("");
|
label = gtk_label_new ("");
|
||||||
@@ -83,7 +79,6 @@ bind_listitem_cb (GtkListItemFactory *factory,
|
|||||||
|
|
||||||
gtk_image_set_from_gicon (GTK_IMAGE (image), g_app_info_get_icon (app_info));
|
gtk_image_set_from_gicon (GTK_IMAGE (image), g_app_info_get_icon (app_info));
|
||||||
gtk_label_set_label (GTK_LABEL (label), g_app_info_get_display_name (app_info));
|
gtk_label_set_label (GTK_LABEL (label), g_app_info_get_display_name (app_info));
|
||||||
gtk_list_item_set_accessible_label (list_item, g_app_info_get_display_name (app_info));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* In more complex code, we would also need functions to unbind and teardown
|
/* In more complex code, we would also need functions to unbind and teardown
|
||||||
|
@@ -431,9 +431,6 @@ setup_listitem_cb (GtkListItemFactory *factory,
|
|||||||
picture = gtk_picture_new ();
|
picture = gtk_picture_new ();
|
||||||
gtk_expression_bind (expression, picture, "paintable", picture);
|
gtk_expression_bind (expression, picture, "paintable", picture);
|
||||||
gtk_box_append (GTK_BOX (box), picture);
|
gtk_box_append (GTK_BOX (box), picture);
|
||||||
gtk_accessible_update_relation (GTK_ACCESSIBLE (picture),
|
|
||||||
GTK_ACCESSIBLE_RELATION_LABELLED_BY, location_label, NULL,
|
|
||||||
-1);
|
|
||||||
|
|
||||||
|
|
||||||
/* And finally, everything comes together.
|
/* And finally, everything comes together.
|
||||||
@@ -490,9 +487,6 @@ do_listview_clocks (GtkWidget *do_widget)
|
|||||||
|
|
||||||
model = GTK_SELECTION_MODEL (gtk_no_selection_new (create_clocks_model ()));
|
model = GTK_SELECTION_MODEL (gtk_no_selection_new (create_clocks_model ()));
|
||||||
gridview = gtk_grid_view_new (model, factory);
|
gridview = gtk_grid_view_new (model, factory);
|
||||||
gtk_accessible_update_property (GTK_ACCESSIBLE (gridview),
|
|
||||||
GTK_ACCESSIBLE_PROPERTY_LABEL, "Clocks",
|
|
||||||
-1);
|
|
||||||
gtk_scrollable_set_hscroll_policy (GTK_SCROLLABLE (gridview), GTK_SCROLL_NATURAL);
|
gtk_scrollable_set_hscroll_policy (GTK_SCROLLABLE (gridview), GTK_SCROLL_NATURAL);
|
||||||
gtk_scrollable_set_vscroll_policy (GTK_SCROLLABLE (gridview), GTK_SCROLL_NATURAL);
|
gtk_scrollable_set_vscroll_policy (GTK_SCROLLABLE (gridview), GTK_SCROLL_NATURAL);
|
||||||
|
|
||||||
|
@@ -368,38 +368,6 @@ match_func (MatchObject *obj,
|
|||||||
g_free (tmp2);
|
g_free (tmp2);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
setup_header (GtkSignalListItemFactory *factory,
|
|
||||||
GObject *list_item,
|
|
||||||
gpointer data)
|
|
||||||
{
|
|
||||||
GtkListHeader *self = GTK_LIST_HEADER (list_item);
|
|
||||||
GtkWidget *child;
|
|
||||||
|
|
||||||
child = gtk_label_new ("");
|
|
||||||
gtk_label_set_xalign (GTK_LABEL (child), 0);
|
|
||||||
gtk_label_set_use_markup (GTK_LABEL (child), TRUE);
|
|
||||||
gtk_widget_set_margin_top (child, 10);
|
|
||||||
gtk_widget_set_margin_bottom (child, 10);
|
|
||||||
|
|
||||||
gtk_list_header_set_child (self, child);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
bind_header (GtkSignalListItemFactory *factory,
|
|
||||||
GObject *list_item,
|
|
||||||
gpointer data)
|
|
||||||
{
|
|
||||||
GtkListHeader *self = GTK_LIST_HEADER (list_item);
|
|
||||||
GtkWidget *child = gtk_list_header_get_child (self);
|
|
||||||
GObject *item = gtk_list_header_get_item (self);
|
|
||||||
|
|
||||||
if (strstr (gtk_string_object_get_string (GTK_STRING_OBJECT (item)), "hour"))
|
|
||||||
gtk_label_set_label (GTK_LABEL (child), "<big><b>Hours</b></big>");
|
|
||||||
else
|
|
||||||
gtk_label_set_label (GTK_LABEL (child), "<big><b>Minutes</b></big>");
|
|
||||||
}
|
|
||||||
|
|
||||||
GtkWidget *
|
GtkWidget *
|
||||||
do_listview_selections (GtkWidget *do_widget)
|
do_listview_selections (GtkWidget *do_widget)
|
||||||
{
|
{
|
||||||
@@ -409,12 +377,10 @@ do_listview_selections (GtkWidget *do_widget)
|
|||||||
GtkExpression *expression;
|
GtkExpression *expression;
|
||||||
GtkListItemFactory *factory;
|
GtkListItemFactory *factory;
|
||||||
const char * const times[] = { "1 minute", "2 minutes", "5 minutes", "20 minutes", NULL };
|
const char * const times[] = { "1 minute", "2 minutes", "5 minutes", "20 minutes", NULL };
|
||||||
const char * const minutes[] = {
|
const char * const many_times[] = {
|
||||||
"1 minute", "2 minutes", "5 minutes", "10 minutes", "15 minutes", "20 minutes",
|
"1 minute", "2 minutes", "5 minutes", "10 minutes", "15 minutes", "20 minutes",
|
||||||
"25 minutes", "30 minutes", "35 minutes", "40 minutes", "45 minutes", "50 minutes",
|
"25 minutes", "30 minutes", "35 minutes", "40 minutes", "45 minutes", "50 minutes",
|
||||||
"55 minutes", NULL
|
"55 minutes", "1 hour", "2 hours", "3 hours", "5 hours", "6 hours", "7 hours",
|
||||||
};
|
|
||||||
const char * const hours[] = { "1 hour", "2 hours", "3 hours", "5 hours", "6 hours", "7 hours",
|
|
||||||
"8 hours", "9 hours", "10 hours", "11 hours", "12 hours", NULL
|
"8 hours", "9 hours", "10 hours", "11 hours", "12 hours", NULL
|
||||||
};
|
};
|
||||||
const char * const device_titles[] = { "Digital Output", "Headphones", "Digital Output", "Analog Output", NULL };
|
const char * const device_titles[] = { "Digital Output", "Headphones", "Digital Output", "Analog Output", NULL };
|
||||||
@@ -429,10 +395,6 @@ do_listview_selections (GtkWidget *do_widget)
|
|||||||
|
|
||||||
if (!window)
|
if (!window)
|
||||||
{
|
{
|
||||||
GtkStringList *minutes_model, *hours_model;
|
|
||||||
GListStore *store;
|
|
||||||
GtkFlattenListModel *flat;
|
|
||||||
|
|
||||||
window = gtk_window_new ();
|
window = gtk_window_new ();
|
||||||
gtk_window_set_display (GTK_WINDOW (window),
|
gtk_window_set_display (GTK_WINDOW (window),
|
||||||
gtk_widget_get_display (do_widget));
|
gtk_widget_get_display (do_widget));
|
||||||
@@ -460,25 +422,14 @@ do_listview_selections (GtkWidget *do_widget)
|
|||||||
gtk_box_append (GTK_BOX (box), button);
|
gtk_box_append (GTK_BOX (box), button);
|
||||||
|
|
||||||
/* A dropdown using an expression to obtain strings */
|
/* A dropdown using an expression to obtain strings */
|
||||||
minutes_model = gtk_string_list_new (minutes);
|
button = drop_down_new_from_strings (many_times, NULL, NULL);
|
||||||
hours_model = gtk_string_list_new (hours);
|
gtk_drop_down_set_enable_search (GTK_DROP_DOWN (button), TRUE);
|
||||||
store = g_list_store_new (G_TYPE_LIST_MODEL);
|
|
||||||
g_list_store_append (store, minutes_model);
|
|
||||||
g_list_store_append (store, hours_model);
|
|
||||||
g_object_unref (minutes_model);
|
|
||||||
g_object_unref (hours_model);
|
|
||||||
flat = gtk_flatten_list_model_new (G_LIST_MODEL (store));
|
|
||||||
expression = gtk_cclosure_expression_new (G_TYPE_STRING, NULL,
|
expression = gtk_cclosure_expression_new (G_TYPE_STRING, NULL,
|
||||||
0, NULL,
|
0, NULL,
|
||||||
(GCallback)get_title,
|
(GCallback)get_title,
|
||||||
NULL, NULL);
|
NULL, NULL);
|
||||||
button = gtk_drop_down_new (G_LIST_MODEL (flat), expression);
|
gtk_drop_down_set_expression (GTK_DROP_DOWN (button), expression);
|
||||||
gtk_drop_down_set_enable_search (GTK_DROP_DOWN (button), TRUE);
|
gtk_expression_unref (expression);
|
||||||
factory = gtk_signal_list_item_factory_new ();
|
|
||||||
g_signal_connect (factory, "setup", G_CALLBACK (setup_header), NULL);
|
|
||||||
g_signal_connect (factory, "bind", G_CALLBACK (bind_header), NULL);
|
|
||||||
gtk_drop_down_set_header_factory (GTK_DROP_DOWN (button), factory);
|
|
||||||
g_object_unref (factory);
|
|
||||||
gtk_box_append (GTK_BOX (box), button);
|
gtk_box_append (GTK_BOX (box), button);
|
||||||
|
|
||||||
button = gtk_drop_down_new (NULL, NULL);
|
button = gtk_drop_down_new (NULL, NULL);
|
||||||
|
@@ -14,7 +14,138 @@
|
|||||||
|
|
||||||
#include <gtk/gtk.h>
|
#include <gtk/gtk.h>
|
||||||
|
|
||||||
#include "settings-key.h"
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
/* Create an object that wraps GSettingsSchemaKey because that's a boxed type */
|
||||||
|
typedef struct _SettingsKey SettingsKey;
|
||||||
|
struct _SettingsKey
|
||||||
|
{
|
||||||
|
GObject parent_instance;
|
||||||
|
|
||||||
|
GSettings *settings;
|
||||||
|
GSettingsSchemaKey *key;
|
||||||
|
};
|
||||||
|
|
||||||
|
enum {
|
||||||
|
PROP_0,
|
||||||
|
PROP_NAME,
|
||||||
|
PROP_SUMMARY,
|
||||||
|
PROP_DESCRIPTION,
|
||||||
|
PROP_VALUE,
|
||||||
|
PROP_TYPE,
|
||||||
|
PROP_DEFAULT_VALUE,
|
||||||
|
|
||||||
|
N_PROPS
|
||||||
|
};
|
||||||
|
|
||||||
|
#define SETTINGS_TYPE_KEY (settings_key_get_type ())
|
||||||
|
G_DECLARE_FINAL_TYPE (SettingsKey, settings_key, SETTINGS, KEY, GObject);
|
||||||
|
|
||||||
|
G_DEFINE_TYPE (SettingsKey, settings_key, G_TYPE_OBJECT);
|
||||||
|
static GParamSpec *properties[N_PROPS] = { NULL, };
|
||||||
|
|
||||||
|
static void
|
||||||
|
settings_key_get_property (GObject *object,
|
||||||
|
guint property_id,
|
||||||
|
GValue *value,
|
||||||
|
GParamSpec *pspec)
|
||||||
|
{
|
||||||
|
SettingsKey *self = SETTINGS_KEY (object);
|
||||||
|
|
||||||
|
switch (property_id)
|
||||||
|
{
|
||||||
|
case PROP_DESCRIPTION:
|
||||||
|
g_value_set_string (value, g_settings_schema_key_get_description (self->key));
|
||||||
|
break;
|
||||||
|
|
||||||
|
case PROP_NAME:
|
||||||
|
g_value_set_string (value, g_settings_schema_key_get_name (self->key));
|
||||||
|
break;
|
||||||
|
|
||||||
|
case PROP_SUMMARY:
|
||||||
|
g_value_set_string (value, g_settings_schema_key_get_summary (self->key));
|
||||||
|
break;
|
||||||
|
|
||||||
|
case PROP_VALUE:
|
||||||
|
{
|
||||||
|
GVariant *variant = g_settings_get_value (self->settings, g_settings_schema_key_get_name (self->key));
|
||||||
|
g_value_take_string (value, g_variant_print (variant, FALSE));
|
||||||
|
g_variant_unref (variant);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case PROP_TYPE:
|
||||||
|
{
|
||||||
|
const GVariantType *type = g_settings_schema_key_get_value_type (self->key);
|
||||||
|
g_value_set_string (value, g_variant_type_peek_string (type));
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case PROP_DEFAULT_VALUE:
|
||||||
|
{
|
||||||
|
GVariant *variant = g_settings_schema_key_get_default_value (self->key);
|
||||||
|
g_value_take_string (value, g_variant_print (variant, FALSE));
|
||||||
|
g_variant_unref (variant);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
settings_key_finalize (GObject *object)
|
||||||
|
{
|
||||||
|
SettingsKey *self = SETTINGS_KEY (object);
|
||||||
|
|
||||||
|
g_object_unref (self->settings);
|
||||||
|
g_settings_schema_key_unref (self->key);
|
||||||
|
|
||||||
|
G_OBJECT_CLASS (settings_key_parent_class)->finalize (object);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
settings_key_class_init (SettingsKeyClass *klass)
|
||||||
|
{
|
||||||
|
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
|
||||||
|
|
||||||
|
gobject_class->finalize = settings_key_finalize;
|
||||||
|
gobject_class->get_property = settings_key_get_property;
|
||||||
|
|
||||||
|
properties[PROP_DESCRIPTION] =
|
||||||
|
g_param_spec_string ("description", NULL, NULL, NULL, G_PARAM_READABLE);
|
||||||
|
properties[PROP_NAME] =
|
||||||
|
g_param_spec_string ("name", NULL, NULL, NULL, G_PARAM_READABLE);
|
||||||
|
properties[PROP_SUMMARY] =
|
||||||
|
g_param_spec_string ("summary", NULL, NULL, NULL, G_PARAM_READABLE);
|
||||||
|
properties[PROP_VALUE] =
|
||||||
|
g_param_spec_string ("value", NULL, NULL, NULL, G_PARAM_READABLE);
|
||||||
|
properties[PROP_TYPE] =
|
||||||
|
g_param_spec_string ("type", NULL, NULL, NULL, G_PARAM_READABLE);
|
||||||
|
properties[PROP_DEFAULT_VALUE] =
|
||||||
|
g_param_spec_string ("default-value", NULL, NULL, NULL, G_PARAM_READABLE);
|
||||||
|
|
||||||
|
g_object_class_install_properties (gobject_class, N_PROPS, properties);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
settings_key_init (SettingsKey *self)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
static SettingsKey *
|
||||||
|
settings_key_new (GSettings *settings,
|
||||||
|
GSettingsSchemaKey *key)
|
||||||
|
{
|
||||||
|
SettingsKey *result = g_object_new (SETTINGS_TYPE_KEY, NULL);
|
||||||
|
|
||||||
|
result->settings = g_object_ref (settings);
|
||||||
|
result->key = g_settings_schema_key_ref (key);
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
item_value_changed (GtkEditableLabel *label,
|
item_value_changed (GtkEditableLabel *label,
|
||||||
@@ -22,7 +153,6 @@ item_value_changed (GtkEditableLabel *label,
|
|||||||
GtkColumnViewCell *cell)
|
GtkColumnViewCell *cell)
|
||||||
{
|
{
|
||||||
SettingsKey *self;
|
SettingsKey *self;
|
||||||
GSettingsSchemaKey *key;
|
|
||||||
const char *text;
|
const char *text;
|
||||||
const GVariantType *type;
|
const GVariantType *type;
|
||||||
GVariant *variant;
|
GVariant *variant;
|
||||||
@@ -33,10 +163,9 @@ item_value_changed (GtkEditableLabel *label,
|
|||||||
text = gtk_editable_get_text (GTK_EDITABLE (label));
|
text = gtk_editable_get_text (GTK_EDITABLE (label));
|
||||||
|
|
||||||
self = gtk_column_view_cell_get_item (cell);
|
self = gtk_column_view_cell_get_item (cell);
|
||||||
key = settings_key_get_key (self);
|
|
||||||
|
|
||||||
type = g_settings_schema_key_get_value_type (key);
|
type = g_settings_schema_key_get_value_type (self->key);
|
||||||
name = g_settings_schema_key_get_name (key);
|
name = g_settings_schema_key_get_name (self->key);
|
||||||
|
|
||||||
variant = g_variant_parse (type, text, NULL, NULL, &error);
|
variant = g_variant_parse (type, text, NULL, NULL, &error);
|
||||||
if (!variant)
|
if (!variant)
|
||||||
@@ -46,13 +175,13 @@ item_value_changed (GtkEditableLabel *label,
|
|||||||
goto revert;
|
goto revert;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!g_settings_schema_key_range_check (key, variant))
|
if (!g_settings_schema_key_range_check (self->key, variant))
|
||||||
{
|
{
|
||||||
g_warning ("Not a valid value for %s", name);
|
g_warning ("Not a valid value for %s", name);
|
||||||
goto revert;
|
goto revert;
|
||||||
}
|
}
|
||||||
|
|
||||||
g_settings_set_value (settings_key_get_settings (self), name, variant);
|
g_settings_set_value (self->settings, name, variant);
|
||||||
g_variant_unref (variant);
|
g_variant_unref (variant);
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@@ -1,230 +0,0 @@
|
|||||||
/* Lists/Alternative Settings
|
|
||||||
* #Keywords: GtkListHeaderFactory, GtkSectionModel
|
|
||||||
*
|
|
||||||
* This demo shows an alternative settings viewer for GSettings.
|
|
||||||
*
|
|
||||||
* It demonstrates how to implement support for sections with GtkListView.
|
|
||||||
*
|
|
||||||
* It also shows how to quickly flatten a large tree of items into a list
|
|
||||||
* that can be filtered to find the items one is looking for.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <gtk/gtk.h>
|
|
||||||
|
|
||||||
#include "settings-key.h"
|
|
||||||
|
|
||||||
static void
|
|
||||||
item_value_changed (GtkEditableLabel *label,
|
|
||||||
GParamSpec *pspec,
|
|
||||||
GtkColumnViewCell *cell)
|
|
||||||
{
|
|
||||||
SettingsKey *self;
|
|
||||||
GSettingsSchemaKey *key;
|
|
||||||
const char *text;
|
|
||||||
const GVariantType *type;
|
|
||||||
GVariant *variant;
|
|
||||||
GError *error = NULL;
|
|
||||||
const char *name;
|
|
||||||
char *value;
|
|
||||||
|
|
||||||
text = gtk_editable_get_text (GTK_EDITABLE (label));
|
|
||||||
|
|
||||||
self = gtk_column_view_cell_get_item (cell);
|
|
||||||
key = settings_key_get_key (self);
|
|
||||||
|
|
||||||
type = g_settings_schema_key_get_value_type (key);
|
|
||||||
name = g_settings_schema_key_get_name (key);
|
|
||||||
|
|
||||||
variant = g_variant_parse (type, text, NULL, NULL, &error);
|
|
||||||
if (!variant)
|
|
||||||
{
|
|
||||||
g_warning ("%s", error->message);
|
|
||||||
g_clear_error (&error);
|
|
||||||
goto revert;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!g_settings_schema_key_range_check (key, variant))
|
|
||||||
{
|
|
||||||
g_warning ("Not a valid value for %s", name);
|
|
||||||
goto revert;
|
|
||||||
}
|
|
||||||
|
|
||||||
g_settings_set_value (settings_key_get_settings (self), name, variant);
|
|
||||||
g_variant_unref (variant);
|
|
||||||
return;
|
|
||||||
|
|
||||||
revert:
|
|
||||||
gtk_widget_error_bell (GTK_WIDGET (label));
|
|
||||||
|
|
||||||
g_object_get (self, "value", &value, NULL);
|
|
||||||
gtk_editable_set_text (GTK_EDITABLE (label), value);
|
|
||||||
g_free (value);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int
|
|
||||||
strvcmp (gconstpointer p1,
|
|
||||||
gconstpointer p2)
|
|
||||||
{
|
|
||||||
const char * const *s1 = p1;
|
|
||||||
const char * const *s2 = p2;
|
|
||||||
|
|
||||||
return strcmp (*s1, *s2);
|
|
||||||
}
|
|
||||||
|
|
||||||
static gpointer
|
|
||||||
map_settings_to_keys (gpointer item,
|
|
||||||
gpointer unused)
|
|
||||||
{
|
|
||||||
GSettings *settings = item;
|
|
||||||
GSettingsSchema *schema;
|
|
||||||
GListStore *store;
|
|
||||||
char **keys;
|
|
||||||
guint i;
|
|
||||||
|
|
||||||
g_object_get (settings, "settings-schema", &schema, NULL);
|
|
||||||
|
|
||||||
store = g_list_store_new (SETTINGS_TYPE_KEY);
|
|
||||||
|
|
||||||
keys = g_settings_schema_list_keys (schema);
|
|
||||||
|
|
||||||
for (i = 0; keys[i] != NULL; i++)
|
|
||||||
{
|
|
||||||
GSettingsSchemaKey *almost_there = g_settings_schema_get_key (schema, keys[i]);
|
|
||||||
SettingsKey *finally = settings_key_new (settings, almost_there);
|
|
||||||
g_list_store_append (store, finally);
|
|
||||||
g_object_unref (finally);
|
|
||||||
g_settings_schema_key_unref (almost_there);
|
|
||||||
}
|
|
||||||
|
|
||||||
g_strfreev (keys);
|
|
||||||
g_settings_schema_unref (schema);
|
|
||||||
g_object_unref (settings);
|
|
||||||
|
|
||||||
return store;
|
|
||||||
}
|
|
||||||
|
|
||||||
static GListModel *
|
|
||||||
create_settings_model (gpointer item,
|
|
||||||
gpointer unused)
|
|
||||||
{
|
|
||||||
GSettings *settings = item;
|
|
||||||
char **schemas;
|
|
||||||
GListStore *result;
|
|
||||||
guint i;
|
|
||||||
|
|
||||||
if (settings == NULL)
|
|
||||||
{
|
|
||||||
g_settings_schema_source_list_schemas (g_settings_schema_source_get_default (),
|
|
||||||
TRUE,
|
|
||||||
&schemas,
|
|
||||||
NULL);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
schemas = g_settings_list_children (settings);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (schemas == NULL || schemas[0] == NULL)
|
|
||||||
{
|
|
||||||
g_free (schemas);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
qsort (schemas, g_strv_length (schemas), sizeof (char *), strvcmp);
|
|
||||||
|
|
||||||
result = g_list_store_new (G_TYPE_SETTINGS);
|
|
||||||
for (i = 0; schemas[i] != NULL; i++)
|
|
||||||
{
|
|
||||||
GSettings *child;
|
|
||||||
|
|
||||||
if (settings == NULL)
|
|
||||||
child = g_settings_new (schemas[i]);
|
|
||||||
else
|
|
||||||
child = g_settings_get_child (settings, schemas[i]);
|
|
||||||
|
|
||||||
g_list_store_append (result, child);
|
|
||||||
g_object_unref (child);
|
|
||||||
}
|
|
||||||
|
|
||||||
g_strfreev (schemas);
|
|
||||||
|
|
||||||
return G_LIST_MODEL (result);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
search_enabled (GtkSearchEntry *entry)
|
|
||||||
{
|
|
||||||
gtk_editable_set_text (GTK_EDITABLE (entry), "");
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
stop_search (GtkSearchEntry *entry,
|
|
||||||
gpointer data)
|
|
||||||
{
|
|
||||||
gtk_editable_set_text (GTK_EDITABLE (entry), "");
|
|
||||||
}
|
|
||||||
|
|
||||||
static GtkWidget *window = NULL;
|
|
||||||
|
|
||||||
GtkWidget *
|
|
||||||
do_listview_settings2 (GtkWidget *do_widget)
|
|
||||||
{
|
|
||||||
if (window == NULL)
|
|
||||||
{
|
|
||||||
GtkListView *listview;
|
|
||||||
GListModel *model;
|
|
||||||
GtkTreeListModel *treemodel;
|
|
||||||
GtkNoSelection *selection;
|
|
||||||
GtkBuilderScope *scope;
|
|
||||||
GtkBuilder *builder;
|
|
||||||
GError *error = NULL;
|
|
||||||
GtkFilter *filter;
|
|
||||||
|
|
||||||
g_type_ensure (SETTINGS_TYPE_KEY);
|
|
||||||
|
|
||||||
scope = gtk_builder_cscope_new ();
|
|
||||||
gtk_builder_cscope_add_callback (scope, search_enabled);
|
|
||||||
gtk_builder_cscope_add_callback (scope, stop_search);
|
|
||||||
gtk_builder_cscope_add_callback (scope, settings_key_get_search_string);
|
|
||||||
gtk_builder_cscope_add_callback (scope, item_value_changed);
|
|
||||||
|
|
||||||
builder = gtk_builder_new ();
|
|
||||||
gtk_builder_set_scope (builder, scope);
|
|
||||||
g_object_unref (scope);
|
|
||||||
|
|
||||||
gtk_builder_add_from_resource (builder, "/listview_settings2/listview_settings2.ui", &error);
|
|
||||||
g_assert_no_error (error);
|
|
||||||
|
|
||||||
window = GTK_WIDGET (gtk_builder_get_object (builder, "window"));
|
|
||||||
gtk_window_set_display (GTK_WINDOW (window),
|
|
||||||
gtk_widget_get_display (do_widget));
|
|
||||||
g_object_add_weak_pointer (G_OBJECT (window), (gpointer *) &window);
|
|
||||||
|
|
||||||
listview = GTK_LIST_VIEW (gtk_builder_get_object (builder, "listview"));
|
|
||||||
filter = GTK_FILTER (gtk_builder_get_object (builder, "filter"));
|
|
||||||
|
|
||||||
model = create_settings_model (NULL, NULL);
|
|
||||||
treemodel = gtk_tree_list_model_new (model,
|
|
||||||
TRUE,
|
|
||||||
TRUE,
|
|
||||||
create_settings_model,
|
|
||||||
NULL,
|
|
||||||
NULL);
|
|
||||||
model = G_LIST_MODEL (gtk_map_list_model_new (G_LIST_MODEL (treemodel), map_settings_to_keys, NULL, NULL));
|
|
||||||
model = G_LIST_MODEL (gtk_flatten_list_model_new (model));
|
|
||||||
model = G_LIST_MODEL (gtk_filter_list_model_new (model, g_object_ref (filter)));
|
|
||||||
selection = gtk_no_selection_new (model);
|
|
||||||
|
|
||||||
gtk_list_view_set_model (GTK_LIST_VIEW (listview), GTK_SELECTION_MODEL (selection));
|
|
||||||
g_object_unref (selection);
|
|
||||||
|
|
||||||
g_object_unref (builder);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!gtk_widget_get_visible (window))
|
|
||||||
gtk_widget_set_visible (window, TRUE);
|
|
||||||
else
|
|
||||||
gtk_window_destroy (GTK_WINDOW (window));
|
|
||||||
|
|
||||||
return window;
|
|
||||||
}
|
|
@@ -1,130 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<interface>
|
|
||||||
<object class="GtkStringFilter" id="filter">
|
|
||||||
<property name="expression">
|
|
||||||
<closure type="gchararray" function="settings_key_get_search_string" />
|
|
||||||
</property>
|
|
||||||
<property name="search" bind-source="entry" bind-property="text" />
|
|
||||||
</object>
|
|
||||||
<object class="GtkWindow" id="window">
|
|
||||||
<property name="title" translatable="yes">Settings</property>
|
|
||||||
<property name="default-width">640</property>
|
|
||||||
<property name="default-height">480</property>
|
|
||||||
<child type="titlebar">
|
|
||||||
<object class="GtkHeaderBar">
|
|
||||||
<child type="end">
|
|
||||||
<object class="GtkToggleButton" id="search_button">
|
|
||||||
<property name="icon-name">system-search-symbolic</property>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkBox">
|
|
||||||
<property name="orientation">vertical</property>
|
|
||||||
<child>
|
|
||||||
<object class="GtkSearchBar">
|
|
||||||
<property name="search-mode-enabled" bind-source="search_button" bind-property="active" bind-flags="bidirectional"/>
|
|
||||||
<signal name="notify::search-mode-enabled" handler="search_enabled" object="entry"/>
|
|
||||||
<child>
|
|
||||||
<object class="GtkSearchEntry" id="entry">
|
|
||||||
<signal name="stop-search" handler="stop_search"/>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkScrolledWindow">
|
|
||||||
<child>
|
|
||||||
<object class="GtkListView" id="listview">
|
|
||||||
<property name="vexpand">1</property>
|
|
||||||
<style>
|
|
||||||
<class name="rich-list"/>
|
|
||||||
</style>
|
|
||||||
<property name="factory">
|
|
||||||
<object class="GtkBuilderListItemFactory">
|
|
||||||
<property name="bytes"><![CDATA[
|
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<interface>
|
|
||||||
<template class="GtkListItem">
|
|
||||||
<property name="child">
|
|
||||||
<object class="GtkBox">
|
|
||||||
<child>
|
|
||||||
<object class="GtkBox">
|
|
||||||
<property name="orientation">vertical</property>
|
|
||||||
<child>
|
|
||||||
<object class="GtkLabel">
|
|
||||||
<property name="xalign">0</property>
|
|
||||||
<binding name="label">
|
|
||||||
<lookup name="name" type="SettingsKey">
|
|
||||||
<lookup name="item">GtkListItem</lookup>
|
|
||||||
</lookup>
|
|
||||||
</binding>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkLabel">
|
|
||||||
<style>
|
|
||||||
<class name="dim-label"/>
|
|
||||||
</style>
|
|
||||||
<property name="xalign">0</property>
|
|
||||||
<property name="ellipsize">end</property>
|
|
||||||
<binding name="label">
|
|
||||||
<lookup name="summary" type="SettingsKey">
|
|
||||||
<lookup name="item">GtkListItem</lookup>
|
|
||||||
</lookup>
|
|
||||||
</binding>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkEntry">
|
|
||||||
<property name="hexpand">1</property>
|
|
||||||
<property name="halign">end</property>
|
|
||||||
<binding name="text">
|
|
||||||
<lookup name="value" type="SettingsKey">
|
|
||||||
<lookup name="item">GtkListItem</lookup>
|
|
||||||
</lookup>
|
|
||||||
</binding>
|
|
||||||
<signal name="notify::label" handler="item_value_changed"/>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
</property>
|
|
||||||
</template>
|
|
||||||
</interface>
|
|
||||||
]]></property>
|
|
||||||
</object>
|
|
||||||
</property>
|
|
||||||
<property name="header-factory">
|
|
||||||
<object class="GtkBuilderListItemFactory">
|
|
||||||
<property name="bytes"><![CDATA[
|
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<interface>
|
|
||||||
<template class="GtkListHeader">
|
|
||||||
<property name="child">
|
|
||||||
<object class="GtkLabel">
|
|
||||||
<property name="xalign">0</property>
|
|
||||||
<binding name="label">
|
|
||||||
<lookup name="schema" type="GSettings">
|
|
||||||
<lookup name="settings" type="SettingsKey">
|
|
||||||
<lookup name="item">GtkListHeader</lookup>
|
|
||||||
</lookup>
|
|
||||||
</lookup>
|
|
||||||
</binding>
|
|
||||||
</object>
|
|
||||||
</property>
|
|
||||||
</template>
|
|
||||||
</interface>
|
|
||||||
]]></property>
|
|
||||||
</object>
|
|
||||||
</property>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
</interface>
|
|