Commit graph

5970 commits

Author SHA1 Message Date
Mathias Gumz
fff0abad76 Improve I18n support
Among the first steps to produce better i18n support is to test the created
translations adhoc without running "make install". To achieve this, fluxbox
now honors several environment variables:

- NLSPATH: fluxbox won't create the absolute path to the catalog and thus
  catopen() is free to use NLSPATH as described in the manpage. Example
  given: "/tmp/%N" will pick "/tmp/fluxbox.cat". %N refers to FLUXBOX_CATFILE.

- FLUXBOX_CATFILE: By setting FLUXBOX_CATFILE the users can make fluxbox to
  use a different name for the catalog file.  Default: "fluxbox.cat"

- FLUXBOX_CATDIR: Per default fluxbox tries to find FLUXBOX_CATFILE at several
  places. Setting this environment variable allows to point fluxbox to a
  different search path for the catalog files.

Then, fluxbox tries catopen() first without changing the deduced catalog file
name. After that it applies some heuristics to get a good catalog file name.
2015-01-31 21:37:44 +01:00
Mathias Gumz
57f21b64ca Update translations: add CommonDefaultWindowMenuFile 2015-01-31 21:05:07 +01:00
Mathias Gumz
0a87632032 Clean up FbTk::I18n API
Move private stuff into FbTk/I18n.cc.
2015-01-31 12:04:30 +01:00
Mathias Gumz
f8b9c9a211 Fix sometimes missing windowmenu
When the windowmenu file is empty in ~/.fluxbox/init the code falls
back to the default. In ab2eef4 I forgot to set the rc_path which
caused this bug to happen.
2015-01-30 22:09:27 +01:00
Mathias Gumz
da285bcb11 Add chrome* to fluxbox-generate_menu 2015-01-29 13:24:57 +01:00
Mathias Gumz
bf43ba16c4 Use strncpy() instead of strcpy() 2015-01-29 11:52:00 +01:00
Mathias Gumz
37e8c1e93e Use strncpy() instead of strcpy() 2015-01-29 11:46:57 +01:00
Mathias Gumz
129d0ac31e Make fluxbox strcat() free
Again, gcc-4.2.1 of OpenBSD-5.6 pointed out the use of strcat(). I took the
chance to explain the reasons for the code a little bit.
2015-01-29 11:43:05 +01:00
Mathias Gumz
8b44c7a184 Simpler code to set _NET_DESKTOP_NAMES
gcc-4.2.1 on OpenBSD-5.6 hinted that strcpy() is not the safest function on
earth. While seeing the code I wondered why it we first create copies
of the names at all (let alone using memset() and then strcpy() after it).
2015-01-29 11:38:48 +01:00
Mathias Gumz
8e5a10ea6c Compiler boyscouting: init order 2015-01-28 21:44:20 +01:00
Mathias Gumz
876500a259 Fix correctness of string search
The lookup for the skip value needs to be based upon the lowercase version of
the current byte.
2015-01-28 21:42:05 +01:00
Mathias Gumz
77f0963d00 Increase verbosity of 'configure' summary
After 'configure' finishes it states just CXXFLAGS and LIBS. But these are
actually not complete, the build system will use much more later on. Problems
with the build system are easier to address if 'configure' is a little bit
more verbose.
2015-01-28 20:36:55 +01:00
Mathias Gumz
aa39a1a666 Fix mishandled [maxmized] statement in apps file
In f64727ca I removed one 'else' too much. As a result all [maximized] lines
were mapped to MAX_NONE. Fixed.

The rest of the commit is just some cosmetic to reduce indentation and shorten
function names, easier to read.
2015-01-28 20:28:58 +01:00
Mathias Gumz
03ce82a473 Feature: typeahead in menu matches text anywhere
This commit implements a tweak to the typeahead feature already existent in
fluxbox: If the user opens up a menu and starts typing, fluxbox tries to
detect matching menu items and makes them available for quick selection.
The typed pattern is now search also in the middle of the text.

I opted to strip down the code quite a bit and remove complexity by throwing
out FbTk::TypeAhead and FbTk::SearchResult because I do not see the need for a
general solution when the only use case for such a feature is in fluxbox'
menus. FbTk::ITypeAheadable shrunk down to 2 functions; the whole file might
be combined with the code that implements FbTk::Menu::TypeSearch.
FbTk::Menu::setIndex() and related code is also gone: the position of each
menu item is defined by it's position in the items container. This reduces the
mount of book keeping fluxbox has to do. Fewer moving parts is a good thing.

It's possible that users start to complaint because they expect their
typed pattern to match only at the beginning of the text OR that some
demand other tweaks. We will see.

This commit also fixes a regression introduced by 8387742c. The bug made
the menu vanish.
2015-01-28 16:02:59 +01:00
Daniel Campbell
fc245408d6 Fix printf bug in fluxbox-generate_menu 2015-01-25 13:37:31 +01:00
Mathias Gumz
6721c7c70b Add 'lxterminal' and 'geany' to fbgm
Implements #305 (feature request "Recognize lxterminal and geany
(fluxbox-generate_menu)"
2015-01-24 19:17:02 +01:00
Mathias Gumz
e650b34d20 Update Changelog; prepare 1.3.7 2015-01-24 10:49:19 +01:00
Mathias Gumz
75cf246de5 Cleanup 2015-01-24 10:36:00 +01:00
Mathias Gumz
e0c5436f44 Improve code documentation
'width' might imply something 'aligned horizontally'. The first parameter
of maxTextLength() is given in pixels. To avoid confusion, the name of
the parameter is changed.

The comment before the binary search reflects better why and what we
need to do.
2015-01-24 10:35:21 +01:00
Mathias Gumz
00cca1284f Fix text rendering in rotated TextButtons
A vertically rotated text should be checked against the height of the
button, not the width of it.

Fixes #1119 ("Toolbar cannot display full text of workspace/​clock/​window
title.")
2015-01-24 10:31:38 +01:00
Mathias Gumz
67c31b49bd Refactor Toolbar.cc, less noise 2015-01-23 23:38:34 +01:00
Mathias Gumz
63d9d695be Refactor FbWinFrame
FbWinFrame is now simpler to read due to less overall noise.
2015-01-23 15:23:02 +01:00
Mathias Gumz
0d8a3dfb6b Cosmetic 2015-01-23 15:17:02 +01:00
Mathias Gumz
73858632f3 Update manpage to reflect -no-slit and -no-toolbar 2015-01-22 16:41:19 +01:00
Mathias Gumz
bf3714e124 Update translations to reflect new flags via -h 2015-01-22 16:30:57 +01:00
Mathias Gumz
ab2eef4937 Add -no-slit and -no-toolbar flags
Sometimes fluxbox is used as a component of a desktop environment (
e.g., the "Lumina Desktop"). It's easier and more stable for this kind
of "users" to disable the toolbar or the slit alltogether. Why not
configure these features out? Because then they would need 2 installations
of fluxbox: One without the slit and the toolbar (and perhaps other
components) and one with them.

This implements feature request #314, at least partially.

This commit also looks bigger than it actually is: I refactored and cleaned
up classes Fluxbox and BScreen.
2015-01-22 16:28:53 +01:00
Mathias Gumz
3cda1099e2 Prepare 1.3.7 2015-01-22 10:50:02 +01:00
Mathias Gumz
6fc392fb64 Remove 'always true' condition 2015-01-22 10:14:59 +01:00
Mathias Gumz
c0e5d1c7a3 Fix broken _NET_REQUEST_FRAME_EXTENTS support
There was a subtle flaw in the way fluxbox detects to which BScreen a
given Window belongs: We have to compare the RootWindow of the given
Window against the RootWindow of each BScreen.

That underlying flaw made _NET_REQUEST_FRAME_EXTENTS fail: the code path
needs a valid BScreen for the given window, otherwise we return early.

Closes #1121.
2015-01-22 10:14:12 +01:00
Mathias Gumz
5428edf3da Fix removing windows from icon list
std::remove_if() removes an item from a container and returns a
past-the-end iterator ... which equals m_icon_list.end(). As a result
the check

    if (erase_it != m_icon_list.end()) {
        iconList().erase(erase_it);
        iconListSig().emit(*this);
    }

will never succeed and thus the iconListSig() will never be emitted.
2015-01-22 10:09:08 +01:00
Mathias Gumz
1ec4fb6b6c Cosmetic 2015-01-22 09:45:35 +01:00
Mathias Gumz
6d749d6f1a Cosmetic 2015-01-21 22:16:38 +01:00
Mathias Gumz
e2dbdeeb2e Fix segfault on shutdown
There was a problem deep within how the menus were connected and when and
what gets deleted. It was clearly related to a menu which was kind of
global. In order to better understand the code flow I eliminated the
ExtraMenu code: it was used only to get the Remember-Menu into the
Window-Menu. Instead of having a singleton of the Remember-Menu and fight
against the shaky interconnections we just create a new one on demand
and delete when the menu gets deleted. Looks like this fixes the problem.

The menu code needs more love anyway.

Closes #1118
2015-01-21 22:16:19 +01:00
Mathias Gumz
145cf94ea6 Refactor: bundle related members together
Also: try to avoid unsigned/signed problems in drawing code.
2015-01-21 21:59:42 +01:00
Mathias Gumz
f64727caff Cosmetic: less code bloat 2015-01-21 21:54:30 +01:00
Mathias Gumz
dae7fca7cb Fix potential memory leak
If allocation of I2 does not succeed, we need to free I1.

Closes #1120
2015-01-21 21:53:00 +01:00
Mathias Gumz
980ab5e3f5 Fix behavior for autorepeat keys
This reverts 58e09b7190 after having regressions
and bug reports in regards to autorepeated key events are not working anymore.

So, the problem with the lost keypress after the workspace change is still
open but at least the behavior for other folks is as it was. Since 58e09b7190
seems to be corelated to "auto repeat" keys it might indicate the problem
which 58e09b7190 "fixed". We will see.

Fixes #1115.
2015-01-21 10:06:01 +01:00
Mathias Gumz
8e92ad53e0 Minor cosmetics 2015-01-21 10:02:38 +01:00
Mathias Gumz
2b70480b97 Fix compile errors with clang 2015-01-21 09:53:54 +01:00
Mathias Gumz
d3c960da99 Remove unused variable 2015-01-21 09:53:16 +01:00
Mathias Gumz
382d7be6f6 Fix compile error: old g++ does not like c-like struct initialization 2015-01-19 08:29:48 +01:00
Mathias Gumz
11566bbb83 Fix uncommited change (see 8387742c8...) 2015-01-16 13:08:53 +01:00
Mathias Gumz
5ede399d4d Fix casting issues 2015-01-16 10:52:38 +01:00
Mathias Gumz
772ec14595 Fix uninitialized variables; cosmetics
Note: I expect only modern compilers will hit the source of fluxbox. It
seems futile to guard stdlib headers while demanding <algorithm> etc. This
should trim down the noise in the source quite a bit.
2015-01-16 10:52:00 +01:00
Mathias Gumz
e37cad714c Avoid modulo 0
Coverity pointed out that 'size' might be 0 (even if the 'find()' would
detect this). This commit fixes this and avoids entering 'find()' at
all.
2015-01-16 10:47:01 +01:00
Mathias Gumz
ad8e6da8ef Make coverity happy
Coverity complaints about 'isdigit(whole_keyfile[pos])' is changing the
validity of 'keyfile' (which itself is just a copy of whole_keyfile.c_str()).

This might be a valid claim, it might be not. By using the 'keyfile'
variable we make Coverity happy and achieve the same behavior.
2015-01-16 10:45:39 +01:00
Mathias Gumz
a65e9c686e Fix semantic errors (wrong variable names etc)
Uncovered by coverity-scan.
2015-01-16 10:38:32 +01:00
Mathias Gumz
df996370d0 Fix leak in ClientPatternTestCmd
Coverity-scan points to the leaking ClientPattern. The rest is just
cosmetics.
2015-01-16 10:36:14 +01:00
Mathias Gumz
b30438c311 Refactor: bundle xinerama-info together, simpler code
Part of this massive looking but simple rather simple change is a the way we
check for active Xinerama: XineramaIsActive() was used before. The docs for
XineramaQueryScreens() state that

    XineramaQueryScreens() returns NULL and sets number to
    0 if Xinerama is not active.

Sold.
2015-01-16 08:45:11 +01:00
Mathias Gumz
6d5781ce71 Refactor: move some menu-creation functions to MenuCreator
Another patch to trim down the code that needs to be part of BScreen
2015-01-16 08:39:05 +01:00