about summary refs log tree commit diff
AgeCommit message (Collapse)AuthorFilesLines
2016-07-13 Add/improve some ICCCM/EWMH featuresChris Feng8-131/+310
* exwm-floating.el (exwm-floating--set-allowed-actions) (exwm-floating--set-floating, exwm-floating--unset-floating): Add _NET_WM_ALLOWED_ACTIONS support. * exwm-floating.el (exwm-floating--set-floating) (exwm-floating--unset-floating): Support initial state hint. * exwm.el (exwm--update-hints): Fetch initial state. (exwm--update-state, exwm--on-PropertyNotify): WM_STATE is not intended to be read. * exwm-core.el (exwm-state): * exwm-floating.el (exwm-floating-hide): * exwm-input.el (exwm-input--update-focus): * exwm-layout.el (exwm-layout--set-state) (exwm-layout--iconic-state-p, exwm-layout--show, exwm-layout--hide): * exwm-manage.el (exwm-manage--on-MapRequest): Improve WM_STATE support. * exwm-input.el (exwm-input--set-focus): * exwm-input.el (exwm-input--update-focus) (exwm-input--set-active-window): * exwm.el (exwm--on-ClientMessage): Add _NET_ACTIVE_WINDOW support. * exwm-layout.el (exwm-layout--set-client-list-stacking): Improve _NET_CLIENT_LIST_STACKING support. * exwm-manage.el (exwm-manage--set-client-list) (exwm-manage--manage-window, exwm-manage--unmanage-window): Improve _NET_CLIENT_LIST support. * exwm-manage.el (exwm-manage--manage-window): * exwm-workspace.el (exwm-workspace--set-desktop) (exwm-workspace-move-window): * exwm.el (exwm--on-ClientMessage): Add _NET_WM_DESKTOP support. * exwm-randr.el (exwm-randr--refresh): * exwm-workspace.el (exwm-workspace--set-desktop-geometry) (exwm-workspace--init): Add _NET_DESKTOP_GEOMETRY support. * exwm-workspace.el (exwm-workspace--set-desktop-geometry): Renamed from `exwm-workspace--update-desktop-geometry'. * exwm-randr.el (exwm-randr--refresh): Improve _NET_WORKAREA support. * exwm-workspace.el (exwm-workspace--set-fullscreen): Correct variables names. * exwm-workspace.el (exwm-workspace--init): * exwm.el (exwm--init-icccm-ewmh): Set _NET_NUMBER_OF_DESKTOPS in workspace module. * exwm-workspace.el (exwm-workspace--init): * exwm.el (exwm--init-icccm-ewmh): Set _NET_DESKTOP_VIEWPORT in workspace module. * exwm.el (exwm--on-ClientMessage): Improve _NET_CURRENT_DESKTOP support. * exwm.el (exwm--on-ClientMessage): Add _NET_CLOSE_WINDOW support. * exwm.el (exwm--on-ClientMessage): Add WM_CHANGE_STATE support. * exwm.el (exwm--init-icccm-ewmh): Update supported atoms.
2016-07-12 * exwm-input.el (exwm-input--on-KeyPress-char-mode): No need toChris Feng1-3/+1
force events to be added to `this-command-keys' (and it causes problems).
2016-07-12 Add initial support for dock (panel) applicationsChris Feng5-61/+163
* exwm-layout.el (exwm-layout--fullscreen-frame-count) (exwm-layout--set-frame-fullscreen): Moved to workspace module. * exwm-workspace.el (exwm-workspace--fullscreen-frame-count) (exwm-workspace--set-fullscreen): Moved from layout module. * exwm-manage.el (exwm-manage--manage-window): Update struts for dock applications. * exwm-workspace.el (exwm-workspace--strut) (exwm-workspace--strut-is-partial): New variables for storing struts. (exwm-workspace--resize-minibuffer-frame) (exwm-workspace--on-ConfigureNotify): Take struts into consideration. * exwm.el (exwm--update-strut-legacy, exwm--update-strut-partial) (exwm--update-strut): New functions for updating _NET_WM_STRUT or _NET_WM_STRUT_PARTIAL. (exwm--on-PropertyNotify): Update struts on corresponding event. (exwm--init-icccm-ewmh): Declare _NET_WM_STRUT and _NET_WM_STRUT_PARTIAL as supported. * exwm-workspace.el (exwm-workspace--update-workareas): Dedicated function for updating _NET_WORKAREA. * exwm-randr.el (exwm-randr--refresh): * exwm-workspace.el (exwm-workspace--init): Use `exwm-workspace--update-workareas'. * exwm.el (exwm--init-icccm-ewmh): Do not set _NET_WORKAREA here.
2016-07-12 * exwm-workspace.el (exwm-workspace--init): Remove possibleChris Feng1-3/+9
internal borders of workspace frames.
2016-07-12 Fix a bug of simulation keysChris Feng1-2/+8
* exwm-input.el (exwm-input--on-KeyPress-line-mode) (exwm-input--on-KeyPress-char-mode): Force events to be added to `this-command-keys'. (exwm-input-send-next-key): The read event can now be (t . EVENT).
2016-06-17 Allow buffer-local simulation keysChris Feng1-1/+16
* exwm-input.el (exwm-input-set-local-simulation-keys): New function for setting buffer-local simulation keys. (exwm-input--local-simulation-keys): New internal variable. (exwm-input--update-simulation-prefix-keys): Modify either `exwm-mode-map' or the local keymap accordingly.
2016-06-17 * exwm-layout.el (exwm-layout--show): Resize the X windowChris Feng1-5/+6
if the minibuffer is active but with line height 1.
2016-05-25 Bump version to 0.5Chris Feng1-2/+2
2016-05-24 * exwm-input.el (exwm-input--update-focus): Do not update input focusChris Feng1-1/+7
when there's an active minibjffer
2016-05-24 Manage a certain type of undecorated X windowsChris Feng3-9/+22
* exwm-core.el (exwm--mwm-hints): Removed. (exwm--mwm-hints-decorations): New buffer-local variable for indicating whether the X window should have decorations. * exwm-floating.el (exwm-floating--set-floating): Hide the mode-line of undecorated floating X windows by default. * exwm-manage.el (exwm-manage--update-mwm-hints): Set exwm--mwm-hints-decorations; (exwm-manage--manage-window): Manage an undecorated X window if its input model is not 'No Input' or 'Globally Active'.
2016-05-23 Add cleanup codes for Emacs daemonChris Feng8-22/+149
* exwm-floating.el (exwm-floating--exit): * exwm-input.el (exwm-input--exit): * exwm-layout.el (exwm-layout--exit): * exwm-manage.el (exwm-manage--exit): * exwm-randr.el (exwm-randr--exit): * exwm-systemtray.el (exwm-systemtray--exit): * exwm-workspace.el (exwm-workspace--exit): New functions for cleanup each module. * exwm-input.el (exwm-input--on-pre-command, exwm-input--on-post-command) (exwm-input--init): Name lambda functions. * exwm-layout.el (exwm-layout--timer, exwm-layout--init): Save timer. * exwm-randr.el (exwm-randr-enable): Register the cleanup function. * exwm-systemtray.el (exwm-systemtray--init): Force refresh atoms in XEMBED and system tray protocols. (exwm-systemtray-enable): Register the cleanup function. * exwm-workspace.el (exwm-workspace--client): Save the server process. (exwm-workspace--confirm-kill-emacs): Add emacsclient-specific cleanup codes. (exwm-workspace--timer): Save the timer. (exwm-workspace--init): Save the server process and timer; fix problems with emacsclient frames. * exwm.el (exwm-init): Always select the newly created frame; force refresh ICCCM & EWMH atoms. (exwm-exit-hook): New hook for holding cleanup codes. (exwm--exit): Run `exwm-exit-hook', execute cleanup codes for each module and reset the environment.
2016-05-21 Always add `exwm-workspace--on-focus-in'Chris Feng1-2/+2
* exwm-workspace.el (exwm-workspace--init): `exwm-workspace--on-focus-in' should always be added to `focus-in-hook'.
2016-05-13 Use `xcb:connect' instead of `xcb:connect-to-socket'Chris Feng2-2/+2
* exwm.el (exwm-init): * exwm-systemtray.el (exwm-systemtray--init): Use `xcb:connect' instead of `xcb:connect-to-socket'.
2016-04-21 Announce manager selection with client messageChris Feng1-0/+24
* exwm-systemtray.el (exwm-systemtray--init): Send a client message to announce the manager selection. (xcb:systemtray:-ClientMessage): The client message.
2016-04-21 Properly place undecorated X windowsChris Feng1-6/+14
* exwm-manage.el (exwm-manage--manage-window): Convert absolute position of undecorated X windows.
2016-04-07 Fix 2 multi-monitor issuesChris Feng2-1/+15
* exwm-workspace.el (exwm-workspace--on-focus-in, exwm-workspace--init): Handle unexpected frame switch in `focus-in-hook'. * exwm-floating.el (exwm-floating--set-floating): If the absolute position is (0, 0) then the relative position is also the same.
2016-04-03 Some commands should be called interactivelyChris Feng2-4/+4
* exwm-layout.el (exwm-layout-set-fullscreen, exwm-layout-unset-fullscreen) (exwm-layout-show-mode-line): * exwm.el (exwm-reset): Call `exwm-input-grab-keyboard' and `exwm-input-release-keyboard' interactively.
2016-03-25 Fix emacsclient issuesChris Feng3-14/+24
* exwm-layout.el (exwm-layout--on-minibuffer-setup) (exwm-layout--on-echo-area-change): * exwm-workspace.el (exwm-workspace--on-minibuffer-setup) (exwm-workspace--on-minibuffer-exit, exwm-workspace--on-echo-area-dirty) (exwm-workspace--on-echo-area-clear): Exclude non-graphical frames. * exwm.el (exwm--server-eval-at): Avoid using `x-dispaly-name'.
2016-03-20 Merge branch 'medranocalvo/remember-last-buffer' into externals/exwmChris Feng2-34/+74
2016-03-19 Restore a sensible buffer when replacing EXWM buffersAdrián Medraño Calvo1-21/+50
* exwm-layout.el (exwm-layout--other-buffer-exclude-exwm-mode-buffers) (exwm-layout--other-buffer-exclude-buffers): New variables. (exwm-layout--other-buffer-predicate): Allow excluding EXWM buffers or buffers from a given set. (exwm-layout--refresh): Replace EXWM buffers with sensible buffers depending on the situation. When in non-workspace/non-floating frames, with some non-EXWM buffer; when the EXWM buffer is displayed elsewhere, some buffer previously displayed in that window (making sure it has been recently covered).
2016-03-19 Use `other-buffer' instead of "*scratch*"Adrián Medraño Calvo1-5/+1
* exwm-workspace.el (exwm-workspace-move-window): Display `other-buffer' instead of "*scratch*" in the window whose buffer has been made floating.
2016-03-19 Use `buffer-predicate' frame parameter to prevent switching to visible EXWM ↵Adrián Medraño Calvo2-0/+15
buffers * exwm-layout.el (exwm-layout--other-buffer-predicate): New function to be set as `buffer-predicate' frame parameter. * exwm-workspace.el (exwm-workspace--init): Use above function on workspace frames.
2016-03-19 Set the correct buffer before checking the `major-mode'Adrián Medraño Calvo1-7/+7
* exwm-layout.el (exwm-layout--refresh): Make sure we test the `major-mode' of the first buffer of the floating frame.
2016-03-19 Minor cleanupAdrián Medraño Calvo1-4/+4
* exwm-layout.el (exwm-layout--refresh): Reuse car.
2016-03-16 Exclude unmanaged floating X windows when refreshingChris Feng1-2/+4
* exwm-layout.el (exwm-layout--refresh): Do not show unmanaged floating X windows.
2016-03-11 Neglect trivial resizing requestsChris Feng1-12/+40
* exwm-manage.el (exwm-manage--on-ConfigureRequest): Neglect trivial resizing requests since that cannot be done precisely.
2016-03-08 Merge branch 'medranocalvo/fix-input-target' into externals/exwmChris Feng1-28/+44
2016-03-08 Use `cl-case' instead of `case'Chris Feng1-1/+1
2016-03-07 Restack fullscreen X windowsChris Feng1-7/+22
* exwm-layout.el (exwm-layout-set-fullscreen) (exwm-layout-unset-fullscreen): Raise and lower fullscreen X windows respectively.
2016-03-07 Change input mode of window being clickedAdrián Medraño Calvo1-28/+44
When clicking a mode-line of other window to switch the EXWM input mode, `window-buffer' does not return the window whose mode-line has been clicked, but the current one. This change ensures that the right window has its input mode and mode-line updated. * exwm-input.el (exwm-input--update-mode-line): Factor out setting `mode-line-process'. (exwm-input--grab-keyboard, exwm-input--release-keyboard) (exwm-input-grab-keyboard, exwm-input-release-keyboard): Make sure the buffer of the window being clicked has its input mode updated.
2016-03-06 Allow floating X windows to resize themselvesChris Feng1-11/+26
* exwm-manage.el (exwm-manage--on-ConfigureRequest): Allow (non-fullscreen) floating X windows to resize themselves.
2016-03-06 UntabifyChris Feng3-109/+109
2016-03-04 Allow moving/resizing undecorated X windowsChris Feng2-68/+91
* exwm-manage.el (exwm-manage--manage-window): Do not manage undecorated floating X windows (set in _MOTIF_WM_HINTS). * exwm-floating.el (exwm-floating--start-moveresize) (exwm-floating--stop-moveresize, exwm-floating--do-moveresize): Allow moving/resizing undecorated X windows with _NET_WM_MOVERESIZE client message.
2016-03-03 Handle buffer change after a buffer is killedChris Feng2-48/+57
* exwm-manage.el (exwm-manage--kill-buffer-query-function): Handle buffer change. * exwm-workspace.el (exwm-workspace--show-minibuffer): Revert the change made in 93e42136 (the problem has not been fully resolved).
2016-03-01 Avoid unnecessary input focus changes in line-modeChris Feng2-14/+3
* exwm-input.el (exwm-input--grab-keyboard, exwm-input--release-keyboard): Grab keys on X windows instead to prevent unexpected input focus changes. * exwm-workspace.el (exwm-workspace--show-minibuffer): The workaround for cursor flickering issue is no more needed.
2016-02-28 Simplify `exwm-workspace--display-buffer'Chris Feng1-16/+5
* exwm-workspace.el (exwm-workspace--display-buffer): Make it simpler and more reliable.
2016-02-26 Do not wait for WM_STATE property eventsChris Feng1-21/+22
* exwm-layout.el (exwm-layout--show, exwm-layout--hide): Save the state directly.
2016-02-26 Minor fixes for layout and workspaceChris Feng2-2/+3
* exwm-layout.el (exwm-layout-show-mode-line): Force update mode-line. * exwm-workspace.el (exwm-workspace--update-minibuffer): Treat nil as empty string.
2016-02-25 Fix exwm-workspace-switch-to-bufferChris Feng1-4/+13
* exwm-workspace.el (exwm-workspace-switch-to-buffer): Select the floating frame when switching to a floating X window buffer.
2016-02-25 Bump version to 0.4Chris Feng1-1/+1
2016-02-25 Allow user to hide floating X windowsChris Feng3-1/+18
* exwm-core.el (exwm-mode-map): Add a new key to hide floating X windows. * exwm-floating.el (exwm-floating-hide): New command to hide a floating X window. * exwm-workspace.el: Fix a compile warning.
2016-02-24 Refresh the workspace after creating a floating X windowChris Feng1-0/+2
* exwm-floating.el (exwm-floating--set-floating): Refresh the workspace (since auto-refresh was disabled).
2016-02-24 Fix issues with moving X windows between workspacesChris Feng1-38/+56
* exwm-workspace.el (exwm-workspace-move-window): Select the moved floating X window. Update the 'exwm-selected-window' frame parameter. (exwm-workspace-switch): Check 'exwm-selected-window' for dead windows. (exwm-workspace-switch-to-buffer): Allow non-interactive call.
2016-02-23 Make input focus revert to pointer rootChris Feng1-1/+2
* exwm-input.el (exwm-input--set-focus): Input focus should not revert to parent (which was the Emacs frame) any more.
2016-02-22 Bump version to 0.3Chris Feng1-2/+2
2016-02-21 Fix emacsclient related issuesChris Feng5-16/+15
* exwm-systemtray.el (exwm-systemtray-height): The value is not available when emacsclient has just loaded the library (and it crashes emacsclient). * exwm-workspace.el (exwm-workspace--init): Set `default-minibuffer-frame' later to prevent it from being modified when using emacsclient. * exwm-floating.el: * exwm-randr.el: * exwm-systemtray.el: * exwm-workspace.el: * exwm.el: Use `exwm-workspace--minibuffer-own-frame-p' instead of the raw variable.
2016-02-21 Various fixes for floating X windowsChris Feng2-25/+91
* exwm-floating.el (exwm-floating--set-floating): Always create floating X windows on current workspace. * exwm-workspace.el (exwm-workspace-switch): Restore selected floating frames. * exwm-workspace.el (exwm-workspace-move-window): Restore the position of floating X windows. Recreate floating frames when using fixed minibuffer. Restack tiling X windows.
2016-02-21 Fix the advice function for ido-buffer-window-other-frameChris Feng1-13/+30
* exwm-config.el (exwm-config--ido-buffer-window-other-frame) (exwm-config--fix/ido-buffer-window-other-frame): Do not use advice. Fix issues when switching form/to floating frames.
2016-02-20 Prevent Emacs frames from restacking themselvesChris Feng5-121/+192
Putting Emacs frames (workspace frames, floating frames) into dedicated containers greatly simplifies the stacking order management and totally fixes relevant issues. * exwm-floating.el (exwm-floating--set-floating): Create floating frame container. Remove redundant stacking order modification code. (exwm-floating--unset-floating): Destroy the floating frame container. No need to reparent the X window container. (exwm-floating--do-moveresize): Resize the floating frame container. * exwm-input.el (exwm-input--update-focus): No need to restack frames. * exwm-layout.el (exwm-layout--show, exwm-layout--set-frame-fullscreen) (exwm-layout-enlarge-window): Resize the floating frame container. * exwm-manage.el (exwm-manage--on-ConfigureRequest): Re-enable stacking order modification on ConfigureRequest. * exwm-workspace.el (exwm-workspace--confirm-kill-emacs): Reparent out all frames on exit. No need to remove selected events or created resources. (exwm-workspace--init): Create workspace frame containers. * exwm-layout.el (exwm-layout-set-fullscreen): * exwm-manage.el (exwm-manage--unmanage-window): Remove a redundant call to `xcb:flush'. * exwm-manage.el (exwm-manage--unmanage-window): Force unmap the X window. Unmap the floating frame before reparent it.
2016-02-20 Prevent/Reduce flickering issues with floating X windowsChris Feng3-29/+78
* exwm-floating.el (exwm-floating--set-floating) (exwm-floating--unset-floating): Prevent flickering when creating/removing a floating X window. * exwm-layout.el (exwm-layout--show): Show X windows after resizing to prevent flickering. * exwm-manage.el (exwm-manage--unmanage-window): Reduce flickering by hiding the container. (exwm-manage--kill-buffer-query-function): Prevent flickering by hiding the container (except that the X window destroys itself after receiving the WM_DELETE_WINDOW client message).