Compare commits

...

18 Commits
master ... next

Author SHA1 Message Date
Michael Stapelberg
ba550382a3 debian: remove menu file, add lintian-overrides 2016-04-01 16:34:56 +02:00
Michael Stapelberg
5dd4508c74 *.xsession.desktop: add Keywords=
See also https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=693918 and
https://wiki.gnome.org/Initiatives/GnomeGoals/DesktopFileKeywords
2016-04-01 15:57:41 +02:00
Michael Stapelberg
84c39a1103 Merge pull request #2243 from Xarthisius/pango_support
Add missing MAX macros, ensure that i3 can be compiled without pango
2016-03-30 08:47:56 +02:00
Michael Stapelberg
eb837cbd00 Merge pull request #2266 from cedricbu/dmenu-death-by-failed-open
i3-dmenu-desktop: do not die on failed open
2016-03-24 09:40:19 +01:00
Cedric
7b1729a85b i3-dmenu-desktop: do not die on failed open 2016-03-23 18:48:38 +01:00
Kacper Kowalik (Xarthisius)
eb0a0a166f Convert ifdef CAIRO_SUPPORT to if statements to keep consistency with common.mk 2016-03-23 10:58:10 -05:00
Kacper Kowalik (Xarthisius)
301320585e Add missing MAX macros, ensure that i3 can be compiled without pango 2016-03-23 10:58:10 -05:00
Michael Stapelberg
d68387bf5d Merge pull request #2264 from ixjlyons/i3bar-protocol-typos
Fix typos in documentation.
2016-03-21 12:11:35 -07:00
Kenneth Lyons
ac97dbdf90 Fix typos in documentation. 2016-03-21 10:00:25 -07:00
Michael Stapelberg
6fb271fc1e Merge pull request #2245 from Osse/next
Update information on where to find #i3 on IRC
2016-03-11 19:02:43 -08:00
Øystein Walle
868180565e Update information on where to find #i3 on IRC 2016-03-10 18:05:17 +01:00
Michael Stapelberg
960e6384cc Merge pull request #2244 from jubalh/desktopf
Make i3.applications.desktop file more complete
2016-03-09 11:45:15 +01:00
Michael Vetter
df4b4d0f40 Make i3.applications.desktop file more complete
Add GenericName to i3.applications.desktop file.
2016-03-09 10:27:04 +01:00
Michael Stapelberg
42f5a6ce47 travis: skip login+push for pull requests 2016-03-06 18:51:52 +01:00
Michael Stapelberg
ab2d46b65b release.sh: clone from canonical location
This ensures the repository is up-to-date (in all branches!), hopefully
preventing merge mistakes such as the one fixed with
0e29101ae5
2016-03-06 17:02:12 +01:00
Michael Stapelberg
efff2361cb release.sh: update i3-announce mailing list address 2016-03-06 16:31:11 +01:00
Michael Stapelberg
cb4235706f update release.sh for the 4.12 release 2016-03-06 16:27:49 +01:00
Michael Stapelberg
018a47ceef debian: update changelog 2016-03-06 16:26:03 +01:00
21 changed files with 80 additions and 40 deletions

View File

@ -42,7 +42,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

22
debian/changelog vendored
View File

@ -1,8 +1,26 @@
i3-wm (4.11.1-1) unstable; urgency=medium i3-wm (4.12.1-1) unstable; urgency=medium
* UNRELEASED * UNRELEASED
-- Michael Stapelberg <stapelberg@debian.org> Wed, 30 Sep 2015 09:03:26 +0200 -- 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
* New upstream release.
* Move to debhelper 9
* Bump Standards-Version to 3.9.7 (no changes necessary)
* debian/watch: verify signature, use https
* Enable full hardening
-- Michael Stapelberg <stapelberg@debian.org> Sun, 06 Mar 2016 14:20:38 +0100
i3-wm (4.11-1) unstable; urgency=medium i3-wm (4.11-1) unstable; urgency=medium

2
debian/i3-wm.lintian-overrides vendored Normal file
View File

@ -0,0 +1,2 @@
# gdm needs the DesktopNames key, even though lintian doesnt recognize it yet.
desktop-entry-contains-unknown-key usr/share/xsessions/i3.desktop:* DesktopNames

5
debian/i3-wm.menu vendored
View File

@ -1,5 +0,0 @@
?package(i3-wm): \
needs="wm" \
section="Window Managers" \
title="i3" \
command="/usr/bin/i3"

View File

@ -593,7 +593,7 @@ optimize this and call +x_push_node+ on the appropriate con directly.
itself for the containers children. This function actually pushes the itself for the containers 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

View File

@ -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, lets cover why JSON is a building block of Before describing the protocol, lets cover why JSON is a building block of
this protocol. this protocol.
@ -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)

View File

@ -285,7 +285,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 "1pixel", depending on the
containers border style. containers border style.
current_border_width (integer):: current_border_width (integer)::
Number of pixels of the border width. Number of pixels of the border width.

View File

@ -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+
@ -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.

View File

@ -1372,7 +1372,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.
@ -2204,7 +2204,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]]

View File

@ -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 {

View File

@ -3,3 +3,4 @@ Name=i3 (with debug log)
Comment=improved dynamic tiling window manager Comment=improved dynamic tiling window manager
Exec=i3-with-shmlog Exec=i3-with-shmlog
Type=Application Type=Application
Keywords=tiling;wm;windowmanager;window;manager;

View File

@ -2,6 +2,7 @@
Type=Application Type=Application
Name=i3 Name=i3
NoDisplay=true NoDisplay=true
GenericName=A dynamic tiling window manager
Comment=improved dynamic tiling window manager Comment=improved dynamic tiling window manager
Exec=i3 Exec=i3
X-GNOME-WMName=i3 X-GNOME-WMName=i3

View File

@ -6,3 +6,4 @@ TryExec=i3
Type=Application Type=Application
X-LightDM-DesktopName=i3 X-LightDM-DesktopName=i3
DesktopNames=i3 DesktopNames=i3
Keywords=tiling;wm;windowmanager;window;manager;

View File

@ -20,7 +20,7 @@
#if PANGO_SUPPORT #if PANGO_SUPPORT
#include <pango/pango.h> #include <pango/pango.h>
#endif #endif
#ifdef CAIRO_SUPPORT #if CAIRO_SUPPORT
#include <cairo/cairo-xcb.h> #include <cairo/cairo-xcb.h>
#endif #endif
@ -518,7 +518,7 @@ 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 #if 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) \
@ -542,7 +542,7 @@ typedef struct surface_t {
int width; int width;
int height; int height;
#ifdef CAIRO_SUPPORT #if CAIRO_SUPPORT
/* A cairo surface representing the drawable. */ /* A cairo surface representing the drawable. */
cairo_surface_t *surface; cairo_surface_t *surface;

View File

@ -11,7 +11,7 @@
#include <string.h> #include <string.h>
#include <xcb/xcb.h> #include <xcb/xcb.h>
#include <xcb/xcb_aux.h> #include <xcb/xcb_aux.h>
#ifdef CAIRO_SUPPORT #if CAIRO_SUPPORT
#include <cairo/cairo-xcb.h> #include <cairo/cairo-xcb.h>
#endif #endif
@ -50,7 +50,7 @@ void draw_util_surface_init(xcb_connection_t *conn, surface_t *surface, xcb_draw
ELOG("Could not create graphical context. Error code: %d. Please report this bug.\n", error->error_code); ELOG("Could not create graphical context. Error code: %d. Please report this bug.\n", error->error_code);
} }
#ifdef CAIRO_SUPPORT #if CAIRO_SUPPORT
surface->surface = cairo_xcb_surface_create(conn, surface->id, surface->visual_type, width, height); surface->surface = cairo_xcb_surface_create(conn, surface->id, surface->visual_type, width, height);
surface->cr = cairo_create(surface->surface); surface->cr = cairo_create(surface->surface);
#endif #endif
@ -62,7 +62,7 @@ void draw_util_surface_init(xcb_connection_t *conn, surface_t *surface, xcb_draw
*/ */
void draw_util_surface_free(xcb_connection_t *conn, surface_t *surface) { void draw_util_surface_free(xcb_connection_t *conn, surface_t *surface) {
xcb_free_gc(conn, surface->gc); xcb_free_gc(conn, surface->gc);
#ifdef CAIRO_SUPPORT #if CAIRO_SUPPORT
cairo_surface_destroy(surface->surface); cairo_surface_destroy(surface->surface);
cairo_destroy(surface->cr); cairo_destroy(surface->cr);
@ -81,7 +81,7 @@ void draw_util_surface_free(xcb_connection_t *conn, surface_t *surface) {
void draw_util_surface_set_size(surface_t *surface, int width, int height) { void draw_util_surface_set_size(surface_t *surface, int width, int height) {
surface->width = width; surface->width = width;
surface->height = height; surface->height = height;
#ifdef CAIRO_SUPPORT #if CAIRO_SUPPORT
cairo_xcb_surface_set_size(surface->surface, width, height); cairo_xcb_surface_set_size(surface->surface, width, height);
#endif #endif
} }
@ -121,7 +121,7 @@ color_t draw_util_hex_to_color(const char *color) {
static void draw_util_set_source_color(xcb_connection_t *conn, surface_t *surface, color_t color) { static void draw_util_set_source_color(xcb_connection_t *conn, surface_t *surface, color_t color) {
RETURN_UNLESS_SURFACE_INITIALIZED(surface); RETURN_UNLESS_SURFACE_INITIALIZED(surface);
#ifdef CAIRO_SUPPORT #if CAIRO_SUPPORT
cairo_set_source_rgba(surface->cr, color.red, color.green, color.blue, color.alpha); cairo_set_source_rgba(surface->cr, color.red, color.green, color.blue, color.alpha);
#else #else
uint32_t colorpixel = color.colorpixel; uint32_t colorpixel = color.colorpixel;
@ -139,7 +139,7 @@ static void draw_util_set_source_color(xcb_connection_t *conn, surface_t *surfac
void draw_util_text(i3String *text, surface_t *surface, color_t fg_color, color_t bg_color, int x, int y, int max_width) { void draw_util_text(i3String *text, surface_t *surface, color_t fg_color, color_t bg_color, int x, int y, int max_width) {
RETURN_UNLESS_SURFACE_INITIALIZED(surface); RETURN_UNLESS_SURFACE_INITIALIZED(surface);
#ifdef CAIRO_SUPPORT #if CAIRO_SUPPORT
/* Flush any changes before we draw the text as this might use XCB directly. */ /* Flush any changes before we draw the text as this might use XCB directly. */
CAIRO_SURFACE_FLUSH(surface->surface); CAIRO_SURFACE_FLUSH(surface->surface);
#endif #endif
@ -147,7 +147,7 @@ void draw_util_text(i3String *text, surface_t *surface, color_t fg_color, color_
set_font_colors(surface->gc, fg_color, bg_color); set_font_colors(surface->gc, fg_color, bg_color);
draw_text(text, surface->id, surface->gc, surface->visual_type, x, y, max_width); draw_text(text, surface->id, surface->gc, surface->visual_type, x, y, max_width);
#ifdef CAIRO_SUPPORT #if CAIRO_SUPPORT
/* Notify cairo that we (possibly) used another way to draw on the surface. */ /* Notify cairo that we (possibly) used another way to draw on the surface. */
cairo_surface_mark_dirty(surface->surface); cairo_surface_mark_dirty(surface->surface);
#endif #endif
@ -162,7 +162,7 @@ void draw_util_text(i3String *text, surface_t *surface, color_t fg_color, color_
void draw_util_rectangle(xcb_connection_t *conn, surface_t *surface, color_t color, double x, double y, double w, double h) { void draw_util_rectangle(xcb_connection_t *conn, surface_t *surface, color_t color, double x, double y, double w, double h) {
RETURN_UNLESS_SURFACE_INITIALIZED(surface); RETURN_UNLESS_SURFACE_INITIALIZED(surface);
#ifdef CAIRO_SUPPORT #if CAIRO_SUPPORT
cairo_save(surface->cr); cairo_save(surface->cr);
/* Using the SOURCE operator will copy both color and alpha information directly /* Using the SOURCE operator will copy both color and alpha information directly
@ -194,7 +194,7 @@ void draw_util_rectangle(xcb_connection_t *conn, surface_t *surface, color_t col
void draw_util_clear_surface(xcb_connection_t *conn, surface_t *surface, color_t color) { void draw_util_clear_surface(xcb_connection_t *conn, surface_t *surface, color_t color) {
RETURN_UNLESS_SURFACE_INITIALIZED(surface); RETURN_UNLESS_SURFACE_INITIALIZED(surface);
#ifdef CAIRO_SUPPORT #if CAIRO_SUPPORT
cairo_save(surface->cr); cairo_save(surface->cr);
/* Using the SOURCE operator will copy both color and alpha information directly /* Using the SOURCE operator will copy both color and alpha information directly
@ -227,7 +227,7 @@ void draw_util_copy_surface(xcb_connection_t *conn, surface_t *src, surface_t *d
RETURN_UNLESS_SURFACE_INITIALIZED(src); RETURN_UNLESS_SURFACE_INITIALIZED(src);
RETURN_UNLESS_SURFACE_INITIALIZED(dest); RETURN_UNLESS_SURFACE_INITIALIZED(dest);
#ifdef CAIRO_SUPPORT #if CAIRO_SUPPORT
cairo_save(dest->cr); cairo_save(dest->cr);
/* Using the SOURCE operator will copy both color and alpha information directly /* Using the SOURCE operator will copy both color and alpha information directly

View File

@ -397,9 +397,11 @@ static void draw_text_xcb(const xcb_char2b_t *text, size_t text_len, xcb_drawabl
void draw_text(i3String *text, xcb_drawable_t drawable, xcb_gcontext_t gc, void draw_text(i3String *text, xcb_drawable_t drawable, xcb_gcontext_t gc,
xcb_visualtype_t *visual, int x, int y, int max_width) { xcb_visualtype_t *visual, int x, int y, int max_width) {
assert(savedFont != NULL); assert(savedFont != NULL);
#if PANGO_SUPPORT
if (visual == NULL) { if (visual == NULL) {
visual = root_visual_type; visual = root_visual_type;
} }
#endif
switch (savedFont->type) { switch (savedFont->type) {
case FONT_TYPE_NONE: case FONT_TYPE_NONE:

View File

@ -1,8 +1,8 @@
#!/bin/zsh #!/bin/zsh
# This script is used to prepare a new release of i3. # This script is used to prepare a new release of i3.
export RELEASE_VERSION="4.11" export RELEASE_VERSION="4.12"
export PREVIOUS_VERSION="4.10.4" export PREVIOUS_VERSION="4.11"
export RELEASE_BRANCH="next" export RELEASE_BRANCH="next"
if [ ! -e "../i3.github.io" ] if [ ! -e "../i3.github.io" ]
@ -45,7 +45,7 @@ if ! wget https://i3wm.org/downloads/i3-${PREVIOUS_VERSION}.tar.bz2; then
echo "Could not download i3-${PREVIOUS_VERSION}.tar.bz2 (required for comparing files)." echo "Could not download i3-${PREVIOUS_VERSION}.tar.bz2 (required for comparing files)."
exit 1 exit 1
fi fi
git clone --quiet --branch "${RELEASE_BRANCH}" file://${STARTDIR} git clone --quiet --branch "${RELEASE_BRANCH}" https://github.com/i3/i3
cd i3 cd i3
if [ ! -e "${STARTDIR}/RELEASE-NOTES-${RELEASE_VERSION}" ]; then if [ ! -e "${STARTDIR}/RELEASE-NOTES-${RELEASE_VERSION}" ]; then
echo "Required file RELEASE-NOTES-${RELEASE_VERSION} not found." echo "Required file RELEASE-NOTES-${RELEASE_VERSION} not found."
@ -194,7 +194,7 @@ git config --add remote.origin.push "+refs/heads/master:refs/heads/master"
cd ${TMPDIR} cd ${TMPDIR}
cat >email.txt <<EOT cat >email.txt <<EOT
From: Michael Stapelberg <michael@i3wm.org> From: Michael Stapelberg <michael@i3wm.org>
To: i3-announce@i3.zekjur.net To: i3-announce@freelists.org
Subject: i3 v${RELEASE_VERSION} released Subject: i3 v${RELEASE_VERSION} released
Content-Type: text/plain; charset=utf-8 Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit Content-Transfer-Encoding: 8bit

View File

@ -11,6 +11,10 @@
*/ */
#include "all.h" #include "all.h"
#ifndef MAX
#define MAX(x, y) ((x) > (y) ? (x) : (y))
#endif
/* /*
* Calculates sum of heights and sum of widths of all currently active outputs * Calculates sum of heights and sum of widths of all currently active outputs
* *

View File

@ -341,10 +341,12 @@ char *pango_escape_markup(char *input) {
if (!font_is_pango()) if (!font_is_pango())
return input; return input;
#if PANGO_SUPPORT
char *escaped = g_markup_escape_text(input, -1); char *escaped = g_markup_escape_text(input, -1);
FREE(input); FREE(input);
return escaped; return escaped;
#endif
} }
/* /*

View File

@ -12,6 +12,10 @@
*/ */
#include "all.h" #include "all.h"
#ifndef MAX
#define MAX(x, y) ((x) > (y) ? (x) : (y))
#endif
xcb_window_t ewmh_window; xcb_window_t ewmh_window;
/* Stores the X11 window ID of the currently focused window */ /* Stores the X11 window ID of the currently focused window */

View File

@ -7,5 +7,11 @@ set -e
echo .git > .dockerignore echo .git > .dockerignore
docker build --pull --no-cache --rm -t=${BASENAME} -f travis-build.Dockerfile . docker build --pull --no-cache --rm -t=${BASENAME} -f travis-build.Dockerfile .
# For pull requests, travis does not add secure environment variables to the
# environment (because pull requests could then steal their values), so skip
# the login+push step when the variable isnt set.
if [ -n "${DOCKER_PASS}" ]
then
docker login -e ${DOCKER_EMAIL} -u ${DOCKER_USER} -p ${DOCKER_PASS} docker login -e ${DOCKER_EMAIL} -u ${DOCKER_USER} -p ${DOCKER_PASS}
docker push ${BASENAME} docker push ${BASENAME}
fi