Merge branch 'next' into master
This commit is contained in:
commit
1994eea5da
|
@ -34,3 +34,30 @@ i3-command-parser.stamp
|
||||||
i3-config-parser.stamp
|
i3-config-parser.stamp
|
||||||
.clang_complete
|
.clang_complete
|
||||||
LAST_VERSION
|
LAST_VERSION
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
# https://raw.githubusercontent.com/github/gitignore/master/Autotools.gitignore
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
# http://www.gnu.org/software/automake
|
||||||
|
|
||||||
|
Makefile.in
|
||||||
|
/ar-lib
|
||||||
|
/test-driver
|
||||||
|
|
||||||
|
# http://www.gnu.org/software/autoconf
|
||||||
|
|
||||||
|
/autom4te.cache
|
||||||
|
/autoscan.log
|
||||||
|
/autoscan-*.log
|
||||||
|
/aclocal.m4
|
||||||
|
/compile
|
||||||
|
/config.h.in
|
||||||
|
/config.guess
|
||||||
|
/config.sub
|
||||||
|
/configure
|
||||||
|
/configure.scan
|
||||||
|
/depcomp
|
||||||
|
/install-sh
|
||||||
|
/missing
|
||||||
|
/stamp-h1
|
||||||
|
|
57
.travis.yml
57
.travis.yml
|
@ -6,18 +6,67 @@ language: c
|
||||||
compiler:
|
compiler:
|
||||||
- gcc
|
- gcc
|
||||||
- clang
|
- clang
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
packages:
|
||||||
|
# For https support in HTTP::Tiny.
|
||||||
|
- libio-socket-ssl-perl
|
||||||
env:
|
env:
|
||||||
global:
|
global:
|
||||||
- BASENAME="i3wm/travis-base:$(date +'%Y-%m')-$(./travis/ha.sh)"
|
- BASENAME="i3wm/travis-base:$(date +'%Y-%m')-$(./travis/ha.sh travis/travis-base.Dockerfile)"
|
||||||
|
- BASENAME_386="i3wm/travis-base-386:$(date +'%Y-%m')-$(./travis/ha.sh travis/travis-base-386.Dockerfile)"
|
||||||
|
- BASENAME_UBUNTU="i3wm/travis-base-ubuntu:$(date +'%Y-%m')-$(./travis/ha.sh travis/travis-base-ubuntu.Dockerfile)"
|
||||||
|
- BASENAME_UBUNTU_386="i3wm/travis-base-ubuntu-386:$(date +'%Y-%m')-$(./travis/ha.sh travis/travis-base-ubuntu-386.Dockerfile)"
|
||||||
- secure: "B5IICA8MPx/FKaB50rTPqL8P1NU+Q0yuWl+lElL4+a9xSyLikfm3NzUPHoVwx8lNw2AVK6br7p0OmF7vMFjqAgrgc1cajTtEae5uFRKNUrWLpXM046YgNEYLLIHsQOjInxE+S4O6EFVzsUqsu8aeo2Xhq4sm4iUocG7e5isYgYo=" # DOCKER_PASS
|
- secure: "B5IICA8MPx/FKaB50rTPqL8P1NU+Q0yuWl+lElL4+a9xSyLikfm3NzUPHoVwx8lNw2AVK6br7p0OmF7vMFjqAgrgc1cajTtEae5uFRKNUrWLpXM046YgNEYLLIHsQOjInxE+S4O6EFVzsUqsu8aeo2Xhq4sm4iUocG7e5isYgYo=" # DOCKER_PASS
|
||||||
- secure: "EIvrq8PG7lRjidppG0RCv4F0X4GP3DT9F5+ixVuGPfhK/hZT3jYC2AVY9G+NnUcXVwQEpW92rlqpftQ/qZ13FoyWokC8ZyoyD06fr5FPCfoFF3OczZwAJzZYkObI/hE9+/hXcylx/Os6N4INd2My1ntGk3JPsWL9riopod5EjSg=" # DOCKER_EMAIL
|
- secure: "EIvrq8PG7lRjidppG0RCv4F0X4GP3DT9F5+ixVuGPfhK/hZT3jYC2AVY9G+NnUcXVwQEpW92rlqpftQ/qZ13FoyWokC8ZyoyD06fr5FPCfoFF3OczZwAJzZYkObI/hE9+/hXcylx/Os6N4INd2My1ntGk3JPsWL9riopod5EjSg=" # DOCKER_EMAIL
|
||||||
- secure: "hvhBunS4xXTgnIOsk/BPT7I7FrJhvVwCSt5PfxxvMqNaztOJI9BuK7ZrZ5Cy38KyHwlh3VHAH5AaCygJcPauoSQCV3bpnlbaWn3ruq2F0Q697Q5uNf73liXzyUqb9/Zvfvge4y4WWOhP5tVz1C6ZBe/NfhU7pqKLMA+6ads+99c=" # DOCKER_USER
|
- secure: "hvhBunS4xXTgnIOsk/BPT7I7FrJhvVwCSt5PfxxvMqNaztOJI9BuK7ZrZ5Cy38KyHwlh3VHAH5AaCygJcPauoSQCV3bpnlbaWn3ruq2F0Q697Q5uNf73liXzyUqb9/Zvfvge4y4WWOhP5tVz1C6ZBe/NfhU7pqKLMA+6ads+99c=" # DOCKER_USER
|
||||||
|
- secure: "uJuuefmnJUuEH15ZD8xQilibx7EeBvMHBLoIZ8bgGHeleEImBD0XbD1ypvhYJKpviOmw5BkZmc9bVO8DGDEHYbSlIa2xDlF6vGrwgCEaxcMIhOAhv+dW9C/maJVieLOEPM01/fK2qdKESZaLvlopkWmxZwDyMObI9L7AMW9zQD8=" # BINTRAY_USER
|
||||||
|
- secure: "L3aPSNLySPXtWCW+xf8h/AAdquwNgxyTQpYOwexJmTPav82Qx8uQlp1yJkUmt+a+FLZDFfQeMivaHq0311RvuQVmkAJx49DjaddrwqOJut2UPsoVDn1WeuAcSHIXOq/0H+zgFMr/PGY0HXIsw1mTMhgheGJNqg09BvYWROCEAcA=" # BINTRAY_KEY
|
||||||
|
- secure: "sBMVn4C/WRWgoAytEFGx4CC5O55Q63h02AcuBnb1jXcBm0RenoBpzUPtxSseJwDPUA1o/UkuEDDjm3PosT5NF+dvED01VDFMsPVE11K0u6+avYy3jYXqyUEDW3G2o6Wo/2aqNjmd++8jskBdS9+Cx9gaFbgxfzSp0Yfu3oJm/4c=" # GH_TOKEN
|
||||||
install:
|
install:
|
||||||
- if [ -a .git/shallow ]; then git fetch --unshallow; fi
|
- if [ -a .git/shallow ]; then git fetch --unshallow; fi
|
||||||
- docker pull ${BASENAME} || ./travis/docker-build-and-push.sh
|
- docker pull ${BASENAME} || ./travis/docker-build-and-push.sh ${BASENAME} travis/travis-base.Dockerfile
|
||||||
|
- ./travis/skip-pkg.sh || docker pull ${BASENAME_UBUNTU} || ./travis/docker-build-and-push.sh ${BASENAME_UBUNTU} travis/travis-base-ubuntu.Dockerfile
|
||||||
|
- ./travis/skip-pkg.sh || docker pull ${BASENAME_386} || ./travis/docker-build-and-push.sh ${BASENAME_386} travis/travis-base-386.Dockerfile
|
||||||
|
- ./travis/skip-pkg.sh || docker pull ${BASENAME_UBUNTU_386} || ./travis/docker-build-and-push.sh ${BASENAME_UBUNTU_386} travis/travis-base-ubuntu-386.Dockerfile
|
||||||
script:
|
script:
|
||||||
- docker run -v $PWD:/usr/src/i3/ -w /usr/src/i3 ${BASENAME} ./travis/check-safe-wrappers.sh
|
- docker run -v $PWD:/usr/src/i3/ -w /usr/src/i3 ${BASENAME} ./travis/check-safe-wrappers.sh
|
||||||
- docker run -v $PWD:/usr/src/i3/ -w /usr/src/i3 ${BASENAME} ./travis/check-formatting.sh
|
- docker run -v $PWD:/usr/src/i3/ -w /usr/src/i3 ${BASENAME} ./travis/check-formatting.sh
|
||||||
- docker run -v $PWD:/usr/src/i3/ -w /usr/src/i3 -e CC -e CFLAGS="-Wformat -Wformat-security -Wextra -Wno-unused-parameter -Werror" ${BASENAME} make all mans -j ASAN=1
|
- docker run -v $PWD:/usr/src/i3/ -w /usr/src/i3 -e CC ${BASENAME} /bin/sh -c 'autoreconf -fi && mkdir -p build && cd build && (../configure || (cat config.log; false)) && make -j CFLAGS="-Wformat -Wformat-security -Wextra -Wno-unused-parameter -Werror"'
|
||||||
- docker run -v $PWD:/usr/src/i3/ -w /usr/src/i3 ${BASENAME} ./travis/check-spelling.pl
|
- docker run -v $PWD:/usr/src/i3/ -w /usr/src/i3 ${BASENAME} ./travis/check-spelling.pl
|
||||||
- docker run -v $PWD:/usr/src/i3/ -w /usr/src/i3 ${BASENAME} ./travis/run-tests.sh
|
- docker run -v $PWD:/usr/src/i3/ -w /usr/src/i3 -e CC ${BASENAME} ./travis/run-tests.sh
|
||||||
|
- ./travis/skip-pkg.sh || docker run -v $PWD:/usr/src/i3/ -w /usr/src/i3 ${BASENAME} ./travis/debian-build.sh deb/debian-amd64/DIST
|
||||||
|
- ./travis/skip-pkg.sh || docker run -v $PWD:/usr/src/i3/ -w /usr/src/i3 ${BASENAME_UBUNTU} ./travis/debian-build.sh deb/ubuntu-amd64/DIST
|
||||||
|
- ./travis/skip-pkg.sh || docker run -v $PWD:/usr/src/i3/ -w /usr/src/i3 ${BASENAME_386} linux32 ./travis/debian-build.sh deb/debian-i386/DIST
|
||||||
|
- ./travis/skip-pkg.sh || docker run -v $PWD:/usr/src/i3/ -w /usr/src/i3 ${BASENAME_UBUNTU_386} linux32 ./travis/debian-build.sh deb/ubuntu-i386/DIST
|
||||||
|
- ./travis/skip-pkg.sh || docker run -v $PWD:/usr/src/i3/ -w /usr/src/i3 ${BASENAME} ./travis/clang-analyze.sh
|
||||||
|
- ./travis/skip-pkg.sh || docker run -v $PWD:/usr/src/i3/ -w /usr/src/i3 ${BASENAME} ./travis/docs.sh
|
||||||
|
- ./travis/skip-pkg.sh || travis/prep-bintray.sh
|
||||||
|
|
||||||
|
deploy:
|
||||||
|
- provider: bintray
|
||||||
|
file: travis/bintray-autobuild-debian.json
|
||||||
|
user: $BINTRAY_USER
|
||||||
|
key: $BINTRAY_KEY
|
||||||
|
skip_cleanup: true
|
||||||
|
on:
|
||||||
|
branch: next
|
||||||
|
condition: $CC = gcc
|
||||||
|
- provider: bintray
|
||||||
|
file: travis/bintray-autobuild-ubuntu.json
|
||||||
|
user: $BINTRAY_USER
|
||||||
|
key: $BINTRAY_KEY
|
||||||
|
skip_cleanup: true
|
||||||
|
on:
|
||||||
|
branch: next
|
||||||
|
condition: $CC = gcc
|
||||||
|
- provider: script
|
||||||
|
script: travis/deploy-github-pages.sh
|
||||||
|
skip_cleanup: true
|
||||||
|
on:
|
||||||
|
branch: next
|
||||||
|
condition: $CC = gcc
|
||||||
|
|
||||||
|
after_deploy:
|
||||||
|
- travis/cleanup-bintray.pl i3-autobuild
|
||||||
|
- travis/cleanup-bintray.pl i3-autobuild-ubuntu
|
||||||
|
|
45
DEPENDS
45
DEPENDS
|
@ -4,28 +4,29 @@
|
||||||
"min" means minimum required version
|
"min" means minimum required version
|
||||||
"lkgv" means last known good version
|
"lkgv" means last known good version
|
||||||
|
|
||||||
┌──────────────┬────────┬────────┬────────────────────────────────────────┐
|
┌──────────────┬────────┬────────┬───────────────────────────────────────────────────────────┐
|
||||||
│ dependency │ min. │ lkgv │ URL │
|
│ dependency │ min. │ lkgv │ URL │
|
||||||
├──────────────┼────────┼────────┼────────────────────────────────────────┤
|
├──────────────┼────────┼────────┼───────────────────────────────────────────────────────────┤
|
||||||
│ pkg-config │ 0.25 │ 0.28 │ http://pkgconfig.freedesktop.org/ │
|
│ pkg-config │ 0.25 │ 0.29 │ http://pkgconfig.freedesktop.org/ │
|
||||||
│ libxcb │ 1.1.93 │ 1.11 │ http://xcb.freedesktop.org/dist/ │
|
│ libxcb │ 1.1.93 │ 1.12 │ http://xcb.freedesktop.org/dist/ │
|
||||||
│ xcb-util │ 0.3.3 │ 0.4.1 │ http://xcb.freedesktop.org/dist/ │
|
│ xcb-util │ 0.3.3 │ 0.4.1 │ http://xcb.freedesktop.org/dist/ │
|
||||||
│ xkbcommon │ 0.4.0 │ 0.5.0 │ http://xkbcommon.org/ │
|
│ xkbcommon │ 0.4.0 │ 0.6.1 │ http://xkbcommon.org/ │
|
||||||
│ xkbcommon-x11│ 0.4.0 │ 0.5.0 │ http://xkbcommon.org/ │
|
│ xkbcommon-x11│ 0.4.0 │ 0.6.1 │ http://xkbcommon.org/ │
|
||||||
│ util-cursor³⁴│ 0.0.99 │ 0.1.2 │ http://xcb.freedesktop.org/dist/ │
|
│ util-cursor³⁴│ 0.0.99 │ 0.1.3 │ http://xcb.freedesktop.org/dist/ │
|
||||||
│ util-wm⁴ │ 0.3.8 │ 0.3.8 │ http://xcb.freedesktop.org/dist/ │
|
│ util-wm⁴ │ 0.3.8 │ 0.3.8 │ http://xcb.freedesktop.org/dist/ │
|
||||||
│ util-keysyms⁴│ 0.3.8 │ 0.4.0 │ http://xcb.freedesktop.org/dist/ │
|
│ util-keysyms⁴│ 0.3.8 │ 0.4.0 │ http://xcb.freedesktop.org/dist/ │
|
||||||
│ libev │ 4.0 │ 4.19 │ http://libev.schmorp.de/ │
|
│ util-xrm⁴ │ 1.0.0 │ 1.0.0 │ https://github.com/Airblader/xcb-util-xrm │
|
||||||
│ yajl │ 2.0.1 │ 2.1.0 │ http://lloyd.github.com/yajl/ │
|
│ libev │ 4.0 │ 4.19 │ http://libev.schmorp.de/ │
|
||||||
│ asciidoc │ 8.3.0 │ 8.6.8 │ http://www.methods.co.nz/asciidoc/ │
|
│ yajl │ 2.0.1 │ 2.1.0 │ http://lloyd.github.com/yajl/ │
|
||||||
│ xmlto │ 0.0.23 │ 0.0.23 │ http://www.methods.co.nz/asciidoc/ │
|
│ asciidoc │ 8.3.0 │ 8.6.9 │ http://www.methods.co.nz/asciidoc/ │
|
||||||
│ Pod::Simple² │ 3.22 │ 3.22 │ http://search.cpan.org/~dwheeler/Pod-Simple-3.23/
|
│ xmlto │ 0.0.23 │ 0.0.23 │ http://www.methods.co.nz/asciidoc/ │
|
||||||
│ docbook-xml │ 4.5 │ 4.5 │ http://www.methods.co.nz/asciidoc/ │
|
│ Pod::Simple² │ 3.22 │ 3.22 │ http://search.cpan.org/~dwheeler/Pod-Simple-3.23/ │
|
||||||
│ PCRE │ 8.12 │ 8.35 │ http://www.pcre.org/ │
|
│ docbook-xml │ 4.5 │ 4.5 │ http://www.methods.co.nz/asciidoc/ │
|
||||||
│ libsn¹ │ 0.10 │ 0.12 │ http://freedesktop.org/wiki/Software/startup-notification
|
│ PCRE │ 8.12 │ 8.38 │ http://www.pcre.org/ │
|
||||||
│ pango │ 1.30.0 | 1.36.8 │ http://www.pango.org/ │
|
│ libsn¹ │ 0.10 │ 0.12 │ http://freedesktop.org/wiki/Software/startup-notification │
|
||||||
│ cairo │ 1.14.4 │ 1.14.4 │ http://cairographics.org/ │
|
│ pango │ 1.30.0 | 1.40.1 │ http://www.pango.org/ │
|
||||||
└──────────────┴────────┴────────┴────────────────────────────────────────┘
|
│ cairo │ 1.14.4 │ 1.14.6 │ http://cairographics.org/ │
|
||||||
|
└──────────────┴────────┴────────┴───────────────────────────────────────────────────────────┘
|
||||||
¹ libsn = libstartup-notification
|
¹ libsn = libstartup-notification
|
||||||
² Pod::Simple is a Perl module required for converting the testsuite
|
² Pod::Simple is a Perl module required for converting the testsuite
|
||||||
documentation to HTML. See http://michael.stapelberg.de/cpan/#Pod::Simple
|
documentation to HTML. See http://michael.stapelberg.de/cpan/#Pod::Simple
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
4.13-non-git
|
68
Makefile
68
Makefile
|
@ -1,68 +0,0 @@
|
||||||
TOPDIR=$(shell pwd)
|
|
||||||
|
|
||||||
include $(TOPDIR)/common.mk
|
|
||||||
|
|
||||||
SUBDIRS:=
|
|
||||||
|
|
||||||
ALL_TARGETS =
|
|
||||||
INSTALL_TARGETS =
|
|
||||||
CLEAN_TARGETS =
|
|
||||||
DISTCLEAN_TARGETS =
|
|
||||||
|
|
||||||
all: real-all
|
|
||||||
|
|
||||||
include libi3/libi3.mk
|
|
||||||
include src/i3.mk
|
|
||||||
include i3-config-wizard/i3-config-wizard.mk
|
|
||||||
include i3-msg/i3-msg.mk
|
|
||||||
include i3-input/i3-input.mk
|
|
||||||
include i3-nagbar/i3-nagbar.mk
|
|
||||||
include i3bar/i3bar.mk
|
|
||||||
include i3-dump-log/i3-dump-log.mk
|
|
||||||
include docs/docs.mk
|
|
||||||
include man/man.mk
|
|
||||||
|
|
||||||
# Update $(TOPDIR)/LAST_VERSION if it differs from $I3_VERSION
|
|
||||||
CACHED_VERSION := '$(shell [ -f $(TOPDIR)/LAST_VERSION ] && cat $(TOPDIR)/LAST_VERSION)'
|
|
||||||
ifneq ($(CACHED_VERSION),$(I3_VERSION))
|
|
||||||
$(shell echo -n ${I3_VERSION} > $(TOPDIR)/LAST_VERSION)
|
|
||||||
endif
|
|
||||||
|
|
||||||
real-all: $(ALL_TARGETS)
|
|
||||||
|
|
||||||
install: $(INSTALL_TARGETS)
|
|
||||||
|
|
||||||
dist: distclean
|
|
||||||
[ ! -d i3-${VERSION} ] || rm -rf i3-${VERSION}
|
|
||||||
[ ! -e i3-${VERSION}.tar.bz2 ] || rm i3-${VERSION}.tar.bz2
|
|
||||||
mkdir i3-${VERSION}
|
|
||||||
cp i3-migrate-config-to-v4 i3-save-tree generate-command-parser.pl i3-sensible-* i3-dmenu-desktop i3.config.keycodes DEPENDS LICENSE PACKAGE-MAINTAINER RELEASE-NOTES-${VERSION} i3.config i3.xsession.desktop i3-with-shmlog.xsession.desktop i3.applications.desktop pseudo-doc.doxygen common.mk Makefile i3-${VERSION}
|
|
||||||
cp -r src libi3 i3-msg i3-nagbar i3-config-wizard i3bar i3-dump-log include man parser-specs testcases i3-${VERSION}
|
|
||||||
# Only copy toplevel documentation (important stuff)
|
|
||||||
mkdir i3-${VERSION}/docs
|
|
||||||
# Pre-generate documentation
|
|
||||||
$(MAKE) docs
|
|
||||||
# Cleanup τεχ output files
|
|
||||||
find docs -regex ".*\.\(aux\|out\|log\|toc\|bm\|dvi\|log\)" -exec rm '{}' \;
|
|
||||||
find docs -maxdepth 1 -type f ! \( -name "*.xcf" -or -name "*.svg" \) -exec cp '{}' i3-${VERSION}/docs \;
|
|
||||||
# Only copy source code from i3-input
|
|
||||||
mkdir i3-${VERSION}/i3-input
|
|
||||||
find i3-input -maxdepth 1 -type f \( -name "*.c" -or -name "*.mk" -or -name "*.h" -or -name "Makefile" \) -exec cp '{}' i3-${VERSION}/i3-input \;
|
|
||||||
echo -n ${I3_VERSION} > i3-${VERSION}/I3_VERSION
|
|
||||||
echo -n ${VERSION} > i3-${VERSION}/VERSION
|
|
||||||
# Pre-generate a manpage to allow distributors to skip this step and save some dependencies
|
|
||||||
$(MAKE) mans
|
|
||||||
cp man/*.1 i3-${VERSION}/man/
|
|
||||||
tar cfj i3-${VERSION}.tar.bz2 i3-${VERSION}
|
|
||||||
rm -rf i3-${VERSION}
|
|
||||||
|
|
||||||
clean: $(CLEAN_TARGETS)
|
|
||||||
(which lcov >/dev/null 2>&1 && lcov -d . --zerocounters) || true
|
|
||||||
|
|
||||||
distclean: clean $(DISTCLEAN_TARGETS)
|
|
||||||
|
|
||||||
coverage:
|
|
||||||
rm -f /tmp/i3-coverage.info
|
|
||||||
rm -rf /tmp/i3-coverage
|
|
||||||
lcov -d . -b . --capture -o /tmp/i3-coverage.info
|
|
||||||
genhtml -o /tmp/i3-coverage/ /tmp/i3-coverage.info
|
|
|
@ -0,0 +1,563 @@
|
||||||
|
@CODE_COVERAGE_RULES@
|
||||||
|
|
||||||
|
echo-version:
|
||||||
|
@echo "@I3_VERSION@"
|
||||||
|
|
||||||
|
bin_PROGRAMS = \
|
||||||
|
i3 \
|
||||||
|
i3bar/i3bar \
|
||||||
|
i3-config-wizard/i3-config-wizard \
|
||||||
|
i3-dump-log/i3-dump-log \
|
||||||
|
i3-input/i3-input \
|
||||||
|
i3-msg/i3-msg \
|
||||||
|
i3-nagbar/i3-nagbar
|
||||||
|
|
||||||
|
install-exec-hook:
|
||||||
|
$(LN_S) -f i3 $(DESTDIR)$(bindir)/i3-with-shmlog
|
||||||
|
|
||||||
|
uninstall-hook:
|
||||||
|
rm -f $(DESTDIR)$(bindir)/i3-with-shmlog
|
||||||
|
|
||||||
|
i3includedir=$(includedir)/i3
|
||||||
|
i3include_HEADERS = \
|
||||||
|
include/i3/ipc.h
|
||||||
|
|
||||||
|
dist_bin_SCRIPTS = \
|
||||||
|
i3-dmenu-desktop \
|
||||||
|
i3-migrate-config-to-v4 \
|
||||||
|
i3-save-tree \
|
||||||
|
i3-sensible-editor \
|
||||||
|
i3-sensible-pager \
|
||||||
|
i3-sensible-terminal
|
||||||
|
|
||||||
|
i3confdir = $(sysconfdir)/i3
|
||||||
|
dist_i3conf_DATA = \
|
||||||
|
etc/config \
|
||||||
|
etc/config.keycodes
|
||||||
|
|
||||||
|
applicationsdir = $(datarootdir)/applications
|
||||||
|
xsessionsdir = $(datarootdir)/xsessions
|
||||||
|
dist_applications_DATA = \
|
||||||
|
share/applications/i3.desktop
|
||||||
|
dist_xsessions_DATA = \
|
||||||
|
share/xsessions/i3.desktop \
|
||||||
|
share/xsessions/i3-with-shmlog.desktop
|
||||||
|
|
||||||
|
noinst_LIBRARIES = libi3.a
|
||||||
|
|
||||||
|
check_PROGRAMS = test.commands_parser test.config_parser
|
||||||
|
|
||||||
|
check_SCRIPTS = \
|
||||||
|
testcases/complete-run.pl
|
||||||
|
|
||||||
|
clean-check:
|
||||||
|
rm -rf testsuite-* latest i3-cfg-for-* _Inline
|
||||||
|
clean-local: clean-check
|
||||||
|
|
||||||
|
TESTS = testcases/complete-run.pl
|
||||||
|
|
||||||
|
EXTRA_DIST = \
|
||||||
|
$(dist_docs_toc_DATA:.html=) \
|
||||||
|
$(dist_docs_notoc_DATA:.html=) \
|
||||||
|
docs/asciidoc-git.conf \
|
||||||
|
docs/bigpicture.png \
|
||||||
|
docs/i3-pod2html \
|
||||||
|
docs/i3-sync.dia \
|
||||||
|
docs/i3-sync.png \
|
||||||
|
docs/i3-sync-working.dia \
|
||||||
|
docs/i3-sync-working.png \
|
||||||
|
docs/keyboard-layer1.png \
|
||||||
|
docs/keyboard-layer2.png \
|
||||||
|
docs/layout-saving-1.png \
|
||||||
|
docs/logo-30.png \
|
||||||
|
docs/modes.png \
|
||||||
|
docs/refcard.html \
|
||||||
|
docs/refcard_style.css \
|
||||||
|
docs/single_terminal.png \
|
||||||
|
docs/snapping.png \
|
||||||
|
docs/tree-layout1.png \
|
||||||
|
docs/tree-layout2.png \
|
||||||
|
docs/tree-shot1.png \
|
||||||
|
docs/tree-shot2.png \
|
||||||
|
docs/tree-shot3.png \
|
||||||
|
docs/tree-shot4.png \
|
||||||
|
docs/two_columns.png \
|
||||||
|
docs/two_terminals.png \
|
||||||
|
docs/wsbar.dia \
|
||||||
|
docs/wsbar.png \
|
||||||
|
i3bar/LICENSE \
|
||||||
|
libi3/README \
|
||||||
|
$(asciidoc_MANS:.1=.man) \
|
||||||
|
$(asciidoc_MANS:.1=.man) \
|
||||||
|
man/asciidoc.conf.in \
|
||||||
|
DEPENDS \
|
||||||
|
I3_VERSION \
|
||||||
|
LICENSE \
|
||||||
|
PACKAGE-MAINTAINER \
|
||||||
|
RELEASE-NOTES-4.13 \
|
||||||
|
generate-command-parser.pl \
|
||||||
|
parser-specs/commands.spec \
|
||||||
|
parser-specs/config.spec \
|
||||||
|
parser-specs/highlighting.vim \
|
||||||
|
pseudo-doc.doxygen \
|
||||||
|
testcases/complete-run.pl.in \
|
||||||
|
testcases/i3-test.config \
|
||||||
|
testcases/lib/i3test/Test.pm \
|
||||||
|
testcases/lib/i3test/Util.pm \
|
||||||
|
testcases/lib/i3test/XTEST.pm \
|
||||||
|
testcases/lib/i3test.pm.in \
|
||||||
|
testcases/lib/SocketActivation.pm \
|
||||||
|
testcases/lib/StartXServer.pm \
|
||||||
|
testcases/lib/StatusLine.pm \
|
||||||
|
testcases/lib/TestWorker.pm \
|
||||||
|
testcases/Makefile.PL \
|
||||||
|
testcases/new-test \
|
||||||
|
testcases/restart-state.golden \
|
||||||
|
testcases/t \
|
||||||
|
testcases/valgrind.supp
|
||||||
|
|
||||||
|
# dirstamps contains directories which we want to be created in $(top_builddir)
|
||||||
|
# so that our custom rules can store files in them.
|
||||||
|
dirstamp = .dirstamp
|
||||||
|
dirstamps = \
|
||||||
|
docs/$(dirstamp) \
|
||||||
|
man/$(dirstamp) \
|
||||||
|
parser/$(dirstamp)
|
||||||
|
DISTCLEANFILES = $(dirstamps)
|
||||||
|
|
||||||
|
$(dirstamps):
|
||||||
|
@stamp='$@'; $(MKDIR_P) "$${stamp%/*}"
|
||||||
|
@: > $@
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
# docs generation
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
docs_tocdir = ${docdir}
|
||||||
|
docs_notocdir = ${docdir}
|
||||||
|
docs_poddir = ${docdir}
|
||||||
|
if BUILD_DOCS
|
||||||
|
dist_docs_toc_DATA = \
|
||||||
|
docs/hacking-howto.html \
|
||||||
|
docs/userguide.html \
|
||||||
|
docs/ipc.html \
|
||||||
|
docs/multi-monitor.html \
|
||||||
|
docs/wsbar.html \
|
||||||
|
docs/testsuite.html \
|
||||||
|
docs/i3bar-protocol.html \
|
||||||
|
docs/layout-saving.html
|
||||||
|
|
||||||
|
dist_docs_notoc_DATA = \
|
||||||
|
docs/debugging.html
|
||||||
|
|
||||||
|
dist_docs_pod_DATA = \
|
||||||
|
docs/lib-i3test.html \
|
||||||
|
docs/lib-i3test-test.html
|
||||||
|
|
||||||
|
$(dist_docs_toc_DATA): docs/%.html: docs/% docs/$(dirstamp)
|
||||||
|
$(AM_V_GEN) @PATH_ASCIIDOC@ -a toc -n -o $@ $<
|
||||||
|
|
||||||
|
$(dist_docs_notoc_DATA): docs/%.html: docs/% docs/$(dirstamp)
|
||||||
|
$(AM_V_GEN) @PATH_ASCIIDOC@ -n -o $@ $<
|
||||||
|
|
||||||
|
docs/lib-i3test.html: testcases/lib/i3test.pm docs/$(dirstamp)
|
||||||
|
$(AM_V_GEN) $(top_srcdir)/docs/i3-pod2html $< $@
|
||||||
|
|
||||||
|
docs/lib-i3test-test.html: testcases/lib/i3test/Test.pm docs/$(dirstamp)
|
||||||
|
$(AM_V_GEN) $(top_srcdir)/docs/i3-pod2html $< $@
|
||||||
|
|
||||||
|
else
|
||||||
|
dist_docs_toc_DATA =
|
||||||
|
dist_docs_notoc_DATA =
|
||||||
|
dist_docs_pod_DATA =
|
||||||
|
endif
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
# manpage generation
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
if BUILD_MANS
|
||||||
|
dist_man1_MANS = \
|
||||||
|
$(asciidoc_MANS) \
|
||||||
|
$(pod_MANS)
|
||||||
|
|
||||||
|
asciidoc_MANS = \
|
||||||
|
man/i3.1 \
|
||||||
|
man/i3bar.1 \
|
||||||
|
man/i3-msg.1 \
|
||||||
|
man/i3-input.1 \
|
||||||
|
man/i3-nagbar.1 \
|
||||||
|
man/i3-config-wizard.1 \
|
||||||
|
man/i3-migrate-config-to-v4.1 \
|
||||||
|
man/i3-sensible-editor.1 \
|
||||||
|
man/i3-sensible-pager.1 \
|
||||||
|
man/i3-sensible-terminal.1 \
|
||||||
|
man/i3-dump-log.1
|
||||||
|
|
||||||
|
pod_MANS = \
|
||||||
|
man/i3-dmenu-desktop.1 \
|
||||||
|
man/i3-save-tree.1
|
||||||
|
|
||||||
|
$(asciidoc_MANS): man/%.1: man/%.xml man/$(dirstamp)
|
||||||
|
$(AM_V_GEN) out='$@'; @PATH_XMLTO@ man -o "$${out%/*}" $<
|
||||||
|
@stamp='$@'; $(MKDIR_P) "$${stamp%/*}"
|
||||||
|
|
||||||
|
man/%.xml: man/%.man man/asciidoc.conf man/$(dirstamp)
|
||||||
|
$(AM_V_GEN) @PATH_ASCIIDOC@ -d manpage -b docbook -f $(top_builddir)/man/asciidoc.conf -o $@ $<
|
||||||
|
|
||||||
|
$(pod_MANS): man/%.1: % man/$(dirstamp)
|
||||||
|
$(AM_V_GEN) @PATH_POD2MAN@ --utf8 $< > $@
|
||||||
|
else
|
||||||
|
asciidoc_MANS =
|
||||||
|
endif
|
||||||
|
|
||||||
|
AM_CPPFLAGS = \
|
||||||
|
-I$(top_builddir)/parser \
|
||||||
|
-I$(top_srcdir)/include \
|
||||||
|
@AX_EXTEND_SRCDIR_CPPFLAGS@
|
||||||
|
|
||||||
|
i3_CFLAGS = \
|
||||||
|
$(AM_CFLAGS) \
|
||||||
|
$(libi3_CFLAGS) \
|
||||||
|
$(LIBSN_CFLAGS) \
|
||||||
|
$(XCB_CFLAGS) \
|
||||||
|
$(XCB_UTIL_CURSOR_CFLAGS) \
|
||||||
|
$(XCB_UTIL_KEYSYM_CFLAGS) \
|
||||||
|
$(XCB_UTIL_WM_CFLAGS) \
|
||||||
|
$(XCB_UTIL_XRM_CFLAGS) \
|
||||||
|
$(XKBCOMMON_CFLAGS) \
|
||||||
|
$(YAJL_CFLAGS) \
|
||||||
|
$(LIBPCRE_CFLAGS) \
|
||||||
|
$(PTHREAD_CFLAGS) \
|
||||||
|
$(CODE_COVERAGE_CFLAGS)
|
||||||
|
|
||||||
|
i3_CPPFLAGS = \
|
||||||
|
$(AM_CPPFLAGS) \
|
||||||
|
$(CODE_COVERAGE_CPPFLAGS)
|
||||||
|
|
||||||
|
i3_LDADD = \
|
||||||
|
$(libi3_LIBS) \
|
||||||
|
$(LIBSN_LIBS) \
|
||||||
|
$(XCB_LIBS) \
|
||||||
|
$(XCB_UTIL_CURSOR_LIBS) \
|
||||||
|
$(XCB_UTIL_KEYSYMS_LIBS) \
|
||||||
|
$(XCB_UTIL_WM_LIBS) \
|
||||||
|
$(XCB_UTIL_XRM_LIBS) \
|
||||||
|
$(XKBCOMMON_LIBS) \
|
||||||
|
$(YAJL_LIBS) \
|
||||||
|
$(LIBPCRE_LIBS) \
|
||||||
|
$(PANGOCAIRO_LIBS) \
|
||||||
|
$(PTHREAD_LIBS) \
|
||||||
|
$(CODE_COVERAGE_LDFLAGS)
|
||||||
|
|
||||||
|
libi3_CFLAGS = \
|
||||||
|
$(AM_CFLAGS) \
|
||||||
|
$(XCB_CFLAGS) \
|
||||||
|
$(XCB_UTIL_CFLAGS) \
|
||||||
|
$(XCB_UTIL_XRM_CFLAGS) \
|
||||||
|
$(YAJL_CFLAGS) \
|
||||||
|
$(PANGOCAIRO_CFLAGS)
|
||||||
|
|
||||||
|
libi3_LIBS = \
|
||||||
|
$(top_builddir)/libi3.a \
|
||||||
|
$(XCB_LIBS) \
|
||||||
|
$(XCB_UTIL_LIBS) \
|
||||||
|
$(XCB_UTIL_XRM_LIBS) \
|
||||||
|
$(YAJL_LIBS) \
|
||||||
|
$(PANGOCAIRO_LIBS)
|
||||||
|
|
||||||
|
libi3_a_CFLAGS = \
|
||||||
|
$(libi3_CFLAGS)
|
||||||
|
|
||||||
|
libi3_a_SOURCES = \
|
||||||
|
include/libi3.h \
|
||||||
|
libi3/dpi.c \
|
||||||
|
libi3/draw_util.c \
|
||||||
|
libi3/fake_configure_notify.c \
|
||||||
|
libi3/font.c \
|
||||||
|
libi3/format_placeholders.c \
|
||||||
|
libi3/get_colorpixel.c \
|
||||||
|
libi3/get_config_path.c \
|
||||||
|
libi3/get_exe_path.c \
|
||||||
|
libi3/get_mod_mask.c \
|
||||||
|
libi3/get_process_filename.c \
|
||||||
|
libi3/get_visualtype.c \
|
||||||
|
libi3/ipc_connect.c \
|
||||||
|
libi3/ipc_recv_message.c \
|
||||||
|
libi3/ipc_send_message.c \
|
||||||
|
libi3/is_debug_build.c \
|
||||||
|
libi3/mkdirp.c \
|
||||||
|
libi3/resolve_tilde.c \
|
||||||
|
libi3/root_atom_contents.c \
|
||||||
|
libi3/safewrappers.c \
|
||||||
|
libi3/string.c \
|
||||||
|
libi3/strndup.c \
|
||||||
|
libi3/ucs2_conversion.c
|
||||||
|
|
||||||
|
i3_dump_log_i3_dump_log_CFLAGS = \
|
||||||
|
$(AM_CFLAGS) \
|
||||||
|
$(PTHREAD_CFLAGS) \
|
||||||
|
$(libi3_CFLAGS)
|
||||||
|
|
||||||
|
i3_dump_log_i3_dump_log_LDADD = \
|
||||||
|
$(PTHREAD_LIBS) \
|
||||||
|
$(libi3_LIBS)
|
||||||
|
|
||||||
|
i3_dump_log_i3_dump_log_SOURCES = \
|
||||||
|
i3-dump-log/main.c
|
||||||
|
|
||||||
|
i3_input_i3_input_CFLAGS = \
|
||||||
|
$(AM_CFLAGS) \
|
||||||
|
$(libi3_CFLAGS)
|
||||||
|
|
||||||
|
i3_input_i3_input_LDADD = \
|
||||||
|
$(libi3_LIBS) \
|
||||||
|
$(XCB_UTIL_KEYSYMS_LIBS)
|
||||||
|
|
||||||
|
i3_input_i3_input_SOURCES = \
|
||||||
|
i3-input/i3-input.h \
|
||||||
|
i3-input/keysym2ucs.c \
|
||||||
|
i3-input/keysym2ucs.h \
|
||||||
|
i3-input/main.c
|
||||||
|
|
||||||
|
i3_msg_i3_msg_CFLAGS = \
|
||||||
|
$(AM_CFLAGS) \
|
||||||
|
$(libi3_CFLAGS)
|
||||||
|
|
||||||
|
i3_msg_i3_msg_LDADD = \
|
||||||
|
$(libi3_LIBS)
|
||||||
|
|
||||||
|
i3_msg_i3_msg_SOURCES = \
|
||||||
|
i3-msg/main.c
|
||||||
|
|
||||||
|
i3_nagbar_i3_nagbar_CFLAGS = \
|
||||||
|
$(AM_CFLAGS) \
|
||||||
|
$(libi3_CFLAGS)
|
||||||
|
|
||||||
|
i3_nagbar_i3_nagbar_LDADD = \
|
||||||
|
$(libi3_LIBS) \
|
||||||
|
$(XCB_UTIL_CURSOR_LIBS)
|
||||||
|
|
||||||
|
i3_nagbar_i3_nagbar_SOURCES = \
|
||||||
|
i3-nagbar/atoms.xmacro \
|
||||||
|
i3-nagbar/i3-nagbar.h \
|
||||||
|
i3-nagbar/main.c
|
||||||
|
|
||||||
|
i3bar_i3bar_CPPFLAGS = \
|
||||||
|
$(AM_CPPFLAGS) \
|
||||||
|
-I$(top_srcdir)/i3bar/include
|
||||||
|
|
||||||
|
i3bar_i3bar_CFLAGS = \
|
||||||
|
$(AM_CFLAGS) \
|
||||||
|
$(libi3_CFLAGS) \
|
||||||
|
$(XCB_CFLAGS) \
|
||||||
|
$(XKBCOMMON_CFLAGS) \
|
||||||
|
$(PANGOCAIRO_CFLAGS) \
|
||||||
|
$(YAJL_CFLAGS)
|
||||||
|
|
||||||
|
i3bar_i3bar_LDADD = \
|
||||||
|
$(libi3_LIBS) \
|
||||||
|
$(XCB_LIBS) \
|
||||||
|
$(XCB_UTIL_CURSOR_LIBS) \
|
||||||
|
$(XKBCOMMON_LIBS) \
|
||||||
|
$(PANGOCAIRO_LIBS) \
|
||||||
|
$(YAJL_LIBS)
|
||||||
|
|
||||||
|
i3bar_i3bar_SOURCES = \
|
||||||
|
i3bar/include/child.h \
|
||||||
|
i3bar/include/common.h \
|
||||||
|
i3bar/include/configuration.h \
|
||||||
|
i3bar/include/ipc.h \
|
||||||
|
i3bar/include/mode.h \
|
||||||
|
i3bar/include/outputs.h \
|
||||||
|
i3bar/include/parse_json_header.h \
|
||||||
|
i3bar/include/trayclients.h \
|
||||||
|
i3bar/include/util.h \
|
||||||
|
i3bar/include/workspaces.h \
|
||||||
|
i3bar/include/xcb_atoms.def \
|
||||||
|
i3bar/include/xcb.h \
|
||||||
|
i3bar/src/child.c \
|
||||||
|
i3bar/src/config.c \
|
||||||
|
i3bar/src/ipc.c \
|
||||||
|
i3bar/src/main.c \
|
||||||
|
i3bar/src/mode.c \
|
||||||
|
i3bar/src/outputs.c \
|
||||||
|
i3bar/src/parse_json_header.c \
|
||||||
|
i3bar/src/workspaces.c \
|
||||||
|
i3bar/src/xcb.c
|
||||||
|
|
||||||
|
i3_config_wizard_i3_config_wizard_CFLAGS = \
|
||||||
|
$(AM_CFLAGS) \
|
||||||
|
$(libi3_CFLAGS) \
|
||||||
|
$(XKBCOMMON_CFLAGS)
|
||||||
|
|
||||||
|
i3_config_wizard_i3_config_wizard_LDADD = \
|
||||||
|
$(libi3_LIBS) \
|
||||||
|
$(XCB_UTIL_KEYSYMS_LIBS) \
|
||||||
|
$(XKBCOMMON_LIBS)
|
||||||
|
|
||||||
|
i3_config_wizard_i3_config_wizard_SOURCES = \
|
||||||
|
i3-config-wizard/atoms.xmacro \
|
||||||
|
i3-config-wizard/main.c \
|
||||||
|
i3-config-wizard/xcb.h
|
||||||
|
|
||||||
|
test_commands_parser_CPPFLAGS = \
|
||||||
|
$(AM_CPPFLAGS) \
|
||||||
|
-DTEST_PARSER
|
||||||
|
|
||||||
|
test_commands_parser_CFLAGS = \
|
||||||
|
$(AM_CFLAGS) \
|
||||||
|
$(i3_CFLAGS)
|
||||||
|
|
||||||
|
test_commands_parser_SOURCES = \
|
||||||
|
src/commands_parser.c
|
||||||
|
|
||||||
|
test_commands_parser_LDADD = \
|
||||||
|
$(i3_LDADD)
|
||||||
|
|
||||||
|
test_config_parser_CPPFLAGS = \
|
||||||
|
$(AM_CPPFLAGS) \
|
||||||
|
-DTEST_PARSER
|
||||||
|
|
||||||
|
test_config_parser_CFLAGS = \
|
||||||
|
$(AM_CFLAGS) \
|
||||||
|
$(i3_CFLAGS)
|
||||||
|
|
||||||
|
test_config_parser_SOURCES = \
|
||||||
|
src/config_parser.c
|
||||||
|
|
||||||
|
test_config_parser_LDADD = \
|
||||||
|
$(i3_LDADD)
|
||||||
|
|
||||||
|
command_parser_SOURCES = \
|
||||||
|
parser/GENERATED_command_enums.h \
|
||||||
|
parser/GENERATED_command_tokens.h \
|
||||||
|
parser/GENERATED_command_call.h
|
||||||
|
|
||||||
|
config_parser_SOURCES = \
|
||||||
|
parser/GENERATED_config_enums.h \
|
||||||
|
parser/GENERATED_config_tokens.h \
|
||||||
|
parser/GENERATED_config_call.h
|
||||||
|
|
||||||
|
i3_SOURCES = \
|
||||||
|
$(command_parser_SOURCES) \
|
||||||
|
$(config_parser_SOURCES) \
|
||||||
|
include/all.h \
|
||||||
|
include/assignments.h \
|
||||||
|
include/atoms_NET_SUPPORTED.xmacro \
|
||||||
|
include/atoms_rest.xmacro \
|
||||||
|
include/atoms.xmacro \
|
||||||
|
include/bindings.h \
|
||||||
|
include/click.h \
|
||||||
|
include/cmdparse.h \
|
||||||
|
include/commands.h \
|
||||||
|
include/commands_parser.h \
|
||||||
|
include/config_directives.h \
|
||||||
|
include/configuration.h \
|
||||||
|
include/config_parser.h \
|
||||||
|
include/con.h \
|
||||||
|
include/data.h \
|
||||||
|
include/debug.h \
|
||||||
|
include/display_version.h \
|
||||||
|
include/ewmh.h \
|
||||||
|
include/fake_outputs.h \
|
||||||
|
include/floating.h \
|
||||||
|
include/handlers.h \
|
||||||
|
include/i3.h \
|
||||||
|
include/ipc.h \
|
||||||
|
include/key_press.h \
|
||||||
|
include/load_layout.h \
|
||||||
|
include/log.h \
|
||||||
|
include/main.h \
|
||||||
|
include/manage.h \
|
||||||
|
include/match.h \
|
||||||
|
include/move.h \
|
||||||
|
include/output.h \
|
||||||
|
include/queue.h \
|
||||||
|
include/randr.h \
|
||||||
|
include/regex.h \
|
||||||
|
include/render.h \
|
||||||
|
include/resize.h \
|
||||||
|
include/restore_layout.h \
|
||||||
|
include/scratchpad.h \
|
||||||
|
include/sd-daemon.h \
|
||||||
|
include/shmlog.h \
|
||||||
|
include/sighandler.h \
|
||||||
|
include/startup.h \
|
||||||
|
include/tree.h \
|
||||||
|
include/util.h \
|
||||||
|
include/window.h \
|
||||||
|
include/workspace.h \
|
||||||
|
include/xcb.h \
|
||||||
|
include/xcursor.h \
|
||||||
|
include/x.h \
|
||||||
|
include/xinerama.h \
|
||||||
|
include/yajl_utils.h \
|
||||||
|
src/assignments.c \
|
||||||
|
src/bindings.c \
|
||||||
|
src/click.c \
|
||||||
|
src/commands.c \
|
||||||
|
src/commands_parser.c \
|
||||||
|
src/con.c \
|
||||||
|
src/config.c \
|
||||||
|
src/config_directives.c \
|
||||||
|
src/config_parser.c \
|
||||||
|
src/debug.c \
|
||||||
|
src/display_version.c \
|
||||||
|
src/ewmh.c \
|
||||||
|
src/fake_outputs.c \
|
||||||
|
src/floating.c \
|
||||||
|
src/handlers.c \
|
||||||
|
src/ipc.c \
|
||||||
|
src/key_press.c \
|
||||||
|
src/load_layout.c \
|
||||||
|
src/log.c \
|
||||||
|
src/main.c \
|
||||||
|
src/manage.c \
|
||||||
|
src/match.c \
|
||||||
|
src/move.c \
|
||||||
|
src/output.c \
|
||||||
|
src/randr.c \
|
||||||
|
src/regex.c \
|
||||||
|
src/render.c \
|
||||||
|
src/resize.c \
|
||||||
|
src/restore_layout.c \
|
||||||
|
src/scratchpad.c \
|
||||||
|
src/sd-daemon.c \
|
||||||
|
src/sighandler.c \
|
||||||
|
src/startup.c \
|
||||||
|
src/tree.c \
|
||||||
|
src/util.c \
|
||||||
|
src/version.c \
|
||||||
|
src/window.c \
|
||||||
|
src/workspace.c \
|
||||||
|
src/x.c \
|
||||||
|
src/xcb.c \
|
||||||
|
src/xcursor.c \
|
||||||
|
src/xinerama.c
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
# parser generation
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
$(command_parser_SOURCES): %.h: i3-command-parser.stamp
|
||||||
|
|
||||||
|
$(config_parser_SOURCES): %.h: i3-config-parser.stamp
|
||||||
|
|
||||||
|
src/i3-commands_parser.$(OBJEXT): i3-command-parser.stamp
|
||||||
|
|
||||||
|
src/i3-config_parser.$(OBJEXT): i3-config-parser.stamp
|
||||||
|
|
||||||
|
i3-command-parser.stamp: parser/$(dirstamp) generate-command-parser.pl parser-specs/commands.spec
|
||||||
|
$(AM_V_GEN) $(top_srcdir)/generate-command-parser.pl --input=$(top_srcdir)/parser-specs/commands.spec --prefix=command
|
||||||
|
$(AM_V_at) mv GENERATED_command_* $(top_builddir)/parser
|
||||||
|
$(AM_V_at) touch $@
|
||||||
|
|
||||||
|
i3-config-parser.stamp: parser/$(dirstamp) generate-command-parser.pl parser-specs/config.spec
|
||||||
|
$(AM_V_GEN) $(top_srcdir)/generate-command-parser.pl --input=$(top_srcdir)/parser-specs/config.spec --prefix=config
|
||||||
|
$(AM_V_at) mv GENERATED_config_* $(top_builddir)/parser
|
||||||
|
$(AM_V_at) touch $@
|
||||||
|
|
||||||
|
CLEANFILES = \
|
||||||
|
i3-command-parser.stamp \
|
||||||
|
i3-config-parser.stamp
|
|
@ -23,14 +23,10 @@ x-terminal-emulator symlink in Debian, please use it in i3-sensible-terminal.
|
||||||
|
|
||||||
On debian, compilation and installing the manpages looks like this:
|
On debian, compilation and installing the manpages looks like this:
|
||||||
|
|
||||||
# Compilation
|
autoreconf -fi
|
||||||
$(MAKE)
|
mkdir -p build && cd build
|
||||||
$(MAKE) -C man
|
../configure
|
||||||
|
make -j8 install
|
||||||
# Installation
|
|
||||||
$(MAKE) DESTDIR=$(CURDIR)/debian/i3-wm/ install
|
|
||||||
mkdir -p $(CURDIR)/debian/i3-wm/usr/share/man/man1
|
|
||||||
cp man/*.1 $(CURDIR)/debian/i3-wm/usr/share/man/man1
|
|
||||||
|
|
||||||
Please make sure that i3-migrate-config-to-v4 and i3-config-wizard are
|
Please make sure that i3-migrate-config-to-v4 and i3-config-wizard are
|
||||||
installed with i3. The Perl script is necessary to (automatically) convert v3
|
installed with i3. The Perl script is necessary to (automatically) convert v3
|
||||||
|
@ -42,7 +38,7 @@ If you have any questions, ideas, hints, problems or whatever, please do not
|
||||||
hesitate to contact me. I will help you out. Just drop me an E-Mail (find the
|
hesitate to contact me. I will help you out. Just drop me an E-Mail (find the
|
||||||
address at https://michael.stapelberg.de/Impressum/, scroll down to bottom),
|
address at https://michael.stapelberg.de/Impressum/, scroll down to bottom),
|
||||||
contact me using the same address in jabber or ask on our IRC channel:
|
contact me using the same address in jabber or ask on our IRC channel:
|
||||||
(#i3 on irc.twice-irc.de).
|
(#i3 on irc.freenode.net).
|
||||||
|
|
||||||
Thanks again for your efforts,
|
Thanks again for your efforts,
|
||||||
Michael
|
Michael
|
||||||
|
|
|
@ -1,132 +0,0 @@
|
||||||
|
|
||||||
┌────────────────────────────┐
|
|
||||||
│ Release notes for i3 v4.12 │
|
|
||||||
└────────────────────────────┘
|
|
||||||
|
|
||||||
This is i3 v4.12. This version is considered stable. All users of i3 are
|
|
||||||
strongly encouraged to upgrade.
|
|
||||||
|
|
||||||
If cairo ≥ 1.14.4 is available, i3 and i3bar will use cairo for rendering
|
|
||||||
(instead of raw X11 drawing primitives). While this is currently optional,
|
|
||||||
having cairo ≥ 1.14.4 will be a hard requirement in future release.
|
|
||||||
|
|
||||||
This release contains a good number of detail improvements and fixes.
|
|
||||||
|
|
||||||
┌────────────────────────────┐
|
|
||||||
│ Changes in i3 v4.12 │
|
|
||||||
└────────────────────────────┘
|
|
||||||
|
|
||||||
• use https instead of git/http, update contact information, add GPG key
|
|
||||||
• docs/hacking-howto: fix old cfgparse.y reference to config_parser.c
|
|
||||||
• docs/ipc: added link to i3ipcpp (C++ library)
|
|
||||||
• docs/userguide: clarify no_focus documentation
|
|
||||||
• docs/userguide: add documentation for binding modes
|
|
||||||
• docs/userguide: fix rendering of __focused__
|
|
||||||
• docs/userguide: improve placement of explicit IDs for headings
|
|
||||||
• docs/userguide: make rendering of key bindings more consistent
|
|
||||||
• docs/userguide: clarify quoting of “exec” commands
|
|
||||||
• man/i3-nagbar: fix example invocation
|
|
||||||
• man/i3: add “floating window” to terminology
|
|
||||||
• i3-sensible-*: quote variables correctly
|
|
||||||
• i3-sensible-editor: add neovim
|
|
||||||
• i3-sensible-terminal: add termit, st
|
|
||||||
• i3bar: use cairo for all drawing operations
|
|
||||||
• i3bar: support per-statusblock border and background colors
|
|
||||||
• i3bar: support different bar background colors depending on whether the bar
|
|
||||||
is on the focused output or not
|
|
||||||
• i3bar: multiple tray_output directives on the same bar are now supported
|
|
||||||
• i3bar: support disabling the modifier by specifying “modifier none”
|
|
||||||
• use cairo for all drawing operations
|
|
||||||
• fix a number of memory leaks, thanks to AddressSanitizer
|
|
||||||
• no_focus is now suppressed for the first window of a workspace
|
|
||||||
• “workspace next/prev” now looks for numbered workspaces after reaching the
|
|
||||||
last workspace (it used to incorrectly only look at named workspaces)
|
|
||||||
• multiple marks can now be set on a single window (but a mark can still only
|
|
||||||
be present on one window at a time)
|
|
||||||
• the “unmark” command now supports criteria
|
|
||||||
• the “con_id” criterion now supports the special value __focused__
|
|
||||||
• the “workspace” command now supports the --no-auto-back-and-forth parameter
|
|
||||||
• the “move window to workspace” command now supports the
|
|
||||||
--no-auto-back-and-forth parameter
|
|
||||||
• the “resize grow|shrink width|height” command now works for a nested split
|
|
||||||
in the same direction
|
|
||||||
• support _NET_WM_USER_TIME’s special 0 value, indicating that a window
|
|
||||||
should not be focused
|
|
||||||
• use 32-bit visual by default if available. This reduces graphical glitches
|
|
||||||
when using transparency (which is still not officially supported)
|
|
||||||
• the “move position center” command now supports criteria
|
|
||||||
• specifying invalid match criteria now results in an error instead of
|
|
||||||
blindly applying the operation to the currently focused window
|
|
||||||
• allow mouse bindings to run on the root window
|
|
||||||
• support matching _NET_WM_WINDOW_TYPE_NOTIFICATION in criteria
|
|
||||||
• all criteria are now matched, even when con_id or con_mark are given (used
|
|
||||||
to be a special case)
|
|
||||||
• allow the “id” criterion to be specified in any base recognized by
|
|
||||||
strtol(), not only base 10
|
|
||||||
• non-true color displays are now supported again (e.g. the Raspberry Pi)
|
|
||||||
• the “split” command now has a “toggle” option
|
|
||||||
• the additional color class “decoration_border” was added
|
|
||||||
• title_format is now stored on containers instead of windows, allowing the
|
|
||||||
use of title_format on split containers
|
|
||||||
• On OpenBSD, i3 now uses pledge(2)
|
|
||||||
• support _NET_WM_DESKTOP (for pager applications like gnome-panel)
|
|
||||||
• floating workspaces are no longer available (they were not supported for a
|
|
||||||
while now)
|
|
||||||
• floating windows now carry the I3_FLOATING_WINDOW atom so that tools like
|
|
||||||
compositors can be configured to match on floating windows
|
|
||||||
|
|
||||||
┌────────────────────────────┐
|
|
||||||
│ Bugfixes │
|
|
||||||
└────────────────────────────┘
|
|
||||||
|
|
||||||
• i3bar: display short text only on the monitor(s) on which it is necessary
|
|
||||||
• i3bar: explicitly set cursor using libxcb-cursor if available
|
|
||||||
• i3bar: fix XEMBED messages
|
|
||||||
• i3-nagbar: explicitly set cursor using libxcb-cursor if available
|
|
||||||
• duplicated keybindings are now also detected when one uses bindcode but the
|
|
||||||
other(s) use(s) bindsym
|
|
||||||
• keymap fallback for servers without XKB (e.g. TightVNC) has been added
|
|
||||||
• using pango markup in mode names is now optional, fixing a regression in i3
|
|
||||||
v4.11 where modes which contained characters such as “<” would break.
|
|
||||||
• moving windows to a workspace by specifying a mark now works
|
|
||||||
• the root output is now used when any RandR request fails (for x2go)
|
|
||||||
• assignments are now marked as run before executing them, preventing endless
|
|
||||||
loops/crashes when assignments cause another assignment evaluation
|
|
||||||
• splitting/floating a dock container no longer crashes i3
|
|
||||||
• correctly compare modifier mask when identifying keybindings (fixes
|
|
||||||
bindings which use --release)
|
|
||||||
• no longer fail config validation when there is no newline at the end of
|
|
||||||
the config file
|
|
||||||
• scrollwheel buttons are now only grabbed when necessary, allowing the use
|
|
||||||
of “bindsym button*” or scrolling in windows without focusing them (in case
|
|
||||||
no “bindsym button*” is present)
|
|
||||||
• parse con_id in base 16 (affected FreeBSD only)
|
|
||||||
• fix crash when opening a large number of windows
|
|
||||||
• reject empty swallow definitions to avoid crashes
|
|
||||||
• don’t remove SubstructureRedirect event mask temporarily (fixes i3bar
|
|
||||||
stopping after system suspend)
|
|
||||||
• move urgent flag before killing the parent to avoid a crash
|
|
||||||
• correctly validate “kill” command to avoid crashing when “kill” is invoked
|
|
||||||
on workspace containers
|
|
||||||
• actually accept the documented “workspace” token as an alternative to “→”
|
|
||||||
in assign statements
|
|
||||||
• remove _NET_WM_STATE on withdrawn windows to comply with the spec
|
|
||||||
• the “border” command now uses logical pixels (relevant for hi-dpi displays)
|
|
||||||
• “tray_output primary” does not properly fall back and hence was removed
|
|
||||||
from the default config again
|
|
||||||
• correctly determine focused workspace when moving workspace to output
|
|
||||||
• revert to default binding mode before reloading the config file
|
|
||||||
• correctly interpret _MOTIF_WM_HINTS (endianness-dependent)
|
|
||||||
|
|
||||||
┌────────────────────────────┐
|
|
||||||
│ Thanks! │
|
|
||||||
└────────────────────────────┘
|
|
||||||
|
|
||||||
Thanks for testing, bugfixes, discussions and everything I forgot go out to:
|
|
||||||
|
|
||||||
Adaephon, Airblader, Alexis211, bendem, botovq, brianmillar, DavidMikeSimon,
|
|
||||||
dcoppa, Florian Merkel, fmthoma, frederik, hwangcc23, jolange, Juuso
|
|
||||||
Lapinlampi, kneitinger, lotheac, nicklan, norrland, pra85, romanblanco,
|
|
||||||
sur5r, tbu-, tyll, wodny
|
|
||||||
|
|
||||||
-- Michael Stapelberg, 2016-03-06
|
|
|
@ -0,0 +1,114 @@
|
||||||
|
|
||||||
|
┌────────────────────────────┐
|
||||||
|
│ Release notes for i3 v4.13 │
|
||||||
|
└────────────────────────────┘
|
||||||
|
|
||||||
|
This is i3 v4.13. This version is considered stable. All users of i3 are
|
||||||
|
strongly encouraged to upgrade.
|
||||||
|
|
||||||
|
For users, there are two changes to be aware of:
|
||||||
|
|
||||||
|
1. The X server DPI is read from the Xft.dpi X resource (if available).
|
||||||
|
Previously, i3 used to directly look at the X server’s DPI (based on screen
|
||||||
|
resolution and physical size). Looking at Xft.dpi is more consistent with
|
||||||
|
other software, more likely to be correct (because it’s user-specified and
|
||||||
|
not read from possibly broken hardware information) and allows users to
|
||||||
|
override the value.
|
||||||
|
|
||||||
|
2. It is now possible to set config file variables from X resources using the
|
||||||
|
“set_from_resource” directive. This allows users to have a single source of
|
||||||
|
truth for e.g. theming X11 applications (specify “*color0: #121212” and have
|
||||||
|
it apply to URxvt and your i3 config).
|
||||||
|
|
||||||
|
For packagers, there are three changes that likely require action:
|
||||||
|
|
||||||
|
1. cairo/pango are now required dependencies, as announced in the i3 v4.12
|
||||||
|
release notes.
|
||||||
|
|
||||||
|
2. The aforementioned “set_from_resource” feature requires the new dependency
|
||||||
|
libxcb-util-xrm.
|
||||||
|
|
||||||
|
3. i3 now uses the GNU build system (autotools). Please see
|
||||||
|
https://github.com/i3/i3/commit/4a52a7e9fb6fb2e1f0256b2e086cfa313f411cd8 for
|
||||||
|
a lot more details about the rationale and what this means for your package.
|
||||||
|
Bottomline, things should get simpler for you, though :).
|
||||||
|
|
||||||
|
┌────────────────────────────┐
|
||||||
|
│ Changes in i3 v4.13 │
|
||||||
|
└────────────────────────────┘
|
||||||
|
|
||||||
|
• build: wire up version handling for non-release tarballs (as opposed to git
|
||||||
|
checkouts)
|
||||||
|
• build: switch to the GNU build system
|
||||||
|
• i3bar: disable pango markup for plain-text input
|
||||||
|
• man/i3-msg: point out default ipc message type
|
||||||
|
• config: introduce support for specifying variables from X resources
|
||||||
|
• config: ensure variables match on longest-length, eliminating problems
|
||||||
|
where one variable was a prefix of another
|
||||||
|
• config: do not count '\' in comment lines as line continuation
|
||||||
|
• ipc: introduce a new GET_BINDING_MODES command
|
||||||
|
• ipc: implement new window::mark event
|
||||||
|
• ipc: add “output” to IPC events referencing a container
|
||||||
|
• make fullscreen windows open on the output which is indicated by their
|
||||||
|
geometry (fixes LibreOffice Impress multi-monitor presentations)
|
||||||
|
• focus newly managed windows only if they don’t use the globally active
|
||||||
|
input mode (fixes issues with RubyMine)
|
||||||
|
• remove title indentation in nested containers (rationale was unclear,
|
||||||
|
nobody spoke up when we asked about the feature on i3-discuss)
|
||||||
|
• use the last known timestamp when calling xcb_set_input_focus (might fix
|
||||||
|
rare race conditions in focus handling)
|
||||||
|
• introduce the “smart” option for hide_edge_borders, which will hide borders
|
||||||
|
when there is precisely one window on the workspace
|
||||||
|
• handle _MOTIF_WM_HINTS changes (_MOTIF_WM_HINTS were previously only
|
||||||
|
considered when managing a new window)
|
||||||
|
• don’t change border style if BS_NORMAL is requested in _MOTIF_WM_HINTS
|
||||||
|
• only add numlock fallback for keybindings where necessary (allows users to
|
||||||
|
correctly bind keys on the numpad)
|
||||||
|
• do not match docks in config and command criteria
|
||||||
|
• get DPI from the Xft.dpi resource instead of directly looking at the screen
|
||||||
|
resolution/size
|
||||||
|
• handle _NET_ACTIVE_WINDOW for scratchpad windows (for pagers)
|
||||||
|
• set _NET_WM_DESKTOP to sticky for scratchpad windows
|
||||||
|
• add new criteria “tiling” and “floating”
|
||||||
|
• implement special output name “current” for commands
|
||||||
|
• handle ResizeRequests for tray clients (fixes VLC tray icon)
|
||||||
|
|
||||||
|
┌────────────────────────────┐
|
||||||
|
│ Bugfixes │
|
||||||
|
└────────────────────────────┘
|
||||||
|
|
||||||
|
• i3bar: fix crash when the I3SOCK environment variable is present
|
||||||
|
• i3-dmenu-desktop: do not die on failed open
|
||||||
|
• i3-input: properly position in non-standard cases (fixes an issue where
|
||||||
|
i3-input would launch off-screen)
|
||||||
|
• i3-save-tree: rename “mark” to “marks” to reflect our recent change to
|
||||||
|
allow multiple marks
|
||||||
|
• mouse bindings: only grab the mouse buttons that need to be grabbed
|
||||||
|
• no_focus: correctly count the number of windows (makes no_focus work with
|
||||||
|
tabbed/stacked workspace layouts).
|
||||||
|
• properly close disabled outputs restored during a restart (this fixes state
|
||||||
|
handling when RandR changes happen during i3 restarts)
|
||||||
|
• don’t trigger bindings on window border clicks unless --border was
|
||||||
|
specified for the binding
|
||||||
|
• traverse numbered workspaces in correct order
|
||||||
|
• fix transition from named to numbered workspaces in “workspace next|prev”
|
||||||
|
• avoid setting urgency hint on content containers and above (fixes crashes)
|
||||||
|
• don’t trigger unrelated key bindings for --release bindings
|
||||||
|
• fix colormap handling for containers (fixes taking screenshots using xwd)
|
||||||
|
• check output crossing on ENTER_NOTIFY to dockarea (fixes pointer jumping)
|
||||||
|
• fix a use-after-free bug (fixes “floating enable” on single split windows)
|
||||||
|
|
||||||
|
┌────────────────────────────┐
|
||||||
|
│ Thanks! │
|
||||||
|
└────────────────────────────┘
|
||||||
|
|
||||||
|
Thanks for testing, bugfixes, discussions and everything I forgot go out to:
|
||||||
|
|
||||||
|
Benedikt Heine, Cedric Buissart, Chih-Chyuan Hwang, Denton Liu, eplanet, Eric
|
||||||
|
Engeström, EvilPudding, Ferdinand Bachmann, Hong, Ingo Bürk, Jakob Schnell,
|
||||||
|
Jakub Wilk, johannes karoff, Johannes Lange, joshrosso, Julien Lequertier,
|
||||||
|
Kacper Kowalik, Kenneth Lyons, Kyle Kneitinger, madroach, Michael Vetter,
|
||||||
|
Nathan Schulte, Øsse, Peder Stray, Tony Crisci, Trevor Merrifield, wentasah,
|
||||||
|
yshui, Zamarin Arthur
|
||||||
|
|
||||||
|
-- Michael Stapelberg, 2016-11-08
|
218
common.mk
218
common.mk
|
@ -1,218 +0,0 @@
|
||||||
UNAME=$(shell uname)
|
|
||||||
DEBUG=1
|
|
||||||
ASAN=0
|
|
||||||
INSTALL=install
|
|
||||||
LN=ln
|
|
||||||
PKG_CONFIG=pkg-config
|
|
||||||
ifndef PREFIX
|
|
||||||
PREFIX=/usr
|
|
||||||
endif
|
|
||||||
ifndef EXEC_PREFIX
|
|
||||||
EXEC_PREFIX=$(PREFIX)
|
|
||||||
endif
|
|
||||||
ifndef SYSCONFDIR
|
|
||||||
ifeq ($(PREFIX),/usr)
|
|
||||||
SYSCONFDIR=/etc
|
|
||||||
else
|
|
||||||
SYSCONFDIR=$(PREFIX)/etc
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
|
|
||||||
# In dist tarballs, the version is stored in the I3_VERSION and VERSION files.
|
|
||||||
I3_VERSION := '$(shell [ -f $(TOPDIR)/I3_VERSION ] && cat $(TOPDIR)/I3_VERSION)'
|
|
||||||
VERSION := '$(shell [ -f $(TOPDIR)/VERSION ] && cat $(TOPDIR)/VERSION)'
|
|
||||||
ifeq ('',$(I3_VERSION))
|
|
||||||
VERSION := $(shell git describe --tags --abbrev=0)
|
|
||||||
I3_VERSION := '$(shell git describe --tags --always) ($(shell git log --pretty=format:%cd --date=short -n1), branch \"$(shell git describe --tags --always --all | sed s:heads/::)\")'
|
|
||||||
endif
|
|
||||||
|
|
||||||
MAJOR_VERSION := $(shell echo ${VERSION} | cut -d '.' -f 1)
|
|
||||||
MINOR_VERSION := $(shell echo ${VERSION} | cut -d '.' -f 2)
|
|
||||||
PATCH_VERSION := $(shell echo ${VERSION} | cut -d '.' -f 3)
|
|
||||||
ifeq (${PATCH_VERSION},)
|
|
||||||
PATCH_VERSION := 0
|
|
||||||
endif
|
|
||||||
|
|
||||||
## Generic flags
|
|
||||||
|
|
||||||
# Default CFLAGS that users should be able to override
|
|
||||||
ifeq ($(DEBUG),1)
|
|
||||||
# Extended debugging flags, macros shall be available in gcc
|
|
||||||
CFLAGS ?= -pipe -gdwarf-2 -g3
|
|
||||||
else
|
|
||||||
CFLAGS ?= -pipe -O2 -freorder-blocks-and-partition
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq ($(ASAN),1)
|
|
||||||
CFLAGS += -fsanitize=address -DI3_ASAN_ENABLED
|
|
||||||
LDFLAGS += -fsanitize=address
|
|
||||||
endif
|
|
||||||
|
|
||||||
# Default LDFLAGS that users should be able to override
|
|
||||||
LDFLAGS ?= $(as_needed_LDFLAG)
|
|
||||||
|
|
||||||
# Common CFLAGS for all i3 related binaries
|
|
||||||
I3_CFLAGS = -std=c99
|
|
||||||
I3_CFLAGS += -Wall
|
|
||||||
# unused-function, unused-label, unused-variable are turned on by -Wall
|
|
||||||
# We don’t want unused-parameter because of the use of many callbacks
|
|
||||||
I3_CFLAGS += -Wunused-value
|
|
||||||
I3_CFLAGS += -Iinclude
|
|
||||||
|
|
||||||
I3_CPPFLAGS = -DI3_VERSION=\"${I3_VERSION}\"
|
|
||||||
I3_CPPFLAGS += -DMAJOR_VERSION=${MAJOR_VERSION}
|
|
||||||
I3_CPPFLAGS += -DMINOR_VERSION=${MINOR_VERSION}
|
|
||||||
I3_CPPFLAGS += -DPATCH_VERSION=${PATCH_VERSION}
|
|
||||||
I3_CPPFLAGS += -DSYSCONFDIR=\"${SYSCONFDIR}\"
|
|
||||||
I3_CPPFLAGS += -DI3__FILE__=__FILE__
|
|
||||||
|
|
||||||
|
|
||||||
## Libraries flags
|
|
||||||
|
|
||||||
ifeq ($(shell which $(PKG_CONFIG) 2>/dev/null 1>/dev/null || echo 1),1)
|
|
||||||
$(error "pkg-config was not found")
|
|
||||||
endif
|
|
||||||
|
|
||||||
# An easier way to get CFLAGS and LDFLAGS falling back in case there's
|
|
||||||
# no pkg-config support for certain libraries.
|
|
||||||
#
|
|
||||||
# NOTE that you must not use a blank after comma when calling this:
|
|
||||||
# $(call ldflags_for_lib name, fallback) # bad
|
|
||||||
# $(call ldflags_for_lib name,fallback) # good
|
|
||||||
# Otherwise, the compiler will get -l foo instead of -lfoo
|
|
||||||
#
|
|
||||||
# We redirect stderr to /dev/null because pkg-config prints an error if support
|
|
||||||
# for gnome-config was enabled but gnome-config is not actually installed.
|
|
||||||
cflags_for_lib = $(shell $(PKG_CONFIG) --silence-errors --cflags $(1) 2>/dev/null)
|
|
||||||
ldflags_for_lib = $(shell $(PKG_CONFIG) --exists 2>/dev/null $(1) && $(PKG_CONFIG) --libs $(1) 2>/dev/null || echo -l$(2))
|
|
||||||
|
|
||||||
# XCB common stuff
|
|
||||||
XCB_CFLAGS := $(call cflags_for_lib, xcb)
|
|
||||||
XCB_CFLAGS += $(call cflags_for_lib, xcb-event)
|
|
||||||
XCB_LIBS := $(call ldflags_for_lib, xcb,xcb)
|
|
||||||
XCB_LIBS += $(call ldflags_for_lib, xcb-event,xcb-event)
|
|
||||||
ifeq ($(shell $(PKG_CONFIG) --exists xcb-util 2>/dev/null || echo 1),1)
|
|
||||||
XCB_CFLAGS += $(call cflags_for_lib, xcb-atom)
|
|
||||||
XCB_CFLAGS += $(call cflags_for_lib, xcb-aux)
|
|
||||||
XCB_LIBS += $(call ldflags_for_lib, xcb-atom,xcb-atom)
|
|
||||||
XCB_LIBS += $(call ldflags_for_lib, xcb-aux,xcb-aux)
|
|
||||||
XCB_CPPFLAGS+= -DXCB_COMPAT
|
|
||||||
else
|
|
||||||
XCB_CFLAGS += $(call cflags_for_lib, xcb-util)
|
|
||||||
XCB_LIBS += $(call ldflags_for_lib, xcb-util)
|
|
||||||
endif
|
|
||||||
XCB_XKB_LIBS := $(call ldflags_for_lib, xcb-xkb,xcb-xkb)
|
|
||||||
|
|
||||||
# XCB keyboard stuff
|
|
||||||
XCB_KBD_CFLAGS := $(call cflags_for_lib, xcb-keysyms)
|
|
||||||
XCB_KBD_LIBS := $(call ldflags_for_lib, xcb-keysyms,xcb-keysyms)
|
|
||||||
|
|
||||||
# XCB WM stuff
|
|
||||||
XCB_WM_CFLAGS := $(call cflags_for_lib, xcb-icccm)
|
|
||||||
XCB_WM_CFLAGS += $(call cflags_for_lib, xcb-xinerama)
|
|
||||||
XCB_WM_CFLAGS += $(call cflags_for_lib, xcb-randr)
|
|
||||||
XCB_WM_LIBS := $(call ldflags_for_lib, xcb-icccm,xcb-icccm)
|
|
||||||
XCB_WM_LIBS += $(call ldflags_for_lib, xcb-xinerama,xcb-xinerama)
|
|
||||||
XCB_WM_LIBS += $(call ldflags_for_lib, xcb-randr,xcb-randr)
|
|
||||||
|
|
||||||
# XCB cursor
|
|
||||||
XCB_CURSOR_CFLAGS := $(call cflags_for_lib, xcb-cursor)
|
|
||||||
XCB_CURSOR_LIBS := $(call ldflags_for_lib, xcb-cursor,xcb-cursor)
|
|
||||||
|
|
||||||
XKB_COMMON_CFLAGS := $(call cflags_for_lib, xkbcommon,xkbcommon)
|
|
||||||
XKB_COMMON_LIBS := $(call ldflags_for_lib, xkbcommon,xkbcommon)
|
|
||||||
XKB_COMMON_X11_CFLAGS := $(call cflags_for_lib, xkbcommon-x11,xkbcommon-x11)
|
|
||||||
XKB_COMMON_X11_LIBS := $(call ldflags_for_lib, xkbcommon-x11,xkbcommon-x11)
|
|
||||||
|
|
||||||
# yajl
|
|
||||||
YAJL_CFLAGS := $(call cflags_for_lib, yajl)
|
|
||||||
YAJL_LIBS := $(call ldflags_for_lib, yajl,yajl)
|
|
||||||
|
|
||||||
#libev
|
|
||||||
LIBEV_CFLAGS := $(call cflags_for_lib, libev)
|
|
||||||
LIBEV_LIBS := $(call ldflags_for_lib, libev,ev)
|
|
||||||
|
|
||||||
# libpcre
|
|
||||||
PCRE_CFLAGS := $(call cflags_for_lib, libpcre)
|
|
||||||
ifeq ($(shell $(PKG_CONFIG) --atleast-version=8.10 libpcre 2>/dev/null && echo 1),1)
|
|
||||||
I3_CPPFLAGS += -DPCRE_HAS_UCP=1
|
|
||||||
endif
|
|
||||||
PCRE_LIBS := $(call ldflags_for_lib, libpcre,pcre)
|
|
||||||
|
|
||||||
# startup-notification
|
|
||||||
LIBSN_CFLAGS := $(call cflags_for_lib, libstartup-notification-1.0)
|
|
||||||
LIBSN_LIBS := $(call ldflags_for_lib, libstartup-notification-1.0,startup-notification-1)
|
|
||||||
|
|
||||||
# Pango
|
|
||||||
PANGO_CFLAGS := $(call cflags_for_lib, cairo)
|
|
||||||
PANGO_CFLAGS += $(call cflags_for_lib, pangocairo)
|
|
||||||
I3_CPPFLAGS += -DPANGO_SUPPORT=1
|
|
||||||
ifeq ($(shell $(PKG_CONFIG) --atleast-version=1.14.4 cairo 2>/dev/null && echo 1),1)
|
|
||||||
I3_CPPFLAGS += -DCAIRO_SUPPORT=1
|
|
||||||
endif
|
|
||||||
PANGO_LIBS := $(call ldflags_for_lib, cairo)
|
|
||||||
PANGO_LIBS += $(call ldflags_for_lib, pangocairo)
|
|
||||||
|
|
||||||
# libi3
|
|
||||||
LIBS = -L$(TOPDIR) -li3 -lm
|
|
||||||
|
|
||||||
## Platform-specific flags
|
|
||||||
|
|
||||||
# Please test if -Wl,--as-needed works on your platform and send me a patch.
|
|
||||||
# it is known not to work on Darwin (Mac OS X)
|
|
||||||
ifneq (,$(filter Linux GNU GNU/%, $(UNAME)))
|
|
||||||
as_needed_LDFLAG = -Wl,--as-needed
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq ($(UNAME),NetBSD)
|
|
||||||
# We need -idirafter instead of -I to prefer the system’s iconv over GNU libiconv
|
|
||||||
I3_CFLAGS += -idirafter /usr/pkg/include
|
|
||||||
I3_LDFLAGS += -Wl,-rpath,/usr/local/lib -Wl,-rpath,/usr/pkg/lib
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq ($(UNAME),OpenBSD)
|
|
||||||
I3_CFLAGS += -I${X11BASE}/include
|
|
||||||
LIBS += -liconv
|
|
||||||
I3_LDFLAGS += -L${X11BASE}/lib
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq ($(UNAME),FreeBSD)
|
|
||||||
LIBS += -liconv
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq ($(UNAME),Darwin)
|
|
||||||
LIBS += -liconv
|
|
||||||
else ifneq ($(UNAME),OpenBSD)
|
|
||||||
# Darwin (Mac OS X) and OpenBSD do not have librt
|
|
||||||
LIBS += -lrt
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq ($(UNAME),SunOS)
|
|
||||||
LIBS += -lsocket -liconv -lgen
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifneq (,$(filter Linux GNU GNU/%, $(UNAME)))
|
|
||||||
I3_CPPFLAGS += -D_GNU_SOURCE
|
|
||||||
endif
|
|
||||||
|
|
||||||
|
|
||||||
ifeq ($(COVERAGE),1)
|
|
||||||
I3_CFLAGS += -fprofile-arcs -ftest-coverage
|
|
||||||
LIBS += -lgcov
|
|
||||||
endif
|
|
||||||
|
|
||||||
V ?= 0
|
|
||||||
ifeq ($(V),0)
|
|
||||||
# Don’t print command lines which are run
|
|
||||||
.SILENT:
|
|
||||||
|
|
||||||
# echo-ing vars
|
|
||||||
V_ASCIIDOC = echo ASCIIDOC $@;
|
|
||||||
V_POD2HTML = echo POD2HTML $@;
|
|
||||||
V_POD2MAN = echo POD2MAN $@;
|
|
||||||
V_A2X = echo A2X $@;
|
|
||||||
endif
|
|
||||||
|
|
||||||
# Always remake the following targets
|
|
||||||
.PHONY: install clean dist distclean
|
|
||||||
|
|
|
@ -0,0 +1,174 @@
|
||||||
|
# -*- Autoconf -*-
|
||||||
|
# Run autoreconf -fi to generate a configure script from this file.
|
||||||
|
|
||||||
|
AC_PREREQ([2.69])
|
||||||
|
AC_INIT([i3], [4.13], [https://github.com/i3/i3/issues])
|
||||||
|
# For AX_EXTEND_SRCDIR
|
||||||
|
AX_ENABLE_BUILDDIR
|
||||||
|
AM_INIT_AUTOMAKE([foreign subdir-objects -Wall no-dist-gzip dist-bzip2])
|
||||||
|
# Default to silent rules, use V=1 to get verbose compilation output.
|
||||||
|
AM_SILENT_RULES([yes])
|
||||||
|
# Make it possible to disable maintainer mode to disable re-generation of build
|
||||||
|
# system files.
|
||||||
|
AM_MAINTAINER_MODE([enable])
|
||||||
|
AC_CONFIG_SRCDIR([libi3/ipc_recv_message.c])
|
||||||
|
AC_CONFIG_HEADERS([config.h])
|
||||||
|
AC_CONFIG_MACRO_DIR([m4])
|
||||||
|
|
||||||
|
# Verify we are using GNU make because we use '%'-style pattern rules in
|
||||||
|
# Makefile.am, which are a GNU make extension. Pull requests to replace
|
||||||
|
# '%'-style pattern rules with a more portable alternative are welcome.
|
||||||
|
AX_CHECK_GNU_MAKE
|
||||||
|
AS_VAR_IF([_cv_gnu_make_command], [""], [AC_MSG_ERROR([the i3 Makefile.am requires GNU make])])
|
||||||
|
|
||||||
|
AX_EXTEND_SRCDIR
|
||||||
|
|
||||||
|
AS_IF([test -d ${srcdir}/.git],
|
||||||
|
[
|
||||||
|
VERSION="$(git describe --tags --abbrev=0)"
|
||||||
|
I3_VERSION="$(git describe --tags --always) ($(git log --pretty=format:%cd --date=short -n1), branch \\\"$(git describe --tags --always --all | sed s:heads/::)\\\")"
|
||||||
|
# Mirrors what libi3/is_debug_build.c does:
|
||||||
|
is_release=$(test $(echo "${I3_VERSION}" | cut -d '(' -f 1 | wc -m) -lt 10 && echo yes || echo no)
|
||||||
|
],
|
||||||
|
[
|
||||||
|
VERSION="$(cut -d '-' -f 1 ${srcdir}/I3_VERSION | cut -d ' ' -f 1)"
|
||||||
|
I3_VERSION="$(sed -e 's/@<:@\"?\\@:>@/\\&/g' ${srcdir}/I3_VERSION)"
|
||||||
|
is_release="$(grep -q non-git ${srcdir}/I3_VERSION && echo no || echo yes)"
|
||||||
|
])
|
||||||
|
AC_SUBST([I3_VERSION], [$I3_VERSION])
|
||||||
|
MAJOR_VERSION="$(echo ${VERSION} | cut -d '.' -f 1)"
|
||||||
|
MINOR_VERSION="$(echo ${VERSION} | cut -d '.' -f 2)"
|
||||||
|
PATCH_VERSION="$(echo ${VERSION} | cut -d '.' -f 3)"
|
||||||
|
AS_IF([test "x${PATCH_VERSION}" = x], [PATCH_VERSION=0])
|
||||||
|
AC_DEFINE_UNQUOTED([I3_VERSION], ["${I3_VERSION}"], [i3 version])
|
||||||
|
AC_DEFINE_UNQUOTED([MAJOR_VERSION], [${MAJOR_VERSION}], [i3 major version])
|
||||||
|
AC_DEFINE_UNQUOTED([MINOR_VERSION], [${MINOR_VERSION}], [i3 minor version])
|
||||||
|
AC_DEFINE_UNQUOTED([PATCH_VERSION], [${PATCH_VERSION}], [i3 patch version])
|
||||||
|
|
||||||
|
AX_CODE_COVERAGE
|
||||||
|
|
||||||
|
dnl is_release must be lowercase because AX_CHECK_ENABLE_DEBUG calls m4_tolower
|
||||||
|
dnl on its fourth argument.
|
||||||
|
AX_CHECK_ENABLE_DEBUG([yes], , [UNUSED_NDEBUG], [$is_release])
|
||||||
|
|
||||||
|
AC_PROG_CC_C99
|
||||||
|
|
||||||
|
AC_DEFINE_UNQUOTED(SYSCONFDIR, "`eval echo $sysconfdir`", [Location of system configuration files])
|
||||||
|
|
||||||
|
# For strnlen() and vasprintf().
|
||||||
|
AC_USE_SYSTEM_EXTENSIONS
|
||||||
|
|
||||||
|
# Checks for typedefs, structures, and compiler characteristics.
|
||||||
|
AC_CHECK_HEADER_STDBOOL
|
||||||
|
dnl The error message should include the specific type which could not be
|
||||||
|
dnl found, but I do not see a way to achieve that.
|
||||||
|
AC_CHECK_TYPES([mode_t, off_t, pid_t, size_t, ssize_t], , [AC_MSG_FAILURE([cannot find required type])])
|
||||||
|
|
||||||
|
# Checks for library functions.
|
||||||
|
AC_FUNC_FORK
|
||||||
|
AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK
|
||||||
|
AC_FUNC_STRNLEN
|
||||||
|
AC_CHECK_FUNCS([atexit dup2 ftruncate getcwd gettimeofday localtime_r memchr memset mkdir rmdir setlocale socket strcasecmp strchr strdup strerror strncasecmp strndup strrchr strspn strstr strtol strtoul], , [AC_MSG_FAILURE([cannot find the $ac_func function, which i3 requires])])
|
||||||
|
|
||||||
|
# Checks for libraries.
|
||||||
|
|
||||||
|
AC_SEARCH_LIBS([floor], [m], , [AC_MSG_FAILURE([cannot find the required floor() function despite trying to link with -lm])])
|
||||||
|
|
||||||
|
# libev does not ship with a pkg-config file :(.
|
||||||
|
AC_SEARCH_LIBS([ev_run], [ev], , [AC_MSG_FAILURE([cannot find the required ev_run() function despite trying to link with -lev])])
|
||||||
|
|
||||||
|
AC_SEARCH_LIBS([shm_open], [rt])
|
||||||
|
|
||||||
|
AX_PTHREAD
|
||||||
|
|
||||||
|
dnl Each prefix corresponds to a source tarball which users might have
|
||||||
|
dnl downloaded in a newer version and would like to overwrite.
|
||||||
|
PKG_CHECK_MODULES([LIBSN], [libstartup-notification-1.0])
|
||||||
|
PKG_CHECK_MODULES([XCB], [xcb xcb-xkb xcb-xinerama xcb-randr])
|
||||||
|
PKG_CHECK_MODULES([XCB_UTIL], [xcb-event xcb-util])
|
||||||
|
PKG_CHECK_MODULES([XCB_UTIL_CURSOR], [xcb-cursor])
|
||||||
|
PKG_CHECK_MODULES([XCB_UTIL_KEYSYMS], [xcb-keysyms])
|
||||||
|
PKG_CHECK_MODULES([XCB_UTIL_WM], [xcb-icccm])
|
||||||
|
PKG_CHECK_MODULES([XCB_UTIL_XRM], [xcb-xrm])
|
||||||
|
PKG_CHECK_MODULES([XKBCOMMON], [xkbcommon xkbcommon-x11])
|
||||||
|
PKG_CHECK_MODULES([YAJL], [yajl])
|
||||||
|
PKG_CHECK_MODULES([LIBPCRE], [libpcre >= 8.10])
|
||||||
|
PKG_CHECK_MODULES([PANGOCAIRO], [cairo >= 1.14.4 pangocairo])
|
||||||
|
|
||||||
|
# Checks for programs.
|
||||||
|
AC_PROG_AWK
|
||||||
|
AC_PROG_CPP
|
||||||
|
AC_PROG_INSTALL
|
||||||
|
AC_PROG_MAKE_SET
|
||||||
|
AC_PROG_RANLIB
|
||||||
|
AC_PROG_LN_S
|
||||||
|
|
||||||
|
AC_PATH_PROG([PATH_ASCIIDOC], [asciidoc])
|
||||||
|
AC_PATH_PROG([PATH_XMLTO], [xmlto])
|
||||||
|
AC_PATH_PROG([PATH_POD2MAN], [pod2man])
|
||||||
|
|
||||||
|
AM_CONDITIONAL([BUILD_MANS], [test x$PATH_ASCIIDOC != x && test x$PATH_XMLTO != x && test x$PATH_POD2MAN != x])
|
||||||
|
AM_CONDITIONAL([BUILD_DOCS], [test x$PATH_ASCIIDOC != x])
|
||||||
|
|
||||||
|
AM_PROG_AR
|
||||||
|
|
||||||
|
AX_FLAGS_WARN_ALL
|
||||||
|
AX_CHECK_COMPILE_FLAG([-Wunused-value], [AX_APPEND_FLAG([-Wunused-value], [AM_CFLAGS])])
|
||||||
|
AC_SUBST(AM_CFLAGS)
|
||||||
|
|
||||||
|
# Checks for header files.
|
||||||
|
AC_CHECK_HEADERS([fcntl.h float.h inttypes.h limits.h locale.h netinet/in.h paths.h stddef.h stdint.h stdlib.h string.h sys/param.h sys/socket.h sys/time.h unistd.h], , [AC_MSG_FAILURE([cannot find the $ac_header header, which i3 requires])])
|
||||||
|
|
||||||
|
AC_CONFIG_FILES([Makefile testcases/lib/i3test.pm man/asciidoc.conf])
|
||||||
|
AC_CONFIG_FILES([testcases/complete-run.pl], [chmod +x testcases/complete-run.pl])
|
||||||
|
|
||||||
|
# Enable address sanitizer for non-release builds. The performance hit is a
|
||||||
|
# 50% increase of wallclock time for the testsuite on my machine.
|
||||||
|
if test x$is_release = xyes; then
|
||||||
|
default_sanitizers=
|
||||||
|
else
|
||||||
|
default_sanitizers=address
|
||||||
|
fi
|
||||||
|
AX_SANITIZERS(, [$default_sanitizers], [AC_DEFINE([I3_ASAN_ENABLED], [], [Enable ASAN])])
|
||||||
|
|
||||||
|
AC_OUTPUT
|
||||||
|
|
||||||
|
if test -z "${BUILD_DOCS_TRUE}"; then
|
||||||
|
print_BUILD_DOCS=yes
|
||||||
|
else
|
||||||
|
print_BUILD_DOCS=no
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
if test -z "${BUILD_MANS_TRUE}"; then
|
||||||
|
print_BUILD_MANS=yes
|
||||||
|
else
|
||||||
|
print_BUILD_MANS=no
|
||||||
|
fi
|
||||||
|
|
||||||
|
git_dir=`git rev-parse --git-dir 2>/dev/null`
|
||||||
|
if test -n "$git_dir"; then
|
||||||
|
srcdir=`dirname "$git_dir"`
|
||||||
|
exclude_dir=`pwd | sed "s,^$srcdir,,g"`
|
||||||
|
if ! grep -q "^$exclude_dir" "$git_dir/info/exclude"; then
|
||||||
|
echo "$exclude_dir" >> "$git_dir/info/exclude"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo \
|
||||||
|
"--------------------------------------------------------------------------------
|
||||||
|
build configured:
|
||||||
|
|
||||||
|
AS_HELP_STRING([i3 version:], [`echo ${I3_VERSION} | sed 's,\\\\,,g'`])
|
||||||
|
AS_HELP_STRING([is release version:], [${is_release}])
|
||||||
|
|
||||||
|
AS_HELP_STRING([build manpages:], [${print_BUILD_MANS}])
|
||||||
|
AS_HELP_STRING([build docs:], [${print_BUILD_DOCS}])
|
||||||
|
AS_HELP_STRING([enable debug flags:], [${ax_enable_debug}])
|
||||||
|
AS_HELP_STRING([code coverage:], [${CODE_COVERAGE_ENABLED}])
|
||||||
|
AS_HELP_STRING([enabled sanitizers:], [${ax_enabled_sanitizers}])
|
||||||
|
|
||||||
|
To compile, run:
|
||||||
|
|
||||||
|
cd `pwd` && make -j8
|
||||||
|
--------------------------------------------------------------------------------"
|
|
@ -1,9 +1,27 @@
|
||||||
|
i3-wm (4.12.1-1) unstable; urgency=medium
|
||||||
|
|
||||||
|
* New upstream release.
|
||||||
|
* Move to debhelper 9
|
||||||
|
* Bump Standards-Version to 3.9.7 (no changes necessary)
|
||||||
|
* debian/watch: verify signature, use https
|
||||||
|
|
||||||
|
-- Michael Stapelberg <stapelberg@debian.org> Fri, 01 Apr 2016 16:34:35 +0200
|
||||||
|
|
||||||
|
i3-wm (4.12-2) unstable; urgency=medium
|
||||||
|
|
||||||
|
* Override lintian warning desktop-entry-contains-unknown-key for
|
||||||
|
DesktopNames, gdm needs that key.
|
||||||
|
* Remove i3-wm.menu to conform to the tech-ctte decision on #741573.
|
||||||
|
|
||||||
|
-- Michael Stapelberg <stapelberg@debian.org> Fri, 01 Apr 2016 15:51:23 +0200
|
||||||
|
|
||||||
i3-wm (4.12-1) unstable; urgency=medium
|
i3-wm (4.12-1) unstable; urgency=medium
|
||||||
|
|
||||||
* New upstream release.
|
* New upstream release.
|
||||||
* Move to debhelper 9
|
* Move to debhelper 9
|
||||||
* Bump Standards-Version to 3.9.7 (no changes necessary)
|
* Bump Standards-Version to 3.9.7 (no changes necessary)
|
||||||
* debian/watch: verify signature, use https
|
* debian/watch: verify signature, use https
|
||||||
|
* Enable full hardening
|
||||||
|
|
||||||
-- Michael Stapelberg <stapelberg@debian.org> Sun, 06 Mar 2016 14:20:38 +0100
|
-- Michael Stapelberg <stapelberg@debian.org> Sun, 06 Mar 2016 14:20:38 +0100
|
||||||
|
|
||||||
|
|
|
@ -3,6 +3,7 @@ Section: x11
|
||||||
Priority: extra
|
Priority: extra
|
||||||
Maintainer: Michael Stapelberg <stapelberg@debian.org>
|
Maintainer: Michael Stapelberg <stapelberg@debian.org>
|
||||||
Build-Depends: debhelper (>= 9),
|
Build-Depends: debhelper (>= 9),
|
||||||
|
dh-autoreconf,
|
||||||
libx11-dev,
|
libx11-dev,
|
||||||
libxcb-util0-dev (>= 0.3.8),
|
libxcb-util0-dev (>= 0.3.8),
|
||||||
libxcb-keysyms1-dev,
|
libxcb-keysyms1-dev,
|
||||||
|
@ -10,6 +11,7 @@ Build-Depends: debhelper (>= 9),
|
||||||
libxcb-randr0-dev,
|
libxcb-randr0-dev,
|
||||||
libxcb-icccm4-dev,
|
libxcb-icccm4-dev,
|
||||||
libxcb-cursor-dev,
|
libxcb-cursor-dev,
|
||||||
|
libxcb-xrm-dev,
|
||||||
libxcb-xkb-dev,
|
libxcb-xkb-dev,
|
||||||
libxkbcommon-dev (>= 0.4.0),
|
libxkbcommon-dev (>= 0.4.0),
|
||||||
libxkbcommon-x11-dev (>= 0.4.0),
|
libxkbcommon-x11-dev (>= 0.4.0),
|
||||||
|
@ -19,12 +21,12 @@ Build-Depends: debhelper (>= 9),
|
||||||
pkg-config,
|
pkg-config,
|
||||||
libev-dev (>= 1:4.04),
|
libev-dev (>= 1:4.04),
|
||||||
libyajl-dev (>= 2.0.4),
|
libyajl-dev (>= 2.0.4),
|
||||||
libpcre3-dev,
|
libpcre3-dev (>= 1:8.10),
|
||||||
libstartup-notification0-dev (>= 0.10),
|
libstartup-notification0-dev (>= 0.10),
|
||||||
libcairo2-dev,
|
libcairo2-dev (>= 1.14.4),
|
||||||
libpango1.0-dev,
|
libpango1.0-dev,
|
||||||
libpod-simple-perl
|
libpod-simple-perl
|
||||||
Standards-Version: 3.9.7
|
Standards-Version: 3.9.8
|
||||||
Homepage: http://i3wm.org/
|
Homepage: http://i3wm.org/
|
||||||
|
|
||||||
Package: i3
|
Package: i3
|
||||||
|
|
|
@ -1,2 +1,2 @@
|
||||||
etc
|
debian/tmp/etc
|
||||||
usr
|
debian/tmp/usr
|
||||||
|
|
|
@ -1,5 +0,0 @@
|
||||||
?package(i3-wm): \
|
|
||||||
needs="wm" \
|
|
||||||
section="Window Managers" \
|
|
||||||
title="i3" \
|
|
||||||
command="/usr/bin/i3"
|
|
|
@ -4,14 +4,18 @@
|
||||||
export V:=1
|
export V:=1
|
||||||
export DEB_BUILD_MAINT_OPTIONS = hardening=+all
|
export DEB_BUILD_MAINT_OPTIONS = hardening=+all
|
||||||
|
|
||||||
override_dh_auto_build:
|
|
||||||
dh_auto_build -- all docs mans
|
|
||||||
|
|
||||||
override_dh_installchangelogs:
|
override_dh_installchangelogs:
|
||||||
dh_installchangelogs RELEASE-NOTES-*
|
dh_installchangelogs RELEASE-NOTES-*
|
||||||
|
|
||||||
override_dh_strip:
|
override_dh_strip:
|
||||||
dh_strip --dbg-package=i3-wm-dbg
|
dh_strip --dbg-package=i3-wm-dbg
|
||||||
|
|
||||||
|
override_dh_auto_test:
|
||||||
|
# TODO: enable tests
|
||||||
|
|
||||||
|
override_dh_auto_configure:
|
||||||
|
# The default is /usr/share/doc/i3
|
||||||
|
dh_auto_configure -- --docdir=/usr/share/doc/i3-wm
|
||||||
|
|
||||||
%:
|
%:
|
||||||
dh $@ --parallel
|
dh $@ --parallel --builddirectory=build --with=autoreconf
|
||||||
|
|
|
@ -1,7 +0,0 @@
|
||||||
all:
|
|
||||||
$(MAKE) -C .. docs
|
|
||||||
|
|
||||||
clean:
|
|
||||||
$(MAKE) -C .. clean-docs
|
|
||||||
|
|
||||||
.PHONY: all clean
|
|
46
docs/docs.mk
46
docs/docs.mk
|
@ -1,46 +0,0 @@
|
||||||
DISTCLEAN_TARGETS += clean-docs
|
|
||||||
|
|
||||||
# To pass additional parameters for asciidoc
|
|
||||||
ASCIIDOC = asciidoc
|
|
||||||
I3POD2HTML = ./docs/i3-pod2html
|
|
||||||
|
|
||||||
ASCIIDOC_NOTOC_TARGETS = \
|
|
||||||
docs/debugging.html
|
|
||||||
|
|
||||||
ASCIIDOC_TOC_TARGETS = \
|
|
||||||
docs/hacking-howto.html \
|
|
||||||
docs/userguide.html \
|
|
||||||
docs/ipc.html \
|
|
||||||
docs/multi-monitor.html \
|
|
||||||
docs/wsbar.html \
|
|
||||||
docs/testsuite.html \
|
|
||||||
docs/i3bar-protocol.html \
|
|
||||||
docs/layout-saving.html
|
|
||||||
|
|
||||||
ASCIIDOC_TARGETS = \
|
|
||||||
$(ASCIIDOC_TOC_TARGETS) \
|
|
||||||
$(ASCIIDOC_NOTOC_TARGETS)
|
|
||||||
|
|
||||||
ASCIIDOC_CALL = $(V_ASCIIDOC)$(ASCIIDOC) -n $(ASCIIDOC_FLAGS) -o $@ $<
|
|
||||||
ASCIIDOC_TOC_CALL = $(V_ASCIIDOC)$(ASCIIDOC) -a toc -n $(ASCIIDOC_FLAGS) -o $@ $<
|
|
||||||
|
|
||||||
POD2HTML_TARGETS = \
|
|
||||||
docs/lib-i3test.html \
|
|
||||||
docs/lib-i3test-test.html
|
|
||||||
|
|
||||||
docs/lib-i3test.html: testcases/lib/i3test.pm
|
|
||||||
$(V_POD2HTML)$(I3POD2HTML) $< $@
|
|
||||||
|
|
||||||
docs/lib-i3test-test.html: testcases/lib/i3test/Test.pm
|
|
||||||
$(V_POD2HTML)$(I3POD2HTML) $< $@
|
|
||||||
|
|
||||||
docs: $(ASCIIDOC_TARGETS) $(POD2HTML_TARGETS)
|
|
||||||
|
|
||||||
$(ASCIIDOC_TOC_TARGETS): docs/%.html: docs/%
|
|
||||||
$(ASCIIDOC_TOC_CALL)
|
|
||||||
|
|
||||||
$(ASCIIDOC_NOTOC_TARGETS): docs/%.html: docs/%
|
|
||||||
$(ASCIIDOC_CALL)
|
|
||||||
|
|
||||||
clean-docs:
|
|
||||||
rm -f $(ASCIIDOC_TARGETS) $(POD2HTML_TARGETS)
|
|
|
@ -187,7 +187,7 @@ cleanup ("flatten") the tree. See also +src/move.c+ for another similar
|
||||||
function, which was moved into its own file because it is so long.
|
function, which was moved into its own file because it is so long.
|
||||||
|
|
||||||
src/util.c::
|
src/util.c::
|
||||||
Contains useful functions which are not really dependant on anything.
|
Contains useful functions which are not really dependent on anything.
|
||||||
|
|
||||||
src/window.c::
|
src/window.c::
|
||||||
Handlers to update X11 window properties like +WM_CLASS+, +_NET_WM_NAME+,
|
Handlers to update X11 window properties like +WM_CLASS+, +_NET_WM_NAME+,
|
||||||
|
@ -593,7 +593,7 @@ optimize this and call +x_push_node+ on the appropriate con directly.
|
||||||
itself for the container’s children. This function actually pushes the
|
itself for the container’s children. This function actually pushes the
|
||||||
state, see the next paragraph.
|
state, see the next paragraph.
|
||||||
4. If the pointer needs to be warped to a different position (for example when
|
4. If the pointer needs to be warped to a different position (for example when
|
||||||
changing focus to a differnt output), it will be warped now.
|
changing focus to a different output), it will be warped now.
|
||||||
5. The eventmask is restored for all mapped windows.
|
5. The eventmask is restored for all mapped windows.
|
||||||
6. Window decorations will be rendered by calling +x_deco_recurse+ on the root
|
6. Window decorations will be rendered by calling +x_deco_recurse+ on the root
|
||||||
container, which then recursively calls itself for the children.
|
container, which then recursively calls itself for the children.
|
||||||
|
@ -850,7 +850,7 @@ empty.
|
||||||
Afterwards, +con_focus+ will be called to fix the focus stack and the tree will
|
Afterwards, +con_focus+ will be called to fix the focus stack and the tree will
|
||||||
be flattened.
|
be flattened.
|
||||||
|
|
||||||
=== Case 3: Moving to non-existant top/bottom
|
=== Case 3: Moving to non-existent top/bottom
|
||||||
|
|
||||||
Like in case 1, the reference layout for this case is a single workspace in
|
Like in case 1, the reference layout for this case is a single workspace in
|
||||||
horizontal orientation with two containers on it. Focus is on the left
|
horizontal orientation with two containers on it. Focus is on the left
|
||||||
|
@ -877,7 +877,7 @@ container and the container above/below the current one (on the level of
|
||||||
Now, +con_focus+ will be called to fix the focus stack and the tree will be
|
Now, +con_focus+ will be called to fix the focus stack and the tree will be
|
||||||
flattened.
|
flattened.
|
||||||
|
|
||||||
=== Case 4: Moving to existant top/bottom
|
=== Case 4: Moving to existent top/bottom
|
||||||
|
|
||||||
The reference layout for this case is a vertical workspace with two containers.
|
The reference layout for this case is a vertical workspace with two containers.
|
||||||
The bottom one is a h-split containing two containers (1 and 2). Focus is on
|
The bottom one is a h-split containing two containers (1 and 2). Focus is on
|
||||||
|
|
|
@ -6,7 +6,7 @@ August 2012
|
||||||
This document explains the protocol in which i3bar expects its input. It
|
This document explains the protocol in which i3bar expects its input. It
|
||||||
provides support for colors, urgency, shortening and easy manipulation.
|
provides support for colors, urgency, shortening and easy manipulation.
|
||||||
|
|
||||||
== Rationale for chosing JSON
|
== Rationale for choosing JSON
|
||||||
|
|
||||||
Before describing the protocol, let’s cover why JSON is a building block of
|
Before describing the protocol, let’s cover why JSON is a building block of
|
||||||
this protocol.
|
this protocol.
|
||||||
|
@ -111,7 +111,7 @@ cont_signal::
|
||||||
processing.
|
processing.
|
||||||
The default value (if none is specified) is SIGCONT.
|
The default value (if none is specified) is SIGCONT.
|
||||||
click_events::
|
click_events::
|
||||||
If specified and true i3bar will write a infinite array (same as above)
|
If specified and true i3bar will write an infinite array (same as above)
|
||||||
to your stdin.
|
to your stdin.
|
||||||
|
|
||||||
=== Blocks in detail
|
=== Blocks in detail
|
||||||
|
@ -233,7 +233,7 @@ name::
|
||||||
instance::
|
instance::
|
||||||
Instance of the block, if set
|
Instance of the block, if set
|
||||||
x, y::
|
x, y::
|
||||||
X11 root window coordinates where the click occured
|
X11 root window coordinates where the click occurred
|
||||||
button::
|
button::
|
||||||
X11 button ID (for example 1 to 3 for left/middle/right mouse button)
|
X11 button ID (for example 1 to 3 for left/middle/right mouse button)
|
||||||
|
|
||||||
|
|
32
docs/ipc
32
docs/ipc
|
@ -80,6 +80,8 @@ GET_BAR_CONFIG (6)::
|
||||||
GET_VERSION (7)::
|
GET_VERSION (7)::
|
||||||
Gets the version of i3. The reply will be a JSON-encoded dictionary
|
Gets the version of i3. The reply will be a JSON-encoded dictionary
|
||||||
with the major, minor, patch and human-readable version.
|
with the major, minor, patch and human-readable version.
|
||||||
|
GET_BINDING_MODES (8)::
|
||||||
|
Gets a list of currently configured binding modes.
|
||||||
|
|
||||||
So, a typical message could look like this:
|
So, a typical message could look like this:
|
||||||
--------------------------------------------------
|
--------------------------------------------------
|
||||||
|
@ -137,6 +139,8 @@ BAR_CONFIG (6)::
|
||||||
Reply to the GET_BAR_CONFIG message.
|
Reply to the GET_BAR_CONFIG message.
|
||||||
VERSION (7)::
|
VERSION (7)::
|
||||||
Reply to the GET_VERSION message.
|
Reply to the GET_VERSION message.
|
||||||
|
BINDING_MODES (8)::
|
||||||
|
Reply to the GET_BINDING_MODES message.
|
||||||
|
|
||||||
=== COMMAND reply
|
=== COMMAND reply
|
||||||
|
|
||||||
|
@ -285,7 +289,7 @@ type (string)::
|
||||||
Type of this container. Can be one of "root", "output", "con",
|
Type of this container. Can be one of "root", "output", "con",
|
||||||
"floating_con", "workspace" or "dockarea".
|
"floating_con", "workspace" or "dockarea".
|
||||||
border (string)::
|
border (string)::
|
||||||
Can be either "normal", "none" or "1pixel", dependending on the
|
Can be either "normal", "none" or "pixel", depending on the
|
||||||
container’s border style.
|
container’s border style.
|
||||||
current_border_width (integer)::
|
current_border_width (integer)::
|
||||||
Number of pixels of the border width.
|
Number of pixels of the border width.
|
||||||
|
@ -604,6 +608,15 @@ loaded_config_file_name (string)::
|
||||||
}
|
}
|
||||||
-------------------
|
-------------------
|
||||||
|
|
||||||
|
=== BINDING_MODES reply
|
||||||
|
|
||||||
|
The reply consists of an array of all currently configured binding modes.
|
||||||
|
|
||||||
|
*Example:*
|
||||||
|
---------------------
|
||||||
|
["default", "resize"]
|
||||||
|
---------------------
|
||||||
|
|
||||||
== Events
|
== Events
|
||||||
|
|
||||||
[[events]]
|
[[events]]
|
||||||
|
@ -741,14 +754,15 @@ defines whether pango markup shall be used for displaying this mode.
|
||||||
This event consists of a single serialized map containing a property
|
This event consists of a single serialized map containing a property
|
||||||
+change (string)+ which indicates the type of the change
|
+change (string)+ which indicates the type of the change
|
||||||
|
|
||||||
* +new+ - the window has become managed by i3
|
* +new+ – the window has become managed by i3
|
||||||
* +close+ - the window has closed
|
* +close+ – the window has closed
|
||||||
* +focus+ - the window has received input focus
|
* +focus+ – the window has received input focus
|
||||||
* +title+ - the window's title has changed
|
* +title+ – the window's title has changed
|
||||||
* +fullscreen_mode+ - the window has entered or exited fullscreen mode
|
* +fullscreen_mode+ – the window has entered or exited fullscreen mode
|
||||||
* +move+ - the window has changed its position in the tree
|
* +move+ – the window has changed its position in the tree
|
||||||
* +floating+ - the window has transitioned to or from floating
|
* +floating+ – the window has transitioned to or from floating
|
||||||
* +urgent+ - the window has become urgent or lost its urgent status
|
* +urgent+ – the window has become urgent or lost its urgent status
|
||||||
|
* +mark+ – a mark has been added to or removed from the window
|
||||||
|
|
||||||
Additionally a +container (object)+ field will be present, which consists
|
Additionally a +container (object)+ field will be present, which consists
|
||||||
of the window's parent container. Be aware that for the "new" event, the
|
of the window's parent container. Be aware that for the "new" event, the
|
||||||
|
|
|
@ -109,7 +109,7 @@ run the tests on a separate X server instance (using Xephyr).
|
||||||
|
|
||||||
Xephyr will open a window where you can inspect the running test. You can run
|
Xephyr will open a window where you can inspect the running test. You can run
|
||||||
the tests without an X session with Xvfb, such as with +xvfb-run
|
the tests without an X session with Xvfb, such as with +xvfb-run
|
||||||
./complete-run+. This will also speed up the tests signficantly especially on
|
./complete-run+. This will also speed up the tests significantly especially on
|
||||||
machines without a powerful video card.
|
machines without a powerful video card.
|
||||||
|
|
||||||
.Example invocation of complete-run.pl+
|
.Example invocation of complete-run.pl+
|
||||||
|
@ -196,7 +196,7 @@ In order to open new windows, change attributes, get events, etc., the
|
||||||
testsuite uses X11::XCB, a new (and quite specific to i3 at the moment) Perl
|
testsuite uses X11::XCB, a new (and quite specific to i3 at the moment) Perl
|
||||||
module which uses the XCB protocol description to generate Perl bindings to
|
module which uses the XCB protocol description to generate Perl bindings to
|
||||||
X11. They work in a very similar way to libxcb (which i3 uses) and provide
|
X11. They work in a very similar way to libxcb (which i3 uses) and provide
|
||||||
relatively high-level interfaces (objects such as +X11::XCB::Window+) aswell as
|
relatively high-level interfaces (objects such as +X11::XCB::Window+) as well as
|
||||||
access to the low-level interface, which is very useful when testing a window
|
access to the low-level interface, which is very useful when testing a window
|
||||||
manager.
|
manager.
|
||||||
|
|
||||||
|
@ -450,7 +450,7 @@ cmd 'focus left';
|
||||||
is($x->input_focus, $left->id, 'left window focused');
|
is($x->input_focus, $left->id, 'left window focused');
|
||||||
----------
|
----------
|
||||||
|
|
||||||
However, the test fails. Sometimes. Apparantly, there is a race condition in
|
However, the test fails. Sometimes. Apparently, there is a race condition in
|
||||||
your test. If you think about it, this is because you are using two different
|
your test. If you think about it, this is because you are using two different
|
||||||
pieces of software: You tell i3 to update focus, i3 confirms that, and then you
|
pieces of software: You tell i3 to update focus, i3 confirms that, and then you
|
||||||
ask X11 to give you the current focus. There is a certain time i3 needs to
|
ask X11 to give you the current focus. There is a certain time i3 needs to
|
||||||
|
@ -614,7 +614,7 @@ activation, we decreased the total amount of time necessary to run all tests
|
||||||
it significantly more attractive to run the test suite more often (or at all)
|
it significantly more attractive to run the test suite more often (or at all)
|
||||||
during development.
|
during development.
|
||||||
|
|
||||||
An alternative approach to using socket activation is polling for the existance
|
An alternative approach to using socket activation is polling for the existence
|
||||||
of the IPC socket and connecting to it. While this might be slightly easier to
|
of the IPC socket and connecting to it. While this might be slightly easier to
|
||||||
implement, it wastes CPU time and is considerably uglier than this solution
|
implement, it wastes CPU time and is considerably uglier than this solution
|
||||||
:). After all, +lib/SocketActivation.pm+ contains only 54 SLOC.
|
:). After all, +lib/SocketActivation.pm+ contains only 54 SLOC.
|
||||||
|
|
|
@ -152,7 +152,7 @@ and move it to the wanted size.
|
||||||
|
|
||||||
You can also use <<binding_modes>> to define a mode for resizing via the
|
You can also use <<binding_modes>> to define a mode for resizing via the
|
||||||
keyboard. To see an example for this, look at the
|
keyboard. To see an example for this, look at the
|
||||||
https://github.com/i3/i3/blob/next/i3.config.keycodes[default config] provided
|
https://github.com/i3/i3/blob/next/etc/config.keycodes[default config] provided
|
||||||
by i3.
|
by i3.
|
||||||
|
|
||||||
=== Restarting i3 inplace
|
=== Restarting i3 inplace
|
||||||
|
@ -181,7 +181,7 @@ can also do that by using the <<floating_modifier>>. Another way to resize
|
||||||
floating windows using the mouse is to right-click on the titlebar and drag.
|
floating windows using the mouse is to right-click on the titlebar and drag.
|
||||||
|
|
||||||
For resizing floating windows with your keyboard, see the resizing binding mode
|
For resizing floating windows with your keyboard, see the resizing binding mode
|
||||||
provided by the i3 https://github.com/i3/i3/blob/next/i3.config.keycodes[default config].
|
provided by the i3 https://github.com/i3/i3/blob/next/etc/config.keycodes[default config].
|
||||||
|
|
||||||
Floating windows are always on top of tiling windows.
|
Floating windows are always on top of tiling windows.
|
||||||
|
|
||||||
|
@ -610,11 +610,13 @@ new_window pixel 3
|
||||||
|
|
||||||
You can hide container borders adjacent to the screen edges using
|
You can hide container borders adjacent to the screen edges using
|
||||||
+hide_edge_borders+. This is useful if you are using scrollbars, or do not want
|
+hide_edge_borders+. This is useful if you are using scrollbars, or do not want
|
||||||
to waste even two pixels in displayspace. Default is none.
|
to waste even two pixels in displayspace. The "smart" setting hides borders on
|
||||||
|
workspaces with only one window visible, but keeps them on workspaces with
|
||||||
|
multiple windows visible. Default is none.
|
||||||
|
|
||||||
*Syntax*:
|
*Syntax*:
|
||||||
-----------------------------------------------
|
-----------------------------------------------
|
||||||
hide_edge_borders none|vertical|horizontal|both
|
hide_edge_borders none|vertical|horizontal|both|smart
|
||||||
-----------------------------------------------
|
-----------------------------------------------
|
||||||
|
|
||||||
*Example*:
|
*Example*:
|
||||||
|
@ -700,6 +702,38 @@ absolutely no plans to change this. If you need a more dynamic configuration
|
||||||
you should create a little script which generates a configuration file and run
|
you should create a little script which generates a configuration file and run
|
||||||
it before starting i3 (for example in your +~/.xsession+ file).
|
it before starting i3 (for example in your +~/.xsession+ file).
|
||||||
|
|
||||||
|
Also see <<xresources>> to learn how to create variables based on resources
|
||||||
|
loaded from the X resource database.
|
||||||
|
|
||||||
|
[[xresources]]
|
||||||
|
=== X resources
|
||||||
|
|
||||||
|
<<variables>> can also be created using a value configured in the X resource
|
||||||
|
database. This is useful, for example, to avoid configuring color values within
|
||||||
|
the i3 configuration. Instead, the values can be configured, once, in the X
|
||||||
|
resource database to achieve an easily maintainable, consistent color theme
|
||||||
|
across many X applications.
|
||||||
|
|
||||||
|
Defining a resource will load this resource from the resource database and
|
||||||
|
assign its value to the specified variable. A fallback must be specified in
|
||||||
|
case the resource cannot be loaded from the database.
|
||||||
|
|
||||||
|
*Syntax*:
|
||||||
|
----------------------------------------------------
|
||||||
|
set_from_resource $<name> <resource_name> <fallback>
|
||||||
|
----------------------------------------------------
|
||||||
|
|
||||||
|
*Example*:
|
||||||
|
----------------------------------------------------------------------------
|
||||||
|
# The ~/.Xresources should contain a line such as
|
||||||
|
# *color0: #121212
|
||||||
|
# and must be loaded properly, e.g., by using
|
||||||
|
# xrdb ~/.Xresources
|
||||||
|
# This value is picked up on by other applications (e.g., the URxvt terminal
|
||||||
|
# emulator) and can be used in i3 like this:
|
||||||
|
set_from_resource $black i3wm.color0 #000000
|
||||||
|
----------------------------------------------------------------------------
|
||||||
|
|
||||||
[[assign_workspace]]
|
[[assign_workspace]]
|
||||||
=== Automatically putting clients on specific workspaces
|
=== Automatically putting clients on specific workspaces
|
||||||
|
|
||||||
|
@ -1115,11 +1149,15 @@ show_marks yes
|
||||||
Config files support line continuation, meaning when you end a line in a
|
Config files support line continuation, meaning when you end a line in a
|
||||||
backslash character (`\`), the line-break will be ignored by the parser. This
|
backslash character (`\`), the line-break will be ignored by the parser. This
|
||||||
feature can be used to create more readable configuration files.
|
feature can be used to create more readable configuration files.
|
||||||
|
Commented lines are not continued.
|
||||||
|
|
||||||
*Examples*:
|
*Examples*:
|
||||||
-------------------
|
-------------------
|
||||||
bindsym Mod1+f \
|
bindsym Mod1+f \
|
||||||
fullscreen toggle
|
fullscreen toggle
|
||||||
|
|
||||||
|
# this line is not continued \
|
||||||
|
bindsym Mod1+F fullscreen toggle
|
||||||
-------------------
|
-------------------
|
||||||
|
|
||||||
== Configuring i3bar
|
== Configuring i3bar
|
||||||
|
@ -1372,7 +1410,7 @@ NetworkManager, VLC, Pidgin, etc. can place little icons.
|
||||||
You can configure on which output (monitor) the icons should be displayed or
|
You can configure on which output (monitor) the icons should be displayed or
|
||||||
you can turn off the functionality entirely.
|
you can turn off the functionality entirely.
|
||||||
|
|
||||||
You can use mutliple +tray_output+ directives in your config to specify a list
|
You can use multiple +tray_output+ directives in your config to specify a list
|
||||||
of outputs on which you want the tray to appear. The first available output in
|
of outputs on which you want the tray to appear. The first available output in
|
||||||
that list as defined by the order of the directives will be used for the tray
|
that list as defined by the order of the directives will be used for the tray
|
||||||
output.
|
output.
|
||||||
|
@ -1641,6 +1679,9 @@ bindsym $mod+x [class="Firefox" window_role="About"] kill
|
||||||
|
|
||||||
# enable floating mode and move container to workspace 4
|
# enable floating mode and move container to workspace 4
|
||||||
for_window [class="^evil-app$"] floating enable, move container to workspace 4
|
for_window [class="^evil-app$"] floating enable, move container to workspace 4
|
||||||
|
|
||||||
|
# move all floating windows to the scratchpad
|
||||||
|
bindsym $mod+x [floating] move scratchpad
|
||||||
------------------------------------
|
------------------------------------
|
||||||
|
|
||||||
The criteria which are currently implemented are:
|
The criteria which are currently implemented are:
|
||||||
|
@ -1683,6 +1724,10 @@ con_id::
|
||||||
Compares the i3-internal container ID, which you can get via the IPC
|
Compares the i3-internal container ID, which you can get via the IPC
|
||||||
interface. Handy for scripting. Use the special value +\_\_focused__+
|
interface. Handy for scripting. Use the special value +\_\_focused__+
|
||||||
to match only the currently focused window.
|
to match only the currently focused window.
|
||||||
|
floating::
|
||||||
|
Only matches floating windows. This criterion requires no value.
|
||||||
|
tiling::
|
||||||
|
Only matches tiling windows. This criterion requires no value.
|
||||||
|
|
||||||
The criteria +class+, +instance+, +role+, +title+, +workspace+ and +mark+ are
|
The criteria +class+, +instance+, +role+, +title+, +workspace+ and +mark+ are
|
||||||
actually regular expressions (PCRE). See +pcresyntax(3)+ or +perldoc perlre+ for
|
actually regular expressions (PCRE). See +pcresyntax(3)+ or +perldoc perlre+ for
|
||||||
|
@ -2050,6 +2095,7 @@ See <<move_to_outputs>> for how to move a container/workspace to a different
|
||||||
RandR output.
|
RandR output.
|
||||||
|
|
||||||
[[move_to_outputs]]
|
[[move_to_outputs]]
|
||||||
|
[[_moving_containers_workspaces_to_randr_outputs]]
|
||||||
=== Moving containers/workspaces to RandR outputs
|
=== Moving containers/workspaces to RandR outputs
|
||||||
|
|
||||||
To move a container to another RandR output (addressed by names like +LVDS1+ or
|
To move a container to another RandR output (addressed by names like +LVDS1+ or
|
||||||
|
@ -2057,10 +2103,10 @@ To move a container to another RandR output (addressed by names like +LVDS1+ or
|
||||||
+right+, +up+ or +down+), there are two commands:
|
+right+, +up+ or +down+), there are two commands:
|
||||||
|
|
||||||
*Syntax*:
|
*Syntax*:
|
||||||
----------------------------------------------------
|
------------------------------------------------------------
|
||||||
move container to output left|right|down|up|<output>
|
move container to output left|right|down|up|current|<output>
|
||||||
move workspace to output left|right|down|up|<output>
|
move workspace to output left|right|down|up|current|<output>
|
||||||
----------------------------------------------------
|
------------------------------------------------------------
|
||||||
|
|
||||||
*Examples*:
|
*Examples*:
|
||||||
--------------------------------------------------------
|
--------------------------------------------------------
|
||||||
|
@ -2115,7 +2161,7 @@ floating containers.
|
||||||
|
|
||||||
It is recommended to define bindings for resizing in a dedicated binding mode.
|
It is recommended to define bindings for resizing in a dedicated binding mode.
|
||||||
See <<binding_modes>> and the example in the i3
|
See <<binding_modes>> and the example in the i3
|
||||||
https://github.com/i3/i3/blob/next/i3.config.keycodes[default config] for more
|
https://github.com/i3/i3/blob/next/etc/config.keycodes[default config] for more
|
||||||
context.
|
context.
|
||||||
|
|
||||||
*Example*:
|
*Example*:
|
||||||
|
@ -2204,7 +2250,7 @@ bindsym $mod+g exec i3-input -p 'goto ' -l 1 -P 'Goto: '
|
||||||
---------------------------------------
|
---------------------------------------
|
||||||
|
|
||||||
Alternatively, if you do not want to mess with +i3-input+, you could create
|
Alternatively, if you do not want to mess with +i3-input+, you could create
|
||||||
seperate bindings for a specific set of labels and then only use those labels.
|
separate bindings for a specific set of labels and then only use those labels.
|
||||||
///////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
[[pango_markup]]
|
[[pango_markup]]
|
||||||
|
@ -2534,7 +2580,7 @@ have more than one monitor:
|
||||||
track of which window you put where. Thus, you can use vim-like marks to
|
track of which window you put where. Thus, you can use vim-like marks to
|
||||||
quickly switch between windows. See <<vim_like_marks>>.
|
quickly switch between windows. See <<vim_like_marks>>.
|
||||||
4. For information on how to move existing workspaces between monitors,
|
4. For information on how to move existing workspaces between monitors,
|
||||||
see <<_moving_containers_workspaces_to_randr_outputs>>.
|
see <<move_to_outputs>>.
|
||||||
|
|
||||||
== i3 and the rest of your software world
|
== i3 and the rest of your software world
|
||||||
|
|
||||||
|
|
|
@ -1,10 +0,0 @@
|
||||||
all:
|
|
||||||
$(MAKE) -C .. i3-config-wizard/i3-config-wizard
|
|
||||||
|
|
||||||
install:
|
|
||||||
$(MAKE) -C .. install-i3-config-wizard
|
|
||||||
|
|
||||||
clean:
|
|
||||||
$(MAKE) -C .. clean-i3-config-wizard
|
|
||||||
|
|
||||||
.PHONY: all install clean
|
|
|
@ -1,28 +0,0 @@
|
||||||
ALL_TARGETS += i3-config-wizard/i3-config-wizard
|
|
||||||
INSTALL_TARGETS += install-i3-config-wizard
|
|
||||||
CLEAN_TARGETS += clean-i3-config-wizard
|
|
||||||
|
|
||||||
i3_config_wizard_SOURCES := $(wildcard i3-config-wizard/*.c)
|
|
||||||
i3_config_wizard_HEADERS := $(wildcard i3-config-wizard/*.h)
|
|
||||||
i3_config_wizard_CFLAGS = $(XCB_CFLAGS) $(XCB_KBD_CFLAGS) $(PANGO_CFLAGS) $(XKB_COMMON_CFLAGS) $(XKB_COMMON_X11_CFLAGS)
|
|
||||||
i3_config_wizard_LIBS = $(XCB_LIBS) $(XCB_KBD_LIBS) $(PANGO_LIBS) $(XKB_COMMON_LIBS) $(XKB_COMMON_X11_LIBS)
|
|
||||||
|
|
||||||
i3_config_wizard_OBJECTS := $(i3_config_wizard_SOURCES:.c=.o)
|
|
||||||
|
|
||||||
|
|
||||||
i3-config-wizard/%.o: i3-config-wizard/%.c $(i3_config_wizard_HEADERS) i3-config-parser.stamp
|
|
||||||
echo "[i3-config-wizard] CC $<"
|
|
||||||
$(CC) $(I3_CPPFLAGS) $(XCB_CPPFLAGS) $(CPPFLAGS) $(i3_config_wizard_CFLAGS) $(I3_CFLAGS) $(CFLAGS) -c -o $@ $<
|
|
||||||
|
|
||||||
i3-config-wizard/i3-config-wizard: libi3.a $(i3_config_wizard_OBJECTS)
|
|
||||||
echo "[i3-config-wizard] Link i3-config-wizard"
|
|
||||||
$(CC) $(I3_LDFLAGS) $(LDFLAGS) -o $@ $(filter-out libi3.a,$^) $(LIBS) $(i3_config_wizard_LIBS)
|
|
||||||
|
|
||||||
install-i3-config-wizard: i3-config-wizard/i3-config-wizard
|
|
||||||
echo "[i3-config-wizard] Install"
|
|
||||||
$(INSTALL) -d -m 0755 $(DESTDIR)$(EXEC_PREFIX)/bin
|
|
||||||
$(INSTALL) -m 0755 i3-config-wizard/i3-config-wizard $(DESTDIR)$(EXEC_PREFIX)/bin/
|
|
||||||
|
|
||||||
clean-i3-config-wizard:
|
|
||||||
echo "[i3-config-wizard] Clean"
|
|
||||||
rm -f $(i3_config_wizard_OBJECTS) $(i3_config_wizard_SOURCES_GENERATED) i3-config-wizard/i3-config-wizard i3-config-wizard/cfgparse.*
|
|
|
@ -8,6 +8,8 @@
|
||||||
* keysyms.
|
* keysyms.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
#include <config.h>
|
||||||
|
|
||||||
#if defined(__FreeBSD__)
|
#if defined(__FreeBSD__)
|
||||||
#include <sys/param.h>
|
#include <sys/param.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -25,7 +25,11 @@ binmode STDERR, ':utf8';
|
||||||
# reads in a whole file
|
# reads in a whole file
|
||||||
sub slurp {
|
sub slurp {
|
||||||
my ($filename) = @_;
|
my ($filename) = @_;
|
||||||
open(my $fh, '<', $filename) or die "$!";
|
my $fh;
|
||||||
|
if (!open($fh, '<', $filename)) {
|
||||||
|
warn "Could not open $filename: $!";
|
||||||
|
return undef;
|
||||||
|
}
|
||||||
local $/;
|
local $/;
|
||||||
my $result;
|
my $result;
|
||||||
eval {
|
eval {
|
||||||
|
|
|
@ -1,10 +0,0 @@
|
||||||
all:
|
|
||||||
$(MAKE) -C .. i3-dump-log/i3-dump-log
|
|
||||||
|
|
||||||
install:
|
|
||||||
$(MAKE) -C .. install-i3-dump-log
|
|
||||||
|
|
||||||
clean:
|
|
||||||
$(MAKE) -C .. clean-i3-dump-log
|
|
||||||
|
|
||||||
.PHONY: all install clean
|
|
|
@ -1,28 +0,0 @@
|
||||||
ALL_TARGETS += i3-dump-log/i3-dump-log
|
|
||||||
INSTALL_TARGETS += install-i3-dump-log
|
|
||||||
CLEAN_TARGETS += clean-i3-dump-log
|
|
||||||
|
|
||||||
i3_dump_log_SOURCES := $(wildcard i3-dump-log/*.c)
|
|
||||||
i3_dump_log_HEADERS := $(wildcard i3-dump-log/*.h)
|
|
||||||
i3_dump_log_CFLAGS = $(XCB_CFLAGS) $(PANGO_CFLAGS)
|
|
||||||
i3_dump_log_LIBS = $(XCB_LIBS)
|
|
||||||
|
|
||||||
i3_dump_log_OBJECTS := $(i3_dump_log_SOURCES:.c=.o)
|
|
||||||
|
|
||||||
|
|
||||||
i3-dump-log/%.o: i3-dump-log/%.c $(i3_dump_log_HEADERS)
|
|
||||||
echo "[i3-dump-log] CC $<"
|
|
||||||
$(CC) $(I3_CPPFLAGS) $(XCB_CPPFLAGS) $(CPPFLAGS) $(i3_dump_log_CFLAGS) $(I3_CFLAGS) $(CFLAGS) -c -o $@ $<
|
|
||||||
|
|
||||||
i3-dump-log/i3-dump-log: libi3.a $(i3_dump_log_OBJECTS)
|
|
||||||
echo "[i3-dump-log] Link i3-dump-log"
|
|
||||||
$(CC) $(I3_LDFLAGS) $(LDFLAGS) -o $@ $(filter-out libi3.a,$^) $(LIBS) $(i3_dump_log_LIBS)
|
|
||||||
|
|
||||||
install-i3-dump-log: i3-dump-log/i3-dump-log
|
|
||||||
echo "[i3-dump-log] Install"
|
|
||||||
$(INSTALL) -d -m 0755 $(DESTDIR)$(EXEC_PREFIX)/bin
|
|
||||||
$(INSTALL) -m 0755 i3-dump-log/i3-dump-log $(DESTDIR)$(EXEC_PREFIX)/bin/
|
|
||||||
|
|
||||||
clean-i3-dump-log:
|
|
||||||
echo "[i3-dump-log] Clean"
|
|
||||||
rm -f $(i3_dump_log_OBJECTS) i3-dump-log/i3-dump-log
|
|
|
@ -7,6 +7,8 @@
|
||||||
* i3-dump-log/main.c: Dumps the i3 SHM log to stdout.
|
* i3-dump-log/main.c: Dumps the i3 SHM log to stdout.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
#include <config.h>
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
@ -28,8 +30,10 @@
|
||||||
#include "shmlog.h"
|
#include "shmlog.h"
|
||||||
#include <i3/ipc.h>
|
#include <i3/ipc.h>
|
||||||
|
|
||||||
static uint32_t offset_next_write,
|
#if !defined(__OpenBSD__)
|
||||||
wrap_count;
|
static uint32_t offset_next_write;
|
||||||
|
#endif
|
||||||
|
static uint32_t wrap_count;
|
||||||
|
|
||||||
static i3_shmlog_header *header;
|
static i3_shmlog_header *header;
|
||||||
static char *logbuffer,
|
static char *logbuffer,
|
||||||
|
@ -57,17 +61,26 @@ static void print_till_end(void) {
|
||||||
|
|
||||||
int main(int argc, char *argv[]) {
|
int main(int argc, char *argv[]) {
|
||||||
int o, option_index = 0;
|
int o, option_index = 0;
|
||||||
bool verbose = false,
|
bool verbose = false;
|
||||||
follow = false;
|
#if !defined(__OpenBSD__)
|
||||||
|
bool follow = false;
|
||||||
|
#endif
|
||||||
|
|
||||||
static struct option long_options[] = {
|
static struct option long_options[] = {
|
||||||
{"version", no_argument, 0, 'v'},
|
{"version", no_argument, 0, 'v'},
|
||||||
{"verbose", no_argument, 0, 'V'},
|
{"verbose", no_argument, 0, 'V'},
|
||||||
|
#if !defined(__OpenBSD__)
|
||||||
{"follow", no_argument, 0, 'f'},
|
{"follow", no_argument, 0, 'f'},
|
||||||
|
#endif
|
||||||
{"help", no_argument, 0, 'h'},
|
{"help", no_argument, 0, 'h'},
|
||||||
{0, 0, 0, 0}};
|
{0, 0, 0, 0}
|
||||||
|
};
|
||||||
|
|
||||||
|
#if !defined(__OpenBSD__)
|
||||||
char *options_string = "s:vfVh";
|
char *options_string = "s:vfVh";
|
||||||
|
#else
|
||||||
|
char *options_string = "vVh";
|
||||||
|
#endif
|
||||||
|
|
||||||
while ((o = getopt_long(argc, argv, options_string, long_options, &option_index)) != -1) {
|
while ((o = getopt_long(argc, argv, options_string, long_options, &option_index)) != -1) {
|
||||||
if (o == 'v') {
|
if (o == 'v') {
|
||||||
|
@ -75,11 +88,17 @@ int main(int argc, char *argv[]) {
|
||||||
return 0;
|
return 0;
|
||||||
} else if (o == 'V') {
|
} else if (o == 'V') {
|
||||||
verbose = true;
|
verbose = true;
|
||||||
|
#if !defined(__OpenBSD__)
|
||||||
} else if (o == 'f') {
|
} else if (o == 'f') {
|
||||||
follow = true;
|
follow = true;
|
||||||
|
#endif
|
||||||
} else if (o == 'h') {
|
} else if (o == 'h') {
|
||||||
printf("i3-dump-log " I3_VERSION "\n");
|
printf("i3-dump-log " I3_VERSION "\n");
|
||||||
printf("i3-dump-log [-f] [-s <socket>]\n");
|
#if !defined(__OpenBSD__)
|
||||||
|
printf("i3-dump-log [-fhVv]\n");
|
||||||
|
#else
|
||||||
|
printf("i3-dump-log [-hVv]\n");
|
||||||
|
#endif
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -162,6 +181,7 @@ int main(int argc, char *argv[]) {
|
||||||
walk = logbuffer + sizeof(i3_shmlog_header);
|
walk = logbuffer + sizeof(i3_shmlog_header);
|
||||||
print_till_end();
|
print_till_end();
|
||||||
|
|
||||||
|
#if !defined(__OpenBSD__)
|
||||||
if (follow) {
|
if (follow) {
|
||||||
/* Since pthread_cond_wait() expects a mutex, we need to provide one.
|
/* Since pthread_cond_wait() expects a mutex, we need to provide one.
|
||||||
* To not lock i3 (that’s bad, mhkay?) we just define one outside of
|
* To not lock i3 (that’s bad, mhkay?) we just define one outside of
|
||||||
|
@ -177,6 +197,7 @@ int main(int argc, char *argv[]) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,10 +0,0 @@
|
||||||
all:
|
|
||||||
$(MAKE) -C .. i3-input/i3-input
|
|
||||||
|
|
||||||
install:
|
|
||||||
$(MAKE) -C .. install-i3-input
|
|
||||||
|
|
||||||
clean:
|
|
||||||
$(MAKE) -C .. clean-i3-input
|
|
||||||
|
|
||||||
.PHONY: all install clean
|
|
|
@ -1,5 +1,7 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <config.h>
|
||||||
|
|
||||||
#include <err.h>
|
#include <err.h>
|
||||||
|
|
||||||
#define die(...) errx(EXIT_FAILURE, __VA_ARGS__);
|
#define die(...) errx(EXIT_FAILURE, __VA_ARGS__);
|
||||||
|
|
|
@ -1,28 +0,0 @@
|
||||||
ALL_TARGETS += i3-input/i3-input
|
|
||||||
INSTALL_TARGETS += install-i3-input
|
|
||||||
CLEAN_TARGETS += clean-i3-input
|
|
||||||
|
|
||||||
i3_input_SOURCES := $(wildcard i3-input/*.c)
|
|
||||||
i3_input_HEADERS := $(wildcard i3-input/*.h)
|
|
||||||
i3_input_CFLAGS = $(XCB_CFLAGS) $(XCB_KBD_CFLAGS) $(PANGO_CFLAGS)
|
|
||||||
i3_input_LIBS = $(XCB_LIBS) $(XCB_KBD_LIBS) $(PANGO_LIBS)
|
|
||||||
|
|
||||||
i3_input_OBJECTS := $(i3_input_SOURCES:.c=.o)
|
|
||||||
|
|
||||||
|
|
||||||
i3-input/%.o: i3-input/%.c $(i3_input_HEADERS)
|
|
||||||
echo "[i3-input] CC $<"
|
|
||||||
$(CC) $(I3_CPPFLAGS) $(XCB_CPPFLAGS) $(CPPFLAGS) $(i3_input_CFLAGS) $(I3_CFLAGS) $(CFLAGS) -c -o $@ $<
|
|
||||||
|
|
||||||
i3-input/i3-input: libi3.a $(i3_input_OBJECTS)
|
|
||||||
echo "[i3-input] Link i3-input"
|
|
||||||
$(CC) $(I3_LDFLAGS) $(LDFLAGS) -o $@ $(filter-out libi3.a,$^) $(LIBS) $(i3_input_LIBS)
|
|
||||||
|
|
||||||
install-i3-input: i3-input/i3-input
|
|
||||||
echo "[i3-input] Install"
|
|
||||||
$(INSTALL) -d -m 0755 $(DESTDIR)$(EXEC_PREFIX)/bin
|
|
||||||
$(INSTALL) -m 0755 i3-input/i3-input $(DESTDIR)$(EXEC_PREFIX)/bin/
|
|
||||||
|
|
||||||
clean-i3-input:
|
|
||||||
echo "[i3-input] Clean"
|
|
||||||
rm -f $(i3_input_OBJECTS) i3-input/i3-input
|
|
|
@ -1,7 +1,7 @@
|
||||||
# This list can be used to convert X11 Keysyms to Unicode 2.1 character.
|
# This list can be used to convert X11 Keysyms to Unicode 2.1 character.
|
||||||
# The list is not checked for correctness by Unicode officials. Use it
|
# The list is not checked for correctness by Unicode officials. Use it
|
||||||
# at your own risk and the creator is not responsable for any damage that
|
# at your own risk and the creator is not responsable for any damage that
|
||||||
# occured due to using this list.
|
# occurred due to using this list.
|
||||||
#
|
#
|
||||||
# The list is created by looking at the Keysym names and the Unicode data
|
# The list is created by looking at the Keysym names and the Unicode data
|
||||||
# file. Other mapping tables were used as a reference where needed.
|
# file. Other mapping tables were used as a reference where needed.
|
||||||
|
|
|
@ -8,6 +8,8 @@
|
||||||
* to i3.
|
* to i3.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
#include "libi3.h"
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
@ -31,8 +33,6 @@
|
||||||
|
|
||||||
#include "i3-input.h"
|
#include "i3-input.h"
|
||||||
|
|
||||||
#include "libi3.h"
|
|
||||||
|
|
||||||
/* IPC format string. %s will be replaced with what the user entered, then
|
/* IPC format string. %s will be replaced with what the user entered, then
|
||||||
* the command will be sent to i3 */
|
* the command will be sent to i3 */
|
||||||
static char *format;
|
static char *format;
|
||||||
|
@ -80,7 +80,7 @@ void debuglog(char *fmt, ...) {
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Restores the X11 input focus to whereever it was before.
|
* Restores the X11 input focus to wherever it was before.
|
||||||
* This is necessary because i3-input’s window has override_redirect=1
|
* This is necessary because i3-input’s window has override_redirect=1
|
||||||
* (→ unmanaged by the window manager) and thus i3-input changes focus itself.
|
* (→ unmanaged by the window manager) and thus i3-input changes focus itself.
|
||||||
* This function is called on exit().
|
* This function is called on exit().
|
||||||
|
@ -216,10 +216,6 @@ static void finish_input() {
|
||||||
|
|
||||||
free(full);
|
free(full);
|
||||||
|
|
||||||
#if 0
|
|
||||||
free(command);
|
|
||||||
return 1;
|
|
||||||
#endif
|
|
||||||
exit(0);
|
exit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -317,10 +313,31 @@ static int handle_key_press(void *ignored, xcb_connection_t *conn, xcb_key_press
|
||||||
static xcb_rectangle_t get_window_position(void) {
|
static xcb_rectangle_t get_window_position(void) {
|
||||||
xcb_rectangle_t result = (xcb_rectangle_t){logical_px(50), logical_px(50), logical_px(500), font.height + logical_px(8)};
|
xcb_rectangle_t result = (xcb_rectangle_t){logical_px(50), logical_px(50), logical_px(500), font.height + logical_px(8)};
|
||||||
|
|
||||||
|
xcb_get_property_reply_t *supporting_wm_reply = NULL;
|
||||||
xcb_get_input_focus_reply_t *input_focus = NULL;
|
xcb_get_input_focus_reply_t *input_focus = NULL;
|
||||||
xcb_get_geometry_reply_t *geometry = NULL;
|
xcb_get_geometry_reply_t *geometry = NULL;
|
||||||
|
xcb_get_property_reply_t *wm_class = NULL;
|
||||||
xcb_translate_coordinates_reply_t *coordinates = NULL;
|
xcb_translate_coordinates_reply_t *coordinates = NULL;
|
||||||
|
|
||||||
|
xcb_atom_t A__NET_SUPPORTING_WM_CHECK;
|
||||||
|
xcb_intern_atom_cookie_t nswc_cookie = xcb_intern_atom(conn, 0, strlen("_NET_SUPPORTING_WM_CHECK"), "_NET_SUPPORTING_WM_CHECK");
|
||||||
|
xcb_intern_atom_reply_t *nswc_reply = xcb_intern_atom_reply(conn, nswc_cookie, NULL);
|
||||||
|
if (nswc_reply == NULL) {
|
||||||
|
ELOG("Could not intern atom _NET_SUPPORTING_WM_CHECK\n");
|
||||||
|
exit(-1);
|
||||||
|
}
|
||||||
|
A__NET_SUPPORTING_WM_CHECK = nswc_reply->atom;
|
||||||
|
free(nswc_reply);
|
||||||
|
|
||||||
|
supporting_wm_reply = xcb_get_property_reply(
|
||||||
|
conn, xcb_get_property(conn, false, root, A__NET_SUPPORTING_WM_CHECK, XCB_ATOM_WINDOW, 0, 32), NULL);
|
||||||
|
xcb_window_t *supporting_wm_win = NULL;
|
||||||
|
if (supporting_wm_reply == NULL || xcb_get_property_value_length(supporting_wm_reply) == 0) {
|
||||||
|
DLOG("Could not determine EWMH support window.\n");
|
||||||
|
} else {
|
||||||
|
supporting_wm_win = xcb_get_property_value(supporting_wm_reply);
|
||||||
|
}
|
||||||
|
|
||||||
/* In rare cases, the window holding the input focus might disappear while we are figuring out its
|
/* In rare cases, the window holding the input focus might disappear while we are figuring out its
|
||||||
* position. To avoid this, we grab the server in the meantime. */
|
* position. To avoid this, we grab the server in the meantime. */
|
||||||
xcb_grab_server(conn);
|
xcb_grab_server(conn);
|
||||||
|
@ -331,29 +348,47 @@ static xcb_rectangle_t get_window_position(void) {
|
||||||
goto free_resources;
|
goto free_resources;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* We need to ignore the EWMH support window to which the focus can be set if there's no suitable window to focus. */
|
||||||
|
if (supporting_wm_win != NULL && input_focus->focus == *supporting_wm_win) {
|
||||||
|
DLOG("Input focus is on the EWMH support window, ignoring.\n");
|
||||||
|
goto free_resources;
|
||||||
|
}
|
||||||
|
|
||||||
geometry = xcb_get_geometry_reply(conn, xcb_get_geometry(conn, input_focus->focus), NULL);
|
geometry = xcb_get_geometry_reply(conn, xcb_get_geometry(conn, input_focus->focus), NULL);
|
||||||
if (geometry == NULL) {
|
if (geometry == NULL) {
|
||||||
DLOG("Failed to received window geometry.\n");
|
DLOG("Failed to received window geometry.\n");
|
||||||
goto free_resources;
|
goto free_resources;
|
||||||
}
|
}
|
||||||
|
|
||||||
coordinates = xcb_translate_coordinates_reply(
|
wm_class = xcb_get_property_reply(
|
||||||
conn, xcb_translate_coordinates(conn, input_focus->focus, root, geometry->x, geometry->y), NULL);
|
conn, xcb_get_property(conn, false, input_focus->focus, XCB_ATOM_WM_CLASS, XCB_GET_PROPERTY_TYPE_ANY, 0, 32), NULL);
|
||||||
if (coordinates == NULL) {
|
|
||||||
DLOG("Failed to translate coordinates.\n");
|
|
||||||
goto free_resources;
|
|
||||||
}
|
|
||||||
|
|
||||||
DLOG("Determined coordinates of window with input focus at x = %i / y = %i.\n", coordinates->dst_x, coordinates->dst_y);
|
/* We need to find out whether the input focus is on an i3 frame window. If it is, we must not translate the coordinates. */
|
||||||
result.x += coordinates->dst_x;
|
if (wm_class == NULL || xcb_get_property_value_length(wm_class) == 0 || strcmp(xcb_get_property_value(wm_class), "i3-frame") != 0) {
|
||||||
result.y += coordinates->dst_y;
|
coordinates = xcb_translate_coordinates_reply(
|
||||||
|
conn, xcb_translate_coordinates(conn, input_focus->focus, root, geometry->x, geometry->y), NULL);
|
||||||
|
if (coordinates == NULL) {
|
||||||
|
DLOG("Failed to translate coordinates.\n");
|
||||||
|
goto free_resources;
|
||||||
|
}
|
||||||
|
|
||||||
|
DLOG("Determined coordinates of window with input focus at x = %i / y = %i.\n", coordinates->dst_x, coordinates->dst_y);
|
||||||
|
result.x += coordinates->dst_x;
|
||||||
|
result.y += coordinates->dst_y;
|
||||||
|
} else {
|
||||||
|
DLOG("Determined coordinates of window with input focus at x = %i / y = %i.\n", geometry->x, geometry->y);
|
||||||
|
result.x += geometry->x;
|
||||||
|
result.y += geometry->y;
|
||||||
|
}
|
||||||
|
|
||||||
free_resources:
|
free_resources:
|
||||||
xcb_ungrab_server(conn);
|
xcb_ungrab_server(conn);
|
||||||
xcb_flush(conn);
|
xcb_flush(conn);
|
||||||
|
|
||||||
|
FREE(supporting_wm_reply);
|
||||||
FREE(input_focus);
|
FREE(input_focus);
|
||||||
FREE(geometry);
|
FREE(geometry);
|
||||||
|
FREE(wm_class);
|
||||||
FREE(coordinates);
|
FREE(coordinates);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,10 +0,0 @@
|
||||||
all:
|
|
||||||
$(MAKE) -C .. i3-msg/i3-msg
|
|
||||||
|
|
||||||
install:
|
|
||||||
$(MAKE) -C .. install-i3-msg
|
|
||||||
|
|
||||||
clean:
|
|
||||||
$(MAKE) -C .. clean-i3-msg
|
|
||||||
|
|
||||||
.PHONY: all install clean
|
|
|
@ -1,28 +0,0 @@
|
||||||
ALL_TARGETS += i3-msg/i3-msg
|
|
||||||
INSTALL_TARGETS += install-i3-msg
|
|
||||||
CLEAN_TARGETS += clean-i3-msg
|
|
||||||
|
|
||||||
i3_msg_SOURCES := $(wildcard i3-msg/*.c)
|
|
||||||
i3_msg_HEADERS := $(wildcard i3-msg/*.h)
|
|
||||||
i3_msg_CFLAGS = $(XCB_CFLAGS) $(PANGO_CFLAGS) $(YAJL_CFLAGS)
|
|
||||||
i3_msg_LIBS = $(XCB_LIBS) $(YAJL_LIBS)
|
|
||||||
|
|
||||||
i3_msg_OBJECTS := $(i3_msg_SOURCES:.c=.o)
|
|
||||||
|
|
||||||
|
|
||||||
i3-msg/%.o: i3-msg/%.c $(i3_msg_HEADERS)
|
|
||||||
echo "[i3-msg] CC $<"
|
|
||||||
$(CC) $(I3_CPPFLAGS) $(XCB_CPPFLAGS) $(CPPFLAGS) $(i3_msg_CFLAGS) $(I3_CFLAGS) $(CFLAGS) -c -o $@ $<
|
|
||||||
|
|
||||||
i3-msg/i3-msg: libi3.a $(i3_msg_OBJECTS)
|
|
||||||
echo "[i3-msg] Link i3-msg"
|
|
||||||
$(CC) $(I3_LDFLAGS) $(LDFLAGS) -o $@ $(filter-out libi3.a,$^) $(LIBS) $(i3_msg_LIBS)
|
|
||||||
|
|
||||||
install-i3-msg: i3-msg/i3-msg
|
|
||||||
echo "[i3-msg] Install"
|
|
||||||
$(INSTALL) -d -m 0755 $(DESTDIR)$(EXEC_PREFIX)/bin
|
|
||||||
$(INSTALL) -m 0755 i3-msg/i3-msg $(DESTDIR)$(EXEC_PREFIX)/bin/
|
|
||||||
|
|
||||||
clean-i3-msg:
|
|
||||||
echo "[i3-msg] Clean"
|
|
||||||
rm -f $(i3_msg_OBJECTS) i3-msg/i3-msg
|
|
|
@ -14,6 +14,8 @@
|
||||||
* Additionally, it’s even useful sometimes :-).
|
* Additionally, it’s even useful sometimes :-).
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
#include "libi3.h"
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
@ -34,7 +36,6 @@
|
||||||
#include <xcb/xcb.h>
|
#include <xcb/xcb.h>
|
||||||
#include <xcb/xcb_aux.h>
|
#include <xcb/xcb_aux.h>
|
||||||
|
|
||||||
#include "libi3.h"
|
|
||||||
#include <i3/ipc.h>
|
#include <i3/ipc.h>
|
||||||
|
|
||||||
static char *socket_path;
|
static char *socket_path;
|
||||||
|
@ -161,11 +162,13 @@ int main(int argc, char *argv[]) {
|
||||||
message_type = I3_IPC_MESSAGE_TYPE_GET_MARKS;
|
message_type = I3_IPC_MESSAGE_TYPE_GET_MARKS;
|
||||||
else if (strcasecmp(optarg, "get_bar_config") == 0)
|
else if (strcasecmp(optarg, "get_bar_config") == 0)
|
||||||
message_type = I3_IPC_MESSAGE_TYPE_GET_BAR_CONFIG;
|
message_type = I3_IPC_MESSAGE_TYPE_GET_BAR_CONFIG;
|
||||||
|
else if (strcasecmp(optarg, "get_binding_modes") == 0)
|
||||||
|
message_type = I3_IPC_MESSAGE_TYPE_GET_BINDING_MODES;
|
||||||
else if (strcasecmp(optarg, "get_version") == 0)
|
else if (strcasecmp(optarg, "get_version") == 0)
|
||||||
message_type = I3_IPC_MESSAGE_TYPE_GET_VERSION;
|
message_type = I3_IPC_MESSAGE_TYPE_GET_VERSION;
|
||||||
else {
|
else {
|
||||||
printf("Unknown message type\n");
|
printf("Unknown message type\n");
|
||||||
printf("Known types: command, get_workspaces, get_outputs, get_tree, get_marks, get_bar_config, get_version\n");
|
printf("Known types: command, get_workspaces, get_outputs, get_tree, get_marks, get_bar_config, get_binding_modes, get_version\n");
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
} else if (o == 'q') {
|
} else if (o == 'q') {
|
||||||
|
@ -203,7 +206,7 @@ int main(int argc, char *argv[]) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!payload)
|
if (!payload)
|
||||||
payload = "";
|
payload = sstrdup("");
|
||||||
|
|
||||||
int sockfd = socket(AF_LOCAL, SOCK_STREAM, 0);
|
int sockfd = socket(AF_LOCAL, SOCK_STREAM, 0);
|
||||||
if (sockfd == -1)
|
if (sockfd == -1)
|
||||||
|
@ -218,6 +221,7 @@ int main(int argc, char *argv[]) {
|
||||||
|
|
||||||
if (ipc_send_message(sockfd, strlen(payload), message_type, (uint8_t *)payload) == -1)
|
if (ipc_send_message(sockfd, strlen(payload), message_type, (uint8_t *)payload) == -1)
|
||||||
err(EXIT_FAILURE, "IPC: write()");
|
err(EXIT_FAILURE, "IPC: write()");
|
||||||
|
free(payload);
|
||||||
|
|
||||||
if (quiet)
|
if (quiet)
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -236,9 +240,10 @@ int main(int argc, char *argv[]) {
|
||||||
/* For the reply of commands, have a look if that command was successful.
|
/* For the reply of commands, have a look if that command was successful.
|
||||||
* If not, nicely format the error message. */
|
* If not, nicely format the error message. */
|
||||||
if (reply_type == I3_IPC_MESSAGE_TYPE_COMMAND) {
|
if (reply_type == I3_IPC_MESSAGE_TYPE_COMMAND) {
|
||||||
yajl_handle handle;
|
yajl_handle handle = yajl_alloc(&reply_callbacks, NULL, NULL);
|
||||||
handle = yajl_alloc(&reply_callbacks, NULL, NULL);
|
|
||||||
yajl_status state = yajl_parse(handle, (const unsigned char *)reply, reply_length);
|
yajl_status state = yajl_parse(handle, (const unsigned char *)reply, reply_length);
|
||||||
|
yajl_free(handle);
|
||||||
|
|
||||||
switch (state) {
|
switch (state) {
|
||||||
case yajl_status_ok:
|
case yajl_status_ok:
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -1,10 +0,0 @@
|
||||||
all:
|
|
||||||
$(MAKE) -C .. i3-nagbar/i3-nagbar
|
|
||||||
|
|
||||||
install:
|
|
||||||
$(MAKE) -C .. install-i3-nagbar
|
|
||||||
|
|
||||||
clean:
|
|
||||||
$(MAKE) -C .. clean-i3-nagbar
|
|
||||||
|
|
||||||
.PHONY: all install clean
|
|
|
@ -1,5 +1,7 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <config.h>
|
||||||
|
|
||||||
#include <err.h>
|
#include <err.h>
|
||||||
|
|
||||||
#define die(...) errx(EXIT_FAILURE, __VA_ARGS__);
|
#define die(...) errx(EXIT_FAILURE, __VA_ARGS__);
|
||||||
|
|
|
@ -1,28 +0,0 @@
|
||||||
ALL_TARGETS += i3-nagbar/i3-nagbar
|
|
||||||
INSTALL_TARGETS += install-i3-nagbar
|
|
||||||
CLEAN_TARGETS += clean-i3-nagbar
|
|
||||||
|
|
||||||
i3_nagbar_SOURCES := $(wildcard i3-nagbar/*.c)
|
|
||||||
i3_nagbar_HEADERS := $(wildcard i3-nagbar/*.h)
|
|
||||||
i3_nagbar_CFLAGS = $(XCB_CFLAGS) $(XCB_CURSOR_CFLAGS) $(XCB_WM_CFLAGS) $(PANGO_CFLAGS)
|
|
||||||
i3_nagbar_LIBS = $(XCB_LIBS) $(XCB_CURSOR_LIBS) $(XCB_WM_LIBS) $(PANGO_LIBS)
|
|
||||||
|
|
||||||
i3_nagbar_OBJECTS := $(i3_nagbar_SOURCES:.c=.o)
|
|
||||||
|
|
||||||
|
|
||||||
i3-nagbar/%.o: i3-nagbar/%.c $(i3_nagbar_HEADERS)
|
|
||||||
echo "[i3-nagbar] CC $<"
|
|
||||||
$(CC) $(I3_CPPFLAGS) $(XCB_CPPFLAGS) $(CPPFLAGS) $(i3_nagbar_CFLAGS) $(I3_CFLAGS) $(CFLAGS) -c -o $@ $<
|
|
||||||
|
|
||||||
i3-nagbar/i3-nagbar: libi3.a $(i3_nagbar_OBJECTS)
|
|
||||||
echo "[i3-nagbar] Link i3-nagbar"
|
|
||||||
$(CC) $(I3_LDFLAGS) $(LDFLAGS) -o $@ $(filter-out libi3.a,$^) $(LIBS) $(i3_nagbar_LIBS)
|
|
||||||
|
|
||||||
install-i3-nagbar: i3-nagbar/i3-nagbar
|
|
||||||
echo "[i3-nagbar] Install"
|
|
||||||
$(INSTALL) -d -m 0755 $(DESTDIR)$(EXEC_PREFIX)/bin
|
|
||||||
$(INSTALL) -m 0755 i3-nagbar/i3-nagbar $(DESTDIR)$(EXEC_PREFIX)/bin/
|
|
||||||
|
|
||||||
clean-i3-nagbar:
|
|
||||||
echo "[i3-nagbar] Clean"
|
|
||||||
rm -f $(i3_nagbar_OBJECTS) i3-nagbar/i3-nagbar
|
|
|
@ -8,6 +8,8 @@
|
||||||
* when the user has an error in their configuration file.
|
* when the user has an error in their configuration file.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
#include "libi3.h"
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
|
@ -30,7 +32,6 @@
|
||||||
#include <xcb/randr.h>
|
#include <xcb/randr.h>
|
||||||
#include <xcb/xcb_cursor.h>
|
#include <xcb/xcb_cursor.h>
|
||||||
|
|
||||||
#include "libi3.h"
|
|
||||||
#include "i3-nagbar.h"
|
#include "i3-nagbar.h"
|
||||||
|
|
||||||
/** This is the equivalent of XC_left_ptr. I’m not sure why xcb doesn’t have a
|
/** This is the equivalent of XC_left_ptr. I’m not sure why xcb doesn’t have a
|
||||||
|
|
|
@ -98,7 +98,7 @@ my %allowed_keys = map { ($_, 1) } qw(
|
||||||
name
|
name
|
||||||
geometry
|
geometry
|
||||||
window_properties
|
window_properties
|
||||||
mark
|
marks
|
||||||
rect
|
rect
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
# We welcome patches that add distribution-specific mechanisms to find the
|
# We welcome patches that add distribution-specific mechanisms to find the
|
||||||
# preferred terminal emulator. On Debian, there is the x-terminal-emulator
|
# preferred terminal emulator. On Debian, there is the x-terminal-emulator
|
||||||
# symlink for example.
|
# symlink for example.
|
||||||
for terminal in "$TERMINAL" x-terminal-emulator urxvt rxvt termit terminator Eterm aterm xterm gnome-terminal roxterm xfce4-terminal termite lxterminal mate-terminal terminology st; do
|
for terminal in "$TERMINAL" x-terminal-emulator urxvt rxvt termit terminator Eterm aterm uxterm xterm gnome-terminal roxterm xfce4-terminal termite lxterminal mate-terminal terminology st qterminal; do
|
||||||
if command -v "$terminal" > /dev/null 2>&1; then
|
if command -v "$terminal" > /dev/null 2>&1; then
|
||||||
exec "$terminal" "$@"
|
exec "$terminal" "$@"
|
||||||
fi
|
fi
|
||||||
|
|
|
@ -1,30 +0,0 @@
|
||||||
v0.7
|
|
||||||
=====
|
|
||||||
- Make i3bar compatible with i3-4.0
|
|
||||||
- Implement disabling the workspace buttons
|
|
||||||
- Add Color for focused ws
|
|
||||||
- Add support for I3_SOCKET_PATH-atom
|
|
||||||
- Implement different dock-positions
|
|
||||||
- Hide-on-modifier is now the default behavior
|
|
||||||
- Change default socketpath to /tmp/i3-ipc.sock
|
|
||||||
- Use I3SOCK environment-variable
|
|
||||||
- Bugfix: Stop the reconn-timer before starting it again, else it's running twice
|
|
||||||
- Bugfix: Don't SIGSTOP child in dockmode
|
|
||||||
- Bugfix: If hide-on-modifier is set, stop the child after starting
|
|
||||||
- Bugfix: Recover from closed socket
|
|
||||||
- Some minor bugfixes
|
|
||||||
|
|
||||||
v0.6
|
|
||||||
=====
|
|
||||||
- Add manpage
|
|
||||||
- Implement hide-on-modifier
|
|
||||||
- Custom colors can be set from the commandline
|
|
||||||
- Use double-buffering
|
|
||||||
- Bugfix: Correctly render long text
|
|
||||||
- Bugfix: Don't segfault on SIGCHILD
|
|
||||||
- Bugfix: Double-fork() to avoid zombies
|
|
||||||
- Some minor bugfixes
|
|
||||||
|
|
||||||
v0.5
|
|
||||||
=====
|
|
||||||
- Initial release
|
|
|
@ -1,4 +1,4 @@
|
||||||
Copyright (c) 2010-2011, Axel Wagner
|
Copyright © 2010 Axel Wagner
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
|
|
@ -1,10 +0,0 @@
|
||||||
all:
|
|
||||||
$(MAKE) -C .. i3bar/i3bar
|
|
||||||
|
|
||||||
install:
|
|
||||||
$(MAKE) -C .. install-i3bar
|
|
||||||
|
|
||||||
clean:
|
|
||||||
$(MAKE) -C .. clean-i3bar
|
|
||||||
|
|
||||||
.PHONY: all install clean
|
|
|
@ -1,28 +0,0 @@
|
||||||
ALL_TARGETS += i3bar/i3bar
|
|
||||||
INSTALL_TARGETS += install-i3bar
|
|
||||||
CLEAN_TARGETS += clean-i3bar
|
|
||||||
|
|
||||||
i3bar_SOURCES := $(wildcard i3bar/src/*.c)
|
|
||||||
i3bar_HEADERS := $(wildcard i3bar/include/*.h)
|
|
||||||
i3bar_CFLAGS = $(XCB_CFLAGS) $(XCB_CURSOR_CFLAGS) $(PANGO_CFLAGS) $(YAJL_CFLAGS) $(LIBEV_CFLAGS)
|
|
||||||
i3bar_LIBS = $(XCB_LIBS) $(XCB_CURSOR_LIBS) $(PANGO_LIBS) $(YAJL_LIBS) $(LIBEV_LIBS) $(XCB_XKB_LIBS)
|
|
||||||
|
|
||||||
i3bar_OBJECTS := $(i3bar_SOURCES:.c=.o)
|
|
||||||
|
|
||||||
|
|
||||||
i3bar/src/%.o: i3bar/src/%.c $(i3bar_HEADERS)
|
|
||||||
echo "[i3bar] CC $<"
|
|
||||||
$(CC) $(I3_CPPFLAGS) $(XCB_CPPFLAGS) $(CPPFLAGS) $(i3bar_CFLAGS) $(I3_CFLAGS) $(CFLAGS) -Ii3bar/include -c -o $@ $<
|
|
||||||
|
|
||||||
i3bar/i3bar: libi3.a $(i3bar_OBJECTS)
|
|
||||||
echo "[i3bar] Link i3bar"
|
|
||||||
$(CC) $(I3_LDFLAGS) $(LDFLAGS) -o $@ $(filter-out libi3.a,$^) $(LIBS) $(i3bar_LIBS)
|
|
||||||
|
|
||||||
install-i3bar: i3bar/i3bar
|
|
||||||
echo "[i3bar] Install"
|
|
||||||
$(INSTALL) -d -m 0755 $(DESTDIR)$(EXEC_PREFIX)/bin
|
|
||||||
$(INSTALL) -m 0755 i3bar/i3bar $(DESTDIR)$(EXEC_PREFIX)/bin/
|
|
||||||
|
|
||||||
clean-i3bar:
|
|
||||||
echo "[i3bar] Clean"
|
|
||||||
rm -f $(i3bar_OBJECTS) i3bar/i3bar
|
|
|
@ -9,6 +9,8 @@
|
||||||
*/
|
*/
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <config.h>
|
||||||
|
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
|
|
||||||
#define STDIN_CHUNK_SIZE 1024
|
#define STDIN_CHUNK_SIZE 1024
|
||||||
|
|
|
@ -7,6 +7,8 @@
|
||||||
*/
|
*/
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <config.h>
|
||||||
|
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
#include <xcb/xcb.h>
|
#include <xcb/xcb.h>
|
||||||
#include <xcb/xproto.h>
|
#include <xcb/xproto.h>
|
||||||
|
@ -85,6 +87,6 @@ TAILQ_HEAD(statusline_head, status_block) statusline_head;
|
||||||
#include "mode.h"
|
#include "mode.h"
|
||||||
#include "trayclients.h"
|
#include "trayclients.h"
|
||||||
#include "xcb.h"
|
#include "xcb.h"
|
||||||
#include "config.h"
|
#include "configuration.h"
|
||||||
#include "libi3.h"
|
#include "libi3.h"
|
||||||
#include "parse_json_header.h"
|
#include "parse_json_header.h"
|
||||||
|
|
|
@ -9,6 +9,8 @@
|
||||||
*/
|
*/
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <config.h>
|
||||||
|
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
|
@ -9,6 +9,8 @@
|
||||||
*/
|
*/
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <config.h>
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -9,6 +9,8 @@
|
||||||
*/
|
*/
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <config.h>
|
||||||
|
|
||||||
#include <xcb/xproto.h>
|
#include <xcb/xproto.h>
|
||||||
|
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
|
|
@ -9,6 +9,8 @@
|
||||||
*/
|
*/
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <config.h>
|
||||||
|
|
||||||
#include <xcb/xcb.h>
|
#include <xcb/xcb.h>
|
||||||
#include <cairo/cairo-xcb.h>
|
#include <cairo/cairo-xcb.h>
|
||||||
|
|
||||||
|
|
|
@ -10,6 +10,8 @@
|
||||||
*/
|
*/
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <config.h>
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -7,6 +7,8 @@
|
||||||
*/
|
*/
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <config.h>
|
||||||
|
|
||||||
#include "queue.h"
|
#include "queue.h"
|
||||||
|
|
||||||
/* Get the maximum/minimum of x and y */
|
/* Get the maximum/minimum of x and y */
|
||||||
|
|
|
@ -9,10 +9,10 @@
|
||||||
*/
|
*/
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <xcb/xproto.h>
|
|
||||||
|
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
|
||||||
|
#include <xcb/xproto.h>
|
||||||
|
|
||||||
typedef struct i3_ws i3_ws;
|
typedef struct i3_ws i3_ws;
|
||||||
|
|
||||||
TAILQ_HEAD(ws_head, i3_ws);
|
TAILQ_HEAD(ws_head, i3_ws);
|
||||||
|
|
|
@ -9,13 +9,11 @@
|
||||||
*/
|
*/
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <config.h>
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
//#include "outputs.h"
|
//#include "outputs.h"
|
||||||
|
|
||||||
#ifdef XCB_COMPAT
|
|
||||||
#define XCB_ATOM_CARDINAL CARDINAL
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define _NET_SYSTEM_TRAY_ORIENTATION_HORZ 0
|
#define _NET_SYSTEM_TRAY_ORIENTATION_HORZ 0
|
||||||
#define _NET_SYSTEM_TRAY_ORIENTATION_VERT 1
|
#define _NET_SYSTEM_TRAY_ORIENTATION_VERT 1
|
||||||
#define SYSTEM_TRAY_REQUEST_DOCK 0
|
#define SYSTEM_TRAY_REQUEST_DOCK 0
|
||||||
|
|
|
@ -7,6 +7,8 @@
|
||||||
* child.c: Getting input for the statusline
|
* child.c: Getting input for the statusline
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
#include "common.h"
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
@ -25,8 +27,6 @@
|
||||||
#include <yajl/yajl_gen.h>
|
#include <yajl/yajl_gen.h>
|
||||||
#include <paths.h>
|
#include <paths.h>
|
||||||
|
|
||||||
#include "common.h"
|
|
||||||
|
|
||||||
/* Global variables for child_*() */
|
/* Global variables for child_*() */
|
||||||
i3bar_child child;
|
i3bar_child child;
|
||||||
|
|
||||||
|
@ -105,7 +105,9 @@ __attribute__((format(printf, 1, 2))) static void set_statusline_error(const cha
|
||||||
char *message;
|
char *message;
|
||||||
va_list args;
|
va_list args;
|
||||||
va_start(args, format);
|
va_start(args, format);
|
||||||
(void)vasprintf(&message, format, args);
|
if (vasprintf(&message, format, args) == -1) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
struct status_block *err_block = scalloc(1, sizeof(struct status_block));
|
struct status_block *err_block = scalloc(1, sizeof(struct status_block));
|
||||||
err_block->full_text = i3string_from_utf8("Error: ");
|
err_block->full_text = i3string_from_utf8("Error: ");
|
||||||
|
@ -359,11 +361,13 @@ static void read_flat_input(char *buffer, int length) {
|
||||||
I3STRING_FREE(first->full_text);
|
I3STRING_FREE(first->full_text);
|
||||||
/* Remove the trailing newline and terminate the string at the same
|
/* Remove the trailing newline and terminate the string at the same
|
||||||
* time. */
|
* time. */
|
||||||
if (buffer[length - 1] == '\n' || buffer[length - 1] == '\r')
|
if (buffer[length - 1] == '\n' || buffer[length - 1] == '\r') {
|
||||||
buffer[length - 1] = '\0';
|
buffer[length - 1] = '\0';
|
||||||
else
|
} else {
|
||||||
buffer[length] = '\0';
|
buffer[length] = '\0';
|
||||||
first->full_text = i3string_from_markup(buffer);
|
}
|
||||||
|
|
||||||
|
first->full_text = i3string_from_utf8(buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool read_json_input(unsigned char *input, int length) {
|
static bool read_json_input(unsigned char *input, int length) {
|
||||||
|
|
|
@ -7,6 +7,8 @@
|
||||||
* config.c: Parses the configuration (received from i3).
|
* config.c: Parses the configuration (received from i3).
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
#include "common.h"
|
||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
@ -17,8 +19,6 @@
|
||||||
|
|
||||||
#include <X11/Xlib.h>
|
#include <X11/Xlib.h>
|
||||||
|
|
||||||
#include "common.h"
|
|
||||||
|
|
||||||
static char *cur_key;
|
static char *cur_key;
|
||||||
static bool parsing_bindings;
|
static bool parsing_bindings;
|
||||||
static bool parsing_tray_outputs;
|
static bool parsing_tray_outputs;
|
||||||
|
|
|
@ -7,6 +7,8 @@
|
||||||
* ipc.c: Communicating with i3
|
* ipc.c: Communicating with i3
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
#include "common.h"
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
@ -21,8 +23,6 @@
|
||||||
#include <sanitizer/lsan_interface.h>
|
#include <sanitizer/lsan_interface.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "common.h"
|
|
||||||
|
|
||||||
ev_io *i3_connection;
|
ev_io *i3_connection;
|
||||||
|
|
||||||
const char *sock_path;
|
const char *sock_path;
|
||||||
|
|
|
@ -5,6 +5,8 @@
|
||||||
* © 2010 Axel Wagner and contributors (see also: LICENSE)
|
* © 2010 Axel Wagner and contributors (see also: LICENSE)
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
#include "common.h"
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <i3/ipc.h>
|
#include <i3/ipc.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
@ -15,8 +17,6 @@
|
||||||
#include <getopt.h>
|
#include <getopt.h>
|
||||||
#include <glob.h>
|
#include <glob.h>
|
||||||
|
|
||||||
#include "common.h"
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Having verboselog(), errorlog() and debuglog() is necessary when using libi3.
|
* Having verboselog(), errorlog() and debuglog() is necessary when using libi3.
|
||||||
*
|
*
|
||||||
|
@ -93,6 +93,9 @@ int main(int argc, char **argv) {
|
||||||
int opt;
|
int opt;
|
||||||
int option_index = 0;
|
int option_index = 0;
|
||||||
char *socket_path = getenv("I3SOCK");
|
char *socket_path = getenv("I3SOCK");
|
||||||
|
if (socket_path != NULL) {
|
||||||
|
socket_path = sstrdup(socket_path);
|
||||||
|
}
|
||||||
char *i3_default_sock_path = "/tmp/i3-ipc.sock";
|
char *i3_default_sock_path = "/tmp/i3-ipc.sock";
|
||||||
|
|
||||||
/* Initialize the standard config to use 0 as default */
|
/* Initialize the standard config to use 0 as default */
|
||||||
|
|
|
@ -7,6 +7,8 @@
|
||||||
* mode.c: Handle mode event and show current binding mode in the bar
|
* mode.c: Handle mode event and show current binding mode in the bar
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
#include "common.h"
|
||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
@ -14,8 +16,6 @@
|
||||||
#include <yajl/yajl_parse.h>
|
#include <yajl/yajl_parse.h>
|
||||||
#include <yajl/yajl_version.h>
|
#include <yajl/yajl_version.h>
|
||||||
|
|
||||||
#include "common.h"
|
|
||||||
|
|
||||||
/* A datatype to pass through the callbacks to save the state */
|
/* A datatype to pass through the callbacks to save the state */
|
||||||
struct mode_json_params {
|
struct mode_json_params {
|
||||||
char *json;
|
char *json;
|
||||||
|
@ -119,7 +119,7 @@ void parse_mode_json(char *json) {
|
||||||
|
|
||||||
state = yajl_parse(handle, (const unsigned char *)json, strlen(json));
|
state = yajl_parse(handle, (const unsigned char *)json, strlen(json));
|
||||||
|
|
||||||
/* FIXME: Propper error handling for JSON parsing */
|
/* FIXME: Proper error handling for JSON parsing */
|
||||||
switch (state) {
|
switch (state) {
|
||||||
case yajl_status_ok:
|
case yajl_status_ok:
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -7,6 +7,8 @@
|
||||||
* outputs.c: Maintaining the outputs list
|
* outputs.c: Maintaining the outputs list
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
#include "common.h"
|
||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
@ -15,8 +17,6 @@
|
||||||
#include <yajl/yajl_parse.h>
|
#include <yajl/yajl_parse.h>
|
||||||
#include <yajl/yajl_version.h>
|
#include <yajl/yajl_version.h>
|
||||||
|
|
||||||
#include "common.h"
|
|
||||||
|
|
||||||
/* A datatype to pass through the callbacks to save the state */
|
/* A datatype to pass through the callbacks to save the state */
|
||||||
struct outputs_json_params {
|
struct outputs_json_params {
|
||||||
struct outputs_head *outputs;
|
struct outputs_head *outputs;
|
||||||
|
@ -271,7 +271,7 @@ void parse_outputs_json(char *json) {
|
||||||
|
|
||||||
state = yajl_parse(handle, (const unsigned char *)json, strlen(json));
|
state = yajl_parse(handle, (const unsigned char *)json, strlen(json));
|
||||||
|
|
||||||
/* FIXME: Propper errorhandling for JSON-parsing */
|
/* FIXME: Proper errorhandling for JSON-parsing */
|
||||||
switch (state) {
|
switch (state) {
|
||||||
case yajl_status_ok:
|
case yajl_status_ok:
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -8,6 +8,8 @@
|
||||||
* protocol version and features.
|
* protocol version and features.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
#include "common.h"
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
@ -25,8 +27,6 @@
|
||||||
#include <yajl/yajl_parse.h>
|
#include <yajl/yajl_parse.h>
|
||||||
#include <yajl/yajl_version.h>
|
#include <yajl/yajl_version.h>
|
||||||
|
|
||||||
#include "common.h"
|
|
||||||
|
|
||||||
static enum {
|
static enum {
|
||||||
KEY_VERSION,
|
KEY_VERSION,
|
||||||
KEY_STOP_SIGNAL,
|
KEY_STOP_SIGNAL,
|
||||||
|
|
|
@ -7,6 +7,8 @@
|
||||||
* workspaces.c: Maintaining the workspace lists
|
* workspaces.c: Maintaining the workspace lists
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
#include "common.h"
|
||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
@ -14,8 +16,6 @@
|
||||||
#include <yajl/yajl_parse.h>
|
#include <yajl/yajl_parse.h>
|
||||||
#include <yajl/yajl_version.h>
|
#include <yajl/yajl_version.h>
|
||||||
|
|
||||||
#include "common.h"
|
|
||||||
|
|
||||||
/* A datatype to pass through the callbacks to save the state */
|
/* A datatype to pass through the callbacks to save the state */
|
||||||
struct workspaces_json_params {
|
struct workspaces_json_params {
|
||||||
struct ws_head *workspaces;
|
struct ws_head *workspaces;
|
||||||
|
@ -233,7 +233,7 @@ void parse_workspaces_json(char *json) {
|
||||||
|
|
||||||
state = yajl_parse(handle, (const unsigned char *)json, strlen(json));
|
state = yajl_parse(handle, (const unsigned char *)json, strlen(json));
|
||||||
|
|
||||||
/* FIXME: Propper error handling for JSON parsing */
|
/* FIXME: Proper error handling for JSON parsing */
|
||||||
switch (state) {
|
switch (state) {
|
||||||
case yajl_status_ok:
|
case yajl_status_ok:
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -7,16 +7,14 @@
|
||||||
* xcb.c: Communicating with X
|
* xcb.c: Communicating with X
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
#include "common.h"
|
||||||
|
|
||||||
#include <xcb/xcb.h>
|
#include <xcb/xcb.h>
|
||||||
#include <xcb/xkb.h>
|
#include <xcb/xkb.h>
|
||||||
#include <xcb/xproto.h>
|
#include <xcb/xproto.h>
|
||||||
#include <xcb/xcb_aux.h>
|
#include <xcb/xcb_aux.h>
|
||||||
#include <xcb/xcb_cursor.h>
|
#include <xcb/xcb_cursor.h>
|
||||||
|
|
||||||
#ifdef XCB_COMPAT
|
|
||||||
#include "xcb_compat.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
@ -36,7 +34,6 @@
|
||||||
#include <sanitizer/lsan_interface.h>
|
#include <sanitizer/lsan_interface.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "common.h"
|
|
||||||
#include "libi3.h"
|
#include "libi3.h"
|
||||||
|
|
||||||
/** This is the equivalent of XC_left_ptr. I’m not sure why xcb doesn’t have a
|
/** This is the equivalent of XC_left_ptr. I’m not sure why xcb doesn’t have a
|
||||||
|
@ -445,7 +442,7 @@ void init_colors(const struct xcb_color_strings_t *new_colors) {
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Handle a button press event (i.e. a mouse click on one of our bars).
|
* Handle a button press event (i.e. a mouse click on one of our bars).
|
||||||
* We determine, whether the click occured on a workspace button or if the scroll-
|
* We determine, whether the click occurred on a workspace button or if the scroll-
|
||||||
* wheel was used and change the workspace appropriately
|
* wheel was used and change the workspace appropriately
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
@ -689,15 +686,17 @@ static void handle_client_message(xcb_client_message_event_t *event) {
|
||||||
if (op == SYSTEM_TRAY_REQUEST_DOCK) {
|
if (op == SYSTEM_TRAY_REQUEST_DOCK) {
|
||||||
xcb_window_t client = event->data.data32[2];
|
xcb_window_t client = event->data.data32[2];
|
||||||
|
|
||||||
/* Listen for PropertyNotify events to get the most recent value of
|
|
||||||
* the XEMBED_MAPPED atom, also listen for UnmapNotify events */
|
|
||||||
mask = XCB_CW_EVENT_MASK;
|
mask = XCB_CW_EVENT_MASK;
|
||||||
values[0] = XCB_EVENT_MASK_PROPERTY_CHANGE |
|
|
||||||
XCB_EVENT_MASK_STRUCTURE_NOTIFY;
|
/* Needed to get the most recent value of XEMBED_MAPPED. */
|
||||||
xcb_change_window_attributes(xcb_connection,
|
values[0] = XCB_EVENT_MASK_PROPERTY_CHANGE;
|
||||||
client,
|
/* Needed for UnmapNotify events. */
|
||||||
mask,
|
values[0] |= XCB_EVENT_MASK_STRUCTURE_NOTIFY;
|
||||||
values);
|
/* Needed because some tray applications (e.g., VLC) use
|
||||||
|
* override_redirect which causes no ConfigureRequest to be sent. */
|
||||||
|
values[0] |= XCB_EVENT_MASK_RESIZE_REDIRECT;
|
||||||
|
|
||||||
|
xcb_change_window_attributes(xcb_connection, client, mask, values);
|
||||||
|
|
||||||
/* Request the _XEMBED_INFO property. The XEMBED specification
|
/* Request the _XEMBED_INFO property. The XEMBED specification
|
||||||
* (which is referred by the tray specification) says this *has* to
|
* (which is referred by the tray specification) says this *has* to
|
||||||
|
@ -1008,13 +1007,11 @@ static void handle_property_notify(xcb_property_notify_event_t *event) {
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Handle ConfigureRequests by denying them and sending the client a
|
* If a tray client attempts to change its size we deny the request and respond
|
||||||
* ConfigureNotify with its actual size.
|
* by telling it its actual size.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
static void handle_configure_request(xcb_configure_request_event_t *event) {
|
static void handle_configuration_change(xcb_window_t window) {
|
||||||
DLOG("ConfigureRequest for window = %08x\n", event->window);
|
|
||||||
|
|
||||||
trayclient *trayclient;
|
trayclient *trayclient;
|
||||||
i3_output *output;
|
i3_output *output;
|
||||||
SLIST_FOREACH(output, outputs, slist) {
|
SLIST_FOREACH(output, outputs, slist) {
|
||||||
|
@ -1027,7 +1024,7 @@ static void handle_configure_request(xcb_configure_request_event_t *event) {
|
||||||
continue;
|
continue;
|
||||||
clients++;
|
clients++;
|
||||||
|
|
||||||
if (trayclient->win != event->window)
|
if (trayclient->win != window)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
xcb_rectangle_t rect;
|
xcb_rectangle_t rect;
|
||||||
|
@ -1037,7 +1034,7 @@ static void handle_configure_request(xcb_configure_request_event_t *event) {
|
||||||
rect.height = icon_size;
|
rect.height = icon_size;
|
||||||
|
|
||||||
DLOG("This is a tray window. x = %d\n", rect.x);
|
DLOG("This is a tray window. x = %d\n", rect.x);
|
||||||
fake_configure_notify(xcb_connection, rect, event->window, 0);
|
fake_configure_notify(xcb_connection, rect, window, 0);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1045,6 +1042,16 @@ static void handle_configure_request(xcb_configure_request_event_t *event) {
|
||||||
DLOG("WARNING: Could not find corresponding tray window.\n");
|
DLOG("WARNING: Could not find corresponding tray window.\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void handle_configure_request(xcb_configure_request_event_t *event) {
|
||||||
|
DLOG("ConfigureRequest for window = %08x\n", event->window);
|
||||||
|
handle_configuration_change(event->window);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void handle_resize_request(xcb_resize_request_event_t *event) {
|
||||||
|
DLOG("ResizeRequest for window = %08x\n", event->window);
|
||||||
|
handle_configuration_change(event->window);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This function is called immediately before the main loop locks. We flush xcb
|
* This function is called immediately before the main loop locks. We flush xcb
|
||||||
* then (and only then)
|
* then (and only then)
|
||||||
|
@ -1170,6 +1177,9 @@ void xcb_chk_cb(struct ev_loop *loop, ev_check *watcher, int revents) {
|
||||||
case XCB_CONFIGURE_REQUEST:
|
case XCB_CONFIGURE_REQUEST:
|
||||||
/* ConfigureRequest, sent by a tray child */
|
/* ConfigureRequest, sent by a tray child */
|
||||||
handle_configure_request((xcb_configure_request_event_t *)event);
|
handle_configure_request((xcb_configure_request_event_t *)event);
|
||||||
|
case XCB_RESIZE_REQUEST:
|
||||||
|
/* ResizeRequest sent by a tray child using override_redirect. */
|
||||||
|
handle_resize_request((xcb_resize_request_event_t *)event);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
free(event);
|
free(event);
|
||||||
|
|
|
@ -10,8 +10,9 @@
|
||||||
* compile-time.
|
* compile-time.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
#ifndef I3_ALL_H
|
#pragma once
|
||||||
#define I3_ALL_H
|
|
||||||
|
#include <config.h>
|
||||||
|
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
|
@ -38,11 +39,6 @@
|
||||||
#include <yajl/yajl_gen.h>
|
#include <yajl/yajl_gen.h>
|
||||||
#include <yajl/yajl_version.h>
|
#include <yajl/yajl_version.h>
|
||||||
|
|
||||||
/* Contains compatibility definitions for old libxcb versions */
|
|
||||||
#ifdef XCB_COMPAT
|
|
||||||
#include "xcb_compat.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "data.h"
|
#include "data.h"
|
||||||
#include "util.h"
|
#include "util.h"
|
||||||
#include "ipc.h"
|
#include "ipc.h"
|
||||||
|
@ -56,7 +52,7 @@
|
||||||
#include "click.h"
|
#include "click.h"
|
||||||
#include "key_press.h"
|
#include "key_press.h"
|
||||||
#include "floating.h"
|
#include "floating.h"
|
||||||
#include "config.h"
|
#include "configuration.h"
|
||||||
#include "handlers.h"
|
#include "handlers.h"
|
||||||
#include "randr.h"
|
#include "randr.h"
|
||||||
#include "xinerama.h"
|
#include "xinerama.h"
|
||||||
|
@ -86,5 +82,3 @@
|
||||||
#include "display_version.h"
|
#include "display_version.h"
|
||||||
#include "restore_layout.h"
|
#include "restore_layout.h"
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
|
@ -9,6 +9,8 @@
|
||||||
*/
|
*/
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <config.h>
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks the list of assignments for the given window and runs all matching
|
* Checks the list of assignments for the given window and runs all matching
|
||||||
* ones (unless they have already been run for this specific window).
|
* ones (unless they have already been run for this specific window).
|
||||||
|
|
|
@ -9,6 +9,8 @@
|
||||||
*/
|
*/
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <config.h>
|
||||||
|
|
||||||
extern pid_t command_error_nagbar_pid;
|
extern pid_t command_error_nagbar_pid;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -104,10 +106,10 @@ CommandResult *run_binding(Binding *bind, Con *con);
|
||||||
bool load_keymap(void);
|
bool load_keymap(void);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns true if the current config has any binding to a scroll wheel button
|
* Returns a list of buttons that should be grabbed on a window.
|
||||||
* (4 or 5) which is a whole-window binding.
|
* This list will always contain 1–3, all higher buttons will only be returned
|
||||||
* We need this to figure out whether we should grab all buttons or just 1-3
|
* if there is a whole-window binding for it on some window in the current
|
||||||
* when managing a window. See #2049.
|
* config.
|
||||||
*
|
* The list is terminated by a 0.
|
||||||
*/
|
*/
|
||||||
bool bindings_should_grab_scrollwheel_buttons(void);
|
int *bindings_get_buttons_to_grab(void);
|
||||||
|
|
|
@ -9,6 +9,8 @@
|
||||||
*/
|
*/
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <config.h>
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The button press X callback. This function determines whether the floating
|
* The button press X callback. This function determines whether the floating
|
||||||
* modifier is pressed and where the user clicked (decoration, border, inside
|
* modifier is pressed and where the user clicked (decoration, border, inside
|
||||||
|
|
|
@ -9,4 +9,6 @@
|
||||||
*/
|
*/
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <config.h>
|
||||||
|
|
||||||
char *parse_cmd(const char *new);
|
char *parse_cmd(const char *new);
|
||||||
|
|
|
@ -9,6 +9,8 @@
|
||||||
*/
|
*/
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <config.h>
|
||||||
|
|
||||||
#include "commands_parser.h"
|
#include "commands_parser.h"
|
||||||
|
|
||||||
/** The beginning of the prototype for every cmd_ function. */
|
/** The beginning of the prototype for every cmd_ function. */
|
||||||
|
|
|
@ -9,6 +9,8 @@
|
||||||
*/
|
*/
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <config.h>
|
||||||
|
|
||||||
#include <yajl/yajl_gen.h>
|
#include <yajl/yajl_gen.h>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -11,6 +11,8 @@
|
||||||
*/
|
*/
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <config.h>
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a new container (and attach it to the given parent, if not NULL).
|
* Create a new container (and attach it to the given parent, if not NULL).
|
||||||
* This function only initializes the data structures.
|
* This function only initializes the data structures.
|
||||||
|
@ -200,6 +202,19 @@ Con *con_for_window(Con *con, i3Window *window, Match **store_match);
|
||||||
*/
|
*/
|
||||||
int con_num_children(Con *con);
|
int con_num_children(Con *con);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the number of visible non-floating children of this container.
|
||||||
|
* For example, if the container contains a hsplit which has two children,
|
||||||
|
* this will return 2 instead of 1.
|
||||||
|
*/
|
||||||
|
int con_num_visible_children(Con *con);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Count the number of windows (i.e., leaf containers).
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
int con_num_windows(Con *con);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Attaches the given container to the given parent. This happens when moving
|
* Attaches the given container to the given parent. This happens when moving
|
||||||
* a container or when inserting a new container at a specific place in the
|
* a container or when inserting a new container at a specific place in the
|
||||||
|
@ -268,6 +283,13 @@ void con_disable_fullscreen(Con *con);
|
||||||
void con_move_to_workspace(Con *con, Con *workspace, bool fix_coordinates,
|
void con_move_to_workspace(Con *con, Con *workspace, bool fix_coordinates,
|
||||||
bool dont_warp, bool ignore_focus);
|
bool dont_warp, bool ignore_focus);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Moves the given container to the currently focused container on the
|
||||||
|
* visible workspace on the given output.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
void con_move_to_output(Con *con, Output *output);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Moves the given container to the given mark.
|
* Moves the given container to the given mark.
|
||||||
*
|
*
|
||||||
|
|
|
@ -9,6 +9,8 @@
|
||||||
*/
|
*/
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <config.h>
|
||||||
|
|
||||||
#include "config_parser.h"
|
#include "config_parser.h"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -9,8 +9,11 @@
|
||||||
*/
|
*/
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <config.h>
|
||||||
|
|
||||||
#include <yajl/yajl_gen.h>
|
#include <yajl/yajl_gen.h>
|
||||||
|
|
||||||
|
SLIST_HEAD(variables_head, Variable);
|
||||||
extern pid_t config_error_nagbar_pid;
|
extern pid_t config_error_nagbar_pid;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
* i3 - an improved dynamic tiling window manager
|
* i3 - an improved dynamic tiling window manager
|
||||||
* © 2009 Michael Stapelberg and contributors (see also: LICENSE)
|
* © 2009 Michael Stapelberg and contributors (see also: LICENSE)
|
||||||
*
|
*
|
||||||
* include/config.h: Contains all structs/variables for the configurable
|
* include/configuration.h: Contains all structs/variables for the configurable
|
||||||
* part of i3 as well as functions handling the configuration file (calling
|
* part of i3 as well as functions handling the configuration file (calling
|
||||||
* the parser (src/config_parse.c) with the correct path, switching key
|
* the parser (src/config_parse.c) with the correct path, switching key
|
||||||
* bindings mode).
|
* bindings mode).
|
||||||
|
@ -12,10 +12,11 @@
|
||||||
*/
|
*/
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include "libi3.h"
|
||||||
|
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
#include "queue.h"
|
#include "queue.h"
|
||||||
#include "i3.h"
|
#include "i3.h"
|
||||||
#include "libi3.h"
|
|
||||||
|
|
||||||
typedef struct Config Config;
|
typedef struct Config Config;
|
||||||
typedef struct Barconfig Barconfig;
|
typedef struct Barconfig Barconfig;
|
||||||
|
@ -125,7 +126,7 @@ struct Config {
|
||||||
* This is useful if you are reaching scrollbar on the edge of the
|
* This is useful if you are reaching scrollbar on the edge of the
|
||||||
* screen or do not want to waste a single pixel of displayspace.
|
* screen or do not want to waste a single pixel of displayspace.
|
||||||
* By default, this is disabled. */
|
* By default, this is disabled. */
|
||||||
adjacent_t hide_edge_borders;
|
hide_edge_borders_mode_t hide_edge_borders;
|
||||||
|
|
||||||
/** By default, a workspace bar is drawn at the bottom of the screen.
|
/** By default, a workspace bar is drawn at the bottom of the screen.
|
||||||
* If you want to have a more fancy bar, it is recommended to replace
|
* If you want to have a more fancy bar, it is recommended to replace
|
|
@ -9,6 +9,8 @@
|
||||||
*/
|
*/
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include "libi3.h"
|
||||||
|
|
||||||
#define SN_API_NOT_YET_FROZEN 1
|
#define SN_API_NOT_YET_FROZEN 1
|
||||||
#include <libsn/sn-launcher.h>
|
#include <libsn/sn-launcher.h>
|
||||||
|
|
||||||
|
@ -17,7 +19,6 @@
|
||||||
#include <pcre.h>
|
#include <pcre.h>
|
||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
|
|
||||||
#include "libi3.h"
|
|
||||||
#include "queue.h"
|
#include "queue.h"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -75,6 +76,12 @@ typedef enum { ADJ_NONE = 0,
|
||||||
ADJ_UPPER_SCREEN_EDGE = (1 << 2),
|
ADJ_UPPER_SCREEN_EDGE = (1 << 2),
|
||||||
ADJ_LOWER_SCREEN_EDGE = (1 << 4) } adjacent_t;
|
ADJ_LOWER_SCREEN_EDGE = (1 << 4) } adjacent_t;
|
||||||
|
|
||||||
|
typedef enum { HEBM_NONE = ADJ_NONE,
|
||||||
|
HEBM_VERTICAL = ADJ_LEFT_SCREEN_EDGE | ADJ_RIGHT_SCREEN_EDGE,
|
||||||
|
HEBM_HORIZONTAL = ADJ_UPPER_SCREEN_EDGE | ADJ_LOWER_SCREEN_EDGE,
|
||||||
|
HEBM_BOTH = HEBM_VERTICAL | HEBM_HORIZONTAL,
|
||||||
|
HEBM_SMART = (1 << 5) } hide_edge_borders_mode_t;
|
||||||
|
|
||||||
typedef enum { MM_REPLACE,
|
typedef enum { MM_REPLACE,
|
||||||
MM_ADD } mark_mode_t;
|
MM_ADD } mark_mode_t;
|
||||||
|
|
||||||
|
@ -237,6 +244,17 @@ struct regex {
|
||||||
pcre_extra *extra;
|
pcre_extra *extra;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Stores a resolved keycode (from a keysym), including the modifier mask. Will
|
||||||
|
* be passed to xcb_grab_key().
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
struct Binding_Keycode {
|
||||||
|
xcb_keycode_t keycode;
|
||||||
|
i3_event_state_mask_t modifiers;
|
||||||
|
TAILQ_ENTRY(Binding_Keycode) keycodes;
|
||||||
|
};
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
* Major types
|
* Major types
|
||||||
*****************************************************************************/
|
*****************************************************************************/
|
||||||
|
@ -275,8 +293,6 @@ struct Binding {
|
||||||
* title bar (default). */
|
* title bar (default). */
|
||||||
bool whole_window;
|
bool whole_window;
|
||||||
|
|
||||||
uint32_t number_keycodes;
|
|
||||||
|
|
||||||
/** Keycode to bind */
|
/** Keycode to bind */
|
||||||
uint32_t keycode;
|
uint32_t keycode;
|
||||||
|
|
||||||
|
@ -290,12 +306,10 @@ struct Binding {
|
||||||
* if the keyboard mapping changes (using Xmodmap for example) */
|
* if the keyboard mapping changes (using Xmodmap for example) */
|
||||||
char *symbol;
|
char *symbol;
|
||||||
|
|
||||||
/** Only in use if symbol != NULL. Gets set to the value to which the
|
/** Only in use if symbol != NULL. Contains keycodes which generate the
|
||||||
* symbol got translated when binding. Useful for unbinding and
|
* specified symbol. Useful for unbinding and checking which binding was
|
||||||
* checking which binding was used when a key press event comes in.
|
* used when a key press event comes in. */
|
||||||
*
|
TAILQ_HEAD(keycodes_head, Binding_Keycode) keycodes_head;
|
||||||
* This is an array of number_keycodes size. */
|
|
||||||
xcb_keycode_t *translated_to;
|
|
||||||
|
|
||||||
/** Command, like in command mode */
|
/** Command, like in command mode */
|
||||||
char *command;
|
char *command;
|
||||||
|
@ -461,9 +475,9 @@ struct Match {
|
||||||
M_DOCK_BOTTOM = 3
|
M_DOCK_BOTTOM = 3
|
||||||
} dock;
|
} dock;
|
||||||
xcb_window_t id;
|
xcb_window_t id;
|
||||||
enum { M_ANY = 0,
|
enum { WM_ANY = 0,
|
||||||
M_TILING,
|
WM_TILING,
|
||||||
M_FLOATING } floating;
|
WM_FLOATING } window_mode;
|
||||||
Con *con_id;
|
Con *con_id;
|
||||||
|
|
||||||
/* Where the window looking for a match should be inserted:
|
/* Where the window looking for a match should be inserted:
|
||||||
|
@ -686,4 +700,7 @@ struct Con {
|
||||||
|
|
||||||
/* Depth of the container window */
|
/* Depth of the container window */
|
||||||
uint16_t depth;
|
uint16_t depth;
|
||||||
|
|
||||||
|
/* The colormap for this con if a custom one is used. */
|
||||||
|
xcb_colormap_t colormap;
|
||||||
};
|
};
|
||||||
|
|
|
@ -10,4 +10,6 @@
|
||||||
*/
|
*/
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <config.h>
|
||||||
|
|
||||||
int handle_event(void *ignored, xcb_connection_t *c, xcb_generic_event_t *e);
|
int handle_event(void *ignored, xcb_connection_t *c, xcb_generic_event_t *e);
|
||||||
|
|
|
@ -9,6 +9,8 @@
|
||||||
*/
|
*/
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <config.h>
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Connects to i3 to find out the currently running version. Useful since it
|
* Connects to i3 to find out the currently running version. Useful since it
|
||||||
* might be different from the version compiled into this binary (maybe the
|
* might be different from the version compiled into this binary (maybe the
|
||||||
|
|
|
@ -9,6 +9,8 @@
|
||||||
*/
|
*/
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <config.h>
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Updates _NET_CURRENT_DESKTOP with the current desktop number.
|
* Updates _NET_CURRENT_DESKTOP with the current desktop number.
|
||||||
*
|
*
|
||||||
|
|
|
@ -10,6 +10,8 @@
|
||||||
*/
|
*/
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <config.h>
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates outputs according to the given specification.
|
* Creates outputs according to the given specification.
|
||||||
* The specification must be in the format wxh+x+y, for example 1024x768+0+0,
|
* The specification must be in the format wxh+x+y, for example 1024x768+0+0,
|
||||||
|
|
|
@ -9,6 +9,8 @@
|
||||||
*/
|
*/
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <config.h>
|
||||||
|
|
||||||
#include "tree.h"
|
#include "tree.h"
|
||||||
|
|
||||||
/** Callback for dragging */
|
/** Callback for dragging */
|
||||||
|
@ -76,25 +78,6 @@ void floating_center(Con *con, Rect rect);
|
||||||
*/
|
*/
|
||||||
void floating_move_to_pointer(Con *con);
|
void floating_move_to_pointer(Con *con);
|
||||||
|
|
||||||
#if 0
|
|
||||||
/**
|
|
||||||
* Removes the floating client from its workspace and attaches it to the new
|
|
||||||
* workspace. This is centralized here because it may happen if you move it
|
|
||||||
* via keyboard and if you move it using your mouse.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
void floating_assign_to_workspace(Client *client, Workspace *new_workspace);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Called whenever the user clicks on a border (not the titlebar!) of a
|
|
||||||
* floating window. Determines on which border the user clicked and launches
|
|
||||||
* the drag_pointer function with the resize_callback.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
int floating_border_click(xcb_connection_t *conn, Client *client,
|
|
||||||
xcb_button_press_event_t *event);
|
|
||||||
|
|
||||||
#endif
|
|
||||||
/**
|
/**
|
||||||
* Called when the user clicked on the titlebar of a floating window.
|
* Called when the user clicked on the titlebar of a floating window.
|
||||||
* Calls the drag_pointer function with the drag_window callback
|
* Calls the drag_pointer function with the drag_window callback
|
||||||
|
@ -118,32 +101,6 @@ void floating_resize_window(Con *con, const bool proportional, const xcb_button_
|
||||||
*/
|
*/
|
||||||
void floating_check_size(Con *floating_con);
|
void floating_check_size(Con *floating_con);
|
||||||
|
|
||||||
#if 0
|
|
||||||
/**
|
|
||||||
* Changes focus in the given direction for floating clients.
|
|
||||||
*
|
|
||||||
* Changing to the left/right means going to the previous/next floating client,
|
|
||||||
* changing to top/bottom means cycling through the Z-index.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
void floating_focus_direction(xcb_connection_t *conn, Client *currently_focused,
|
|
||||||
direction_t direction);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Moves the client 10px to the specified direction.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
void floating_move(xcb_connection_t *conn, Client *currently_focused,
|
|
||||||
direction_t direction);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Hides all floating clients (or show them if they are currently hidden) on
|
|
||||||
* the specified workspace.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
void floating_toggle_hide(xcb_connection_t *conn, Workspace *workspace);
|
|
||||||
|
|
||||||
#endif
|
|
||||||
/**
|
/**
|
||||||
* This is the return value of a drag operation like drag_pointer.
|
* This is the return value of a drag operation like drag_pointer.
|
||||||
*
|
*
|
||||||
|
|
|
@ -10,6 +10,8 @@
|
||||||
*/
|
*/
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <config.h>
|
||||||
|
|
||||||
#include <xcb/randr.h>
|
#include <xcb/randr.h>
|
||||||
|
|
||||||
extern int randr_base;
|
extern int randr_base;
|
||||||
|
|
|
@ -9,6 +9,8 @@
|
||||||
*/
|
*/
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <config.h>
|
||||||
|
|
||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
#include <sys/resource.h>
|
#include <sys/resource.h>
|
||||||
|
|
||||||
|
|
|
@ -51,34 +51,22 @@ typedef struct i3_ipc_header {
|
||||||
/** Request the i3 version */
|
/** Request the i3 version */
|
||||||
#define I3_IPC_MESSAGE_TYPE_GET_VERSION 7
|
#define I3_IPC_MESSAGE_TYPE_GET_VERSION 7
|
||||||
|
|
||||||
|
/** Request a list of configured binding modes. */
|
||||||
|
#define I3_IPC_MESSAGE_TYPE_GET_BINDING_MODES 8
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Messages from i3 to clients
|
* Messages from i3 to clients
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/** Command reply type */
|
|
||||||
#define I3_IPC_REPLY_TYPE_COMMAND 0
|
#define I3_IPC_REPLY_TYPE_COMMAND 0
|
||||||
|
|
||||||
/** Workspaces reply type */
|
|
||||||
#define I3_IPC_REPLY_TYPE_WORKSPACES 1
|
#define I3_IPC_REPLY_TYPE_WORKSPACES 1
|
||||||
|
|
||||||
/** Subscription reply type */
|
|
||||||
#define I3_IPC_REPLY_TYPE_SUBSCRIBE 2
|
#define I3_IPC_REPLY_TYPE_SUBSCRIBE 2
|
||||||
|
|
||||||
/** Outputs reply type */
|
|
||||||
#define I3_IPC_REPLY_TYPE_OUTPUTS 3
|
#define I3_IPC_REPLY_TYPE_OUTPUTS 3
|
||||||
|
|
||||||
/** Tree reply type */
|
|
||||||
#define I3_IPC_REPLY_TYPE_TREE 4
|
#define I3_IPC_REPLY_TYPE_TREE 4
|
||||||
|
|
||||||
/** Marks reply type */
|
|
||||||
#define I3_IPC_REPLY_TYPE_MARKS 5
|
#define I3_IPC_REPLY_TYPE_MARKS 5
|
||||||
|
|
||||||
/** Bar config reply type */
|
|
||||||
#define I3_IPC_REPLY_TYPE_BAR_CONFIG 6
|
#define I3_IPC_REPLY_TYPE_BAR_CONFIG 6
|
||||||
|
|
||||||
/** i3 version reply type */
|
|
||||||
#define I3_IPC_REPLY_TYPE_VERSION 7
|
#define I3_IPC_REPLY_TYPE_VERSION 7
|
||||||
|
#define I3_IPC_REPLY_TYPE_BINDING_MODES 8
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Events from i3 to clients. Events have the first bit set high.
|
* Events from i3 to clients. Events have the first bit set high.
|
||||||
|
|
|
@ -9,6 +9,8 @@
|
||||||
*/
|
*/
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <config.h>
|
||||||
|
|
||||||
#include <ev.h>
|
#include <ev.h>
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
#include <yajl/yajl_gen.h>
|
#include <yajl/yajl_gen.h>
|
||||||
|
@ -16,7 +18,7 @@
|
||||||
|
|
||||||
#include "data.h"
|
#include "data.h"
|
||||||
#include "tree.h"
|
#include "tree.h"
|
||||||
#include "config.h"
|
#include "configuration.h"
|
||||||
|
|
||||||
#include "i3/ipc.h"
|
#include "i3/ipc.h"
|
||||||
|
|
||||||
|
|
|
@ -9,6 +9,8 @@
|
||||||
*/
|
*/
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <config.h>
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* There was a key press. We compare this key code with our bindings table and pass
|
* There was a key press. We compare this key code with our bindings table and pass
|
||||||
* the bound action to parse_command().
|
* the bound action to parse_command().
|
||||||
|
|
|
@ -10,6 +10,8 @@
|
||||||
*/
|
*/
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <config.h>
|
||||||
|
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
@ -17,12 +19,8 @@
|
||||||
#include <xcb/xproto.h>
|
#include <xcb/xproto.h>
|
||||||
#include <xcb/xcb_keysyms.h>
|
#include <xcb/xcb_keysyms.h>
|
||||||
|
|
||||||
#if PANGO_SUPPORT
|
|
||||||
#include <pango/pango.h>
|
#include <pango/pango.h>
|
||||||
#endif
|
|
||||||
#ifdef CAIRO_SUPPORT
|
|
||||||
#include <cairo/cairo-xcb.h>
|
#include <cairo/cairo-xcb.h>
|
||||||
#endif
|
|
||||||
|
|
||||||
#define DEFAULT_DIR_MODE (S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH)
|
#define DEFAULT_DIR_MODE (S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH)
|
||||||
|
|
||||||
|
@ -73,10 +71,8 @@ struct Font {
|
||||||
xcb_charinfo_t *table;
|
xcb_charinfo_t *table;
|
||||||
} xcb;
|
} xcb;
|
||||||
|
|
||||||
#if PANGO_SUPPORT
|
|
||||||
/** The pango font description */
|
/** The pango font description */
|
||||||
PangoFontDescription *pango_desc;
|
PangoFontDescription *pango_desc;
|
||||||
#endif
|
|
||||||
} specific;
|
} specific;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -95,7 +91,7 @@ void errorlog(char *fmt, ...)
|
||||||
#if !defined(DLOG)
|
#if !defined(DLOG)
|
||||||
void debuglog(char *fmt, ...)
|
void debuglog(char *fmt, ...)
|
||||||
__attribute__((format(printf, 1, 2)));
|
__attribute__((format(printf, 1, 2)));
|
||||||
#define DLOG(fmt, ...) debuglog("%s:%s:%d - " fmt, I3__FILE__, __FUNCTION__, __LINE__, ##__VA_ARGS__)
|
#define DLOG(fmt, ...) debuglog("%s:%s:%d - " fmt, STRIPPED__FILE__, __FUNCTION__, __LINE__, ##__VA_ARGS__)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -470,6 +466,13 @@ char *get_process_filename(const char *prefix);
|
||||||
*/
|
*/
|
||||||
char *get_exe_path(const char *argv0);
|
char *get_exe_path(const char *argv0);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initialize the DPI setting.
|
||||||
|
* This will use the 'Xft.dpi' X resource if available and fall back to
|
||||||
|
* guessing the correct value otherwise.
|
||||||
|
*/
|
||||||
|
void init_dpi(void);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Convert a logical amount of pixels (e.g. 2 pixels on a “standard” 96 DPI
|
* Convert a logical amount of pixels (e.g. 2 pixels on a “standard” 96 DPI
|
||||||
* screen) to a corresponding amount of physical pixels on a standard or retina
|
* screen) to a corresponding amount of physical pixels on a standard or retina
|
||||||
|
@ -518,7 +521,6 @@ typedef struct placeholder_t {
|
||||||
*/
|
*/
|
||||||
char *format_placeholders(char *format, placeholder_t *placeholders, int num);
|
char *format_placeholders(char *format, placeholder_t *placeholders, int num);
|
||||||
|
|
||||||
#ifdef CAIRO_SUPPORT
|
|
||||||
/* We need to flush cairo surfaces twice to avoid an assertion bug. See #1989
|
/* We need to flush cairo surfaces twice to avoid an assertion bug. See #1989
|
||||||
* and https://bugs.freedesktop.org/show_bug.cgi?id=92455. */
|
* and https://bugs.freedesktop.org/show_bug.cgi?id=92455. */
|
||||||
#define CAIRO_SURFACE_FLUSH(surface) \
|
#define CAIRO_SURFACE_FLUSH(surface) \
|
||||||
|
@ -526,7 +528,6 @@ char *format_placeholders(char *format, placeholder_t *placeholders, int num);
|
||||||
cairo_surface_flush(surface); \
|
cairo_surface_flush(surface); \
|
||||||
cairo_surface_flush(surface); \
|
cairo_surface_flush(surface); \
|
||||||
} while (0)
|
} while (0)
|
||||||
#endif
|
|
||||||
|
|
||||||
/* A wrapper grouping an XCB drawable and both a graphics context
|
/* A wrapper grouping an XCB drawable and both a graphics context
|
||||||
* and the corresponding cairo objects representing it. */
|
* and the corresponding cairo objects representing it. */
|
||||||
|
@ -542,14 +543,12 @@ typedef struct surface_t {
|
||||||
int width;
|
int width;
|
||||||
int height;
|
int height;
|
||||||
|
|
||||||
#ifdef CAIRO_SUPPORT
|
|
||||||
/* A cairo surface representing the drawable. */
|
/* A cairo surface representing the drawable. */
|
||||||
cairo_surface_t *surface;
|
cairo_surface_t *surface;
|
||||||
|
|
||||||
/* The cairo object representing the drawable. In general,
|
/* The cairo object representing the drawable. In general,
|
||||||
* this is what one should use for any drawing operation. */
|
* this is what one should use for any drawing operation. */
|
||||||
cairo_t *cr;
|
cairo_t *cr;
|
||||||
#endif
|
|
||||||
} surface_t;
|
} surface_t;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -10,6 +10,8 @@
|
||||||
*/
|
*/
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <config.h>
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
// We could not determine the content of the JSON file. This typically
|
// We could not determine the content of the JSON file. This typically
|
||||||
// means it’s unreadable or contains garbage.
|
// means it’s unreadable or contains garbage.
|
||||||
|
|
|
@ -9,6 +9,8 @@
|
||||||
*/
|
*/
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <config.h>
|
||||||
|
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
|
|
||||||
|
@ -27,7 +29,7 @@
|
||||||
is, delete the preceding comma */
|
is, delete the preceding comma */
|
||||||
#define LOG(fmt, ...) verboselog(fmt, ##__VA_ARGS__)
|
#define LOG(fmt, ...) verboselog(fmt, ##__VA_ARGS__)
|
||||||
#define ELOG(fmt, ...) errorlog("ERROR: " fmt, ##__VA_ARGS__)
|
#define ELOG(fmt, ...) errorlog("ERROR: " fmt, ##__VA_ARGS__)
|
||||||
#define DLOG(fmt, ...) debuglog("%s:%s:%d - " fmt, I3__FILE__, __FUNCTION__, __LINE__, ##__VA_ARGS__)
|
#define DLOG(fmt, ...) debuglog("%s:%s:%d - " fmt, STRIPPED__FILE__, __FUNCTION__, __LINE__, ##__VA_ARGS__)
|
||||||
|
|
||||||
extern char *errorfilename;
|
extern char *errorfilename;
|
||||||
extern char *shmlogname;
|
extern char *shmlogname;
|
||||||
|
|
|
@ -9,6 +9,8 @@
|
||||||
*/
|
*/
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <config.h>
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Enable or disable the main X11 event handling function.
|
* Enable or disable the main X11 event handling function.
|
||||||
* This is used by drag_pointer() which has its own, modal event handler, which
|
* This is used by drag_pointer() which has its own, modal event handler, which
|
||||||
|
|
|
@ -9,6 +9,8 @@
|
||||||
*/
|
*/
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <config.h>
|
||||||
|
|
||||||
#include "data.h"
|
#include "data.h"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -35,19 +37,3 @@ void restore_geometry(void);
|
||||||
void manage_window(xcb_window_t window,
|
void manage_window(xcb_window_t window,
|
||||||
xcb_get_window_attributes_cookie_t cookie,
|
xcb_get_window_attributes_cookie_t cookie,
|
||||||
bool needs_to_be_mapped);
|
bool needs_to_be_mapped);
|
||||||
|
|
||||||
#if 0
|
|
||||||
/**
|
|
||||||
* reparent_window() gets called when a new window was opened and becomes a
|
|
||||||
* child of the root window, or it gets called by us when we manage the
|
|
||||||
* already existing windows at startup.
|
|
||||||
*
|
|
||||||
* Essentially, this is the point where we take over control.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
void reparent_window(xcb_connection_t *conn, xcb_window_t child,
|
|
||||||
xcb_visualid_t visual, xcb_window_t root, uint8_t depth,
|
|
||||||
int16_t x, int16_t y, uint16_t width, uint16_t height,
|
|
||||||
uint32_t border_width);
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
|
@ -13,6 +13,8 @@
|
||||||
*/
|
*/
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <config.h>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Initializes the Match data structure. This function is necessary because the
|
* Initializes the Match data structure. This function is necessary because the
|
||||||
* members representing boolean values (like dock) need to be initialized with
|
* members representing boolean values (like dock) need to be initialized with
|
||||||
|
|
|
@ -9,6 +9,8 @@
|
||||||
*/
|
*/
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <config.h>
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Moves the given container in the given direction (TOK_LEFT, TOK_RIGHT,
|
* Moves the given container in the given direction (TOK_LEFT, TOK_RIGHT,
|
||||||
* TOK_UP, TOK_DOWN from cmdparse.l)
|
* TOK_UP, TOK_DOWN from cmdparse.l)
|
||||||
|
|
|
@ -9,6 +9,8 @@
|
||||||
*/
|
*/
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <config.h>
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the output container below the given output container.
|
* Returns the output container below the given output container.
|
||||||
*
|
*
|
||||||
|
@ -22,6 +24,12 @@ Con *output_get_content(Con *output);
|
||||||
*/
|
*/
|
||||||
Output *get_output_from_string(Output *current_output, const char *output_str);
|
Output *get_output_from_string(Output *current_output, const char *output_str);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the output for the given con.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
Output *get_output_for_con(Con *con);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Iterates over all outputs and pushes sticky windows to the currently visible
|
* Iterates over all outputs and pushes sticky windows to the currently visible
|
||||||
* workspace on that output.
|
* workspace on that output.
|
||||||
|
|
|
@ -11,6 +11,8 @@
|
||||||
*/
|
*/
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <config.h>
|
||||||
|
|
||||||
#include "data.h"
|
#include "data.h"
|
||||||
#include <xcb/randr.h>
|
#include <xcb/randr.h>
|
||||||
|
|
||||||
|
@ -60,6 +62,12 @@ void init_ws_for_output(Output *output, Con *content);
|
||||||
*/
|
*/
|
||||||
void randr_query_outputs(void);
|
void randr_query_outputs(void);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Disables the output and moves its content.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
void randr_disable_output(Output *output);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the first output which is active.
|
* Returns the first output which is active.
|
||||||
*
|
*
|
||||||
|
@ -79,6 +87,13 @@ Output *get_output_by_name(const char *name);
|
||||||
*/
|
*/
|
||||||
Output *get_output_containing(unsigned int x, unsigned int y);
|
Output *get_output_containing(unsigned int x, unsigned int y);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the active output which spans exactly the area specified by
|
||||||
|
* rect or NULL if there is no output like this.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
Output *get_output_with_dimensions(Rect rect);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* In contained_by_output, we check if any active output contains part of the container.
|
* In contained_by_output, we check if any active output contains part of the container.
|
||||||
* We do this by checking if the output rect is intersected by the Rect.
|
* We do this by checking if the output rect is intersected by the Rect.
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue