1. 11 Jul, 2017 1 commit
    • Martin Flöser's avatar
      Restrict move resize area only on the screen the strut window is on · 14c8440f
      Martin Flöser authored
      Summary:
      By allowing panels between screens in 5.8 to have a strut we created a
      "regression" in KWin. KWin always was wrong, just we didn't notice as
      neither Plasma nor previously Kicker set a strut on panels between shared
      screen edges.
      
      The strut is created from the edge of the overall screen setup. This
      means a panel on the left edge of a screen on the right has the strut
      starting from the left screen. KWin uses the strut to restrict the move
      resize area: a window decoration is not allowed to go below a strut. Thus
      it becomes impossible to move the window from the right to the left
      screen.
      
      This change tries to solve this problem by only restricting the move area
      on the screen the window with the strut is on. E.g. if the window is on
      the right screen, the left screen is not affected. Thus it's possible
      again to move a window from one screen to the other as the added test
      case shows.
      
      Unfortunately there are still corner cases where this won't work
      correctly. If the window is on both screens this won't work. It is also a
      rather heavy change for KWin and thus it's targeted for master and not
      for the 5.10 or the 5.8 branch. If we notice that the patch works well
      and doesn't create further issues, it should be considered for
      backporting.
      
      BUG: 371199
      CCBUG: 370510
      FIXED-IN: 5.11
      
      Test Plan: Added test case
      
      Reviewers: #kwin, #plasma
      
      Subscribers: plasma-devel, kwin
      
      Tags: #kwin
      
      Differential Revision: https://phabricator.kde.org/D6562
      14c8440f
  2. 09 Jul, 2017 1 commit
    • Martin Flöser's avatar
      Add ConsoleKit2 support for launching Wayland sessions · 6ebc3d65
      Martin Flöser authored
      Summary: ConsoleKit2 as of version 1.1.1 implements the Session Controller dbus calls required by Kwin to run under Wayland. This patch first looks for the login1 service before attempting the ConsoleKit service.
      
      Test Plan:
      On a system running ConsoleKit2, logging into a text console and running:
      
      export $(dbus-launch); export QT_QPA_PLATFORM=wayland; startplasmacompositor
      
      Most of this patch is just shuffling code around to support both logind and CK2.
      
      Reviewers: #kwin, graesslin
      
      Reviewed By: #kwin, graesslin
      
      Subscribers: graesslin, kwin
      
      Tags: #kwin
      
      Differential Revision: https://phabricator.kde.org/D6291
      6ebc3d65
  3. 08 Jul, 2017 1 commit
  4. 07 Jul, 2017 1 commit
  5. 06 Jul, 2017 6 commits
    • Martin Flöser's avatar
      Merge branch 'Plasma/5.10' · 0d941c6e
      Martin Flöser authored
      0d941c6e
    • Martin Flöser's avatar
      Raise minimum required Mesa version to 10.0 · 88e56f63
      Martin Flöser authored
      Summary:
      The currently minimum required Mesa version was 8.0 and KWin had special
      caseing for Mesa 9.1. This is no longer realistic, no distribution
      provides such an old Mesa version. So let's increase the version a
      little bit.
      
      Overview of Mesa versions supported by distributions:
       * Debian stable (stretch): 13.0
       * Debian oldstable (jessie): 10.3
       * Debian oldstable backports: 13.0
       * Debian oldoldstable (wheezy): 8.0
       * Ubuntu 16.04 LTS: 11.2
       * Ubuntu 16.04 LTS updates: 12.0
       * Ubuntu 17.04: 17.0
       * openSUSE Tumbleweed: 17.1
       * openSUSE Leap 42.2: 11.2
       * openSUSE Leap 42.3: 17.0
       * Arch: 17.1
       * Fedora 24: 12.0
       * Fedora 25: 17.0
       * Fedora 26: 17.1
      
      Test Plan: Compiles
      
      Reviewers: #kwin, #plasma
      
      Subscribers: plasma-devel, kwin
      
      Tags: #kwin
      
      Differential Revision: https://phabricator.kde.org/D6462
      88e56f63
    • Martin Flöser's avatar
      [qpa] Prevent crash due to Surface getting null · 962a2e39
      Martin Flöser authored
      Summary:
      This is a regression due to changes in Breeze to support Qt 5.8+ behavior
      change. KWin's own QPA operates like < Qt 5.7 and breeze was programmed
      against that. Due to that it can happen now that Breeze hits code paths
      in which KWin does not have a surface.
      
      To trigger one only needed to open the user actions menu twice.
      
      This change adds a test case which simulates the problem and fixes all
      crashes happening in the code path.
      
      Most likely shadows are now broken for KWin's own windows, this change is
      only to prevent the crash and thus is for 5.10 branch, while shadow
      fixing will go to master branch.
      
      BUG: 382063
      FIXED-IN: 5.10.4
      
      Test Plan: New test case
      
      Reviewers: #kwin, #plasma
      
      Subscribers: plasma-devel, kwin
      
      Tags: #kwin
      
      Differential Revision: https://phabricator.kde.org/D6533
      962a2e39
    • Martin Flöser's avatar
      Merge branch 'Plasma/5.10' · 46085d3b
      Martin Flöser authored
      46085d3b
    • Martin Flöser's avatar
      [platforms/x11] Fix incorrect screen edge approaching with switch desktop on window move · 4e9456a8
      Martin Flöser authored
      Summary:
      There is a regression in WindowBasedEdge::soStopApproaching. Due to
      only operate when the edge activates for pointer it is possible that
      the cursor polling stays active. Explaining the situation:
      
      1. Activate switch desktop when moving window
      2. Start moving a window
      3. Move mouse into the approach geometry
      -> doStartApproaching activates as we are moving a window
      4. stop moving window
      -> doStopApproaching early exits as the position does not activate for
         pointer any more - we are not moving a window
      -> cursor polling is still connected and whenever mouse enters edge
         approaching is started
      
      The analysis shows that the check whether activates for pointer is wrong
      in the case of stop approaching. If the edge started to approach, we also
      need to stop approaching.
      
      This change addresses the problem by turning the check into whether the
      connection for cursor position update is set.
      
      This is the third bug fix to the X11 screen edge handling after
      introducing touch screen edges. This needs more manual testing by
      everybody in the Plasma team who is still using X11.
      
      BUG: 381849
      FIXED-IN: 5.10.4
      
      Reviewers: #kwin, #plasma
      
      Subscribers: plasma-devel, kwin
      
      Tags: #kwin
      
      Differential Revision: https://phabricator.kde.org/D6467
      4e9456a8
    • Martin Flöser's avatar
      [effects/slideback] Ignore windows which are not in visible area · 24ff9385
      Martin Flöser authored
      Summary:
      The PresentWindows effect does not hide the window to close the selected
      window. Instead it moves it outside the visible area. As this is a
      "special" KWin window it is on top of the stacking order and needs to be
      ignored in the slideback effect.
      
      Instead of doing a special casing for this window the effect is changed
      to ignore windows outside the visible area in general. Windows outside
      the visible area just don't make sense to block the slideback effect.
      
      BUG: 381402
      FIXED-IN: 5.10.4
      
      Test Plan: Slideback works after using Present Windows effect
      
      Reviewers: #kwin, #plasma
      
      Subscribers: plasma-devel, kwin
      
      Tags: #kwin
      
      Differential Revision: https://phabricator.kde.org/D6468
      24ff9385
  6. 03 Jul, 2017 1 commit
  7. 01 Jul, 2017 7 commits
    • Martin Flöser's avatar
      Prevent endless loop in checkGLError due to GL_CONTEXT_LOST · aefb5f4d
      Martin Flöser authored
      Summary:
      The GL_CONTEXT_LOST flag is not reset when calling glGetError. This of
      course bites with: "Thus, glGetError should always be called in a loop,
      until it returns GL_NO_ERROR, if all error flags are to be reset."
      (see https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/glGetError.xhtml)
      
      As KWin calls checkGLError from init call it can result in a freeze of
      KWin. This is a regression reported multiple times since the release of
      5.10.3 which enabled GLX_NV_robustness_video_memory_purge extension.
      
      Please note that I am not able to test this change. I do not have an
      NVIDIA card and are not hiting the problem. I have no way to simulate
      the code. I do not know whether the change will fix the problem, it is
      based on what others do. Inspiration for this change is mostly from
      mutter: https://git.gnome.org/browse/mutter/commit/?id=d4d2bf0f6c1737256b921c4f1dedd3a95138cab9
      
      BUG: 381870
      FIXED-IN: 5.10.3.1
      
      Test Plan: See above, I can only compile check the change
      
      Reviewers: #kwin, #plasma
      
      Subscribers: plasma-devel, kwin
      
      Tags: #kwin
      
      Differential Revision: https://phabricator.kde.org/D6464
      aefb5f4d
    • Martin Flöser's avatar
      Remove roundtrip to XServer from Workspace::xStackingOrder · 630514d5
      Martin Flöser authored
      Introduce a method Workspace::markXStackingOrderAsDirty
      
      Summary:
      This method replaces the calls x_stacking_dirty = true in the code base
      allowing for further refactoring of that functionality.
      
      Remove roundtrip to XServer from Workspace::xStackingOrder
      
      The method xStackingOrder is only used during a Compositor paint pass.
      If the stacking order had changed, the method updated the stacking order
      from X by performing a sync XQueryTree. With other words we had a round
      trip to the X server directly in the paint pass.
      
      This change rearchitectures this area by making better use of xcb. When
      we notice that the stacking order changed and an XQueryTree is needed,
      we directly send out the request. When xStackingOrder is finally called,
      which normally happens a few milliseconds later, the reply is retreived.
      In the worst case it still blocks, but in most cases the roundtrip is
      gone.
      
      If the stacking order changed again before accessing xStackingOrder the
      running request is cancelled and a new request is issued. So whenever we
      get into xStackingOrder it will have the current state.
      
      The updating of the xStackingOrder is moved into a dedicated method and
      xStackingOrder invokes it through a const_cast instead of operating on
      mutable variables.
      
      Test Plan: Normal system usage, no issues
      
      Reviewers: #kwin, #plasma
      
      Subscribers: plasma-devel, kwin
      
      Tags: #kwin
      
      Differential Revision: https://phabricator.kde.org/D6323
      630514d5
    • Martin Flöser's avatar
      Introduce a method Workspace::markXStackingOrderAsDirty · 0d8f1140
      Martin Flöser authored
      This method replaces the calls x_stacking_dirty = true in the code base
      allowing for further refactoring of that functionality.
      0d8f1140
    • Martin Flöser's avatar
      [platforms/x11] Request OpenGL 2.1 instead of 1.2 · be89c16b
      Martin Flöser authored
      Summary:
      Mismatch in the major/minor version. Requesting 1.2 doesn't make any
      sense given that KWin requires 2.1.
      
      Reviewers: #kwin, #plasma
      
      Subscribers: plasma-devel, kwin
      
      Tags: #kwin
      
      Differential Revision: https://phabricator.kde.org/D6401
      be89c16b
    • Martin Flöser's avatar
      Merge branch 'Plasma/5.10' · adceb9c0
      Martin Flöser authored
      adceb9c0
    • Martin Flöser's avatar
      Restore active client after ending showing desktop · 113be5fa
      Martin Flöser authored
      Summary:
      Showing desktop requests focus on the desktop window. This means the
      active window is reset. When ending showing desktop the state was not
      restored.
      
      This change addresses this problem by requesting focus to the best
      window.
      
      BUG: 375993
      FIXED-IN: 5.10.4
      
      Test Plan: New autotest and manual testing
      
      Reviewers: #kwin, #plasma
      
      Subscribers: plasma-devel, kwin
      
      Tags: #kwin
      
      Differential Revision: https://phabricator.kde.org/D6420
      113be5fa
    • Martin Flöser's avatar
      Skip Shader self test for Mesa >= 17 · 43816119
      Martin Flöser authored
      Summary:
      We are getting reports about the shader self test failing in a false
      positive way on Mesa 17. We already have such false positve results
      for NVIDIA quadro and went with disabling the self test.
      
      Most likely our self test has a problem or the rendering of the first
      frame has a problem. But disabling compositing because our rendering of
      the first frame is broken, is too much.
      
      Let's better be pro user here and disable the shader self test till we
      fixed the root problem.
      
      BUG: 376801
      FIXED-IN: 5.10.4
      
      Test Plan: It compiles.
      
      Reviewers: #kwin, #plasma
      
      Subscribers: plasma-devel, kwin
      
      Tags: #kwin
      
      Differential Revision: https://phabricator.kde.org/D6426
      43816119
  8. 28 Jun, 2017 2 commits
  9. 27 Jun, 2017 1 commit
  10. 26 Jun, 2017 5 commits
    • Martin Flöser's avatar
      Refactor the specification of OpenGL context attributes · 3f4995fb
      Martin Flöser authored
      Summary:
      The current way to specify the OpenGL context attributes does no longer
      scale as can be seen in D6344. There are too many different context
      attribute sets and with every addition we grow lots of copied code. The
      chances to introduce errors in that code which is difficult to debug are
      very high. As can be seen in the glx backend which defines major 1,
      minor 2, but it should be major 2, minor 1.
      
      This change reworks this code by creating a builder class which contains
      only an abstract definition of what needs to be in the attributes.
      E.g. the version, whether it's robust and so on.
      
      Now we can just have a list of possible attributes in a well described
      way:
          auto builder;
          builder.setVersion(3, 1);
          builder.setRobust(true);
      
      All possible builders are added to a list and operated on in a for loop
      which tries to creat a context. Once it succeeded it breaks the list.
      In addition a debug statement is added which prints out the set of
      options which went into the context.
      
      So far this is only done for EGL, GLX can follow once D6344 is merged.
      
      Test Plan: New unit test added, kwin_wayland OpenGL tests run and verified
      
      Reviewers: #kwin, #plasma
      
      Subscribers: plasma-devel, kwin
      
      Tags: #kwin
      
      Differential Revision: https://phabricator.kde.org/D6396
      3f4995fb
    • Martin Flöser's avatar
      Merge branch 'Plasma/5.10' · a6d0bc27
      Martin Flöser authored
      a6d0bc27
    • Martin Flöser's avatar
      Properly block the edge also for touch screen edges · 6267d597
      Martin Flöser authored
      Summary:
      There was a regression introduced with bug fix eec6afe6 which added
      a for pointer events only check also to doUpdateBlocking. Do to that
      the edge blocking mechanism didn't work for touch edges.
      
      BUG: 380476
      FIXED-IN: 5.10.3
      
      Test Plan:
      verified with xwininfo that there is no longer a window when
      in full screen. Activated edges through touch and pointer
      
      Reviewers: #kwin, #plasma
      
      Subscribers: plasma-devel, kwin
      
      Tags: #kwin
      
      Differential Revision: https://phabricator.kde.org/D6304
      6267d597
    • Martin Flöser's avatar
      [platforms/x11] Add support for GLX_NV_robustness_video_memory_purge · 97fa72ee
      Martin Flöser authored
      Summary:
      Based on earlier phab-request D2079. Adds the nvidia memory purge
      extension to the robust context creation.
      
      BUG: 344326
      FIXED-IN: 5.10.3
      
      Test Plan: Only compile tested as I don't have an NVIDIA card.
      
      Reviewers: #kwin, #plasma
      
      Subscribers: plasma-devel, kwin
      
      Tags: #kwin
      
      Differential Revision: https://phabricator.kde.org/D6344
      97fa72ee
    • Oleg `Kanedias` Chernovskiy's avatar
      Implement software cursor in OpenGL backend · 247ef43f
      Oleg `Kanedias` Chernovskiy authored
      This change is needed for Wayland screen recording apps to work
      correctly. With this change the cursor is actually visible using GBM
      buffer passing protocol.
      
      Previously OpenGL backend did not support software cursor. If launching
      in DRM/OpenGL mode with flicked on software cursor it only rendered
      scene, but not the cursor image.
      
      Differential Revision: https://phabricator.kde.org/D6186
      247ef43f
  11. 25 Jun, 2017 3 commits
  12. 24 Jun, 2017 2 commits
  13. 23 Jun, 2017 2 commits
  14. 22 Jun, 2017 1 commit
  15. 20 Jun, 2017 6 commits
    • David Edmundson's avatar
      Make shadows work for windows 100% width or height · b7cb301d
      David Edmundson authored
      Summary:
      Clients provide shadows as 9 images, which then get split into relevant quads.
      To work out the full width we need the size of an item on the left, the middle and the right.
      
      Some elements can be legitiamtely missing so to work out the width of the left edge we need to consider
      all 3 of topleft,left,bottomleft.
      
      Currently we checked both corners in case one was missing, but it's legitimate for both to be missing if the shadow
      stretches the whole way.
      
      BUG: 380825
      
      Test Plan: Shadow on panel, rest looks the same
      
      Reviewers: #plasma, mart
      
      Reviewed By: #plasma, mart
      
      Subscribers: graesslin, mart, plasma-devel, kwin, #kwin
      
      Tags: #plasma
      
      Differential Revision: https://phabricator.kde.org/D6164
      b7cb301d
    • Martin Flöser's avatar
      Make Workspace::switchWindow operate on AbstractClient · 763fbf5f
      Martin Flöser authored
      Summary:
      By using AbstractClient instead of Client the method works also for
      Wayland windows.
      
      Reviewers: #kwin, #plasma
      
      Subscribers: plasma-devel, kwin
      
      Tags: #kwin
      
      Differential Revision: https://phabricator.kde.org/D6275
      763fbf5f
    • Martin Flöser's avatar
      Use AbstractClient instead of Client in placement · 92207be9
      Martin Flöser authored
      Summary:
      There were a few places where we still used Client instead of
      AbstractClient. By changing this the placement also works for
      Wayland windows in those cases.
      
      Reviewers: #kwin, #plasma
      
      Subscribers: plasma-devel, kwin
      
      Tags: #kwin
      
      Differential Revision: https://phabricator.kde.org/D6274
      92207be9
    • Martin Flöser's avatar
      Merge branch 'Plasma/5.10' · 33ca5025
      Martin Flöser authored
      33ca5025
    • Martin Flöser's avatar
      [tabbox] Fix casts to Client where it should be AbstractClient · 3b9ccc65
      Martin Flöser authored
      Summary:
      A few areas in TabBox perform casts from Toplevel to Client. By casting
      to Client instead of AbstractClient the Wayland windows are excluded.
      
      This change addresses the problem by changing the casts where possible.
      The only remaining cast to Client is for shading which is not (yet)
      supported for Wayland windows anyway.
      
      Reviewers: #kwin, #plasma
      
      Subscribers: plasma-devel, kwin
      
      Tags: #kwin
      
      Differential Revision: https://phabricator.kde.org/D6273
      3b9ccc65
    • Martin Flöser's avatar
      Fix switch desktop on screenedge while resizing a Wayland window · 7a3c2926
      Martin Flöser authored
      Summary:
      Screenedges only allows to switch desktop while moving window, not
      while resizing. There was a special branch which only checked this for
      X11 windows but not for Wayland windows.
      
      This change removes a no longer needed cast from AbstractClient to Client
      so that the check whether a window is getting resized works for both
      X11 and Wayland clients. The cast was introduced in a time when
      AbstractClient did not yet support the isResize method.
      
      Reviewers: #kwin, #plasma
      
      Subscribers: plasma-devel
      
      Tags: #plasma
      
      Differential Revision: https://phabricator.kde.org/D6264
      7a3c2926