1. 17 Jul, 2017 6 commits
    • Martin Flöser's avatar
      [qpa] Use the new OpenGLContextAttributeBuilder to create Qt's OpenGL context · 73fa7b21
      Martin Flöser authored
      Introduces a few more attributes needed for creating the OpenGL context
      used by the QPA.
      Test Plan:
      Extended test and run KWin/Wayland and verified that OpenGL context
      gets created correctly.
      Reviewers: #kwin, #plasma
      Subscribers: plasma-devel, kwin
      Tags: #kwin
      Differential Revision: https://phabricator.kde.org/D6734
    • Martin Flöser's avatar
      Require C++14 · ea5d611d
      Martin Flöser authored
      KWin already used C++14 constructs in a conditional way. This doesn't
      make much sense today, it's better to just require C++14.
      For KWin only gcc and clang are currently compilers of relevance. Gcc
      supports C++14 since version 5 and defaults to C++14 since 6.1 [1].
      Clang supports C++14 since version 3.4 [2].
      An overview of compiler support in various distributions:
      * Debian stable (stretch): gcc 6.3, clang 3.8
      * Debian oldstable (jessie): 4.9, clang 3.5
      * Ubuntu 17.04: gcc 6.1, clang 3.8
      * Ubuntu 16.04: gcc 5.3, clang 3.8
      * openSUSE Tumbleweed: gcc 7.1, clang 4.0
      * openSUSE Leap 42.3: gcc ?, clang ? [3]
      * FreeBSD: clang >= 34 in ports
      * Slackware 14.2: gcc 5.3
      This overview shows that every distro out there has at least one
      supported compiler which can still compile KWin with this change.
      [1] https://gcc.gnu.org/projects/cxx-status.html#cxx14
      [2] https://clang.llvm.org/cxx_status
      [3] Sorry I fail to understand openSUSE's package repository.
          It seems that there is gcc 7 available, but gcc package is 4.8
      Test Plan: Compiles on my neon system
      Reviewers: #plasma
      Subscribers: plasma-devel, kwin, #kwin
      Tags: #kwin
      Differential Revision: https://phabricator.kde.org/D6634
    • Martin Flöser's avatar
      Merge branch 'Plasma/5.10' · 8e2805ce
      Martin Flöser authored
    • Martin Flöser's avatar
      [aurorae] Add support for shaded windows · bf0e0f07
      Martin Flöser authored
      Aurorae did not render correctly. This change addresses the problem for
      both maximized and restored windows.
      BUG: 373319
      FIXED-IN: 5.10.4
      Test Plan: shaded windows with Plastik and SVG based theme
      Reviewers: #kwin, #plasma
      Subscribers: plasma-devel, kwin
      Tags: #kwin
      Differential Revision: https://phabricator.kde.org/D6719
    • Martin Flöser's avatar
      Properly swap the quick tile side when pressing the shortcut again · 139b4dc8
      Martin Flöser authored
      The quick tile shortcuts have a feature of moving the window to the next
      screen if one presses the same shortcut again.
      E.g. if a window is quick tiled to the left on the right most screen,
      quick tile again to left should move it to the left screen and quick tile
      right. Thus it swaps the borders.
      This wasn't handled correctly, especially not for modes like top and
      bottom. If a window is quick tiled to the top an impossible mode was
      generated: Left | Right. Doesn't make sense.
      This change fixes the mode swapping and extends our quick tile testing
      to cover the situation.
      BUG: 382313
      FIXED-IN: 5.10.4
      Test Plan: Extended test case
      Reviewers: #plasma, #kwin
      Subscribers: plasma-devel, kwin
      Tags: #kwin
      Differential Revision: https://phabricator.kde.org/D6708
    • Martin Flöser's avatar
      [aurorae] Mark the render QQuickWindow as frameless · 5cb91762
      Martin Flöser authored
      On Wayland aurorae was creating a lot of stress for the system and
      basically turning the system unusable in a short time. This was due to
      a recursion starting to create OpenGL contexts. The window created a
      decoration (aurorae) which created a QQuickWindow. For that KWin creates
      an internal window which in turn triggers the creation of a window
      decoration and so on and on.
      By simply setting the render QQuickWindow as frameless we can prevent
      this recursion.
      Test Plan: Tested on Wayland and X11. On Wayland the recursion is gone.
      Reviewers: #kwin, #plasma
      Subscribers: plasma-devel, kwin
      Tags: #kwin
      Differential Revision: https://phabricator.kde.org/D6726
  2. 16 Jul, 2017 1 commit
    • Martin Flöser's avatar
      [platforms/x11] Quit the OpenGL Freeze protection thread on shutdown · 06a558e3
      Martin Flöser authored
      Weird NVIDIA behavior fixup part 2. Now that we do no longer freeze when
      NVIDIA decides to create an OpenGL error on startup
      (aefb5f4d), we experience a new issue.
      KWin is terminating (no idea why, [1]) and at the same time the OpenGL freeze
      protection thread is still running. So far we did not terminate the
      thread on shutdown and thus we hit an abort in Qt.
      This change ensures that we properly terminate the thread on shutdown.
      [1] My current theory is that games terminate KWin, common pattern of
      bug reports is "steam".
      BUG: 382283
      FIXED-IN: 5.10.4
      Test Plan:
      Tortured KWin by making sure I go through the code path,
      saw the abort without the patch, no more abort with the patch
      Reviewers: #kwin, #plasma
      Subscribers: plasma-devel, kwin
      Tags: #kwin
      Differential Revision: https://phabricator.kde.org/D6735
  3. 15 Jul, 2017 1 commit
  4. 14 Jul, 2017 2 commits
  5. 11 Jul, 2017 2 commits
    • Martin Flöser's avatar
      Implement support for restricted move area on Wayland · 672cae9a
      Martin Flöser authored
      This change implements a missing TODO to generate the restricted move
      area for windows with struts (aka panel) on Wayland.
      Reviewers: #kwin, #plasma
      Subscribers: plasma-devel
      Tags: #plasma
      Differential Revision: https://phabricator.kde.org/D6611
    • Martin Flöser's avatar
      Restrict move resize area only on the screen the strut window is on · 14c8440f
      Martin Flöser authored
      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
      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
      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
  6. 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
  7. 08 Jul, 2017 1 commit
  8. 07 Jul, 2017 2 commits
  9. 06 Jul, 2017 6 commits
    • Martin Flöser's avatar
      Merge branch 'Plasma/5.10' · 0d941c6e
      Martin Flöser authored
    • Martin Flöser's avatar
      Raise minimum required Mesa version to 10.0 · 88e56f63
      Martin Flöser authored
      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
    • Martin Flöser's avatar
      [qpa] Prevent crash due to Surface getting null · 962a2e39
      Martin Flöser authored
      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
    • Martin Flöser's avatar
      Merge branch 'Plasma/5.10' · 46085d3b
      Martin Flöser authored
    • Martin Flöser's avatar
      [platforms/x11] Fix incorrect screen edge approaching with switch desktop on window move · 4e9456a8
      Martin Flöser authored
      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
    • Martin Flöser's avatar
      [effects/slideback] Ignore windows which are not in visible area · 24ff9385
      Martin Flöser authored
      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
  10. 03 Jul, 2017 1 commit
  11. 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
      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
      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
    • Martin Flöser's avatar
      Remove roundtrip to XServer from Workspace::xStackingOrder · 630514d5
      Martin Flöser authored
      Introduce a method Workspace::markXStackingOrderAsDirty
      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
      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
    • 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.
    • Martin Flöser's avatar
      [platforms/x11] Request OpenGL 2.1 instead of 1.2 · be89c16b
      Martin Flöser authored
      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
    • Martin Flöser's avatar
      Merge branch 'Plasma/5.10' · adceb9c0
      Martin Flöser authored
    • Martin Flöser's avatar
      Restore active client after ending showing desktop · 113be5fa
      Martin Flöser authored
      Showing desktop requests focus on the desktop window. This means the
      active window is reset. When ending showing desktop the state was not
      This change addresses this problem by requesting focus to the best
      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
    • Martin Flöser's avatar
      Skip Shader self test for Mesa >= 17 · 43816119
      Martin Flöser authored
      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
  12. 28 Jun, 2017 2 commits
  13. 27 Jun, 2017 1 commit
  14. 26 Jun, 2017 5 commits
    • Martin Flöser's avatar
      Refactor the specification of OpenGL context attributes · 3f4995fb
      Martin Flöser authored
      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
          auto builder;
          builder.setVersion(3, 1);
      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
    • Martin Flöser's avatar
      Merge branch 'Plasma/5.10' · a6d0bc27
      Martin Flöser authored
    • Martin Flöser's avatar
      Properly block the edge also for touch screen edges · 6267d597
      Martin Flöser authored
      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
    • Martin Flöser's avatar
      [platforms/x11] Add support for GLX_NV_robustness_video_memory_purge · 97fa72ee
      Martin Flöser authored
      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
    • 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
  15. 25 Jun, 2017 2 commits