Commit graph

4042 commits

Author SHA1 Message Date
Mathias Gumz
e0c440f599 pushed to early ... 2010-09-19 08:48:35 +02:00
Mathias Gumz
0ef76292c5 changed the way we create the '~/.fluxbox' directory to avoid race conditions
before bringing up the first instance of Fluxbox we prepare the directory
and the files it needs. if the config version of exiting files is lower
than what we expect, we upgrade the config files. after that we bring
up Fluxbox.

the old way was problematic because setupConfigFiles() calls
'fluxbox-update_configs' which does its job in the background while
fluxbox continues to boot. 'fluxbox-update_configs' sends a USR2 signal
to the booting fluxbox (it might even be finished, no one knows) which
triggers 'load_rc()' which triggered 'setupConfigFiles()' again which
might trigger 'fluxbox-update_configs' again (on my machine
'fluxbox-update_configs' was called 3 times and left a pretty crippled
'keys' file when it was done).

bootstrapping before bringing up fluxbox resolves the issue. as a bonus:
no need to send USR2 to fluxbox to reload the config file because fluxbox
has not even tried to read it yet.
2010-09-18 17:51:30 +02:00
Mathias Gumz
c9c741c88d cosmetic 2010-09-18 17:27:28 +02:00
Mathias Gumz
9cf312fc9d recovered lost change from 041d586972
got lost in d3eabeb805 somehow
2010-09-18 09:26:05 +02:00
Mathias Gumz
87b45bd0d1 bugfix: avoid naive use of 'putenv' by providing 'FbTk::App::setenv()'
to quote from 'man putenv':

   The string pointed to by string becomes part of the environment,
   so altering the string changes the environment.

so, using putenv like

   {
      std::string foo("FOO=bar");
      putenv(foo.c_str());
   }

is wrong and leads to a potentially corrupted environment. valgrind
complaint correctly.

FbTk::App seems to be the appropriate place to hold '::seten()'
because it alters the environment of the application.
2010-09-17 23:43:24 +02:00
Mathias Gumz
f3ad09c4ce missing initializations
'valgrind' reported a lot of code branches based upon uninitialized
variables. some are not identified yet.
2010-09-17 23:34:03 +02:00
Mathias Gumz
87cffef7f5 request explicitly as many elements for the gradient tables as we need
the next step is to not use 'unsigned int' and then only store 'chars'
in it, maybe even using RGBA data instead of separated arrays for
r, g and b.
2010-09-17 23:32:02 +02:00
Mathias Gumz
786eef6e39 bugfix: forgot to resize 'pixels' before putting values into it (facepalm) 2010-09-17 23:26:56 +02:00
John K Pate
f1f7bebf37 added 'ArrangeWindowsVertical' to actions 2010-09-17 16:22:33 +02:00
Mathias Gumz
d3eabeb805 moved commandline parsing to its own function 2010-09-17 15:51:16 +02:00
Mathias Gumz
e84c64f7be lots of code cleanup, reordering, trimming public API, bugfixes
## FbTk/ImageControl.hh:

* moved 'getSqrt()' over to TextureRender.cc because it is used only there
* removed unused members m_root_window
* use std::vector<> for colors and for the gradient buffers.

## FbTk/ImageControl.cc:

* fixed memory leak in '~ImageControl', 'pixels' where not deleted[]
  at all. switched to std::vector, non-issue anymore.
* moved identical code into functions 'allocateUnallocatedColors', 'initColortables'

## FbTk/TextureRenderer:

* removed 'from', 'to', 'interlaced' from class, only used in
  'renderGradient()' and are actually part of the given
  texture.
* removed 'xtable', 'ytable' from class, only used in
  'renderGradient()'
* removed 'colors' from the class, is part of 'control'
* moved render actions (invert, bevel1, bevel2, *gradient), they need more
  love but for now this is sufficient
2010-09-17 15:34:12 +02:00
Mathias Gumz
603b36a2cc use FbTk::API to reduce code duplication 2010-09-17 14:46:01 +02:00
Mathias Gumz
041d586972 code simplification by reducing if-else hell
a lot of the parsing-related and menu-building stuff is just plain
stupid boiler plate code. putting the data into a const array
separates the boiler plate data from the actual code.
2010-09-17 14:44:58 +02:00
Mathias Gumz
0b1f160830 use hardcoded array for hardcoded placement menu defaults 2010-09-15 13:01:46 +02:00
Mathias Gumz
61bf564718 removed useless code
'tools' is transformed to lower case some lines above,
'm_tools_ is a copy of the lower cased 'tools'.
2010-09-15 12:44:14 +02:00
Mathias Gumz
0beda162d4 code deduplication by using <algorithm> and FbTk/STLUtil.hh 2010-09-15 12:43:30 +02:00
Mathias Gumz
12e1ef7826 code deduplication by using <algorithm> and FbTk/STLUtil.hh 2010-09-15 02:07:09 +02:00
Mathias Gumz
ba316aa18a code cleanup, missing commit for 2b62cf9733 2010-09-15 01:27:27 +02:00
Mathias Gumz
52f614b598 bugfix: 'reset' nr_shapes to '0' after last instance of 'Shape' 2010-09-15 01:23:56 +02:00
Mathias Gumz
2b62cf9733 cleanup and code deduplication
* ClientPattern.cc: make compiler happy (complaints about XPROP not handled in switch)
* FbTk/FbPixmap.cc FbTk/StringUtil.cc: signed vs unsigned
* FbTk/FbString.cc: missing return
* WinClient.cc: create atoms only once; use helper function
* Window.cc: use a helper function
2010-09-15 01:22:01 +02:00
Mathias Gumz
c6047e9eba use one array instead of two to hold both 'names' and 'atoms' for the rootwindow 2010-09-14 16:59:05 +02:00
Mathias Gumz
f39bcbd93c bugfix: create the corner pixmaps only once per screen
for each window (windows, menue etc) the initCorners() function of
FbTk/Shape.cc was called (which is ok). On each call the corner pixmaps
(of the Screen the window belongs to) were created and destroyed the
formerly created pixmaps. this is not needed.
2010-09-14 16:58:08 +02:00
Mathias Gumz
75b9a4ed72 bugfix: free the shape-corners on the last used 'Shape'
the global 's_corners' vector was still used on an application shutdown
(including ctrl-c SIGINT). depending on when 's_corners' was created on
the stack this could lead to an exception ('pure virtual called') while
trying to free the 'FbPixmaps' without having a valid
'FbTk::Application::instance()' left.
2010-09-14 16:54:08 +02:00
Mathias Gumz
36893ac7f9 bugfix: small typo in last cleanup prevented loading workspace names 2010-09-14 12:24:20 +02:00
Mathias Gumz
b10d58588a cosmetic code cleaning
* use FbTk::StringUtil::number2String() to avoid 'sprintf'
* use FbTk::Util::clamp()
* use FbTk::STLUtil::destroyAndClear()
* whitespaces
2010-09-13 22:07:10 +02:00
Mathias Gumz
deb6a1ebf4 code simplification
we do not need a std::map just to store an attribute on an AtomHandler,
it makes housekeeping just more annoying.
2010-09-13 22:04:24 +02:00
Mathias Gumz
f6af17aa58 code simplification 2010-09-13 21:59:09 +02:00
Mathias Gumz
24e4e98dbe updated config version to '13' and adjusted 'fluxbox-update_configs' accordingly
our users should migrate seamlessly to our new windows-cycling behaviour
without losing their current way of doing things. so, 'fluxbox-update_configs'
tries its best to add '(workspace=[current])' wherever it looks like a valid
place for it. such changed lines are marked by '!! FBCV13' at the end and can
be easily spotted in case the updater got it wrong.

addtional changes:

* added '-check' to 'fluxbox-update_configs' to check the version number in
  '~/.fluxbox/init' vs. the version number of 'fluxbox-update_configs'

* moved the update-code for each version into its own function, easier
  housekeeping
2010-09-11 22:04:15 +02:00
Mathias Gumz
51f054e777 added '(workspace=[current])' to our default keys
commit 882a50fe1d removed the hardcoded limit to
cycle to windows on other workspaces, though it was and IS a good default
behaviour. if users do not want this (they want to cycle to windows on other
workspaces), they should explicitly avoid '(workspace=[current])' in their
keysfile.
2010-09-11 21:53:55 +02:00
Mathias Gumz
faa4c97888 added 'SetXProp' action and (@PROP=foo) clientpattern
these two allow 'tagging' of arbitrary windows with 'tags' (or 'labels'). such 'tagged' windows can then be used in ':NextWindow (@PROP=foo)' commands to quickly cycle through a subset of available windows.
since the 'tags' are applied as real xproperties to a window they survive a restart of fluxbox or even another windowmanager. the user can also set the tags by using xprop(1).

the next step regarding the UI should be to visualize the tags of a window.
2010-09-11 17:09:07 +02:00
Mathias Gumz
4e2c7e2167 moved helper struct TextPropPtr into anonymous namespace 2010-09-10 16:36:17 +02:00
Mathias Gumz
a6ed9498cc code cleanup
* moved code from public API to internals
* avoid code duplication ( while(!m_terms.empty()) ...)
* cosmetic '(*it)->' vs 'term.'
2010-09-10 16:35:49 +02:00
Mathias Gumz
882a50fe1d removed hardcoded limitation to cycle/focus windows on all workspaces
reasons:

* fixes #1732115, allows to have chatwindows on another workspaces and reach them via :NextWindow (urgent=yes)
* old behavior can be achieve by using the (workspace=[current]) pattern
2010-09-10 13:32:47 +02:00
Mathias Gumz
8a7c117153 disabled potentially dead code 2010-09-09 23:24:47 +02:00
Mathias Gumz
ecdaba2874 simpler code 2010-09-09 23:24:27 +02:00
Mathias Gumz
ffd5f28072 removed dead code 2010-09-09 23:23:52 +02:00
Mathias Gumz
7fdb0676a7 bugfix: initialize the Shape of a menu AFTER we created the window for the menu
on startup a lot of 'Fluxbox: X Error: BadDrawable (invalid Pixmap ...)' occured.
this was caused by using an empty 'Window' to create the shape.
2010-09-09 23:23:33 +02:00
Mathias Gumz
2b9a38cba5 minor cleanup 2010-09-09 15:33:34 +02:00
Mathias Gumz
534db1d409 reduced 'switch/case' and 'else if' hell a little bit 2010-09-09 15:33:12 +02:00
Mathias Gumz
77f39235cf added FbTk::Util::clamp() and simplified related code 2010-09-09 15:31:54 +02:00
Mathias Gumz
1657374940 use FbTk apis instead of raw xlib calls 2010-09-09 12:48:19 +02:00
Mathias Gumz
e685117941 simpler to use FbTk/Timer api 2010-09-09 12:47:38 +02:00
Mathias Gumz
82d0de9ef4 cosmetic 2010-09-08 22:31:41 +02:00
Mathias Gumz
8a08110f19 simpler way of expressing 'Singleton' for 'FbAtoms' 2010-09-08 22:09:06 +02:00
Mathias Gumz
dc5a105c3e fixed code duplication 2010-09-08 21:52:13 +02:00
Mathias Gumz
7a149626e6 improved 'escapeRememberChars()' routine by traversing the string only once
removed obsolete 'getuint()' function
2010-09-08 21:45:33 +02:00
Mathias Gumz
48cc67965b avoid code duplication 2010-09-08 21:43:38 +02:00
Mathias Gumz
b76be98227 improved extract*Number functions from FbTk/StringUtil.cc 2010-09-08 21:42:48 +02:00
Mathias Gumz
6ecfa0ef3e cosmetic fix: looks like a copyNpaste issue 2010-09-08 20:48:37 +02:00
Mathias Gumz
26c1cd0cee code simplification 2010-09-08 20:48:01 +02:00
Mathias Gumz
f4fab105ff avoid code duplication 2010-09-08 20:18:28 +02:00
Mathias Gumz
64afa48bb3 removed unused code 2010-09-08 20:17:36 +02:00
Mathias Gumz
690d926ac4 introduced FbTk::BidiString
a 'BidiString' holds both the logical content and the visual reordered
version of the content of a string. this helps to reduce the number of
calls to reorder the string before drawing it (as introduced in the patch
from Ken Bloom) and to be more consistent in menus and textboxes (drawing
cursors and underlining text).
2010-09-08 20:17:21 +02:00
Mathias Gumz
1e8fe2bc14 removed redundant if-statement 2010-09-08 11:19:49 +02:00
Mathias Gumz
8feb0b8c83 avoid constructing new strings implicit 2010-09-05 10:49:05 +02:00
Mathias Gumz
83656fc0e8 cosmetic 2010-09-05 10:47:12 +02:00
Mathias Gumz
63f9c8c1a2 reuse temporary memory for reencoding / reordering fribidi-strings 2010-09-05 10:47:01 +02:00
Mathias Gumz
60c92b96f2 added info about 'BIDI' support to 'fluxbox -info' 2010-09-05 08:49:13 +02:00
Ken Bloom
ea98db4140 added support for bidirectional text 2010-09-04 15:01:33 +02:00
Mathias Gumz
b1b2f47e7d minor code simplification 2010-09-04 14:41:39 +02:00
Mathias Gumz
1e9dafdc67 fixed the default 'OnTitlebar Mouse1' actions 2010-09-04 14:41:11 +02:00
Mathias Gumz
b8987fc623 code simplification / deduplication
* parse the string only once for a bunch of chars to check instead of
  starting over again and again from the beginning, created a helper
  function to do this (FbTk::StringUtil::findCharFromAlphabetAfterTrigger)

* put same code into a function (setClockModeLabel())

* use much simpler code to switch between 12h and 24h mode and replace
  the fmt-switches
2010-08-24 17:30:24 +02:00
Mathias Gumz
874eb67297 moved knowledge about '_NET_SYSTEM_TRAY_S' into the 'SystemTray' class 2010-08-23 19:49:47 +02:00
Mathias Gumz
a1385e4018 fixed compiler warning 'comparison between signed and unsigned integer expressions' 2010-08-23 19:44:21 +02:00
Mathias Gumz
e23c2c4d1b reenable clickRaise(), but on any button press if no key-action was found 2010-08-23 10:54:49 +02:00
Mathias Gumz
23f56d108f bugfix: compiler warning 2010-08-22 20:11:59 +02:00
Mathias Gumz
442c651d64 fixed compiler warnings regarding signed/unsigned and () around expressions 2010-08-22 14:44:31 +02:00
Mathias Gumz
bc2b21547b implemented 'ActivateTab' action to (re)allow activation of tabs via mouse 2010-08-20 19:01:25 +02:00
Mathias Gumz
b4e65724ef fixed typo 2010-08-16 18:27:00 +02:00
Jim Ramsay
a3b063292c bugfix: another crash when cleaning up signals
While 769130f51a did fix one issue, it introduced another by changing the
logic related to the new SignalTracker.  The original logic (introduced in
9ad388c5bf) was:
  -> in 'leave(Signal)', only call 'disconnect'
  -> in 'leaveAll()', call 'disconnect' and 'disconnectTracker'
But 769130f51a inverted this, calling 'disconnectTracker' in both cases but
only 'disconnect' in the 'leaveAll()' case, which would leave unattached signals
around after calling 'leave(Signal)'.

This fix not only repairs the logic, but renames the ambiguous 'disconnect'
boolean to something more explicit: 'withTracker'.
2010-07-14 11:36:00 -04:00
Jim Ramsay
37a24132b5 Implement StrictMouseFocus
As noted in the previous commit, StrictMouseFocus now works as advertised:
  Focus follows mouse on every EnterNotify event (except when the "ClientMenu"
  closes or during alt+tab window cycling)
2010-05-28 15:50:15 -04:00
Jim Ramsay
cdbaf5c04d Add new focus model: StrictMouseFocus
This is not actually implemented yet, but from now on, "MouseFocus" means:
  Focus follows mouse only when you are moving the mouse, any EnterNotify events
  caused by non-mouse operations (window closing, keycommands, changing
  desktops) will *not* shift focus

And once fully-implemented, "StrictMouseFocus" will mean:
  Focus follows mouse on every EnterNotify event (except when the "ClientMenu"
  closes or during alt+tab window cycling)
2010-05-28 15:10:28 -04:00
Mathias Gumz
769130f51a bugfix: do not use invalid iterators while looping thru a container which gets destroyed 2010-05-23 15:58:35 +02:00
Mathias Gumz
fbcdd34b22 mostly cosmetic fixes, mainly discovered by 'clang --analyze'
reordering of Resource-related stuff was because of

   "error: explicit specialization of 'getString' after instantiation"

complaints.
2010-05-23 12:25:47 +02:00
Mathias Gumz
ff9c68e247 fixed potential memory leak 2010-05-16 14:25:59 +02:00
Mathias Gumz
17b21635a2 cleanup created corner pixmaps, moved the initCorners() function out of the class 2010-05-16 14:25:36 +02:00
Mathias Gumz
04739b2d1f initialize all member variables, otherwise unclean state in some circumstances
(valgrind complained a lot about ::updateGeometry() accessing uninitialized variables)
2010-05-16 14:24:34 +02:00
Mathias Gumz
b8f9ac6d69 prevent crash if m_keylist is 0
again, i do not know yet, why this could happen.
2010-05-08 19:04:44 +02:00
Mathias Gumz
24cfd54eae cleanup: missing initialization
i ran across problems on a freshly installed ubuntu without
any config files, m_keylist was not initialized, yet unsure why.
2010-05-08 19:03:57 +02:00
Mathias Gumz
bca59851f3 bugfix: crash when cleaning up signals
22fa5f544b was not fixing anything, the real cause is that the
SignalHolder still has a reference to a not existing Tracker.
2010-05-07 09:36:30 +02:00
Mathias Gumz
615e9cec32 compile fix: FD_ZERO (sys/select.h) on solaris wants to use memset(); closes #2997117 2010-05-06 21:19:31 +02:00
Mathias Gumz
5be5edc1e5 bugfix: when maximizing a shaded window, unshade it before 2010-05-06 20:54:44 +02:00
Mathias Gumz
22fa5f544b bugfix: added missing 'virtual' keyword, otherwise fluxbox crashes with 'pure virtual method called' 2010-05-06 20:25:47 +02:00
Mathias Gumz
a443d46117 bugfix: resizing/moving a maximized window via keys do not end maximization state (#2980313) 2010-05-06 20:09:59 +02:00
Mathias Gumz
a2f809f8f2 added little helper function to disable the maximization state of a window while keeping its current position / size 2010-05-06 20:07:56 +02:00
Mathias Gumz
d2a7cc60a2 bugfix: resizing stops _NET_WM_STATE_MAXIMIZED*, so trigger signal to set the properties correct
fixes partly #2980313, resize with keys still does not trigger _NET_WM props to be correct
2010-05-05 22:30:42 +02:00
Mathias Gumz
b43be7144f upgrade CONFIG_VERSION to 11 2010-05-05 22:05:28 +02:00
Mathias Gumz
2c66828341 cosmetic 2010-05-05 08:42:37 +02:00
Mathias Gumz
fbcb0cd7e1 use maximize options for fullscreen as well 2010-05-05 08:42:28 +02:00
Mathias Gumz
a10bab0f7c added OnLeftGrip, OnRightGrip, OnWindowBorder modifiers for keys file
this allows to move some hardcoded keysbindings into the keys file and
makes the code simpler
2010-05-05 08:41:03 +02:00
Mathias Gumz
35f17d22b5 cosmetic 2010-05-01 14:29:41 +02:00
Mathias Gumz
b3361eae02 use new closest head calculation code to place windows when clearing up heads 2010-05-01 14:29:31 +02:00
Mathias Gumz
d6bc8d753e bugfix: moving (the center of) a maximized window out of a xinerama head could result in maximizing it over all heads
the old way of deciding which head to (re)maximize the current window
was to just test if the center of the window is INSIDE which head.

now we calculate the closest head which fixes the problem
2010-05-01 14:27:45 +02:00
Mathias Gumz
583398e491 bugfix: using 'int' on 64bit systems while setting window properties is wrong
using a smaller type ('long' on 64bit is 8 byte, 'int' is 4) results in
strange properties, eg:

  _NET_WM_STATE(ATOM) = _NET_WM_STATE_MAXIMIZED_HORZ, undefined atom # 0x2726130

(when xpropping a maximized xterm). this might cause misbehavior in apps.
2010-04-30 09:03:57 +02:00
Henrik Kinnunen
dd8fcc8b7b Changed title signal in Focusable to new signal system 2010-03-26 18:15:45 +01:00
Henrik Kinnunen
9ad388c5bf Added Tracker interface for SignalHolder.
This is used by SignalTracker so Signals can disconnect from it when
they die.
2010-03-26 18:04:58 +01:00
Henrik Kinnunen
1cae9f22f8 Minor fix for argument reference in MemFunSelectArgImpl 2010-03-26 18:00:23 +01:00
Henrik Kinnunen
5bc782561b Initialize all variables in FbWindow 2010-03-26 17:28:18 +01:00
Henrik Kinnunen
43837f82e1 Added simple stress test in python 2010-03-20 00:29:39 +01:00
Henrik Kinnunen
f150f727b2 Added SelectArg.hh to Makefile.am 2010-03-19 02:32:17 +01:00