1. 12 Sep, 2017 4 commits
    • Martin Flöser's avatar
      [effects] Support xcbConnectionChanged for support properties · 90e77a93
      Martin Flöser authored
      Summary:
      Several effects announce a support property atom on the root window. This
      change forwards the KWin::Application's signal that the xcbConnection
      changed to the EffectsHandler so that the effects can respond to it.
      
      All effects which announce a support property connect to this new signal
      and re-announce the property. In case the xcb connection died (future
      XWayland crashing case) it is set to XCB_ATOM_NONE by that. In case the
      xcb connection got created (future delayed XWayland startup) the atom is
      set to the proper value.
      
      In addition all usages of the support properties are guarded, so that no
      nonesense actions are performed if the support property is XCB_ATOM_NONE.
      
      Test Plan: Only compile tested as we don't have XFree KWin yet
      
      Reviewers: #kwin, #plasma
      
      Subscribers: plasma-devel, kwin
      
      Tags: #kwin
      
      Differential Revision: https://phabricator.kde.org/D7761
      90e77a93
    • Martin Flöser's avatar
      Move XRandR event filter into XRandRScreens · 4fa41165
      Martin Flöser authored
      Summary:
      The code in events.cpp was problematic as it was called in a Wayland
      session. So KWin changed outputs, this gets mirrored to XWayland and
      then KWin reacted on the XRandR event and might have even changed the
      refresh rate due to that - bad idea.
      
      This change moves the code into the already existing X11EventFilter for
      XRandR events in XRandRScreens.
      
      Test Plan: Run kwin_x11 in gdb on Xephyr, breakpoint in new code and triggered XRandR event
      
      Reviewers: #kwin, #plasma
      
      Subscribers: plasma-devel, kwin
      
      Tags: #kwin
      
      Differential Revision: https://phabricator.kde.org/D7654
      4fa41165
    • Martin Flöser's avatar
      Add virtual method to Scene to get the EGL/GLX extensions · 8015e4e8
      Martin Flöser authored
      Summary:
      We had a few places (e.g. DebugConsole, Platform) where the Scene was
      cased into a SceneOpenGL to access the backend and get the extensions.
      
      This change simplifies that by adding a virtual method to Scene directly
      which is implemented in SceneOpenGL and returns the backend's
      extensions.
      
      Thus the casts to SceneOpenGL are no longer required.
      
      Test Plan:
      Opened debug console to verify extensions are listed,
      triggered Outline to verify the sharing QPA context gets created.
      
      Reviewers: #kwin, #plasma
      
      Subscribers: plasma-devel, kwin
      
      Tags: #kwin
      
      Differential Revision: https://phabricator.kde.org/D7734
      8015e4e8
    • Script Kiddy's avatar
      SVN_SILENT made messages (.desktop file) - always resolve ours · 23eaed2f
      Script Kiddy authored
      In case of conflict in i18n, keep the version of the branch "ours"
      To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
      23eaed2f
  2. 11 Sep, 2017 1 commit
  3. 10 Sep, 2017 2 commits
  4. 09 Sep, 2017 1 commit
  5. 08 Sep, 2017 1 commit
  6. 07 Sep, 2017 5 commits
    • Martin Flöser's avatar
      Make AbstractEglBackend a QObject · 01ddbe7d
      Martin Flöser authored
      Summary:
      Several of the subclasses are already derived from QObject.
      
      The main reason is that the class should be moved out of KWin core in
      order to move the OpenGL scene into a plugin. As Compositor calls into
      the AbstractEglBackend to unbind the wayland display this creates a
      problem which is easily solved by turning the AbstractEglBackend into a
      QObject and connect to the signal emitted by the Compositor.
      
      Test Plan: Compiles
      
      Reviewers: #kwin, #plasma
      
      Subscribers: plasma-devel, kwin
      
      Tags: #kwin
      
      Differential Revision: https://phabricator.kde.org/D7669
      01ddbe7d
    • Martin Flöser's avatar
      Pass EGL information from AbstractEglBackend to Platform instead of query · 9381411b
      Martin Flöser authored
      Summary:
      So far the Platform performed a deep query into the AbstractEglBackend
      to get information such as EGLContext, EGLConfig, EGLSurface. This
      change adjusts this so that the AbstractEGLPlatform forwards it directly
      whenever it gets informed about one following the approach already used
      for EGLDisplay. This simplifies the code a lot and allows to remove the
      dependency on the actual scene backend from the Platform (in order to
      split out the SceneOpenGL into a plugin).
      
      Test Plan:
      Run nested kwin_wayland, triggered Outline which requires all
      those methods.
      
      Reviewers: #kwin, #plasma
      
      Subscribers: plasma-devel, kwin
      
      Tags: #kwin
      
      Differential Revision: https://phabricator.kde.org/D7698
      9381411b
    • Martin Flöser's avatar
      [tabbox] Properly check whether two windows belong to same application · 5d9027b1
      Martin Flöser authored
      Summary:
      TabBox implemented a custom way to check whether two windows belong to
      the same application. KWin internally has API for that which does it
      better, in a standardized way and even across windowing system.
      
      This change uses the internal API, resulting in the check working better
      on X11 and starts to work on Wayland.
      
      Test Plan: Verified Alt+` with Wayland windows
      
      Reviewers: #kwin, #plasma
      
      Subscribers: plasma-devel, kwin
      
      Tags: #kwin
      
      Differential Revision: https://phabricator.kde.org/D7713
      5d9027b1
    • Martin Flöser's avatar
      Delay syncing internal window geometry to end of cycle · e0f95fd9
      Martin Flöser authored
      Summary:
      The syncing of the window geometry to the internal geometry can
      unfortunately cause a freeze in very special conditions:
      1. create QML component
      2. a Plasma::Dialog gets created
      3. It creates the DialogShadows
      4. This triggers QGlobalStatic creation which locks a non-recursive
      mutex
      5. The creation of DialogShadows creates a Registry and triggers a
      roundtrip on the Wayland server
      6. KWin processes all Wayland events
      7. This triggers the creation of a ShellClient
      8. The ShellClient has a PlasmaShellSurface which requested a position
      9. The new geometry does not match the geometry of the Plasma::Dialog
      10. ShellClient syncs the geometry to the Plasma::Dialog
      11. Plasma::Dialog updates the theme because window geometry changed
      12. This accesses the DialogShadows...
      
      which is still in the non recursive mutex and we have a freeze.
      
      By delaying the sync to the end of cycle we jump out of this deadly
      sequence.
      
      BUG: 384441
      
      Test Plan:
      The freeze doesn't hit any more. It's possible that some test
      cases need adjustments.
      
      Reviewers: #kwin, #plasma
      
      Subscribers: plasma-devel, kwin
      
      Tags: #kwin
      
      Differential Revision: https://phabricator.kde.org/D7712
      e0f95fd9
    • Bhushan Shah's avatar
      [platforms/hwcomposer] Include the android-config.h in the hwcomposer_backend · d1e0c6f9
      Bhushan Shah authored
      Summary:
      This special file[1] can contain the defines like QTI_BSP and QCOM_BSP
      which then modifies the API/ABI of the hwcomposer[2].
      
      This defines are required in order to make kwin_wayland work on !nexus
      QCOM devices and also possibly other special devices.
      
      [1] https://github.com/Halium/android-headers/blob/master/android-config.h
      [2] https://github.com/Halium/android-headers/blob/halium-7.1/hardware/hwcomposer.h#L290
      
      Test Plan: built kwin locally on such device
      
      Reviewers: #kwin, davidedmundson
      
      Reviewed By: davidedmundson
      
      Subscribers: kwin
      
      Tags: #kwin
      
      Differential Revision: https://phabricator.kde.org/D7719
      d1e0c6f9
  7. 06 Sep, 2017 2 commits
    • Martin Flöser's avatar
      Protect readProperty and deleteProperty in case of no X11 · 4db4fa42
      Martin Flöser authored
      Summary:
      Read(Window)Property and deleteProperty should only operate if there is
      an X11 connection available.
      
      In addition the methods are changed to the x11 wrappers provided on the
      KWin::Application as that one can support restarting XWayland in opposite
      to the global methods.
      
      Test Plan: Compiles
      
      Reviewers: #kwin, #plasma
      
      Subscribers: plasma-devel, kwin
      
      Tags: #kwin
      
      Differential Revision: https://phabricator.kde.org/D7651
      4db4fa42
    • Martin Flöser's avatar
      Drop XRandR dependency from Options's currentRefreshRate · 536739f0
      Martin Flöser authored
      Summary:
      This code branch was dead. It was for the case that the number of screens
      is 0, but KWin::Screens never has a count of zero, especially not the
      XRandR based screens (c.f. screens_xrandr.cpp method ::update) which has
      a fallback handling setting the count to always 1 if there are no screens.
      
      Test Plan: Compiles
      
      Reviewers: #kwin, #plasma
      
      Subscribers: plasma-devel, kwin
      
      Tags: #kwin
      
      Differential Revision: https://phabricator.kde.org/D7650
      536739f0
  8. 05 Sep, 2017 1 commit
  9. 04 Sep, 2017 1 commit
  10. 03 Sep, 2017 1 commit
  11. 02 Sep, 2017 1 commit
  12. 01 Sep, 2017 19 commits
    • Martin Flöser's avatar
      Deprecate global KWin::displayWidth and KWin::displayHeight · 20e22ec2
      Martin Flöser authored
      Actually they could go directly as nothing in KWin uses them anymore.
      But there are more functions in kwinglobal which need to go as they
      don't support restarting XWayland. So instead of breaking internal ABI
      several times, just deprecate till everything is prepared.
      20e22ec2
    • Martin Flöser's avatar
      Fix Platform::createDecorationRenderer · 6168638c
      Martin Flöser authored
      Was missing a return and due to that the decoration renderer never
      got added to the Decoration.
      
      Thanks to code coverage reports on build.kde.org! They showed me that
      something must have went wrong with the commit series.
      6168638c
    • Martin Flöser's avatar
      Create SyncManager only when using X11 · 3e0e2620
      Martin Flöser authored
      Summary:
      The SyncManager is highly X11 dependent and doesn't make much sense on
      Wayland. It should already be guarded by the check for
      GL_EXT_x11_sync_object, but better be safe than sorry, so explicit check
      for on X11.
      
      Reviewers: #kwin, #plasma
      
      Subscribers: plasma-devel, kwin
      
      Tags: #kwin
      
      Differential Revision: https://phabricator.kde.org/D7514
      3e0e2620
    • Martin Flöser's avatar
      Do not hard runtime depend on X11 in composite startup · 2892fad5
      Martin Flöser authored
      Summary:
      The compositor needs to claim the X11 compositor selection and redirect
      the X11 windows. This of course only makes sense when having X11 support.
      
      This change refactors the code so that if X11 support is missing the code
      is not executed, but as soon as X11 support comes available the selection
      gets claimed.
      
      Also if the connection goes away the selection is deleted, though it
      might be that this does not work as KSelectionOwner might call into xcb
      and cause a crash. This needs to be tested once we start supporting
      XWayland going away.
      
      Reviewers: #kwin, #plasma
      
      Subscribers: plasma-devel, kwin
      
      Tags: #kwin
      
      Differential Revision: https://phabricator.kde.org/D7504
      2892fad5
    • Martin Flöser's avatar
      Move screen inversion through XRandr into X11 standalone platform · 51561052
      Martin Flöser authored
      Summary:
      By moving the functionality into the Platform API we can also implement
      support on other platforms which support this in general (e.g. DRM once
      Roman's color adjustment patches landed).
      
      Reviewers: #kwin, #plasma
      
      Subscribers: plasma-devel
      
      Tags: #plasma
      
      Differential Revision: https://phabricator.kde.org/D7447
      51561052
    • Martin Flöser's avatar
      Move the X11 Decoration Renderer into the X11 standalone platform · 23ef40e6
      Martin Flöser authored
      Summary:
      Not needed except for X11/non-composited usage, so should be in the
      plugin instead of core.
      
      Platform API is extended to create a decoration renderer.
      
      Reviewers: #kwin, #plasma
      
      Subscribers: plasma-devel, kwin
      
      Tags: #kwin
      
      Differential Revision: https://phabricator.kde.org/D7444
      23ef40e6
    • Martin Flöser's avatar
      Move QPainter compositor into plugin · 535b1079
      Martin Flöser authored
      This change is similar to D7232 and moves the scene_qpainter into a
      dedicated plugin. Compared to the XRender case it's more complicated as
      the platform plugins need to implement a platform specific backend.
      
      The base implementation for this part used to be in scene_qpainter. As
      the idea is to completly move it away from KWin core it would be point
      less to still have the backend definition in KWin core, but it cannot
      be in the scene plugin as otherwise all platforms need to link the
      plugin.
      
      To solve this a new platformsupport subdirectory is added which contains
      the scene platform backend as a static library. For the OpenGL scene such
      a static library will also be required.
      
      Test Plan: SceneQPainter test still passes, nested compositor still works
      
      Reviewers: #kwin, #plasma
      
      Subscribers: plasma-devel
      
      Tags: #plasma
      
      Differential Revision: https://phabricator.kde.org/D7259
      535b1079
    • Martin Flöser's avatar
      Provide a virtual Scene::qpainterRenderBuffer() -> QImage* method · c398db3c
      Martin Flöser authored
      Needed by testing of QPainter scene to access the back buffer. Exposed
      as a virtual method in Scene, so that the test does not have to cast to
      SceneQPainter.
      c398db3c
    • Martin Flöser's avatar
    • Martin Flöser's avatar
      Move SceneXRender into a plugin · 054d9234
      Martin Flöser authored
      Summary:
      First step for loading the compositor Scenes through plugins. The general
      idea is that we currently needlessly pull in all the Scenes although only
      one will be used.
      
      E.g. on X11 we pull in QPainter, although they are not compatible. On
      Wayland we pull in XRender although they are not compatible.
      
      Furthermore our current Scene creation strategy is not really fault
      tolerant and can create situations where we don't get a compositor. E.g
      on fbdev backend the default settings won't work as it does not support
      OpenGL.
      
      Long term I want to tackle those conceptional problems together:
      we try to load all plugins supported by the current platform till we have
      a scene which works. Thus on Wayland we don't end up in a situation where
      we don't have a working compositor because the configuration is bad.
      
      To make this possible the switch statement in the Scene needs to go and
      needs to be replaced by a for loop iterating over all the available
      scenes on the platform. If we go there it makes sense to replace it
      directly with a plugin based approach.
      
      So this is a change which tackles the problem by first introducing the
      plugin loading. The xrender based scene (as it's the most simple one)
      is moved into a plugin. It is first tried to find a scene plugin and only
      if there is none the existing code is used.
      
      Test Plan: Tested all scenes
      
      Reviewers: #kwin, #plasma
      
      Subscribers: plasma-devel, kwin
      
      Tags: #kwin
      
      Differential Revision: https://phabricator.kde.org/D7232
      054d9234
    • Martin Flöser's avatar
      Port some displayWidth/displayHeight usages to Screens::size() · 1e13deaa
      Martin Flöser authored
      Summary:
      KWin::displayWidth and KWin::displayHeight are bound to X11 which
      doesn't make much sense on X11. In addition KWin internally knows
      the overall display dimensions through the Screens singleton class.
      
      Reviewers: #kwin
      
      Subscribers: kwin
      
      Tags: #kwin
      
      Differential Revision: https://phabricator.kde.org/D1798
      1e13deaa
    • Martin Flöser's avatar
      Move NonComposited Outline into the X11 standalone platform · a3dc2ad5
      Martin Flöser authored
      Summary:
      Creating the OutlineVisual is moved into the Platform API. The default
      implementation creates the composited OutlineVisual. The X11 standalone
      platform overrides it and creates the non composited outline in case no
      compositing is used.
      
      Test Plan:
      Run kwin_x11 with KWIN_COMPOSE=N and KWIN_COMPOSE=X,
      non composited outline and composited outline loaded
      
      Reviewers: #kwin, #plasma
      
      Subscribers: plasma-devel, kwin
      
      Tags: #kwin
      
      Differential Revision: https://phabricator.kde.org/D7450
      a3dc2ad5
    • Martin Flöser's avatar
      Drop boolean parameter from AbstractClient::caption · f0652970
      Martin Flöser authored
      Summary:
      With the latest refactoring AbstractClient::captionNormal is the same as
      AbstractClient::caption(false) used to be. As there were only two usages
      of the false parameter, let's remove this boolean trap and use proper
      API calls.
      
      Reviewers: #kwin, #plasma
      
      Subscribers: plasma-devel, kwin
      
      Tags: #kwin
      
      Differential Revision: https://phabricator.kde.org/D7427
      f0652970
    • Martin Flöser's avatar
      Make AbstractClient::caption no longer a virtual method · a7b29e09
      Martin Flöser authored
      Summary:
      The implementation can now be shared, it doesn't differ anymore between
      X11 (Client) and Wayland (ShellClient). So instead of code duplication a
      shared implementation in AbstractClient.
      
      Test Plan: X11 and ShellClient tests still pass
      
      Reviewers: #kwin, #plasma
      
      Subscribers: plasma-devel, kwin
      
      Tags: #kwin
      
      Differential Revision: https://phabricator.kde.org/D7426
      a7b29e09
    • Martin Flöser's avatar
      Add <number> to Wayland captions if the caption is the same · 6685288d
      Martin Flöser authored
      Summary:
      Bringing another caption feature from X11 to Wayland. If we have
      multiple windows with the same caption, starting from the second window
      a suffix <number> is added.
      
      E.g. if we have three windows with caption "foo", the naming is:
       * foo
       * foo <2>
       * foo <3>
      
      The change tries to use as much shared code between the X11 and Wayland
      implementation. Unfortunately it's not possible to share completely as
      the X11 implementation does X11 specific things like editing the visible
      name.
      
      By sharing the code the numbering also works cross windowing system.
      That is if a window is called "foo" on X11, a new window on Wayland with
      caption "foo" will get adjusted to "foo <2>" and vice versa.
      
      The change also eliminates a duplicated signal for captionChanged in
      ShellClient (found by test case).
      
      By using the shared implementation on X11 side a bug gets fixed which
      got introduced with the support of "unresponsive", this is no longer
      considered and the numbering still works even if there is a window which
      is unresponsive.
      
      Test Plan: New test case and manual testing
      
      Reviewers: #kwin, #plasma
      
      Subscribers: plasma-devel, kwin
      
      Tags: #kwin
      
      Differential Revision: https://phabricator.kde.org/D7425
      6685288d
    • Martin Flöser's avatar
      Move X11 specific event filtering for ScreenEdges into x11 standalone platform · 833f933c
      Martin Flöser authored
      Summary:
      This change splits out the X11 specific event filtering into a dedicated
      X11EventFilter. It is created in the x11 standalone platform plugin when
      the first Edge is being created.
      
      Some of the X11 specific code is removed from ScreenEdges, though more
      refactoring is possible in ScreenEdges to share more code between X11
      specific and generic implementation.
      
      Test Plan: Run KWin on Xephyr, screen edge approach effect still shows
      
      Reviewers: #kwin, #plasma
      
      Subscribers: plasma-devel, kwin
      
      Tags: #kwin
      
      Differential Revision: https://phabricator.kde.org/D7406
      833f933c
    • Martin Flöser's avatar
      Don't create QWhatsThis when user presses showContextHelp button · 76ee4715
      Martin Flöser authored
      Summary:
      I don't know what the idea of entering QWhatsThis mode was, but the code
      is pretty much dead. There is no QWhatsThis window shown as KWin does
      not have any UI or help. The window which eventually gets shown in
      context help is provided by the client application.
      
      Furthermore KWin never leaves the QWhatsThis mode. At least one code
      path entering in leave is dead in general and one at least on Wayland
      (but probably also on X11 as the window never gets shown).
      
      The show context help functionality works fine without the QWhatsThis
      handling, so let's remove it.
      
      I tried to blame what was the idea behind it, but it was unchanged since
      decades and blame ended in a code moving commit.
      
      Test Plan: Used show context help (kcmshell5 --platform xcb kwinoptions)
      
      Reviewers: #kwin, #plasma
      
      Subscribers: plasma-devel, kwin
      
      Tags: #kwin
      
      Differential Revision: https://phabricator.kde.org/D7398
      76ee4715
    • Martin Flöser's avatar
      [tabBox] Move X11 specific event filtering into a dedicated event filter · 9c74be12
      Martin Flöser authored
      Summary:
      This ensures that the X11 specific events are only read on X11 but not
      on Wayland. Also moves quite some X11 specific code out of TabBox.
      
      Test Plan: Compile checked, currently on Wayland, so no way to test.
      
      Reviewers: #kwin, #plasma
      
      Subscribers: plasma-devel, kwin
      
      Tags: #kwin
      
      Differential Revision: https://phabricator.kde.org/D7395
      9c74be12
    • Martin Flöser's avatar
      Move X11 movingClient handling into a dedicated X11EventFilter · bd5f5e09
      Martin Flöser authored
      Summary:
      Splits out the X11 specific window movement handling so that it's not
      used in the Wayland case at runtime. As a nice side effect it
      un-spaghetties the X11 event handler.
      
      Test Plan:
      Run nested KWin on Xephyr and nested KWin/Wayland to verify
      that move/resize of X11 windows is still working
      
      Reviewers: #kwin, #plasma
      
      Subscribers: plasma-devel, kwin
      
      Tags: #kwin
      
      Differential Revision: https://phabricator.kde.org/D7374
      bd5f5e09
  13. 30 Aug, 2017 1 commit
    • David Edmundson's avatar
      ARGB buffers are premultiplied · b57a525e
      David Edmundson authored
      D7460 in kwayland assumes all WL_SHM_FORMAT_ARGB8888 buffers have
      opacity premultipied RGB values.
      
      Kwin tests need updating to do the same.
      Rendering code did not need changing.
      
      Test Plan: Tests now pass
      
      Reviewers: #plasma, graesslin
      
      Reviewed By: #plasma, graesslin
      
      Subscribers: plasma-devel, kwin, #kwin
      
      Tags: #kwin
      
      Differential Revision: https://phabricator.kde.org/D7607
      b57a525e