Skip to content

Latest commit

 

History

History
26 lines (25 loc) · 5.97 KB

TODO.md

File metadata and controls

26 lines (25 loc) · 5.97 KB

Pull requests for things on the TODO list would be greatly appreciated. Please note that thorough testing should be done before making a PR.

  • Potential memory leak on line 57 of rules.c; strdup() calls should be freed, but for some reason freeing them creates fatal errors
  • ipc_command_window_manual_move() and ipc_command_window_manual_resize() in ipc.c completely ignored monitor bounds; what should happen is the window should be moved to the next monitor over if a window is being moved and exceeds the pixel height or width of the current monitor it is on, and windows that are being resized should not be able to be resized past the current monitors dimensions. In addition to this, if a window is being shrunk downward or to the right during a resize, the window should move one grid unit towards that direction to make it seem to not move during resize.
  • Focus cycling needs to be programmed (custard -- focus next, custard -- focus previous); should focus on the next or previous windows of the same workspace AND monitor
  • Potential for segmentation faults in ipc_command_window_manual_...() methods in ipc.c; an assumption is made that a focused window is a managed window when this is just not always the case. All windows should have window structures made for them (window_t), and there should be a managed attribute that is set to 1 or 0 (unsigned short) if it is to be managed. The manage_window() method in window.c should promptly return if a window is not managed, but should still allocate the memory for an unmanaged window. This will also serve to allow unmanaged windows to be resized. Windows that shouldn't have memory allocated are those that are notifications, docks, or menus of sorts.
  • grids are still incomplete; the end goal is for users to be able to specify different grid settings for different monitors, and potentially maybe even make different grids that could be used in different contexts all together.
  • Workspace switching should be done per monitor; you can have WS 1 open on one monitor and WS 2 open on another.
  • In ipc.c, everytime a configure call is made (ipc_command_wm_configure) a N workspaces are created, where N is the setting for how many workspaces a user wants, without previous workspaces being destroyed or even checking if new ones should be made at all. This is an oversight.
  • Move parse_boolean, parse_unsigned_integer, parse_rgba_color (ipc.c) and regex_match (rules.c) to a helper file of their own.
  • In window.c, much of the code is written incorrectly by xcb standards. Each reply request and cookie call are done together; they should be done at different times. manage_window() does this correctly; each necessary cookie is created at the beginning of the call and used throughout the call as necessary. The rest of the file should do this as well.
  • Fullscreen toggles do not function; these are in handlers.c, event_message_received(). fullscreen() and window() methods should be created in window.c to handle these. fullscreen() should hide the parent window (the decorations, basically) as well as make the actual window as big as the monitor it is one. window() (or perhaps a better name should be put in place) should revert the window to its former state, and make a border_update() call.
  • manage_window() does nothing with splash screen windows (L59); it should center them both horizontally and vertically, set them to not be managed, but still allocate memory for the windows.
  • Settings should eventually be moved from custard.c (L32-L57) to their own file.
  • window.c, ipc.c, rules.c, and grid.c are all in need of refactoring.
  • Better, more user-friendly commands should be used in the IPC. Names should be short but also descriptive of what they do. window.close, window.raise, etc are all really shitty.
  • Various warnings can still be found during compilation of custard; these should all eventually be mitigated. This is assuming standard gcc.
  • Eventually changes to monitor geometries and positions should be handled by custard, and windows in monitors that changed moved and resized accordingly.
  • A seg fault occurrs during the start of custard if a window is open before custard starts. This was just skipped due to lack of time, but was in previous versions, the code could be pulled. Ideally a window would have some calculations done based on its size and position before custard started to try and get it to fit as best as possible to the grid. Windows should also stay on their respective monitors.
  • calls to ipc_command_wm_configure (ipc.c) should eventually try to resize and move windows to fit as best as possible to new grid configurations that the user sends to the IPC. Windows the exceed bounds of the monitor should be moved inwards, unless the window is just too large for the monitor, at which point it should be shrunk.
  • There is an oversight that causes background colors of parent windows for decorations to not change if a window is unfocused; this can be easily seen with transparent windows or windows that have border radii applied to them by their parent process (e.g. chromium with the default chromium bars instead of system bars). The calls for borders are managed in border_update(), window.c.
  • The ability to explicitly send a window to a different workspace is missing; this is the same with sending a window to a different monitor output, but this can be done by exploiting an oversight in which you can apply a geometry change to a window by just moving the mouse cursor to a different monitor.
  • Eventually custard should unlink the socket if the path exists when it tries to initialize; the reason the socket file would exist at start up is if the previous runtime of custard ended with a fatal error that disallowed the window manager from unlinking the path itself.
  • At some point, the window manager should be able to output information to the IPC to the user.
  • Perhaps at a later time, floating windows could be implemented, with a way to switch between floating and tiling through the IPC as well as a window rule.
  • Documentation is in DIRE need of being updated.