Commit Graph

4190 Commits

Author SHA1 Message Date
Tony Crisci 80df764e55 i3bar: Realign tray clients on map/unmap notify
UnmapNotify events are interpreted by i3bar as an action taken by an
application to hide its tray window. Likewise, MapNotify events are
interpreted as an action taken by by an application to show its tray
window.

The actual cause of these events may be the application itself, or the
result of some action taken by i3bar itself at the request of the
application in the course of the XEmbed protocol.

We respond by adjusting the size of the tray window and realigning any
tray clients that remain. This will make room for the mapping window or
close the gap left by the unmapping window when the bar is redrawn.

fixes #1110
2013-11-30 14:01:25 +01:00
Lancelot SIX eca5e4598a libi3/root_atom_contents: handle data of arbitrary length
Handle data fetched from xcb_get_property_unchecked with arbitrary
length. This avoids having to rely on PATH_MAX macro where it is not
necessary.
2013-11-26 19:58:35 +01:00
Jean-Philippe Ouellet 2eea82eb02 ignore symbol files on OS X (only for debugging, breaks git-add -A) 2013-11-26 19:56:59 +01:00
Jean-Philippe Ouellet 755188220f fix the build on OS X
OS X doesn't have posix_fallocate() yet, so put
bf760d0241 in
    #if defined(__APPLE__)

the cd fails with:
    /bin/sh: line 0: cd: include: No such file or directory
so give it a path relative to the top directory
2013-11-26 19:56:45 +01:00
Lancelot SIX 18cfc36408 libi3/root_atom_contents: Free xcb reply structures
Free memory allocated during xcb calls.
2013-11-24 13:52:31 +01:00
Lancelot SIX f22995393a Remove references to PATH_MAX macro
Since the macro PATH_MAX is not defined on every system (GNU/Hurd being
one of those who do not define it), we remove all references to this
macro. Instead, we use a buffer of arbitraty size and grow it when
needed to contain paths.
2013-11-24 13:50:29 +01:00
Michael Stapelberg 4f5e0e794f persist root window’s background contents to a pixmap
The commit title is fairly technical, so I’ll try to explain.

Recently, users of GDM3 (I’m sure) and LightDM (I think) have reported
that when switching to a new workspace, the contents of the previous
workspace are still visible. i3bar updates, though, so it is the X11
root window which is not being updated here.

When using GDM3, X11 will be started with -background none, and no
background pixmap or pixel is set. Then, apparently,
gnome-settings-daemon will display a fade animation from whatever is
currently on the window to the destination contents. I think this is to
avoid flickering when logging in, which would occur when just setting a
specific background pixmap or pixel.

So, this commit will, when i3 starts first (not on restarts), copy the
contents of the X11 root window (typicall a grey background, at least on
my machine with GDM3) into a pixmap and set that pixmap as background
pixmap. That way, the content will be preserved and one has a
background, instead of what is perceived as a bug :).

This commit has some chance of breakage, so I’m prepared to revert it
unless we can figure out the issues and roll forward.
2013-11-24 13:44:30 +01:00
Tony Crisci a1e7ce20f0 i3bar: Handle DestroyNotify events
Handle DestroyNotify events by removing the tray client from the tray
client list held in memory.

This change is intended to be part of the i3bar's implementation of the
XEmbed protocol. For more information, see:

<http://standards.freedesktop.org/xembed-spec/xembed-spec-latest.html>

According to the XEmbed protocol specification, this is one way for a
tray client to finish the protocol. After this event is received, i3bar
should have no more interaction with the tray client.
2013-11-24 12:40:03 +01:00
Michael Stapelberg 1dbdd4fece Merge branch 'master' into next 2013-11-22 17:09:28 +01:00
Michael Stapelberg fd07f989fd Merge branch 'fix-urgent-crash' 2013-11-22 17:09:28 +01:00
Tony Crisci 57822e3ed4 Remove-child callback skips output content cons
Every container 'above' (in the hierarchy) the workspace content should
not be closed when the last child was removed.

Add a check for output content containers and do not handle them. These
cons are at the root of the output container with dockarea siblings.
They may be run through this callback when an output is killed with
RandR.

Fixes an issue that caused content cons to become urgent when the output
is killed with RandR.

fixes: #1121
2013-11-22 17:09:23 +01:00
Michael Stapelberg d3beff2339 make i3bar use libi3’s root_atom_contents()
This removes code duplication, which will be useful for a subsequent
commit.

Furthermore, we now don’t open X11 connections unnecessarily in some
corner cases.
2013-11-22 15:48:45 +01:00
Michael Stapelberg ca39289e3e t/516-move: use window id, fix typo 2013-11-19 20:28:32 +01:00
Tony Crisci 9f955a1e01 Command 'move <direction>' moves across outputs
When 'move <direction>' is issued in the context of a container that
borders a workspace, and there is no suitable place within this
workspace for which this container can move, move the container to the
closest output in this direction instead.
2013-11-19 20:26:52 +01:00
Michael Stapelberg 5a4efd04c1 refactor previous commit’s new code into a function, add log message 2013-11-18 23:17:44 +01:00
Bas Pape 1d6450f0e8 libi3/font: Set DPI for the pango context
The pango font specification accepts a font size in points, but pango
defaults to a DPI of 96. Create a default PangoContext (which
internally creates a default PangoCairoFontMap as usual) and set the
DPI to the value of the root Screen manually.

Fixes #1115
2013-11-18 23:12:08 +01:00
Trung Ngo 3dba51500e Update userguide on multiple criteria
Change wording, add an example for multiple criteria and move
the sentence explaining the Firefox example into the code listing
block.
2013-11-10 19:55:45 +01:00
Tony Crisci f3bf314662 Add sensible discretion to UnmapNotify drag abort
Only abort a drag action on UnmapNotify when the unmapping window is
managed on the current workspace.

fixes #1108
2013-11-10 19:54:49 +01:00
Tony Crisci e08215896e i3bar: Simplify hide mode logic
When determining whether to hide or unhide the bar on redraw in hide
mode, use simpler rules. When the config specifies the 'show' state or a
workspace is urgent, or if the caller requests it, or the modifier is
pressed, show the bar. Otherwise, hide the bar.
2013-11-09 14:34:00 +01:00
Tony Crisci 9ee26a608e Return DRAG_ABORT on UnmapNotify from drag_pointer
Add DRAG_ABORT to enum drag_result_t. DRAG_ABORT will indicate the drag
operation cannot be completed.

Return DRAG_ABORT on UnmapNotify, or when the keyboard or pointer cannot
be grabbed.

Add DRAGGING to return value for drag_result_t. DRAGGING is used
internally by drag_pointer to indicate the drag is in progress.

Change DRAG_CANCEL to DRAG_REVERT to clarify the distinction between
"abort" and "revert/cancel" actions.

Fixes an issue that caused i3 to crash when a user is dragging or
resizing a floating window that becomes destroyed.
2013-11-09 13:27:42 +01:00
Baptiste Daroussin f691a55923 Use _PATH_BSHELL to ensure using a bourne shell
[Michael]
This commit should fix problems with people using a non-bourne shell as
login shell, e.g. fish or rc. AFAICT, $SHELL should only be used for
interactive shells, but we just want a bourne shell, not an interactive
shell.
2013-11-09 10:11:32 +01:00
jj 857fc0bf17 Update comment for the con_toggle_fullscreen method 2013-10-23 23:26:44 +02:00
jj b6100dd727 Fix output retrieval for floating cons
When focusing/moving to outputs, the method of getting the correct
output for a given container fails if the container in question is
floating and only partially mapped on an output screen. This patch
introduces a fail-safe retrieval of the output for any container.
2013-10-23 23:26:06 +02:00
Tony Crisci 1110a1bed6 Add `.clang_complete` and `Xdummy.so` to gitignore
Adds two files to gitignore.

`.clang_complete` is created by the clang_complete vim plugin
[https://github.com/Rip-Rip/clang_complete]

`Xdummy.so` is created by compiling the Xdummy module.
2013-10-23 23:24:04 +02:00
Tony Crisci cce3c8066a i3bar: Only configure tray on own outputs
If the config specifies a `tray_output` not in the list of outputs over
which this bar will span, do not initialize a tray for the bar.

Fixes former behavior, which was to initialize the tray without showing
the icons, causing disapearing tray icons in multi-monitor environments
when `tray_output` isnt `output`.
2013-10-23 23:23:45 +02:00
Tony Crisci e99158e419 Assigned windows open urgent when not visible
When i3 begins to manage a window, if the window opens on a workspace
that is not visible, the urgency hint on the newly managed window will
be set.

fixes #1088
2013-10-19 10:07:24 +02:00
Tony Crisci 14b86acf40 Testcases: Use AnyEvent::I3 version 0.15
Use the latest version of AnyEvent::I3, version 0.15, which includes
support for the `window` event tag.
2013-10-19 10:06:08 +02:00
Tony Crisci 9adff26dcf Testcases: new-test prints usage without input
Prevent the accidental creation of new tests with empty names by
printing usage information for new-test when the test name would be
empty.
2013-10-19 10:06:02 +02:00
Tony Crisci cf3da1c433 Testcases: remove "latest" if it is a symbolic link
Test for the existence of the symlink to "latest" with the -l flag,
which tests if the target is a symbolic link. Testing with the -e flag
will fail in case the link points to a file that does not exist, which
will occur if the test result directories are deleted by hand.
2013-10-19 10:05:33 +02:00
Alexander Neumann 4622fd8703 Correct typos in user guide 2013-10-19 10:05:10 +02:00
jj bf1699e967 Fix command parser: resizing tiling windows
i3 would accept an invalid resize command like 'resize shrink width 10
px or' without specifying the ppt value, and then crash. This patch
fixes the parser specification.
2013-10-13 18:02:40 +02:00
Tony Crisci 8fe17407ff i3-nagbar: Set button inner-width to the width of the label
Use predict_text_width to find the width of the label and then account
for right padding when calculating the width of the button.
2013-10-13 18:02:39 +02:00
Michael Stapelberg 1c0554564a previous commit: extend test and code to also work with floating windows 2013-10-13 17:59:29 +02:00
jj eef9042713 Fix endless loop when trying to kill a visible workspace
This regression was introduced with commit
97b086efd9

fixes #1103
2013-10-13 17:58:38 +02:00
Tony Crisci f9d8a1b4d6 Testcases: ignore Xorg config dir when starting Xdummy
Start Xdummy with '-configdir /dev/null' to avoid conflicting settings
in xorg.conf.d.
2013-10-13 17:17:54 +02:00
Peter Maatman c142a4fa6c Update docs/hacking-howto to reflect parser changes 2013-10-13 17:17:38 +02:00
Alexander Neumann 7f9d2ac948 Add quoting for sample command
The user's guide talks about renaming workspaces, for example to
"2: mail", and a sample key binding for use with i3-input is supplied.
However, this example lacks proper quoting for the format string, so
that when workspace name with a space in it, like "2: mail", is given,
the current workspace is renamed to "2:". This patch adds proper
quoting.
2013-10-13 17:17:24 +02:00
Michael Stapelberg cf7ea276ba Merge branch 'fix-extents' 2013-10-09 19:49:48 +02:00
Michael Stapelberg a09a5c391e Merge branch 'master' into next 2013-10-09 19:49:48 +02:00
Tony Crisci 05e46848f0 Reply to _NET_REQUEST_FRAME_EXTENTS correctly
Reply to _NET_REQUEST_FRAME_EXTENTS by settings _NET_FRAME_EXTENTS
property of the window to widths of the respective borders added by i3.

fixes #1093
fixes #1069
2013-10-09 19:49:37 +02:00
Michael Stapelberg d661c1493c Only abort resizing on KeyPress, not KeyRelease (Thanks vandannen)
Otherwise, releasing a key that was used to trigger the resizing (e.g.
the modifier key) needs to be pressed all the time.
2013-10-01 07:21:40 +02:00
jj 98c4cc46e4 Do not resize/reposition floating containers when moving them to scratchpad 2013-09-30 22:54:35 +02:00
Tony Crisci 459490b67b Add ability to escape out of a mouse-resize operation
Implement #1074. drag_cancel grabs the keyboard and returns DRAG_CANCEL
when the user presses any key during the grab.
2013-09-30 22:54:11 +02:00
Quentin Glidic a49dfaf26c libi3/font: Draw the text at the expected place
When drawing a text with Pango, shift it to the top according to the top
if the glyph if taller than expected
We always shift of (height - savedHeight) which is a no-op for normal glyphs

Signed-off-by: Quentin Glidic <sardemff7+git@sardemff7.net>
2013-09-30 22:51:52 +02:00
jj dbec5eb905 Fix keyboard and mouse resize in nested containers
fixes #1084
fixes #1085
2013-09-26 19:30:07 +02:00
Vivien Didelot 5baada6532 reduce some yajl boilerplate
This patch introduces a yerror() macro in src/commands.c and also
removes some unused yajl helper macros from src/config_directives.c.

Signed-off-by: Vivien Didelot <vivien.didelot@savoirfairelinux.com>
2013-09-26 19:09:39 +02:00
Michael Stapelberg 0bfcf1a762 Improve error message when $XDG_RUNTIME_DIR is not writable 2013-09-25 19:33:28 +02:00
Michael Stapelberg 8d38529bcd tests: move set_wm_class to X11::XCB::Window
This code was duplicated way too often for a long time :)
2013-09-24 21:56:52 +02:00
Michael Stapelberg 04847eeb1f Merge branch 'fix-urgency-assign' 2013-09-24 07:48:09 +02:00
Michael Stapelberg 031de8f720 Merge branch 'master' into next 2013-09-24 07:48:09 +02:00