Compare commits
18 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
ba550382a3 | ||
|
5dd4508c74 | ||
|
84c39a1103 | ||
|
eb837cbd00 | ||
|
7b1729a85b | ||
|
eb0a0a166f | ||
|
301320585e | ||
|
d68387bf5d | ||
|
ac97dbdf90 | ||
|
6fb271fc1e | ||
|
868180565e | ||
|
960e6384cc | ||
|
df4b4d0f40 | ||
|
42f5a6ce47 | ||
|
ab2d46b65b | ||
|
efff2361cb | ||
|
cb4235706f | ||
|
018a47ceef |
@ -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
22
debian/changelog
vendored
@ -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
2
debian/i3-wm.lintian-overrides
vendored
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
# gdm needs the DesktopNames key, even though lintian doesn’t recognize it yet.
|
||||||
|
desktop-entry-contains-unknown-key usr/share/xsessions/i3.desktop:* DesktopNames
|
5
debian/i3-wm.menu
vendored
5
debian/i3-wm.menu
vendored
@ -1,5 +0,0 @@
|
|||||||
?package(i3-wm): \
|
|
||||||
needs="wm" \
|
|
||||||
section="Window Managers" \
|
|
||||||
title="i3" \
|
|
||||||
command="/usr/bin/i3"
|
|
@ -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.
|
||||||
@ -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)
|
||||||
|
|
||||||
|
2
docs/ipc
2
docs/ipc
@ -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
|
||||||
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.
|
||||||
|
@ -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.
|
||||||
|
@ -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]]
|
||||||
|
@ -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 {
|
||||||
|
@ -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;
|
||||||
|
@ -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
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
@ -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:
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
*
|
*
|
||||||
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
4
src/x.c
4
src/x.c
@ -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 */
|
||||||
|
@ -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 .
|
||||||
docker login -e ${DOCKER_EMAIL} -u ${DOCKER_USER} -p ${DOCKER_PASS}
|
# For pull requests, travis does not add secure environment variables to the
|
||||||
docker push ${BASENAME}
|
# environment (because pull requests could then steal their values), so skip
|
||||||
|
# the login+push step when the variable isn’t set.
|
||||||
|
if [ -n "${DOCKER_PASS}" ]
|
||||||
|
then
|
||||||
|
docker login -e ${DOCKER_EMAIL} -u ${DOCKER_USER} -p ${DOCKER_PASS}
|
||||||
|
docker push ${BASENAME}
|
||||||
|
fi
|
||||||
|
Loading…
Reference in New Issue
Block a user