1. 28 Oct, 2016 3 commits
    • Martin Flöser's avatar
      [autotest] fix WaylandConnectionThread::testConnectFd · e2be6200
      Martin Flöser authored
      The test destroyed the connection prior to destroying registry and event
      queue. Thus causing problems. Hopefully this change fixes the segfault
      on build.kde.org.
      e2be6200
    • Martin Flöser's avatar
      [autotests] Try fixing TestWaylandOutputManagement · 24bce577
      Martin Flöser authored
      The test has KWayland::Client objects like Registry as member variables
      of the test object. This causes the objects to be destroyed with the
      dtor after cleanupTestCase is run which destroys the connection and
      Wayland server. At least on the CI system this seems to cause problem.
      
      In general our tests do not keep any state around, especially not
      KWayland::Client objects. The normal way is to have a new dedicated
      client connection for every test method. This test doesn't follow this
      approach at all.
      
      In case that this change does not fix the test and still crashes on
      build.kde.org the only option is to drop the test and replace it by a
      new variant which follows the approach of other tests.
      24bce577
    • Martin Flöser's avatar
      [autotests] Improve TestWaylandOutputManagement::cleanupTestCase · 35a7a1de
      Martin Flöser authored
      Reorder the cleanup code. It doesn't make sense to delete the client
      side objects after deleting the server side objects. This might be a
      reason for the failing tests on build.kde.org.
      35a7a1de
  2. 26 Oct, 2016 1 commit
  3. 25 Oct, 2016 2 commits
  4. 24 Oct, 2016 3 commits
    • Martin Flöser's avatar
      [server] Fix crash on updating focused keyboard surface · 4f100d2a
      Martin Flöser authored
      Summary:
      In case the current selection does not have a DataSourceInterface
      updating the focused keyboard surface resulted in a crash. The current
      selection is sent to the DataDeviceInterface of the newly focused
      client and thus a DataOfferInterface would be created for a null
      DataSourceInterface.
      
      This is a similar fix as D3148 and D3149.
      
      Test Plan: Test case added which used to crash before
      
      Reviewers: #plasma_on_wayland
      
      Subscribers: plasma-devel
      
      Tags: #plasma_on_wayland
      
      Differential Revision: https://phabricator.kde.org/D3150
      4f100d2a
    • Martin Flöser's avatar
      [server] Fix possible crash on creation of DataDevice · b03cda2b
      Martin Flöser authored
      Summary:
      This is a similar condition as D3148. If a DataDeviceInterface is
      created for the currently focused keyboard Surface the current selection
      is sent to the new DataDeviceInterface. If the current selection does
      not have a DataSourceInterface a DataOfferInterface for a null
      DataSourceInterface would be created and result in a crash.
      
      This change verifies that there is a DataSourcInterface on the current
      selection prior to sending out the selection.
      
      Test Plan:
      A test case is added which simulates the condition by
      using two clients.
      
      Reviewers: #plasma_on_wayland
      
      Subscribers: plasma-devel
      
      Tags: #plasma_on_wayland
      
      Differential Revision: https://phabricator.kde.org/D3149
      b03cda2b
    • Martin Flöser's avatar
      [server] Ensure we have a DataSource on the DataDevice in setSelection · e99cc6da
      Martin Flöser authored
      Summary:
      SeatInterface provides a way to set the current selection. This method
      did not verify whether the new DataDeviceInterface actually has a
      DataSourceInterface. If there is no DataSourceInterface on that
      DataDeviceInterface the selection should not be sent to the current
      selection owner. This results in a crash as DataOfferInterface
      (correctly) doesn't expect the passed in DataSourceInterface to be null.
      
      To ensure we don't hit this again the DataOfferInterface ctor gained an
      Q_ASSERT to validate the DataSourceInterface.
      
      Reviewers: #plasma_on_wayland
      
      Subscribers: plasma-devel
      
      Tags: #plasma_on_wayland
      
      Differential Revision: https://phabricator.kde.org/D3148
      e99cc6da
  5. 20 Oct, 2016 1 commit
    • Martin Flöser's avatar
      [tools/generator] Improve resource destruction on server side · efbd11b8
      Martin Flöser authored
      The generator misdetected the destructor Requests by looking at the
      arguments instead of the type of the request.
      
      In addition the destructor handling changed in KWayland::Server since
      the generator got created. There is now a shared implementation for the
      Resource destruction. The generator is adjusted to generate the code for
      that and implements the destruction for the Global resource destruction.
      efbd11b8
  6. 18 Oct, 2016 1 commit
    • Martin Flöser's avatar
      Add request to have focus in a PlasmaShellSurface of Role Panel · ee3f47a5
      Martin Flöser authored
      Summary:
      By default a panel does not take focus. But there are panels which
      should get keyboard focus. Examples in a Plasma session are the widget
      explorer.
      
      This change adds a new request to PlasmaShell interface to specify
      whether a panel should get focus. The compositor can use this request to
      decide whether to pass focus to a panel.
      
      Reviewers: #plasma_on_wayland
      
      Subscribers: plasma-devel
      
      Tags: #plasma_on_wayland
      
      Differential Revision: https://phabricator.kde.org/D3035
      ee3f47a5
  7. 17 Oct, 2016 6 commits
    • Martin Flöser's avatar
      Add auto-hiding panel support to PlasmaShellSurface interface · e772a3e9
      Martin Flöser authored
      Summary:
      This change adds support for auto-hiding panels. A PlasmaShellSurface
      with Role Panel and PanelBehavior AutoHide can request to get
      auto-hidden at a screen edge. The compositor will then not show the
      surface although it is still mapped and will show it again once the
      screen edge gets triggered.
      
      The interface is extended by one new request to allow the client to
      request the hiding of the surface. In addition two events are added to
      inform the client when the surface got hidden and when it got shown
      again.
      
      Reviewers: #plasma_on_wayland
      
      Subscribers: plasma-devel
      
      Tags: #plasma_on_wayland
      
      Differential Revision: https://phabricator.kde.org/D3007
      e772a3e9
    • Martin Flöser's avatar
      Fix build (try 1) · 7d59e91f
      Martin Flöser authored
      Sorry, it compiled on my system. Trying to fix.
      7d59e91f
    • Martin Flöser's avatar
      Support passing generic QIcon through PlasmaWindow interface · bd2b9665
      Martin Flöser authored
      Summary:
      Especially for Xwayland windows the compositor might not have a themed
      icon name. Resulting in a task manager not having dedicated icons for
      Xwayland windows.
      
      This change deprecates the way how a compositor is supposed to set the
      window icon. Instead of passing the themed icon name, it is now supposed to
      pass the QIcon. In case it's a themed icon the existing way to pass to
      the client is used.
      
      Otherwise a new event is used to inform the client that there is an icon
      - no data is transmitted at this point. The client can then create a
      file descriptor and pass it to the compositor. The compositor serializes
      the icon into the file descriptor and the client can read from it. This
      all happens transparently on client side there is no api change at all.
      
      The writing and reading of the icon is done in a thread. Due to that
      Qt5::Concurrent is now a required dependency instead of an optional
      dependency.
      
      Reviewers: #plasma_on_wayland, hein
      
      Subscribers: plasma-devel
      
      Tags: #plasma_on_wayland
      
      Differential Revision: https://phabricator.kde.org/D3049
      bd2b9665
    • Martin Flöser's avatar
      [server] Implement the generic window property in QtSurfaceExtension · fe95610a
      Martin Flöser authored
      Summary:
      Qt supports setting generic data on a QWindow. This change implements
      the callback properly and forwards the property to the surface extension
      instance. This allows the compositor to e.g. listen to
      DynamicPropertyChangeEvents and get access to all additional set
      properties.
      
      Reviewers: #plasma_on_wayland
      
      Subscribers: plasma-devel
      
      Tags: #plasma_on_wayland
      
      Differential Revision: https://phabricator.kde.org/D3045
      fe95610a
    • Martin Flöser's avatar
      [client] Add methods to get ShellSurface from a QWindow · 75478ec7
      Martin Flöser authored
      Summary:
      This is similar to what already exists for Surface. With this methods
      it's possible to get a ShellSurface from an existing QWindow and to
      perform low level native calls directly for the ShellSurface.
      
      Similar calls will also be needed for XdgShellSurface, though the
      xdg_shell_surface is not yet available through the native interface.
      
      Test Plan: Used in breeze to trigger window moving
      
      Reviewers: #plasma_on_wayland
      
      Subscribers: plasma-devel
      
      Tags: #plasma_on_wayland
      
      Differential Revision: https://phabricator.kde.org/D3018
      75478ec7
    • Martin Flöser's avatar
      [server] Send pointer events to all wl_pointer resources of a client · 79cf85cf
      Martin Flöser authored
      Summary:
      This is what Weston does. With this change clients can create
      multiple wl_pointer instances and thus get events reported to all of them.
      This will be needed to e.g. support drag on empty area in Breeze on Wayland.
      
      A similar change was done for wl_keyboard already in 862bb68e.
      
      Test Plan: Seat auto test still passes
      
      Reviewers: #plasma_on_wayland
      
      Subscribers: plasma-devel
      
      Tags: #plasma_on_wayland
      
      Differential Revision: https://phabricator.kde.org/D3016
      79cf85cf
  8. 12 Oct, 2016 1 commit
  9. 11 Oct, 2016 5 commits
    • Martin Flöser's avatar
    • Martin Flöser's avatar
    • Martin Flöser's avatar
      Fix build · 160858af
      Martin Flöser authored
      Add missing include of QVector. Sorry built on my system without it.
      160858af
    • Martin Flöser's avatar
      [server] Use deleteLater when a ClientConnection gets destroyed · c0aa3a4a
      Martin Flöser authored
      Summary:
      In the situation that a wl_client gets destroyed while still
      wl_resources are around it can happen that one of them calls into the
      ClientConnection during the cleanup handling which gets triggered at the
      same time. This can then trigger a crash.
      
      This change uses deleteLater for the ClientConnection and sets the hold
      wl_client pointer to null instead of deleting directly. So the
      ClientConnection is still around while the Resources gets cleaned up.
      This is similar to the cleanup of Resource where on unbind the
      wl_resource pointer is set to null and the Resource gets delete later.
      
      BUG: 370232
      FIXED-IN: 5.28
      
      Reviewers: #plasma, bshah
      
      Subscribers: plasma-devel
      
      Tags: #plasma_on_wayland
      
      Differential Revision: https://phabricator.kde.org/D3004
      c0aa3a4a
    • Martin Flöser's avatar
      Implement support for the relative pointer protocol · 6dd6729f
      Martin Flöser authored
      Summary:
      This change implements the zwp_relative_pointer_v1 protocol which allows
      to send relative motion events.
      
      The (unstable) protocol consists of a RelativePointerManager which
      creates RelativePointers for a given Pointer. This interface currently
      only has one event to report the relative motion. It carries the delta,
      the non-accelerated-delta and a timestamp in microsends granularity.
      
      On the server side the implementation is mostly internal. Once a
      RelativePointerManagerInterface is created one can send relative motion
      events through the SeatInterface. The SeatInterface takes care of
      sending it to the responding RelativePointerInterface. The protocol does
      not restrict the sending of "normal" and relative motion events. Thus it
      can be combined in any way one wants. This allows to have a rather
      simple implementation. A user of the SeatInterface can just start to
      feed the relative motion events (if the information is available) to the
      SeatInterface together with the pointer events.
      
      On client side a new RelativePointerManager and RelativePointer class
      are added. The RelativePointerManager creates the RelativePointer for a
      given Pointer. The event sent to RelativePointer is transformed in a
      normal signal.
      
      Reviewers: #plasma
      
      Subscribers: plasma-devel
      
      Tags: #plasma_on_wayland
      
      Differential Revision: https://phabricator.kde.org/D2978
      6dd6729f
  10. 10 Oct, 2016 1 commit
    • Martin Flöser's avatar
      [server] Cancel previous selection from SeatInterface::setSelection · 5d6ab2c2
      Martin Flöser authored
      Summary:
      When changing the selection the previous selection needs to be
      cancelled. This is already done in the "normal" updating of the
      selection. If the previous selection doesn't get cancelled QtWayland is
      not able to accept anything new from the clipboard. The setSelection
      didn't cancel it yet, due to that copy from Xwayland to QtWayland
      windows doesn't work in KWin as KWin uses the setSelection call for the
      Xwayland clipboard.
      
      With this change the cancelling of previous selection is moved into a
      dedicated method and called from the normal way and the setSelection
      way.
      
      Reviewers: #plasma_on_wayland, bshah
      
      Subscribers: plasma-devel
      
      Tags: #plasma_on_wayland
      
      Differential Revision: https://phabricator.kde.org/D2997
      5d6ab2c2
  11. 09 Oct, 2016 1 commit
  12. 06 Oct, 2016 1 commit
    • Martin Flöser's avatar
      [server] Send key events to all wl_keyboard resources of a client · 862bb68e
      Martin Flöser authored
      Summary:
      This is what Weston does. With this change clients can create multiple
      wl_keyboard instances and thus get events reported to all of them. This
      will be needed to e.g. support KModifierKeyInfo on Wayland.
      
      Similar changes are probably also needed for pointer and touch.
      
      Test Plan:
      Auto test for seat still passes. A custom change to kscreenlocker
      is able to report whether caps lock is on with this change.
      
      Reviewers: #plasma_on_wayland
      
      Subscribers: plasma-devel
      
      Tags: #plasma_on_wayland
      
      Differential Revision: https://phabricator.kde.org/D2963
      862bb68e
  13. 02 Oct, 2016 1 commit
  14. 15 Sep, 2016 1 commit
    • Martin Flöser's avatar
      [server] Don't send key release for not pressed keys and no double key press · 98628f93
      Martin Flöser authored
      Summary:
      This change makes use of the internal key state in better way. If a
      key is not considered pressed, no key release is sent. This can happen
      for example if the compositor grabs a key press (global shortcut) but not
      the release. The Wayland client cannot do anything with the release as it
      never got the press. Thus it doesn't make sense to send the release.
      
      Similar if a key is already pressed, it doesn't make sense to send
      another press event. This ensures that if the server sends in repeating
      key presses they are filtered out. Key repeat is handled on client side.
      Also if several physical keys send the same key code, pressing them at
      the same time won't send double press/release event.
      
      This change might cause regressions in KWin in case KWin does not handle
      the situation correctly. But that would be a bug in KWin which needs to
      be fixed there. If it causes regressions the bug might have shown in
      other situations as well.
      
      BUG: 366625
      FIXED-IN: 5.27
      
      Reviewers: #plasma_on_wayland, #kwin
      
      Subscribers: plasma-devel, kwin
      
      Tags: #plasma_on_wayland, #kwin
      
      Differential Revision: https://phabricator.kde.org/D2786
      98628f93
  15. 14 Sep, 2016 1 commit
    • Martin Flöser's avatar
      [server] When replacing the clipboard selection previous DataSource needs to be cancelled · 81635159
      Martin Flöser authored
      Summary:
      According to the Wayland documentation a data source needs to be
      cancelled whenever it is no longer valid. A reason for no longer being
      valid is that the data source has been replaced by another data source.
      
      So far KWayland did not implement this aspect which resulted in clipboard
      breaking in QtWayland applications. As soon as one copied once from an
      application it was no longer possible to paste to it from another
      application.
      
      With this change the data source gets properly cancelled and also
      ensured that the server code doesn't run into a possible crash condition
      when trying to cancel an already unbound data source.
      
      BUG: 368391
      
      Reviewers: #plasma_on_wayland
      
      Subscribers: plasma-devel
      
      Tags: #plasma_on_wayland
      
      Differential Revision: https://phabricator.kde.org/D2743
      81635159
  16. 13 Sep, 2016 3 commits
    • Martin Flöser's avatar
      Try to fix build: add missing includes · 5967ecd1
      Martin Flöser authored
      Sorry about that, it compiled on my system.
      5967ecd1
    • Martin Flöser's avatar
      Add support for Surface enter/leave events · 4f9dae46
      Martin Flöser authored
      Summary:
      This change implements support for the wl_surface events enter and
      leave. Those events are emitted whenever a surface becomes visible on
      an output by e.g. mapping the surface, moving or resizing it. Similar
      the leave is sent whenever the surface is no longer on an output.
      
      The server side is not yet fully complete yet. It also needs to emit
      when the client binds the output another time and needs to send a
      leave before destroying the output.
      
      Reviewers: #plasma_on_wayland
      
      Subscribers: plasma-devel
      
      Tags: #plasma_on_wayland
      
      Differential Revision: https://phabricator.kde.org/D2528
      4f9dae46
    • Martin Flöser's avatar
      [client] Track all created Outputs and add static get method · 782865ae
      Martin Flöser authored
      Summary:
      This change starts to track all Outputs and introduces a static
      method to get an Output* for a wl_output* in case the wl_output* is
      known to Output.
      
      This is needed for the enter and leave events on wl_surface.
      
      Reviewers: #plasma_on_wayland
      
      Subscribers: plasma-devel
      
      Tags: #plasma_on_wayland
      
      Differential Revision: https://phabricator.kde.org/D2526
      782865ae
  17. 10 Sep, 2016 1 commit
  18. 05 Sep, 2016 2 commits
  19. 22 Aug, 2016 3 commits
    • Martin Flöser's avatar
      [autotests] Try to make TestWindowManagement more robust · e96c78f1
      Martin Flöser authored
      The test started to segfault on build.kde.org. It looks like an event
      survives the destruction of the server. Thus this change tries to
      dispatchEvents once more before destroying everything.
      e96c78f1
    • Martin Flöser's avatar
      [autotest] Try making IdleTest more robust · 55f417b4
      Martin Flöser authored
      It started to fail on build.kde.org with a segfault. While I cannot
      reproduce this locally it looks like client objects survive to the next
      test and thus cause issues.
      
      This change attempts to reduce the risk by making sure that everything
      is cleaned up correctly. If that fixes the issue we can look into a
      proper fix.
      55f417b4
    • Martin Flöser's avatar
      Make linux/input.h compile time optional · 73f110c7
      Martin Flöser authored
      Summary:
      Instead of hard depending on the include of linux/input.h we check
      whether that include file exists and properly ifdef all usages.
      
      Unfortunately there is no replacement for those parts which do mapping
      of input event codes.
      
      Reviewers: #plasma_on_wayland
      
      Subscribers: plasma-devel
      
      Tags: #plasma_on_wayland
      
      Differential Revision: https://phabricator.kde.org/D2344
      73f110c7
  20. 08 Aug, 2016 2 commits