every other window manager since twm.
The event layer is very nice, very shiny, very flexible, and very much
underutilised. We don't need any of those shiny features so it's
probably better to earn ourselves 1k smaller text size instead.
ok todd@, okan@
using Xft(3), use it to select the font color as well instead of trying
to build one; properly allocate and free colors at-will, e.g. we now
have configurable colors.
feedback and ok's todd@ and oga@
display and moves it to another group. useful with the recently added
"grouponly" function, giving the ability to use groups as simple
virtual desktops (similar to e.g. xmonad, dwm and scrotwm).
this doesn't have default keyboard bindings; cwmrc(5) now shows how
you could use these functions (use M-1...9 for grouponly1...9 and
MS-1...9 for movetogroup1...9 to emulate the default dwm bindings).
ok oga@
you change to a different group and the mouse isn't over a window; previously
the border of the previously active window was highlighted but it didn't
actually have focus.
reads ok to oga@.
This works like the group select binding, but hides all other groups.
So, the people who've been complaining that they don't get "virtual
desktops" in cwm may want to try this out in cwmrc (from memory, untested):
---
#cwmrc
# add new windows to the current group
set sticky
# automatically sticky windows. xclock for now.
# to make more windows sticky use group_toggle to unset their group
autogroup 0 xclock
# make the group selection keys hide other groups, emulate virtual desktops
bind CM-1 grouponly1
bind CM-2 grouponly2
bind CM-3 grouponly3
bind CM-4 grouponly4
bind CM-5 grouponly5
bind CM-6 grouponly6
bind CM-7 grouponly7
bind CM-8 grouponly8
bind CM-9 grouponly9
---
mostly by sthen, tweaks from me.
ok todd@, "if it works i'm ok with it" okan@, ok sthen@
your group state. Fix this up by using an X Atom (_CWM_GRP) to store the
name of the group that we're using (the name, not the number is because
at one point we may make the group numbers dynamic). I've been talking
about this since c2k8. so CM-w means you keep all of your windows grouped
properly.
ok okan@, todd@
Do this instead of querying for them every time we use them. This
removes an XXX that has been in there since time began. This will become
more important as we move towards supporting netwm.
ok todd@, okan@.
times you'd end up losing clients (thinking they had gone away).
From the ICCCM (which should not be read without a stiff drink in hand,
I made this mistake so you don't have to): to request a window to be
withdrawn one should send a synthetic UnmapRequest event when iconified.
To request iconification one should just unmap the window. The ICCM
further recommends that the synthetic event should just be taken as a
cue to withdraw, to deal with legacy clients. Taking a hint from this,
rework xev_handle_unmaprequest to correctly detect these situations. A
Withdrawn window may come back anywhere, even as a subwindow of
something else, so the correct way to handle this state is to forget it
ever existed.
While i'm here, kill a dumb attempt to notice this in client_delete, and
nuke the very unnecessary arguments.
Todd confirmed this fixes the `race'.
ok todd@, ok ok okan@
to push attributes around, so things get a lot simplier, while fixing a
few issues in the meantime; original suggestion by Edd Barrett many many
moons ago.
annoying window placement and race, found in c2k8 by todd, fix by oga!
lots of feedback from todd and oga - thanks!
"commit that bad boy" oga@
The behaviour until now was to ask X for the windows name (which is
malloced) then drop that on the floor and do nothing with it. Skip this
foolery and just skip the window. I don't believe I never noticed this before!
"you can has ok" okan@
- properly name, place and static private functions.
- move function which finds the xinerama screen for a coordinate to
a more appropriate place while altering its semantics to match others.
- tiny bit of style.
ok oga@
- merge grab_drag() into mousefunc_window_move().
- properly name, proto and static private functions.
- since we already do XMoveResizeWindow() and XMoveWindow() in (now)
mousefunc_window_resize() and mousefunc_window_move() respectively,
client_resize() and client_move() calls are unnecessary.
ok oga@
shouldn't get that signal), and this causes problems for our children
since they inherit the ignore.
Pointed out by Jacek Masiulani in pr 6010; thanks!
reconfiguration events and change our sizes depending on that. We also detect
the xinerama screens for maximize, vertmaximize and initial window placement.
This could be improved by automatically resizing maximized windows when
the screen resolution changes and by moving windows that would be hidden
into visible space. Said changes will come shortly.
Tested by many. matthieu@ didn't oppose.
Implement a handler for the MappingEvent, meaning that the keymap has changed.
When this happens, ungrab all bindings, update the map, and regrab.
Fixes the problem where some keybindings wouldn't work under non us or
uk keymaps (especially the .fr map, it seems). Issue noticed by
ajacoutot@, ratchov@, and a few people on misc. Based on an initial diff
from ratchov@.
ok okan.
add conf_grab() and conf_ungrab, and use them in the keybinding manipulation
functions to {,un}grab the binding for all screens we have defined.
the lovely little ordering problem comes in here, since when we parse
the config initially Screenq is empty, so regrab after we fill the
queue, hopefully later reordering will remove this little need and there
will be much rejoicing.
ok okan.
checking the X config, and x_setup to set up the screens.
There's an ordering problem that means that some of this init needs to
come after the config is parsed, the rest should ideally happen before
though. This is a rough split, it will be refined later. Again, needed
for an upcoming change.
ok okan.
happens there's no way to get it back. Also, stop resize making a
windows size negative or zero. X does not like that one bit.
Diff from Martynas. Ok okan@.
The problem that's causing us to lose windows is that rapid hiding and
unhiding causes a backlog of X events, so we lose track of client state,
and delete cc->pwin when we should not. A proper fix will arrive when it's been
worked out.
you do this is ugly. Also remove mod2 (numlock) and mod3 (odd) from the
list of keybinding modifiers. They don't make much sense here.
based on a heavily modified diff from Martynas.
ok okan.
binding, this expose another issue that's still being debugged.
Issue pointed out by Dan Harnett, thanks!
While i'm here KNF and rework the logic to not be ass-backwards.
ok okan.
- if no config file, continue silently and apply defaults
- if config file, parse and move on
- if config file specified but not found, error out
ok oga@
found by (among others) todd@ when you have a lot of clients and do something
that maps and umaps a lot of windows fast.
Debugged with aid of gdb, todd, okan and NULL pointers in a pizza place in
edmonton while waiting an inordinately long time for food.
ok okan@, todd@
search dialogues to be manipulated with the mouse, too. It also allows
me to shrink the codebase further by killing grab_menu().
One known issue with highlighting the first entry in a search dialogue,
that'll be fixed soonish.
ok okan@, tested by Edd Barrett and todd@.
function menu_filter(). The plan is to eventually merge in grab_menu too.
Shrinks the code a fair bit.
Also, change XMaskEvent for XWindowEvent to prevent getting exposes for other
windows. This is particuarly noticable on slow machines with a LOT of xterms
(todd, you're an odd man).
ok okan@, todd@.
case-insensitive. since this was the only use of normalizing input,
simplify as well.
allows one to exec with mixed case unmatched commands.
"works for me" oga@
mru getting the order messed up when gvim/xpdf et all steal key events.
While i'm here, change the logic in client_cyclenext() to use break instead
of goto, it's nicer that way.
Thirdly, instead of two different kbfuncs, just use the one and a flag.
"put your cycle diff in so I can pkg_delete gvim" okan@
idea for the
"slightly-less-abhorrent-hack-but-a-hack-nonetheless-TM" from oga@
grab and ungrab the keyboard to get around some silly X apps that like
stealing events
ok oga@
1) it used TAILQ_FOREACH() when it's removing entrys from the list, this
is bad.
2) We didn't free key, so there was a small memleak too.
also rework conf_bindname's logic slightly to be more simple.
ok okan@
Since it's only used once just put the (simplified) logic into
conf_client() instead. This means we can kill an enum and
CONF_IGNORECASE, too.
ok okan@
corresponds directly to the static list of group names. Just use the
static list and stop strdup()ing a new version for the context struct.
Since that never got freed this also fixes a small memleak.
Kill some unused variables while i'm here.
ok okan@
Diff mostly from Edd Barrett, with some minor changes from me.
Unfortunately the issue where apps like gvim and xpdf are stealing
keyrelease events causing the ordering to be messed up, but this is a
lot better. A fix for the aforementioned issue shall be forthcoming,
once a good one's been found.
ok okan@, also tested by todd@
there make u_spawn use exec_wm (renamed to u_exec) for it's execution to
remove duplicated code.
This means constructs like this work in .cwmrc:
bind CM-t "ssh -Y 192.168.1.2 \"xterm -e top\""
or alternatively:
bind CM-t "ssh -Y 192.168.1.2 'xterm -e top'"
"in it goes" okan@.
of the screen where an application won't be {,vert}maximized over. used for
placing a statusbar or something like xclock.
Patch from Edd Barrett, with input from myself and okan. Thanks!
ok okan@.
fix use-after-free that broke exec's path getting stuff.
``paths'' isn't used anymore, but pointers to within that array are still
used in the next loop. delay freeing it until after then.
If a window is vertically maximized, then resized, before the MAXIMIZED
flag wasn't removed, now it is. so doing a resize then does the right
thing.
Also, separate flags are needed for vertical and normal maximziation,
else when you do vertical-maximize, followed by maximize, the window
returns to it's original size.
ok simon@, okan@
found in other places of the tree. Remove sticky and font commandline
options and add another one for alternative config locations.
Split off cwmrc(5) from cwm(1), nuke #ifdef __OpenBSD__ while there.
tested by various kind people, feedback from oga@ and okan@ - thanks!
ok oga@, jasper@, okan@
I've yet to speak to anyone who uses it, so just kill it.
You can still add/remove from groups using the mouse binding. Groups
may get a re-work sometime soon if i have a stroke of genius.
knocks about 4k off the i386 binary for me.
ok okan@, todd@.
code would always assume that the number of windows to switch to was
three if there were more windows hidden. Check for CLIENT_HIDDEN when we
count. Now it counts correctly.
ok simon@.
this prevents the issue where you close or hide a window, and end up
with no client selected (you're on the root window). When that happened
alt-tab failed. This, however, exposed to me a few more issues in the
alt-tabbing code:
-the code to detect how many lines we need looks bogus (you always get
three)
-alt-tabbing when everything is hidden always reawakes the most recent
window.
Fixes for these will be forthcoming.
ok simon@.
Also, exec_wm() currenty err()s out if something failed with the exec,
killing the currently running wm. This is bad. Replace the err() with
warn() instead.
from Gleydson Soares, thanks!
and the manpage to reflect this. While i'm here remove the note in todo
about cleaning up the menu code; it's been done.
ok ian@, okan@ (he also provided most of the manpage rework)
full description of changes:
-remove fontlist, and all associated structures/calls, it's not needed.
this also removes any doubt about leftover 9wm code (the list was
borrowed from it). Since cwm now uses Xft for everything, the legacy
font handling is just not needed.
-add /* FALLTHROUGH */ comments into grab_{label,menu}. I actually
didn't intend grab_menu to be a fallthrough, but it actually works quite
well there, so remove the extra rectangle drawing. I love it when that
happens.
-remove a couple of unused prototypes that were obviously missed
before.
-remove a bunch of commented out or if 0ed out code. It doesn't look to
be coming back anytime soon.
-several functions returned an int, but this was never checked. most of
them only failed if they failed to grab the pointer (thus the internal
state didn't change), so just make them void and return early if this is
the case.
-remove several unused functions and some useless variables.
knocks something like 200bytes off the stripped binary size for me.
ok marc@, tested by several others.
This should work functionally the same, with a few simplifications.
Changes:
- we don't care if you're holding another button when you release the
menu key if you don't want to select anything, move off the menu.
- remove the hysteresis from the menu selection (before you had to move
more than three pixels onto a new menu entry before it selected it)
- simplify a lot of the selection code
- kill dead code.
- do what the XXX comment said and cache the screensize (i may tweak
this later).
As far as I can tell, the only code remaining from 9wm is the list of
fonts in calmwm.c. Others appear to concur.
ok marc@, looked over and tested by a few others. Reminders from okan@.
files, and replace them with the actual ISC license.
- add license to the manpage (it was lacking before)
- correct license statement in the README
Permission given by Marius (copyright holder):
"1. please replace with the standard ISC license
2. you may add the ISC license to the man page
3. feel free to replace the information in the README as well"
and Dros (copyright holder for group.c):
"Please switch group.c to the ISC License."
ok ian@
overlap with the new ones, overriding them. Also a new "unmap" keyword
in binding definitions now unmaps a binding without adding a new one.
This seriously shrinks the ~/.calmwm/.keys directory of anyone who defines
their own bindings whilst wanting some of the defaults.
Looked over, liked and ok todd@
_PATH_DEFPATH
add an "ssh-to" dialog which auto-completes based on contents of
~/.ssh/known_hosts (M-.)
testing and eyeballing by Simon Kuhnle <simonkuhnle at web.de>, todd@, pedro@
mk@ and David Cathcart <david at cathcart.cx>
ok todd@