1. 25 Oct, 2020 2 commits
  2. 23 Oct, 2020 1 commit
  3. 22 Oct, 2020 3 commits
  4. 21 Oct, 2020 2 commits
    • Luigi Toscano's avatar
      Generic wording for apps which can remember their settings · 773e0355
      Luigi Toscano authored and Nate Graham's avatar Nate Graham committed
      Only a subset of KDE applications (part of KXMLGUI ones) support
      this setting, and on the other hand non KDE applications
      may support it as well.
      As there is no way to identify the subset of affected applications
      not even with technical terms, make the description a bit more
      generic, leaving it open to future improvements to the set of
      supported applications.
    • Bhushan Shah's avatar
      input: reconfigure after setting up the libinput · 733692f4
      Bhushan Shah authored
      Previously seat interface was keeping track of the repeat information,
      but now it is taken care by KeyboardInterface, which is created only if
      the setHasKeyboard is set to true.
      So, since we are setting up various capabilities on seat in libinput,
      re-parse configuration here, so that various information like key repeat
      is notified to kwayland-server
      BUG: 428039
  5. 20 Oct, 2020 10 commits
  6. 19 Oct, 2020 7 commits
    • Alexander Lohnau's avatar
    • Fabian Vogt's avatar
      Detect softpipe and llvmpipe on Mesa 20.2+ · 96635ea2
      Fabian Vogt authored
      It seems like the vendor string changed from "VMware Inc." to "Mesa/X.org".
    • Vlad Zahorodnii's avatar
      screencast: Use fences to avoid stalling the graphics pipeline · 9c20df50
      Vlad Zahorodnii authored
      Currently, we use glFinish() to ensure that stream consumers don't see
      corrupted or rather incomplete buffers. This is a serious issue because
      glFinish() not only prevents the gpu from processing new GL commands,
      but it also blocks the compositor.
      This change addresses the blocking issue by using native fences. With
      the proposed change, after finishing recording a frame, a fence is
      inserted in the command stream. When the native fence is signaled, the
      pending pipewire buffer will be enqueued.
      If the EGL_ANDROID_native_fence_sync extension is not supported, we'll
      fall back to using glFinish().
    • Vlad Zahorodnii's avatar
      Drop unused EGLSurface getter and setter in Platform · 170c4168
      Vlad Zahorodnii authored
      Besides being unused, we should avoid making OpenGL contexts current
      against the EGLSurface of the first output because it's a slippery road
      that may end up in leaking context-specific resources in the mid of a
      compositing restart.
    • Vlad Zahorodnii's avatar
      Introduce persistent global share context · 292335be
      Vlad Zahorodnii authored
      On Wayland, internal windows that use OpenGL are rendered into fbos,
      which are later handed over to kwin. In order to achieve that, our QPA
      creates OpenGL contexts that share resources with the scene's context.
      The problems start when compositing has been restarted. If user changes
      any compositing settings, the underlying render backend will be
      reinitialized and with it, the scene's context will be destroyed. Thus,
      we no longer can accept framebuffer objects from internal windows.
      This change addresses the framebuffer object sharing problem by adding
      a so called global share context. It persists throughout the lifetime of
      kwin. It can never be made current. The scene context and all contexts
      created in our QPA share resources with it.
      Therefore we can destroy the scene OpenGL context without affecting
      OpenGL contexts owned by internal windows, e.g. the outline visual or
      It's worth noting that Qt provides a way to create a global share
      context. But for our purposes it's not suitable since the share
      context must be known when QGuiApplication attempts to instantiate a
      QOpenGLContext object. At that moment, the backend is not initialized
      and thus the EGLDisplay is not available yet.
      BUG: 415798
    • Vlad Zahorodnii's avatar
      Fix a potential SIGSEGV · da12d380
      Vlad Zahorodnii authored
      Compositor::self()->scene() may return nullptr while compositing is
      being restarted.
    • Vlad Zahorodnii's avatar
      qpa: Create a pbuffer for internal windows · cc8cb8db
      Vlad Zahorodnii authored
      If the surfaceless context extension is unsupported by the underlying
      platform, the QPA will use the EGLSurface of the first output to make
      OpenGL contexts current.
      If an internal window attempts to make an OpenGL context current while
      compositing is being restarted, for example it's typically the case with
      the composited outline visual, QPA will either try to make the context
      current with a no longer valid EGLSurface for the first output or will
      crash during the call to Platform::supportsSurfacelessContext(). The
      latter needs more explanation. After the compositingToggled() signal has
      been emitted, there is no scene and supportsSurfacelessContext() doesn't
      handle this case.
      In either case, we could return EGL_NO_SURFACE if compositing is being
      restarted, but if the underlying platform doesn't support the surfaceless
      context extension, then the composited outline will not be able to
      delete used textures, framebuffer objects, etc.
      This change addresses that problem by making sure that every platform
      window has a pbuffer allocated in case the surfaceless context extension
      is unsupported.
  7. 17 Oct, 2020 3 commits
    • Vlad Zahorodnii's avatar
      Adapt to input region changes in kwayland-server · 41d431de
      Vlad Zahorodnii authored
      SurfaceInterface::inputIsInfinite() has been dropped. If the surface has
      no any input region specified, SurfaceInterface::input() will return a
      region that corresponds to the rect of the surface (0, 0, width, height).
      While the new design is more robust, for example it's no longer possible
      to forget to check SurfaceInterface::inputIsInfinite(), it has shown some
      issues in the input stack of kwin.
      Currently, acceptsInput() will return false if you attempt to click the
      server-side decoration for a surface whose input region is not empty.
      Therefore, it's possible for an application to set an input region with
      a width and a height of 1. If user doesn't know about KSysGuard or the
      possibility of closing apps via the task manager, they won't be able to
      close such an application.
      Another issue is that if an application has specified an empty input
      region on purpose, user will be still able click it. With the new
      behavior of SurfaceInterface::input(), this is no longer an issue and it
      is handled properly by kwin.
    • Vlad Zahorodnii's avatar
      Track the input shape of the server-side decoration · fea950f2
      Vlad Zahorodnii authored
      In order to determine if a window accepts input at specified position,
      we need to check if the decorated window and the server-side decoration
      contain the given point.
      While we have a way to determine if a point falls inside the input shape
      of the decorated window, there is no any way to do the same for the deco.
    • Vlad Zahorodnii's avatar
      Introduce geometry conversion helpers · ba4f6b35
      Vlad Zahorodnii authored
      The new helpers are designed for the purpose of mapping points from the
      global screen coordinates to the frame-local and the surface-local coords
  8. 16 Oct, 2020 4 commits
  9. 15 Oct, 2020 2 commits
    • Vlad Zahorodnii's avatar
      wayland: Fix Qt clients not being maximized initially · a195223a
      Vlad Zahorodnii authored
      Currently, Qt clients send two maximize requests separated by the
      initial commit. From spec's perspective, this is totally fine, the
      client should receive two configure events with "maximized" state.
      But because changeMaximize() in XdgToplevelClient and setMaximized()
      operate on two different maximize modes, the second maximize request
      will trick kwin into thinking that the client should be restored.
    • Benjamin Port's avatar
      KCM: Adapt to KCMUtils change · 4acea542
      Benjamin Port authored and Benjamin Port's avatar Benjamin Port committed
  10. 14 Oct, 2020 5 commits
  11. 13 Oct, 2020 1 commit