1. 18 Dec, 2018 1 commit
  2. 17 Dec, 2018 2 commits
    • Martin Flöser's avatar
      Add a dbus method getWindowInfo returning same data as queryWindowInfo · 9993c6d6
      Martin Flöser authored
      Summary:
      This dbus method is intended to be used by the kwin rules dialog. KWin
      can pass the internal id to the rules dialog through a command line
      argument (or similar way) and the dialog can query the information
      through the dbus call for the provided id. Thus it's possible to
      implement one way to query the information which works on both X11 and
      Wayland without any windowing system specific functionality.
      
      Test Plan: See new added integration test
      
      Reviewers: #kwin
      
      Subscribers: kwin
      
      Tags: #kwin
      
      Differential Revision: https://phabricator.kde.org/D17433
      9993c6d6
    • Martin Flöser's avatar
      Introduce a new HACKING.md document to replace the previous HACKING · c20be6e0
      Martin Flöser authored
      Summary:
      This document describes my own practices on how I develop and work on
      KWin. Since we have nested KWin/Wayland my ways of developing completely
      changed. Especially since it's possible to run without installing. Due
      to that I thought it's a good idea to document how one can easily build
      and run KWin.
      
      Why a new document in the source tree instead of the wiki?
      
      The main reason for using a wiki was that it allows to format, to link,
      etc. This was prior to markdown and prior to code hosting places like
      github or phabricator rendering the markdown pages. Given that I think
      the information belongs in the repository and not in an external wiki.
      
      Why not fix the existing page?
      
      Our documentation on the wiki is quite outdated:
       * Qt 4 based
       * only X11
       * reviewboard
       * information about file structure which does not match reality
      
      Especially the last point is where I think we need to do a clean cut and
      just drop such information. Documentation about code belongs in the code
      and not detached in wiki. It will outdate.
      
      How to prevent this document will not become outdated?
      
      Of course difficult. But I tried to not describe anything which might
      change, such as file layout, etc.
      
      Reviewers: #kwin
      
      Subscribers: kwin
      
      Tags: #kwin
      
      Differential Revision: https://phabricator.kde.org/D17600
      c20be6e0
  3. 15 Dec, 2018 1 commit
    • Martin Flöser's avatar
      Drop the COMPLIANCE file · 28a52b2f
      Martin Flöser authored
      Summary:
      This file has not been tracked for years. Nobody added when new features
      were added, when existing code was broken, etc. E.g. none of the changes
      since EWMH 1.4 is listed, none of the kde specific extensions is listed.
      
      The document does not contain anything about Wayland protocol support.
      
      I would not trust this document at all to say whether KWin is compliant,
      but would check the source code. And after all most of the compliance is
      done in KWindowSystem and KWayland, not in KWin.
      
      Also the document lists compliance of other non-KWin elements such as
      Qt, kicker (kde 3 thing, not application launcher), etc. This shows it's
      also something which doesn't belong in KWin's source tree.
      
      Reviewers: #kwin
      
      Subscribers: kwin
      
      Tags: #kwin
      
      Differential Revision: https://phabricator.kde.org/D17601
      28a52b2f
  4. 14 Dec, 2018 8 commits
    • Vlad Zahorodnii's avatar
      [wayland] Minimize transients together with parent · 7a28e0fe
      Vlad Zahorodnii authored
      Summary:
      If a parent window is minimized, then its transients have to be
      minimized as well, so the minimize behavior is the same on both
      X11 and Wayland.
      
      BUG: 401950
      FIXED-IN: 5.15.0
      
      Reviewers: #kwin, graesslin
      
      Reviewed By: #kwin, graesslin
      
      Subscribers: kwin
      
      Tags: #kwin
      
      Differential Revision: https://phabricator.kde.org/D17570
      7a28e0fe
    • Vlad Zahorodnii's avatar
      [autotests] Test window open/close animations · e86d8461
      Vlad Zahorodnii authored
      Summary:
      The idea behind this autotest is to verify that different window
      open/close animation effects behave similarly.
      
      Currently, we just check whether Fade/Glide/Scale effect tries to animate
      the appearing or the disappearing of toplevels. In the future, the
      autotest will be extended to verify that there are no conflicts between
      those three effects and the Login/Logout effect, etc.
      
      Test Plan: Ran the test, found a bug in the Fade effect, fixed it.
      
      Reviewers: #kwin, graesslin
      
      Reviewed By: #kwin, graesslin
      
      Subscribers: kwin
      
      Tags: #kwin
      
      Differential Revision: https://phabricator.kde.org/D17526
      e86d8461
    • Vlad Zahorodnii's avatar
      [libkwineffects] Don't mark a painted window as transformed twice · 54bf5f1a
      Vlad Zahorodnii authored
      Summary:
      WindowPrePaintData::setTransformed sets PAINT_WINDOW_TRANSFORMED,
      so `data.mask |= PAINT_WINDOW_TRANSFORMED;` is redundant.
      
      Test Plan: Minimized a window, haven't noticed visual glitches.
      
      Reviewers: #kwin, davidedmundson, graesslin
      
      Reviewed By: #kwin, davidedmundson, graesslin
      
      Subscribers: kwin
      
      Tags: #kwin
      
      Differential Revision: https://phabricator.kde.org/D17565
      54bf5f1a
    • Vlad Zahorodnii's avatar
      [libkwineffects] Bump API version · 17358796
      Vlad Zahorodnii authored
      Summary:
      Recently, libkwineffects got some changes that break ABI compatibility,
      so we have to bump the API version.
      
      Test Plan:
      When using a binary effect, which is made against 226 version, KWin no
      longer crashes.
      
      Reviewers: #kwin, davidedmundson
      
      Reviewed By: #kwin, davidedmundson
      
      Subscribers: kwin
      
      Tags: #kwin
      
      Differential Revision: https://phabricator.kde.org/D17444
      17358796
    • Vlad Zahorodnii's avatar
      [effects] Don't use dynamic_cast · caf0c938
      Vlad Zahorodnii authored
      Summary:
      qobject_cast has several advantages over dynamic_cast:
      * it works without RTTI;
      * it's usually faster.
      
      Also, when it comes to casting QObjects, qobject_cast is de facto
      standard.
      
      Reviewers: #kwin, davidedmundson
      
      Reviewed By: #kwin, davidedmundson
      
      Subscribers: kwin
      
      Tags: #kwin
      
      Differential Revision: https://phabricator.kde.org/D17427
      caf0c938
    • Vlad Zahorodnii's avatar
      [effects] Drop static_cast in getMainWindows · 3dff1a8a
      Vlad Zahorodnii authored
      Summary:
      We use a function template, so static_cast in getMainWindows looks out
      of place. Also, it's not good idea to do static_cast based on output of
      isDeleted().
      
      Test Plan: The Dialog Parent effect works.
      
      Reviewers: #kwin, graesslin
      
      Reviewed By: #kwin, graesslin
      
      Subscribers: kwin
      
      Tags: #kwin
      
      Differential Revision: https://phabricator.kde.org/D17426
      3dff1a8a
    • Martin Flöser's avatar
      Fix the X11TimestampUpdateTest · c3e712e9
      Martin Flöser authored
      Summary:
      It also searches for the platform plugin, so we need to ensure it finds
      it in the build directory.
      
      This was a regression caused by building all platform plugins in the
      correct location.
      
      Test Plan: strace on the failing test, verified correct plugin is loaded
      
      Reviewers: #kwin
      
      Subscribers: kwin
      
      Tags: #kwin
      
      Differential Revision: https://phabricator.kde.org/D17573
      c3e712e9
    • Vlad Zahorodnii's avatar
      [wayland] Send only clients that were on the removed desktop to a new desktop · a0fe38c9
      Vlad Zahorodnii authored
      Summary:
      Currently, if a virtual desktop was removed, then we'll try to send all
      clients to the last virtual desktop even though most of those clients
      weren't present on the removed virtual desktop.
      
      Test Plan: Manually.
      
      Reviewers: #kwin, davidedmundson
      
      Reviewed By: #kwin, davidedmundson
      
      Subscribers: kwin
      
      Tags: #kwin
      
      Differential Revision: https://phabricator.kde.org/D17576
      a0fe38c9
  5. 13 Dec, 2018 7 commits
    • Martin Flöser's avatar
      Remove no longer needed cast to Client in Workspace::sendClientToDesktop · 3e62f6aa
      Martin Flöser authored
      Summary:
      This change removes a small difference between X11 and Wayland clients.
      It ensures that all transients are sent to the same desktop as the main
      window. A similar check is already in AbstractClient::setDesktop, so in
      general it already worked. This is just a special case for
      sendClientToDesktop which supports sending to the same desktop so that
      all transients are sent to that desktop.
      
      Test Plan: New test case which fails without this change
      
      Reviewers: #kwin
      
      Subscribers: kwin
      
      Tags: #kwin
      
      Differential Revision: https://phabricator.kde.org/D17546
      3e62f6aa
    • Martin Flöser's avatar
      Fix dbus export of property Device::supportedButtons · ba0cf192
      Martin Flöser authored
      Summary:
      When launching the touchpad kcm we see the following warning:
          Error on d-bus read of "supportedButtons"
      
      And the Gui shows "Error while loading values. See logs for more
      information. Please restart this configuration module".
      
      By extending the unit test for reading back the properties through DBus
      I noticed that it's not trivially possible to export QFlags to DBus. As
      the QFlags can be implicitly casted to int, the property is changed to
      an int value.
      
      Test Plan: Test case adjusted, did not pass prior to change, passes now.
      
      Reviewers: #kwin
      
      Subscribers: kwin
      
      Tags: #kwin
      
      Differential Revision: https://phabricator.kde.org/D17472
      ba0cf192
    • Martin Flöser's avatar
      Build platform plugins in correct sub directory of build dir · c8ede9a5
      Martin Flöser authored
      Summary:
      This brings KWin a step closer to be run from build dir without having
      to install at all. The integration tests are adjusted so that the
      virtual platform is still found which makes the code be closer to what
      is used in normal kwin_wayland.
      
      Test Plan: ctest passes, manually verified correct plugin is loaded
      
      Reviewers: #kwin
      
      Subscribers: kwin
      
      Tags: #kwin
      
      Differential Revision: https://phabricator.kde.org/D17388
      c8ede9a5
    • Martin Flöser's avatar
      Introduce a command line option to disable any kind of global shortcuts · a0b482cb
      Martin Flöser authored
      Summary:
      This command line option is useful for KWin in embedded use case. That
      is when KWin is just used as a compositor for one application instead of
      a complete desktop environment. In such a setup global shortcuts are not
      wanted and interfere with the application. E.g. one does not want Alt+F4
      to close the window, that would render the system unusable.
      
      This change introduces a command line option and disables the following
      event filters and spies:
       * global shortcuts
       * modifier only shortcuts
       * terminate session
       * virtual terminal switching
       * screen edges
      
      KGlobalAccel still gets inited, otherwise the (non-functional) binary
      would be launched when KWin registers it's global shortcuts.
      
      Test Plan:
      New test added based on existing tests for the global
      shortcuts, ctest passes
      
      Reviewers: #kwin
      
      Subscribers: kwin
      
      Tags: #kwin
      
      Differential Revision: https://phabricator.kde.org/D17304
      a0b482cb
    • Martin Flöser's avatar
      Hide mouse cursor when interacting with touch screen · 070b46f4
      Martin Flöser authored
      Summary:
      On touch events the mouse cursor gets hidden, on next mouse event the
      mouse cursor is shown again. This IMHO significantly improves the system
      interaction if touch is the primary user interface.
      
      Test Plan: Test case added and ctest passes
      
      Reviewers: #kwin
      
      Subscribers: kwin
      
      Tags: #kwin
      
      Differential Revision: https://phabricator.kde.org/D17280
      070b46f4
    • Roman Gilg's avatar
      Leave decoration on touch up only once · dd55a59d
      Roman Gilg authored
      With 05ca6c97 removing all touch points always induces
      an at surface change to null. But the decoration leave event
      is already sent in the decoration input filter. Do not send
      it again in the cleanup function.
      
      This makes the decoration input test pass again.
      
      Reviewed by David Edmundson as part of review of 05ca6c97.
      dd55a59d
    • Roman Gilg's avatar
      Unset touch targets on no current touch points · 05ca6c97
      Roman Gilg authored
      Summary:
      Certain input devices like touch screens can be in a state of having no input
      target at all. In case of touch screens when there are no current touch points.
      
      In this case unset and block at-surface targets until a touch point is
      available again.
      
      Test Plan: Auto test window-selection passes again.
      
      Reviewers: #kwin, davidedmundson
      
      Reviewed By: #kwin, davidedmundson
      
      Subscribers: graesslin, davidedmundson, zzag, kwin
      
      Tags: #kwin
      
      Differential Revision: https://phabricator.kde.org/D17537
      05ca6c97
  6. 12 Dec, 2018 1 commit
  7. 11 Dec, 2018 3 commits
  8. 10 Dec, 2018 2 commits
    • Marco Martin's avatar
      fix virtual keyboard on Plasma Mobile · 4001834d
      Marco Martin authored
      Summary:
      the newly introduced resize button shouldn't be visible on the phone and
      for some reason using a ToolButton prevents the qml to load at all on
      the phone (the problem seems right into the C++ part of ToolButton as
      is broken on every QQC2 style)
      
      Test Plan: work again on phone, still work on laptop
      
      Reviewers: #plasma, bshah
      
      Reviewed By: #plasma, bshah
      
      Subscribers: kwin
      
      Tags: #kwin
      
      Differential Revision: https://phabricator.kde.org/D17483
      4001834d
    • Bhushan Shah's avatar
      Make it easier to debug the virtualkeyboard · 533f43ad
      Bhushan Shah authored
      Summary:
      Provide the important debug messages which can be used to debug why
      virtualkeyboard is not starting.
      
      Reviewers: #kwin, davidedmundson
      
      Reviewed By: #kwin, davidedmundson
      
      Subscribers: kwin
      
      Tags: #kwin
      
      Differential Revision: https://phabricator.kde.org/D17454
      533f43ad
  9. 09 Dec, 2018 1 commit
  10. 07 Dec, 2018 1 commit
  11. 06 Dec, 2018 2 commits
    • Vlad Zahorodnii's avatar
      [autotests] Fix failing of testDontCrashReinitializeCompositor · 3956d6ab
      Vlad Zahorodnii authored
      Summary:
      Currently, testDontCrashReinitializeCompositor is unstable because it
      doesn't take into account that effects can be loaded asynchronously.
      
      In general, we don't need all default effects in this test, so let's
      disable them.
      
      Test Plan: This should fix ASan issues.
      
      Reviewers: #kwin, davidedmundson
      
      Reviewed By: #kwin, davidedmundson
      
      Subscribers: kwin
      
      Tags: #kwin
      
      Differential Revision: https://phabricator.kde.org/D17386
      3956d6ab
    • David Edmundson's avatar
      Avoid deleting ourselves midway through updateShadow · 576c6671
      David Edmundson authored
      Summary:
      If updating a shadow means that there should be no shadow, shadow ends
      up deleting itself midway through the method.
      
      It's cleaner and safer to leave that to the caller.
      
      This new change matches the existing documentation for
      Shadow::updateShadow which states
      
      > In case the Property has been withdrawn the method returns @c false.
      > In that case the owner should delete the Shadow.
      
      Test Plan:
      Created an ASAN of kwin
      Relevant testMaximised no longer fails
      
      Reviewers: #kwin, zzag
      
      Reviewed By: #kwin, zzag
      
      Subscribers: kwin
      
      Tags: #kwin
      
      Differential Revision: https://phabricator.kde.org/D17380
      576c6671
  12. 05 Dec, 2018 1 commit
    • Vlad Zahorodnii's avatar
      Try to invalidate quad cache when shadow is changed · 90a26e2e
      Vlad Zahorodnii authored
      Summary:
      213239a0 tried to address the case when
      a wayland client gets shadow after it was mapped, but because of poor
      testing from my side, another bug was introduced. If a decoration tooltip
      or the user actions popup is shown, then in some cases it can be blank.
      
      Usually, SurfaceInterface::shadowChanged proceeds SurfaceInterface::sizeChanged,
      so when the shadow is installed, window quads cache is rebuilt. But
      because shell client already knows the geometry of the internal client,
      goemetryShapeChanged is not emitted, thus the cache is not updated.
      
      It would be better just to invalidate the cache when the shadow is
      installed, uninstalled, or updated. This reduces the number of
      unnecessary invocations of Scene::Window::buildQuads and also moves
      handling of the window quads cache away from the Shadow class.
      
      BUG: 399490
      FIXED-IN: 5.15.0
      
      Test Plan: Decoration tooltips are no longer blank.
      
      Reviewers: #kwin, davidedmundson
      
      Reviewed By: #kwin, davidedmundson
      
      Subscribers: davidedmundson, graesslin, kwin
      
      Tags: #kwin
      
      Differential Revision: https://phabricator.kde.org/D17215
      90a26e2e
  13. 03 Dec, 2018 4 commits
  14. 02 Dec, 2018 6 commits
    • Roman Gilg's avatar
      Add Wayland touch drag and drop support · a23368d6
      Roman Gilg authored
      Summary:
      Use the new functionality in KWayland to support drag and drop via touch
      screens.
      
      Either a drag and drop session with pointer or touch is possible, but not
      both at the same time. Pointer/touch gets deactivated if a touch/pointer
      drag and drop session is active.
      
      Test Plan: Manually.
      
      Reviewers: #kwin, davidedmundson
      
      Subscribers: davidedmundson, alexde, kwin
      
      Tags: #kwin
      
      Differential Revision: https://phabricator.kde.org/D15466
      a23368d6
    • Roman Gilg's avatar
      Rework InputDeviceHandler focus tracking · 2e297113
      Roman Gilg authored
      Summary:
      This patch aims at improving the Toplevel, internal window and decoration
      focus tracking.
      
      In detail the goals are:
      * Clean tracking of beneath and focus Toplevel as well as decoration and
      internal windows. Splitting this up in well defined sub routines.
      * Minimal find Toplevel operations on window stack.
      * Reduce code duplication in pointer and touch child classes.
      * Reuse tracking in drag operations.
      * Allow direct usage of Wayland input interfaces for decoration and internal
      windows in the future.
      * Update touch focus on external events like VD switches correctly.
      
      Test Plan: Manually and existing autotests.
      
      Reviewers: #kwin
      
      Subscribers: kwin, zzag
      
      Tags: #kwin
      
      Differential Revision: https://phabricator.kde.org/D15595
      2e297113
    • Roman Gilg's avatar
      Privatize variables in InputDeviceHandler · eab71a8a
      Roman Gilg authored
      Summary:
      Some members were declared protected. Better style is to have them private
      with public or protected getters and setters.
      
      This also removes the unnecessary m_input variable.
      
      Test Plan: Builds and runs.
      
      Reviewers: #kwin, davidedmundson
      
      Reviewed By: #kwin, davidedmundson
      
      Subscribers: kwin
      
      Tags: #kwin
      
      Differential Revision: https://phabricator.kde.org/D15519
      eab71a8a
    • Roman Gilg's avatar
      Float position values in drag input filter · b5a91cdf
      Roman Gilg authored
      Summary:
      We lost information when using QMouseEvent::globalPos, since
      it is integer. Use instead InputRedirection::globalPointer,
      which is updated before the filters are processed and is
      float.
      
      Test Plan: Manually.
      
      Reviewers: #kwin, davidedmundson
      
      Reviewed By: #kwin, davidedmundson
      
      Subscribers: anthonyfieroni, kwin
      
      Tags: #kwin
      
      Differential Revision: https://phabricator.kde.org/D15502
      b5a91cdf
    • Vlad Zahorodnii's avatar
      Make sure that effect windows outlive effects · 29513814
      Vlad Zahorodnii authored
      Summary:
      Compositing is suspended/finished in a very hard way fashion, effect
      windows are destroyed without notifying effects about it.
      
      AnimationEffect tries gracefully release deleted windows, but because
      in some cases(like when suspending compositing) a deleted window can
      be already destroyed, a segmentation fault can happen.
      
      This change adjusts the order in which effect windows and effects are
      destroyed, so AnimationEffect (and other effects) cannot access dangling
      pointers.
      
      BUG: 400788
      FIXED-IN: 5.15.0
      
      Reviewers: #kwin, graesslin
      
      Reviewed By: #kwin, graesslin
      
      Subscribers: graesslin, kwin
      
      Tags: #kwin
      
      Differential Revision: https://phabricator.kde.org/D17311
      29513814
    • Vlad Zahorodnii's avatar
      [scenes/opengl] Cleanup cached decoration shadow textures when suspending compositing · 3ad56045
      Vlad Zahorodnii authored
      Summary:
      When suspending compositing, SceneOpenGLShadow cannot cleanup cached
      decoration shadow textures because the effects handler is already gone.
      
      This sometimes can result in a crash when running kwin_x11 --replace
      (we're hitting an assert statement).
      
      To fix that, let's use the scene instead of the effects handler for
      making the OpenGL context current.
      
      Test Plan:
      No longer hit the assert statement:
      
          ASSERT: "m_cache.isEmpty()" in file /home/vlad/Workspace/KDE/src/kde/workspace/kwin/plugins/scenes/opengl/scene_opengl.cpp, line 2025
          Application::crashHandler() called with signal 6; recent crashes: 1
          QCoreApplication::applicationFilePath: Please instantiate the QApplication object first
          KCrash: crashing... crashRecursionCounter = 2
          KCrash: Application Name = kwin_x11 path = /home/vlad/Workspace/KDE/usr/bin pid = 5407
          KCrash: Arguments: /home/vlad/Workspace/KDE/usr/bin/kwin_x11 --replace
      
      Reviewers: #kwin, graesslin
      
      Reviewed By: #kwin, graesslin
      
      Subscribers: kwin
      
      Tags: #kwin
      
      Differential Revision: https://phabricator.kde.org/D17306
      3ad56045