D16846: [wayland] Don't crash when resizing windows

Vlad Zagorodniy <[email protected]>
Newsgroups gmane.comp.kde.devel.kwin
Message-ID <[email protected]>
zzag created this revision.
zzag added a reviewer: KWin.
Herald added a project: KWin.
Herald added a subscriber: kwin.
zzag requested review of this revision.

REVISION SUMMARY
  If you resize a decorated client by using the resize user action(press
  Alt + F3 > More Actions > Resize), then KWin will crash because it gets
  stuck in an infinite loop (AbstractClient::performMoveMouse <->
  ShellClient::setGeometry).
  
  Here's how KWin gets stuck in that loop:
  
  - when you finish resizing the client, AbstractClient::keyPressEvent will call AbstractClient::finishMoveResize;
  - the first thing that finishMoveResize does is block geometry updates, then it does some clean up (e.g. reset the value of isMoveResize(), etc), updates the geometry of the client and when it's done, it will emit clientFinishUserMoveResized signal;
  - when PointerInputRedirection notices that signal, it will call processDecorationMove on the client, which in its turn will indirectly call AbstractClient::startMoveResize;
  - when it's time to go back to AbstractClient::keyPressEvent, geometry updates are unblocked and if there are any pending geometry updates, then ShellClient::setGeometry will be called;
  - ShellClient::setGeometry will eventually call ShellClient::doSetGeometry;
  - ShellClient::doSetGeometry will call AbstractClient::performMoveResize because AbstractClient::processDecorationMove indirectly called AbstractClient::startMoveResize;
  - AbstractClient::performMoveResize calls ShellClient::setGeometry;
  - (at this point, KWin got stuck in the infinite loop)
  
  This change swaps setMoveResizePointerButtonDown and finishMoveResize,
  so processDecorationMove won't indirectly call startMoveResize.
  
  BUG: 397577
  FIXED-IN: 5.14.4

REPOSITORY
  R108 KWin

BRANCH
  wayland-fix-crash-on-resize

REVISION DETAIL
  https://phabricator.kde.org/D16846

AFFECTED FILES
  abstract_client.cpp

To: zzag, #kwin
Cc: kwin, mkulinski, ragreen, jackyalcine, Pitel, iodelay, bwowk, ZrenBot, ngraham, lesliezhai, ali-mohamed, hardening, jensreuterberg, abetts, sebas, apol, mart
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.