summaryrefslogtreecommitdiff
path: root/mcwm.c
AgeCommit message (Collapse)Author
2011-11-17Rewrote ConfigureRequest handling. Don't obey window moves notMichael Cardell Widerkrantz
initiated by user. Always fit window on physical screen.
2011-11-17topright didn't consider start of physical screen. Only worked onMichael Cardell Widerkrantz
screen 1.
2011-11-17-b no longer boolean. Now sets border width in number of pixels.Michael Cardell Widerkrantz
2011-08-15Don't try to follow an empty monlist (use of NULL pointer!).Michael Cardell Widerkrantz
2011-08-15getopt() returns int, you moron!Michael Cardell Widerkrantz
2011-08-12It was still possible to map a window on coordinates outside physicalMichael Cardell Widerkrantz
screens. Now hopefully fixed, if not perfectly: If a window isn't bound to any physical screen it will be bound in newwin() to the first screen mcwm knows about. In fitonscreen() I forgot to check for the case where window coordinates are larger than the screen's.
2011-07-26Warp to middle of window instead of corner when tabbing. Makes itMichael Cardell Widerkrantz
easier if you want to paste something with middle button without having to move the pointer to get pointer focus first.
2011-07-26Removed if 0 comment with struct information.Michael Cardell Widerkrantz
2011-07-24mon_width and mon_x are not used when maximizing vertically. Removed.Michael Cardell Widerkrantz
2011-07-21Use the X server's Save Set to store the windows we know about. ThisMichael Cardell Widerkrantz
means they will be get automatically mapped and reparented if mcwm exits even if it crashes. Simplified cleanup() to reflect the above change. We still need to change the keyboard focus policy from mcwm's default to follow pointer instead. If mcwm crashes completely before we reach cleanup() this might become a problem. All the windows will be mapped but there won't be a keyboard focus and no way to change it. I don't know how to fix that right now. Don't attempt to catch SIGSEGV. Might be dangerous.
2011-07-20In commit 98d81f75a3e8509e841f9e180e2104e45f6460c5 committed on JunMichael Cardell Widerkrantz
20, 2010, I decided to use pointer hints instead of pointer motion notify to possible speed up things. In commit 381e642a39187f615ba54955ef02d1e2fcf1f95d on Jul 17, 2010, I reverted and wrote: Stop querying for pointer position ourself. Don't use motion hinting anymore and get real coordinates with motion event. See Gajewska and Manasse: "Why X Is Not Our Ideal Window System". Since getting a trackball with high CPI and experiencing how slow moves and resizes suddenly were, especially when decreasing mouse acceleration, this is clearly wrong. The right way *is* to subscribe to just motion hints and request pointer coordinates ourselves.
2011-06-23Use getgeom() in setupwin().Michael Cardell Widerkrantz
Don't use getgeom() when we're done resizing or moving. We already know the geometry of the client window.
2011-06-23Removed unnecessary call to getgeom().Michael Cardell Widerkrantz
2011-06-23When forgetting about a client, forget about it on *all* workspaces itMichael Cardell Widerkrantz
might be on. If fixed, it's now on all of them.
2011-06-23Use freeitem() instead of explicitly freeing from global window list.Michael Cardell Widerkrantz
If a window is unmapped and we are going to forget about it we need to take into consideration if it's currently focused.
2011-06-21arrangewindows() rewritten. We already know the geometry of windowsMichael Cardell Widerkrantz
since we track it all the time now. Only call arrangewindows() when root window changes geometry if we don't have RANDR. Otherwise, we call getrandr() when we get a XCB_RANDR_SCREEN_CHANGE_NOTIFY event. Added comments. When a monitor gets a new mode in an RANDR scenario, we track the x,y position and width,height. If we lose a monitor, we add the windows on that monitor to another monitor.
2011-06-20Defined constant WORKSPACES for number of workspaces instead ofMichael Cardell Widerkrantz
WORKSPACE_MAX and used it consistently. When fixing a window in fixwindow() we now add the window to all workspace window lists except current in which it already should be present. This means fixed windows are always a natural part of the window list. No special treatment means that we don't muck around with the order of the lists when changing workspaces.
2011-06-07Declare all functions static.Michael Cardell Widerkrantz
2011-06-07* New function configurerequest(). Moved ConfigureRequest code to itsMichael Cardell Widerkrantz
own function. In configurerequest(), consider monitor size when changing window coordinates and size. Forgot events() declaration!
2011-06-07No need to get geometry in newwin(). We do that in setupwin().Michael Cardell Widerkrantz
When we get a ConfigureRequest() we mustn't stop if the window is unknown to us. This might be a client that hasn't even tried to map itself yet! Work around it.
2011-06-05Comments.Michael Cardell Widerkrantz
2011-06-04Take output coordinates into consideration when resizing with limits.Michael Cardell Widerkrantz
2011-06-04When we get a ConfigureRequest for coords or size we need to updateMichael Cardell Widerkrantz
the client.
2011-06-01Removed unused active variable.Michael Cardell Widerkrantz
Removed done FIXMEs.
2011-06-01Always set borders again after unmaxing when we move to new screen.Michael Cardell Widerkrantz
Count borders in width and height when fitting on screen. Remove unneccessary getgeom() from topright(). We know the geometry.
2011-06-01Moving to corners must change client's coords.Michael Cardell Widerkrantz
2011-05-31Added at least some RANDR support.Michael Cardell Widerkrantz
Now keeps track of physical monitors in list monlist of struct monitor. Subscribes to a RANDR notification and updates our view of the physical outputs. Two new keys: Mod + , and . to move windows back or forwards on physical screens. Uses new functions prevscreen() and nextscreen(). New functions: - setuprandr(). Initialize RANDR extension. - getrandr(). Get resources from RANDR extenstion. - getoutputs(). Goes through all video outputs and stores them in list. - fitonscreen(). Before mapping a window, make sure it fits on the screen. Rewrote a lot of functions to use this instead of their own code. - movelim(). Move a window with physical screen limits. Rewrote functions to use this. - resizelim(). Resize a window with physical screen limits. Rewrote functions to call this. - findmonitor(). Looks for an output in list by ID. - findmonbycoord(). Ditto but with x,y coordinates. If coords are within an output, we return it. - delmonitor(). Removes output from list. - addmonitor(). Add it. Simplified many functions.
2011-03-29Always work on the currently focused window when moving and resizingMichael Cardell Widerkrantz
and not in the window the mouse cursor happen to be in when the mouse button is pressed. However, just do move and resize if the mouse cursor is inside the window we care about. There's a limit to sloppy focus. It gets confusing and we might lose focus to another window if we allow move and resize *and continue to put the mouse cursor back to where it was when starting, relative to the window*, as we do now. Removed code for special handling of the root window. We don't use it anyway. Extra checks for focuswin == NULL.
2011-03-28Always raise window when fixing it on all workspaces. When movingMichael Cardell Widerkrantz
windows between workspaces, this makes us sure we can find it on the workspace we're going to. Thanks to Simon Friis for noticing.
2011-03-28Removed USERKEY_MOD and KEY_ALT special handling. Now asks X serverMichael Cardell Widerkrantz
for keycodes with MODKEY mask instead and checks for those. Also stops tabbing around not only when MODKEY keys are released, but also when another MODKEY command is pressed.
2011-03-20Check explicitly for key and modifier mappings when remapping theMichael Cardell Widerkrantz
keyboard. We don't want to do anything when mouse buttons have been remapped.
2011-03-20Handle mapping notify and regrab of keys. When implementing this weMichael Cardell Widerkrantz
leaked memory. Noticed that we need to use special free() function for keysyms.
2011-03-08In some cases focuswin isn't NULL but is on another workspace. A bug,Michael Cardell Widerkrantz
but needs to be handled.
2011-03-08Explicitly check for NULL client before trying to configure a window.Michael Cardell Widerkrantz
2011-03-08Add support for Alt-Tabbing to the last focused window.Michael Cardell Widerkrantz
2011-02-22Simplify focusnext(). We already have a pointer to our place in theMichael Cardell Widerkrantz
wslist in struct client. Use it! Don't go through the list looking for our data.
2011-02-19Check if geometry really changed before re-arranging windows. If itMichael Cardell Widerkrantz
didn't, do nothing.
2011-02-19Whitespace.Michael Cardell Widerkrantz
2011-02-19Reset per window max state when physical screens change. Now uses aMichael Cardell Widerkrantz
winlist instead of asking the X server for all windows. Leave x coord alone when toggling vertmax.
2011-02-19Spelling in comment.Michael Cardell Widerkrantz
2011-02-19Also grab all keys + SHIFTMOD.Michael Cardell Widerkrantz
2011-02-19Specifically grab the keycodes we bind.Michael Cardell Widerkrantz
2010-11-18Initialize mode_x and mode_y. Not really necessary, but the compilerMichael Cardell Widerkrantz
complained. Added explicit check for mode equals 0 on button release and break immedietely. Easier to read. Added some comments.
2010-11-01Forgot some ifdeffed out code. Removed it.Michael Cardell Widerkrantz
2010-11-01Every client now remembers its place in each workspace window list.Michael Cardell Widerkrantz
See struct client's wsitem[] array. We use this to be able to free a window from a workspace window list without having to traverse all items in all workspace lists. This is stored as an array in the client because a window should be able to occupy several workspaces simultaneously. This also made it possible to clean up changing workspaces. Also added early breaks in focusnext().
2010-09-13Added delete window functionality. This is a patch from ChristianMichael Cardell Widerkrantz
Neukirchen, chneukirchen at the domain gmail.com. I only changed the default key and moved a flush.
2010-08-23If US_POSITION flag is set in WM_NORMAL_HINT, we obey the coordinatesMichael Cardell Widerkrantz
in the window geometry.
2010-08-10Don't raise window on keyboard focus unless it's really occluded byMichael Cardell Widerkrantz
some other window. If we don't find any window to focus on, focus first in list, whatever it is.
2010-08-04Stop already known clients trying to map themselves onto the currentMichael Cardell Widerkrantz
workspace.
2010-08-03If we don't have a focused window at the end of a resize or move,Michael Cardell Widerkrantz
remember to ungrab the pointer and reset the mode! We *do* need EnterNotify events with mode Ungrab! Users might do strange things, like not letting go of a mouse button or a grabbed key until they have entered a window, and we still want to change focus if they do.