Commit graph

161 commits

Author SHA1 Message Date
Consolatis
413811f3a2 Use proper enum argument type for desktop_surface_and_view_at 2022-01-30 21:23:15 +00:00
Consolatis
759b26b5c1 Add window menu 2022-01-26 06:17:41 +00:00
Johan Malm
8dd3dc3e3b cursor: cursor_rebase() on mouse scroll
...to ensure that the surface under the mouse gets the focus even
if the mouse pointer has not moved.

Issue #162
2022-01-24 17:54:06 +00:00
Johan Malm
2652522a70 cursor: revert 6651d; remove cursor_update_focus()
...to ensure new windows receive keyboard focus even if the cursor is
over an existing window.

Fix issue #210
2022-01-24 17:51:54 +00:00
Consolatis
d9cef42721 CodeStyle 2022-01-09 06:37:39 +00:00
Consolatis
87f4a60e38 Allow mouse movements to trigger SnapToEdge 2022-01-08 10:30:03 +00:00
John Lindgren
4e3a03586a cursor: More reliably clear "pressed" status of mouse bindings
The "pressed" status of the mouse button is stored per-binding, and
the first binding activated causes us to break out of the loop that
cleared the "pressed" status -- as a result, some statused weren't
cleared when another binding was activated.

The bug could be seen when clicking the maximize button on a window
and then moving the mouse: the DRAG action would continue to move
the window (unmaximizing it) even though the mouse button was no
longer held.
2022-01-08 09:31:53 +00:00
John Lindgren
7f8b7f0a56 cursor: Don't allow a DRAG action to start from a double-click
By moving the cursor slightly after the second press (but before
the second release) it was possible to accidentally trigger both a
DOUBLECLICK and a DRAG action.  Doing this on the titlebar would
cause the window to maximize and then immediately unmaximize, which
feels very "glitchy".

As a simple fix, don't allow a press event that is triggering a
DOUBLECLICK to also trigger a DRAG (or CLICK) on the following
release event.

Note: Openbox avoids the issue by processing DOUBLECLICK on the
second release event.  If the cursor moves before that, the DRAG
wins out and the DOUBLECLICK isn't processed.
2022-01-08 09:31:53 +00:00
ARDiDo
a6a923c506 mousebindings: use available resize edges first in drag actions 2022-01-07 22:05:07 +00:00
ARDiDo
5935a78fb4 mouse: add support for drag mouse event 2022-01-07 22:05:07 +00:00
Johan Malm
3c92cc4dd0 Move action() prototype from labwc.h to action.h 2022-01-05 21:27:47 +00:00
Consolatis
0b45cce648 Rewrite action handling to allow multiple actions at once 2022-01-05 16:22:41 +00:00
Johan Malm
f7b63f264e cursor.c: fix coding style
Open brace '{' following function definitions go on the next line
2022-01-02 15:51:40 +00:00
bi4k8
80315295d2 cursor: support pointer gestures (pinch/swipe) 2022-01-01 19:24:27 +00:00
bi4k8
58f5e8d16a factor keyboard/cursor cleanup into own functions 2022-01-01 19:24:27 +00:00
Johan Malm
310c36c86d Fix build on Alpine Linux
Issue #144

Add `#define _POSIX_C_SOURCE 200809L` to avoid the error below:

../src/cursor.c: In function 'cursor_update_focus':
../src/cursor.c:271:2: warning: implicit declaration of function
'clock_gettime' [-Wimplicit-function-declaration]
  271 |  clock_gettime(CLOCK_MONOTONIC, &now);
      |  ^~~~~~~~~~~~~
../src/cursor.c:271:16: error: 'CLOCK_MONOTONIC' undeclared (first use in
this function)
  271 |  clock_gettime(CLOCK_MONOTONIC, &now);
      |                ^~~~~~~~~~~~~~~
../src/cursor.c:271:16: note: each undeclared identifier is reported only
once for each function it appears in
../src/cursor.c: In function 'is_double_click':
../src/cursor.c:486:16: error: 'CLOCK_MONOTONIC' undeclared (first use in
this function)
  486 |  clock_gettime(CLOCK_MONOTONIC, &now);
      |                ^~~~~~~~~~~~~~~
2021-12-28 15:06:33 +00:00
Johan Malm
34a12b3515 Fix coding style 2021-12-26 23:29:01 +00:00
Johan Malm
6651d45ed4 cursor: add cursor_update_focus()
...and call it from desktop_move_to_front() in order force an enter event
on the surface below the cursor when cycling views.

Inspired by PR #164 - just restructured it a bit.

Suggested-by: @bi4k8
2021-12-26 22:09:41 +00:00
Johan Malm
8d070ab2f4 cursor: fix setting of resize_edges
Only calculate nearest `resize_edges` if not clear from the server-side
deco under the cursor.
2021-12-26 21:35:37 +00:00
bi4k8
26d3d13a82 move edge resizing from hard-coded to configuration 2021-12-26 21:31:11 +00:00
Johan Malm
238062a859 desktop: rename functions to increase consistency
...from
- desktop_raise_view()
- desktop_move_view_to_end_of_cycle()

to
- desktop_move_to_front()
- desktop_move_to_back()
2021-12-06 21:23:49 +00:00
Johan Malm
2cb055b94a cursor.c: fix switch statement indentation 2021-12-03 23:17:12 +00:00
Joshua Ashton
d568c60003 action: If we have a view that is an activator, use that instead of the current focus window
If we don't switch focus, we want the close button to close the window associated with it, not the current focus window.

Signed-off-by: Joshua Ashton <joshua@froggi.es>
2021-12-03 18:13:30 +00:00
Joshua Ashton
f9f9d809c8 cursor: Clear grabbed_view when switching from MOVE/GRAB
Better not to leave a dangling pointer to screw us over later.

Signed-off-by: Joshua Ashton <joshua@froggi.es>
2021-12-03 18:11:31 +00:00
bi4k8
a9f11c5fc7 move window raise/focus on click from hard-coded logic to default mouse binding 2021-12-03 06:46:43 +00:00
bi4k8
3a3b484898 replace hard-coded ShowMenu on root button press with mouse binding trigger 2021-12-03 06:46:43 +00:00
bi4k8
24215a3085 correctly detect when cursor is over titlebar
this was broken when we added ssd_part_types other than NONE that are not decoration
2021-12-03 06:42:04 +00:00
bi4k8
54e99cd240 forward click events to layer surfaces
this was broken when we moved to swallowing mouse events that triggered "Frame"-context mouse bindings. layer surfaces don't run mouse binding logic, so they need mouse events unconditionally forwarded.
2021-12-02 18:53:15 +00:00
bi4k8
a94fb3b225 fix interaction between Move action and click bindings
in order to allow the Move action to be bound to "press" on mouse binding contexts that also have "click" bindings, we should not short-circuit event processing when the input_mode is not passthrough (the "normal" mode). doing so seems to have been intended to prevent mouse bindings from being triggered during move/resize/menu interactions, but this does not seem to occur in practice. instead, `cursor_button`'s early return in this case caused the "release" side of "click" bindings to be ignored if their "press" side began an action that changes input_mode (e.g. Move).

the cleaner way to fix this interaction would be to use "drag" rather than "press" for Move bindings, but implementing "drag" is more complexity than I want to include in this changeset.

this change is its own commit to make it easy to bisect for, in case it causes regressions.
2021-12-02 17:58:31 +00:00
bi4k8
d8bbb751d2 handle mouse release bindings on root window 2021-12-02 17:58:31 +00:00
bi4k8
347e6115e3 swallow mouse events only when bindings on Frame mouse contexts are triggered 2021-12-02 17:58:31 +00:00
bi4k8
031ced85ef implement Resize as an action
this requires action() to know the resize edges to use, so thread them through
2021-12-01 22:45:20 +00:00
bi4k8
8eab1e8132 parse and respect modifiers for mouse bindings 2021-12-01 15:11:21 -05:00
bi4k8
ef49d2c843 be stricter about what counts as a double-click 2021-12-01 07:57:33 +00:00
Johan Malm
9eaa5a92a1 cursor: support XCURSOR_THEME and XCURSOR_SIZE
Use environment variables XCURSOR_THEME and XCURSOR_SIZE to set cursor
theme and size respectively. Default size is 24.

Find icons themes with the command below or similar:

    find /usr/share/icons/ -type d -name "cursors"
2021-11-28 22:50:37 +00:00
Johan Malm
afa299c080 cursor.c: rebase cursor when exiting interactive mode
cursor_rebase() sets the cursor icon and sends a motion-event to the
surface below the cursor. It is made public in anticipation of using it
in various view_* functions.
2021-11-28 22:14:23 +00:00
Johan Malm
1c831bc051 interactive.c: set move/resize cursor
Fixes issue #124
2021-11-28 21:47:24 +00:00
John Lindgren
c01d1f124c Basic support for Move action
- Add Move as a default mouse binding for a Titlebar Press action
- Remove the hard-coded handling in cursor_button()

Example config snippet:

    <mouse>
      <context name="Titlebar">
        <mousebind button="Left" action="Press">
          <action name="Focus"/>
          <action name="Raise"/>
          <action name="Move"/>
        </mousebind>
      </context>
    </mouse>
2021-11-26 18:25:04 +00:00
ARDiDo
aa9720f627 Add support for basic idle and idle inhibitor protocols 2021-11-22 21:58:07 +00:00
ARDiDo
6b948c7106 mousebind: add support for more contexts and mouse events 2021-11-02 18:14:50 +00:00
ARDiDo
91a9f1dec9 resistance: remove bool, add resistance.h + license 2021-10-26 21:15:13 +01:00
ARDiDo
4d5b4be608 resistance: improve readability 2021-10-26 21:15:13 +01:00
ARDiDo
ac58ab10a7 resize resistance support 2021-10-26 21:15:13 +01:00
ARDiDo
a24e17dea7 Improve expandibility 2021-10-26 21:15:13 +01:00
Johan Malm
b1beab473c cursor: do not crash on layer popup/subsurfaces 2021-10-21 20:37:30 +01:00
Johan Malm
40da2f34a5 view: check view->impl functions exist before using
Avoids segfault when using disappearing notification in Thunderbird
2021-10-18 19:35:41 +01:00
Joshua Ashton
95f583ba6b cursor: Don't trigger cursor modifiers if we have a constraint
We are probably playing a game and we don't want to be resizing the window when trying to duck/jump whatever.

Signed-off-by: Joshua Ashton <joshua@froggi.es>
2021-10-17 23:23:39 +01:00
Joshua Ashton
398cad692d cursor: Fix modifier button check
Previously any modifier would trigger this due to &ing the wrong value.

Signed-off-by: Joshua Ashton <joshua@froggi.es>
2021-10-17 23:23:39 +01:00
Joshua Ashton
7e4e579c37 cursor: Handle absolute motion for relative_pointer
Signed-off-by: Joshua Ashton <joshua@froggi.es>
2021-10-17 23:21:27 +01:00
ARDiDo
f5072151a9 add pointer constraints 2021-10-17 22:32:25 +01:00