1. 29 Sep, 2020 3 commits
  2. 07 Aug, 2020 2 commits
    • Vlad Zahorodnii's avatar
      Prettify license headers · 4ce853e8
      Vlad Zahorodnii authored
    • Vlad Zahorodnii's avatar
      Switch to SPDX license markers · 1fb9f6f1
      Vlad Zahorodnii authored
      The main advantage of SPDX license identifiers over the traditional
      license headers is that it's more difficult to overlook inappropriate
      licenses for kwin, for example GPL 3. We also don't have to copy a
      lot of boilerplate text.
      In order to create this change, I ran licensedigger -r -c from the
      toplevel source directory.
  3. 13 Jul, 2020 1 commit
    • Aleix Pol Gonzalez's avatar
      Move inputConfig away from KWin::Application · e28e4cb1
      Aleix Pol Gonzalez authored
      We were calling it from tests that were not running a KWin::Application
      and not even including the symbols from main.cpp and main.h. The only
      reason they linked was that it was static_casting up the QCoreApplication.
  4. 30 Apr, 2020 1 commit
  5. 27 Nov, 2019 1 commit
    • Vlad Zahorodnii's avatar
      Drop some custom list typedefs · 9d4a3259
      Vlad Zahorodnii authored
      Qt has its own thing where a type might also have corresponding list
      alias, e.g. QObject and QObjectList, QWidget and QWidgetList. I don't
      know why Qt does that, maybe for some historical reasons, but what
      matters is that we copy this pattern here in KWin. While this pattern
      might be useful with some long list types, for example
          QList<QWeakPointer<TabBoxClient>> TabBoxClientList
      in general, it causes more harm than good. For example, we've got two
      new client types, do we need corresponding list typedefs for them? If
      no, why do we have ClientList and so on?
      Another problem with these typedefs is that you need to include utils.h
      header in order to use them. A better way to handle such things is to
      just forward declare a client class (if that's possible) and use it
      directly with QList or QVector. This way translation units don't get
      "bloated" with utils.h stuff for no apparent reason.
      So, in order to make code more consistent and easier to follow, this
      change d...
  6. 19 Feb, 2019 1 commit
    • Roman Gilg's avatar
      Remove X clipboard sync helper and rename its autotest · 2776f829
      Roman Gilg authored
      With the gneric X selections infrastructure and clipboard support the X
      clipboard sync helper utility can be removed. Also rename its autotest as it
      tests the inner workings of the new mechanism since this mechanism was
      Test Plan: Autotest still passes under new name.
      Reviewers: #kwin, davidedmundson
      Reviewed By: #kwin, davidedmundson
      Subscribers: graesslin, kwin
      Tags: #kwin
      Differential Revision: https://phabricator.kde.org/D15063
  7. 13 Dec, 2018 1 commit
    • Martin Flöser's avatar
      Introduce a command line option to disable any kind of global shortcuts · a0b482cb
      Martin Flöser authored
      This command line option is useful for KWin in embedded use case. That
      is when KWin is just used as a compositor for one application instead of
      a complete desktop environment. In such a setup global shortcuts are not
      wanted and interfere with the application. E.g. one does not want Alt+F4
      to close the window, that would render the system unusable.
      This change introduces a command line option and disables the following
      event filters and spies:
       * global shortcuts
       * modifier only shortcuts
       * terminate session
       * virtual terminal switching
       * screen edges
      KGlobalAccel still gets inited, otherwise the (non-functional) binary
      would be launched when KWin registers it's global shortcuts.
      Test Plan:
      New test added based on existing tests for the global
      shortcuts, ctest passes
      Reviewers: #kwin
      Subscribers: kwin
      Tags: #kwin
      Differential Revision: https://phabricator.kde.org/D17304
  8. 01 Nov, 2018 1 commit
    • Martin Flöser's avatar
      Support enabling numlock on startup · 7c3a851b
      Martin Flöser authored
      This change brings improved num lock support to KWin. The modifier state
      is read and also mapped to Qt::KeyboardModifiers. Furthermore the input
      config is read and the NumLock key is evaluated. If the requested state
      does not match the current num lock state the state is swapped.
      BUG: 375708
      FIXED-IN: 5.15
      Test Plan: New unit test added, no manual test due to lack of hardware
      Subscribers: kwin
      Tags: #kwin
      Differential Revision: https://phabricator.kde.org/D16428
  9. 16 Aug, 2017 2 commits
  10. 12 May, 2017 1 commit
    • Martin Flöser's avatar
      Improve the escape key handling for breaking constrained pointers · 229be65e
      Martin Flöser authored
      So far KWin started to filter out the escape key as soon as it gets
      pressed. This was done by unsetting keyboard focus. The idea was to
      reset keyboard focus when it is only a short press and that then the
      keyboard state is correct for the application. But in practice this
      does not work. The only application currently supporting pointer
      constraints (Xwayland) does not do anything on a key which is pressed
      when gaining keyboard focus. The result is escape not working in
      pointer constrained Xwayland windows.
      This change addresses this problem by changing the interaction to only
      unset keyboard focus when our break constraints condition is met. This
      should also result in the application not handling the key release, but
      it means it gets the key press. Unfortunately I don't have a good way
      to test.
      BUG: 378452
      Test Plan: None
      Reviewers: #kwin, #plasma
      Subscribers: plasma-devel, kwin
      Tags: #kwin
      Differential Revision: https://phabr...
  11. 24 Apr, 2017 1 commit
    • Martin Flöser's avatar
      Handle modifier updates in the same sequence as Wayland does · a039c276
      Martin Flöser authored
      Consider the case that capslock gets pressed and released.
      In the case of Weston we have a sequence of:
       1. Key press event
       2. Modifier changed event
       3. Key release event
       4. Modifier changed event
      KWin however used to send the events in the following sequence:
       1. Modifier changed event (on key press)
       2. Key press event
       3. Modifier changed event (on key release)
       4. Key release event
      It looks like Xwayland is not able to properly process the sequence
      sent by KWin. And in fact KWin's sequence is wrong as it sends a state
      which does not match. We report that the caps lock is pressed in the
      modifiers prior to the application getting informed about the key press
      of caps lock.
      This change aligns KWin's implementation to the behavior of Weston. The
      main difference is that when modifiers change Xkb internally caches the
      serialized modifier states. And KeyboardInputRedirection just forwards
      the modifiers to KWayland::Server::SeatInterface once the processing has
      finished. SeatInterface ignores the forwarding if no states changes, so
      it is fine to do it that way.
      BUG: 377155
      Test Plan:
      Not yet tested with an affected Xwayland as I only have 1.18 and the
      problem started with 1.19. But verified the sequence of events with WAYLAND_DEBUG
      and caps lock stil working in QtWayland clients and Xwayland 1.18
      Reviewers: #kwin, #plasma
      Subscribers: plasma-devel, kwin
      Tags: #kwin
      Differential Revision: https://phabricator.kde.org/D5452
  12. 15 Feb, 2017 1 commit
  13. 14 Feb, 2017 1 commit
    • Martin Flöser's avatar
      Split modifier only handling into a dedicated InputEventSpy · 65ddd32d
      Martin Flöser authored
      The functionality regarding triggering modifier only shortcuts is moved
      out of Xkb - where it doesn't belong to - and is turned into an input
      event spy listening for the changes it is interested in. Previously
      the state got queried by asking e.g. for the pressed buttons, now it's
      tracked directly.
      The X11 side needs a larger change due to that as now pushing the events
      into Xkb does not trigger modifier only shortcuts any more. Instead the
      "normal" way through the platform API needs to be used which triggers the
      processing of filters and spies.
      The problem here is that our redirections only process events if they are
      inited and that only happens on Wayland. We cannot call init on them as
      that would create all the Wayland filters and spies and processing would
      probably break. As an intermediate solution the spies are now processed
      and there we know that it won't matter. A future solution would be to
      remove the init checks completely and just send through both filters and
      spies and ensure that on X11 only the supported ones are loaded.
      Closes T5220
      Test Plan: Tested on Wayland and X11
      Reviewers: #kwin, #plasma
      Subscribers: plasma-devel, kwin
      Tags: #kwin
      Maniphest Tasks: T5220
      Differential Revision: https://phabricator.kde.org/D4578
  14. 07 Feb, 2017 1 commit
  15. 30 Jan, 2017 1 commit
    • Martin Flöser's avatar
      Provide kxbk config through kwinApp · 8d9c4acf
      Martin Flöser authored
      So far KWin parsed the kxbkrc at multiple places (once in Xkb, once
      in KeyboardLayout). This is now replaced by one KSharedConfigPtr hold
      by kwinApp, just like the normal kwinrc. The KSharedConfigPtr is now
      passed to Xkb.
      As a nice side effect this makes it easier to test keyboard layout
      changes as we can now properly mock the keyboard configuration. Thus
      this change also comes with an autotest for loading keyboard layout
      configuration. This is becoming more and more a need as we start
      getting bug reports for layout specific issues like global shortcuts
      not working with Greek layout.
      Reviewers: #kwin, #plasma_on_wayland
      Subscribers: plasma-devel, kwin
      Tags: #plasma_on_wayland, #kwin
      Differential Revision: https://phabricator.kde.org/D4315
  16. 27 Jan, 2017 1 commit
    • Martin Flöser's avatar
      Split Keyboard Repeat handling into a dedicated InputEventSpy · eb924772
      Martin Flöser authored
      So far the keyboard repeat handling was triggered directly from
      KeyboardInputRedirection::processKey. With the introduction of
      InputEventSpies it is no longer required to be done like that, we can
      split it out into a dedicated spy.
      This means that processKey only has to care about processing the key
      and allows us to better extend in future. So far keyboard repeat is
      only functional for libinput based platforms. But it should also be
      possible to use it in nested setups. By splitting it out we can
      prepare for that.
      Test Plan: Auto-test using repeat still passes
      Reviewers: #kwin, #plasma_on_wayland
      Subscribers: plasma-devel, kwin
      Tags: #plasma_on_wayland, #kwin
      Differential Revision: https://phabricator.kde.org/D4304
  17. 25 Jan, 2017 2 commits
    • Martin Flöser's avatar
      Add a basic SNI for keyboard layout · fe561c5c
      Martin Flöser authored
      On X11 the SNI for keyboard layout is provided by the keyboard kded.
      On Wayland that kded has no real access to the layouts and cannot
      properly implement switching. Given that it's better to integrate the
      SNI directly in KWin.
      The implementation of the SNI is largly based on the existing SNI from
      plasma-desktop/kcms/keyboard. The implementation so far supports:
       * Switching to next layout on toggle
       * Presenting all layouts in a context menu
       * Switching to a specific layout through the context menu
       * Opening the keyboard layout configuration module
       * scroll on SNI to switch layout
       * config option whether to show the SNI
      Not yet supported are:
       * flags and/or short text for the layouts
      The last point needs more explanation. On X11 the layout name is
      something like "de" or "us". This can be directly mapped to a flag and
      can be added as a short note.
      Xkbcommon does not provide this information directly. Instead it provides
      us the full name of the layout, e.g. "German" or "English (us)". There is
      no way in the API to go from "German" to "de".
      Instead we need to parse the evdev.xml file to gather all information
      about layouts. This is already done in the keyboard kcm to configure
      layouts. The implementation needs to be split out into a small helper
      Reviewers: #kwin, #plasma_on_wayland
      Subscribers: plasma-devel, kwin
      Tags: #plasma_on_wayland, #kwin
      Differential Revision: https://phabricator.kde.org/D4220
    • Martin Flöser's avatar
      Support modifier-only-shortcuts when capslock is on · 5a87fa3f
      Martin Flöser authored
      So far we didn't trigger modifier-only-shortcuts when capslock was
      enabled. In fact we even ensured that the shortcuts did not trigger.
      This seems not to be what our users expect. Meta should still trigger
      if capslock is on.
      This change modifies the logic to determine which modifier is currently
      pressed by using the modifiersRelevantForGlobalShortcuts. The difference
      to the "normal" modifiers is that this excludes capslock from modifiers
      and excludes consumed modifiers. The latter is not really relevant as
      modifier-only-shortcuts do not trigger if multiple keys are pressed,
      which is required to have a modifier consumed.
      BUG: 375355
      FIXED-IN: 5.8.6
      Test Plan: Only with adjusted autotest
      Reviewers: #kwin, #plasma
      Subscribers: plasma-devel, kwin
      Tags: #kwin
      Differential Revision: https://phabricator.kde.org/D4241
  18. 22 Jan, 2017 1 commit
    • Martin Flöser's avatar
      Translate the layout name when passing to layout change OSD · a3be3e8e
      Martin Flöser authored
      Xkbcommon does not localize the layout names. We always get the US
      English variant. KWin so far passed the strings from xkbcommon directly
      to UI visible parts such as the Plasma OSD. This results in not
      translated elements in our UI.
      As I figured out today the translations exist in the domain
      xkeyboard-config. Passing the strings from xkbcommon through this domain
      gives us translated layouts.
      Unfortunately the xkeyboard-config is not installed by default on all
      distributions. E.g. on ubuntu/neon one needs to install xkb-data-i18n
      to have the translations available.
      Test Plan: Untested as I fail to start Plasma/5.8 KWin on my dev system
      Reviewers: #kwin, #plasma
      Subscribers: plasma-devel, kwin
      Tags: #kwin
      Differential Revision: https://phabricator.kde.org/D4243
  19. 18 Jan, 2017 2 commits
    • Martin Flöser's avatar
      Split implementation of keyboard layout handling into a dedicated class · d6c0a541
      Martin Flöser authored
      So far the implementation of keyboard layout handling was split between
      KeyboardInputRedirection and Xkb. KeyboardInputRedirection registered
      the global shortcut and did the handling for layout switch and config
      changes. Xkb did the notification on layout change.
      Layout changes can nowadays be detected through an InputEventSpy. It
      can only happen after a key change or an explicit layout switch. Thus
      it does not need to be in Xkb anymore which allows to reduce Xkb to
      only care about the Xkb keymap and state tracking.
      This change introduces a new class KeyboardLayout which is an
      InputEventSpy and takes over the task of the layout change notification
      from Xkb and the layout management from KeyboardInputRedirection. Thus
      everything related to management of keyboard layout is together in one
      This allows in future to add unit test to it (requires further cleanup
      of Xkb to be able to use it and drop the InputRedirection dependency) and
      opens the possibility to also take over keyboard layout management on X11
      for the Plasma desktop.
      Test Plan: Manual testing
      Reviewers: #kwin, #plasma_on_wayland
      Subscribers: plasma-devel, kwin
      Tags: #plasma_on_wayland, #kwin
      Differential Revision: https://phabricator.kde.org/D4135
    • Martin Flöser's avatar
      Use an InputEventSpy to notify about key and modifier state changes · 437edb45
      Martin Flöser authored
      Instead of emitting the key state changed and modifier state changed
      signals from the right point before processing the events, let's use
      an InputEventSpy to do that. The spies were introduced to be called
      directly before the event processing. So the contract still holds.
      Reviewers: #kwin, #plasma_on_wayland
      Subscribers: plasma-devel, kwin
      Tags: #plasma_on_wayland, #kwin
      Differential Revision: https://phabricator.kde.org/D4128
  20. 30 Dec, 2016 1 commit
    • Martin Flöser's avatar
      Introduce an InputEventSpy for processing input events · 84e33081
      Martin Flöser authored
      So far KWin's input event processing is mostly based on
      InputEventFilters. A filter can - as the name suggest - filter out an
      input event from further processing. Our code shows that this is not
      sufficient for all input event processing.
      We have several areas inside KWin where we need to have access to all
      input events, where the processing needs to happen on all events and
      filtering is not allowed. This results in sub-optimal code which has
      classes which know too much and do too much.
       * key-repeat handling done in KeyboardInputRedirection
       * Layout change OSD in Xkb
       * modifier only shortcuts in Xkb
       * emitting signals for Cursor class in KeyboardInputRedirection
      Also there are misuses of the InputEventFilters and internal API
       * DebugConsole keyboard state (uses wrong information)
       * DebugConsole input events tab (uses Filter, should be a spy)
      This change introduces the API needed to fix these problems. It
      introduces an InputEventSpy which is modelled after the InputEventFilter
      with the difference that it has only void messages and uses the KWin
      introduced event classes.
      The spies are always processed prior to the filters, thus we know it can
      have all events.
      Reviewers: #kwin, #plasma
      Subscribers: plasma-devel, kwin
      Tags: #kwin
      Differential Revision: https://phabricator.kde.org/D3863
  21. 27 Dec, 2016 3 commits
    • Martin Flöser's avatar
      Add the modifiers relevant for global shortcuts into the input Events · 58361213
      Martin Flöser authored
      Prior to this change various event filters performed deep calls into
      Xkb class to figure out the modifiers relevant for global shortcuts (aka
      consumed modifiers). This shows that this is a general useful
      information which should be available to all input event filters
      Thus it's now added to the input events and exposed directly in
      InputRedirection so that the calls into Xkb are no longer needed.
      Reviewers: #kwin, #plasma_on_wayland
      Subscribers: plasma-devel, kwin
      Tags: #plasma_on_wayland, #kwin
      Differential Revision: https://phabricator.kde.org/D3810
    • Martin Flöser's avatar
      Use new xkbcommon API for consumed modifiers · d1fdb9a0
      Martin Flöser authored
      This change removes the workaround added with
      Xkbcommon 0.7 introduces the needed API to make this work without a
      Test Plan: Test case still passes
      Reviewers: #kwin, #plasma_on_wayland
      Subscribers: plasma-devel, kwin
      Tags: #plasma_on_wayland, #kwin
      Differential Revision: https://phabricator.kde.org/D3809
    • Martin Flöser's avatar
      Reduce code duplication for processing input events · e3d79cdd
      Martin Flöser authored
      For every input event we have similar code. We go through all
      InputFilters, invoke a method with some arguments and check whether
      the filter returns true.
      Instead of duplicating that logic everywhere, there is now one method
      in InputRedirection which takes a std::function to call on the input
      filters. The std::function is supposed to be generated with a std::bind
      on the InputFilter::method with all the required arguments.
      Reviewers: #kwin, #plasma
      Subscribers: plasma-devel, kwin
      Tags: #kwin
      Differential Revision: https://phabricator.kde.org/D3806
  22. 08 Dec, 2016 1 commit
    • Martin Flöser's avatar
      Implement support for pointer constraints · 0c5ca405
      Martin Flöser authored
      There are two types of constraints supported:
      1. Pointer confinement
      2. Pointer locking
      In the case of confinement the pointer is confined to a given region of
      the surface. This is comparable to general operation where the pointer
      is confined to the screen region.
      In the second case the pointer gets locked. That means it cannot move at
      all. No further position updates are provided, only relative motion
      events can go to the application. There is a hint about cursor position
      update on unlock which is not yet implemented in KWayland::Server, thus
      also not in this change.
      The implementation in KWin grants the requests for pointer constraints
      when the pointer enters the constrained region, either by pointer
      movement or by e.g. stacking order changes. There is no confirmation
      from user required to enter that mode. But we want to show an OSD when
      the pointer gets constrained, this is not yet implemented, though.
      Breaking an active constraint is relatively easy. E.g. changing the
      stacking order will break the constraint if another surface is under the
      cursor. Also (in case of confinement) moving the pointer to an
      overlapping window breaks the confinement. But as soon as one moves the
      pointer back to the window a constraint might get honoured again.
      To properly break there is a dedicated event filter. It listens for a
      long press of the Escape key. If hold for 3sec the pointer constraint is
      broken and not activated again till the pointer got moved out of the
      window. Afterward when moving in the pointer might activate again.
      The escape filter ensures that the key press is forwarded to the
      application if it's a short press or if another key gets pressed during
      the three seconds. If the three seconds way fires, the later escape
      release is not sent to the application.
      This basic interaction is also ensured through an added auto test.
      This change implements T4605.
      Test Plan: Added auto test and nested KWin Wayland with D3488
      Reviewers: #kwin, #plasma_on_wayland
      Subscribers: plasma-devel, kwin
      Tags: #plasma_on_wayland, #kwin
      Differential Revision: https://phabricator.kde.org/D3506
  23. 17 Nov, 2016 1 commit
    • Martin Flöser's avatar
      Implement interactive window selection for Wayland platforms · fd83366e
      Martin Flöser authored
      The interactive window selection is implemented in InputRedirection
      through a dedicated InputEventFilter. The InputEventFilter so far takes
      care of pointer input and keyboard input. In addition it ensures that
      keyboard and pointer focus is reset on start and on end.
      With this change KillWindow now also works on Wayland, but only for X11
      windows, as the Wayland variant is not yet implemented.
      Test Plan: Tested in nested setup, auto-tests still needed
      Reviewers: #kwin, #plasma_on_wayland
      Subscribers: plasma-devel, kwin
      Tags: #plasma_on_wayland, #kwin
      Differential Revision: https://phabricator.kde.org/D3365
  24. 17 Oct, 2016 2 commits
    • Martin Flöser's avatar
      Fix shortcut triggering with shift+letter · 78a2732a
      Martin Flöser authored
      A shortcut with e.g. shift+w could not be triggered as shift is
      considered as consumed. It transforms the keysym to an uppercase variant
      thus it is consumed.
      This change checks for the condition that shift is pressed and is the
      only consumed modifier. If the current keysym is a letter the shift is
      removed from the consumed modifier again to still support the shortcut.
      BUG: 370341
      FIXED-IN: 5.8.2
      Reviewers: #kwin, #plasma_on_wayland
      Subscribers: plasma-devel, kwin
      Tags: #plasma_on_wayland, #kwin
      Differential Revision: https://phabricator.kde.org/D3015
    • Martin Flöser's avatar
      Support LEDs in Xkb and libinput · 4c7752c9
      Martin Flöser authored
      The Xkb implementation starts to track the state of the LEDs in the
      keymap and emits a signal whenever the LEDs change. This signal is
      connected to a method in LibInput::Connection which updates the led
      state on all devices and uses it to init the state of the led when a new
      device gets connected.
      BUG: 369214
      FIXED-IN: 5.8.2
      Test Plan: Connected a keyboard with LEDs and enabled NumLock and ScrollLock.
      Reviewers: #kwin, #plasma_on_wayland
      Subscribers: plasma-devel, kwin
      Tags: #plasma_on_wayland, #kwin
      Differential Revision: https://phabricator.kde.org/D2943
  25. 06 Oct, 2016 3 commits
    • Martin Flöser's avatar
      Only trigger mod-only-shortcuts if global shortcuts are enabled · db2ff13d
      Martin Flöser authored
      KWin supports blocking global shortcuts when a window is active through
      window specific rules. This change ensures that the modifier only
      shortcuts also honor the blocking of global shortcuts. If global
      shortcuts are disabled, they won't trigger any more.
      BUG: 370146
      FIXED-IN: 5.8.1
      Reviewers: #kwin, #plasma
      Subscribers: plasma-devel, kwin
      Tags: #kwin
      Differential Revision: https://phabricator.kde.org/D2952
    • Martin Flöser's avatar
      Workaround xkbcommon behavior concerning consumed modifiers · 421824b6
      Martin Flöser authored
      If a key could be turned into a keysym with a modifier xkbcommon
      considers the modifier as consumed even if not pressed.
      E.g. Alt+F3 considers alt as consumed as there is a keysym gnerated with
      Ctrl+Alt+F3 (vt switching).
      This change tries to workaround the problem by ignoring the consumed
      modifiers if there are more modifiers consumed than active. It's
      possible that this will create regressions for other shortcuts - we need
      to test it in the wild. Although this might cause regressions I'm aiming
      for Plasma/5.8 branch with the change. It only affects Wayland and fixes
      quite important shortcuts from window manager perspective (desktop
      switching (ctrl+f1 to ctrl+f4), desktop grid (ctrl+f8), present windows
      (ctrl+f9, ctrl+10), cube (ctrl+f11), user actions (alt+f3), close window
      (alt+f4)). If it causes regressions they need to be fixed as well in the
      Plasma/5.8 branch.
      A new API entry point for xkbcommon was proposed, but is not yet merged
      and there is no release with it yet. Once that is available the
      workaround should get removed and replaced by the new API call.
      BUG: 368989
      FIXED-IN: 5.8.1
      Test Plan: Going to restart session now with the change
      Reviewers: #kwin, #plasma_on_wayland
      Subscribers: plasma-devel, kwin
      Tags: #plasma_on_wayland, #kwin
      Differential Revision: https://phabricator.kde.org/D2945
    • Martin Flöser's avatar
      Only repeat one key · 3bc60893
      Martin Flöser authored
      So far KWin tried to repeat all pressed keys which should repeat. But
      this is not how X11 and e.g. QtWayland handle it. There only one key -
      the last one which got pressed - repeats. And this makes sense as the
      key is used to generate a keysym and that one KWin caches. Thus the
      logic so far resulted in incorrect keysyms to be generated during the
      repeat. E.g. pressing a, pressing b, releasing b would repeat b instead
      of the hold a as b was the last generated keysym.
      This change addresses this problem and let's only one key repeat at a
      time. When the currently repeating key gets released the repeat timer is
      stopped and other hold keys won't repeat any more. This also matches the
      behavior of X11 and QtWayland.
      BUG: 369091
      FIXED-IN: 5.8.1
      Reviewers: #kwin, #plasma_on_wayland
      Subscribers: plasma-devel, kwin
      Tags: #plasma_on_wayland, #kwin
      Differential Revision: https://phabricator.kde.org/D2941
  26. 14 Sep, 2016 1 commit
    • Martin Flöser's avatar
      Remove not-wanted modifiers prior to evaluating global shortcuts · 42358716
      Martin Flöser authored
      When triggering global shortcuts we are more interested in the hold
      keys than the currently active modifiers. E.g. capslock should not
      be seen as "shift is hold". Similar we need to remove consumed
      modifiers. Shift+5 is % and not Shift+% - the shift modifier is
      consumed and needs to be removed from shortcut evaluation.
      To support this we need to have the actual state directly from
      xkbcommon. Thus a new method is added which exposes the modifiers
      relevant for global shortcut matching. In addition on every key press
      all consumed modifiers are calculated and kept so that they can be
      used for shortcut matching.
      In addition a workaround is added for Backtab. Similar workaround
      exists in kglobalaccel for X11. The problem is that our shortcuts are
      stored incorrectly: Shift+Tab instead of Backtab. Thus a mapping back
      is required. To make everything worse KWin registers the wrong key
      sequence "Alt+Shift+Backtab" which doesn't make any sense and is
      broken on X11 at least.
      The workaround supports both special cases. The one for Backtab should
      be turned into Shift+Tab and also KWin's special case of adding shift
      to backtab.
      CCBUG: 368581
      Reviewers: #kwin, #plasma_on_wayland, bshah
      Subscribers: plasma-devel, kwin
      Tags: #plasma_on_wayland, #kwin
      Differential Revision: https://phabricator.kde.org/D2768
  27. 30 Aug, 2016 1 commit
    • Martin Flöser's avatar
      Support compose key in xkbcommon integration · a98a1b13
      Martin Flöser authored
      The Xkb class now creates a compose key table and a state object and
      feeds all key presses through the compose state machine.
      Xkb now tracks the latest keysym which is provided through new method
      currentKeysym. This is now used when creating a QKeyEvent instead of
      passing the key code to the xkb state. With that the keysym can also
      be updated through the compose state system.
      This only affects KWin internal usage where text is composed, e.g. the
      present windows effect filter. Wayland clients do not gain compose key
      support, though.
      Minimum xkbcommon version raised to 0.5 as compose key support is new
      in that version.
      Test Plan: Enabled compose key support in keymap and verified through DebugConsole
      Reviewers: #kwin, #plasma_on_wayland
      Subscribers: plasma-devel, kwin
      Tags: #plasma_on_wayland, #kwin
      Differential Revision: https://phabricator.kde.org/D2622
  28. 29 Aug, 2016 1 commit
  29. 21 Aug, 2016 1 commit
    • Martin Flöser's avatar
      Only trigger keyboard layout OSD if KWin manages input · 7d7bbcc5
      Martin Flöser authored
      On platforms where KWin does not manage input, that is does not
      use libinput, KWin gets the keyboard layout from another place, e.g.
      the X server. In that case KWin should of course not trigger the
      layout changed OSD if KWin thinks (for whatever reason) that the
      layout changed.
      BUG: 367637
      Reviewers: #kwin, #plasma_on_wayland
      Subscribers: plasma-devel, kwin
      Tags: #plasma_on_wayland, #kwin
      Differential Revision: https://phabricator.kde.org/D2521