Bug 435129 - Splitting konsole in both Top/Bottom and Left/Right "hangs" it when using the Oxygen widget style
Summary: Splitting konsole in both Top/Bottom and Left/Right "hangs" it when using the...
Status: RESOLVED FIXED
Alias: None
Product: konsole
Classification: Applications
Component: split-view (show other bugs)
Version: 21.04.0
Platform: Arch Linux Linux
: NOR normal
Target Milestone: ---
Assignee: Konsole Developer
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2021-03-29 19:20 UTC by firewalker
Modified: 2021-04-28 17:55 UTC (History)
3 users (show)

See Also:
Latest Commit:
Version Fixed In: 5.22


Attachments
works for me on master. (1.60 MB, video/mp4)
2021-03-29 19:52 UTC, tcanabrava
Details

Note You need to log in before you can comment on or make changes to this bug.
Description firewalker 2021-03-29 19:20:29 UTC
Splitting konsole in both Top/Bottom and Left/Right "hangs" it.

STEPS TO REPRODUCE
1. Open konsole.
2. Split konsole in Top/Bottom or Left/Right.
3. Split one of the windows in Left/Right or Top/Bottom.

OBSERVED RESULT
The new split windows are frozen.

The following error is produced:

qt.qpa.xcb: QXcbConnection: XCB error: 8 (BadMatch), sequence: 4787, resource id: 182452273, major code: 130 (Unknown), minor code: 3


EXPECTED RESULT

All windows should work properly.

SOFTWARE/OS VERSIONS

KDE Plasma Version: 5.21.3
KDE Frameworks Version: 5.80.0
Qt Version: 5.15.2

ADDITIONAL INFORMATION

Video demonstrating the issue:

https://youtu.be/zPqDi3WILZ4
Comment 1 tcanabrava 2021-03-29 19:52:18 UTC
Created attachment 137164 [details]
works for me on master.

I need more information, as this works for me in master and I have no hangups.
Comment 2 firewalker 2021-03-30 05:42:48 UTC
I also tested version 21.7.70 build from here: 

https://invent.kde.org/utilities/konsole

and it has the same problem. yakuake that seems to use the same subsystem as konsole works as expected. 

What info could I provide you in order to help more?
Comment 3 firewalker 2021-03-30 13:38:57 UTC
After some break point and stepping. It seems that it never exits _ZN10QEventLoop4execE6QFlagsINS_17ProcessEventsFlagEE function.

0x00007ffff6b9a87e in QApplicationPrivate::sendMouseEvent(QWidget*, QMouseEvent*, QWidget*, QWidget*, QWidget**, QPointer<QWidget>&, bool, bool) () from /usr/lib/libQt5Widgets.so.5
(gdb) 
Single stepping until exit from function _ZN19QApplicationPrivate14sendMouseEventEP7QWidgetP11QMouseEventS1_S1_PS1_R8QPointerIS0_Ebb,
which has no line number information.
0x00007ffff6b94752 in QApplicationPrivate::notify_helper(QObject*, QEvent*) () from /usr/lib/libQt5Widgets.so.5
(gdb) 
Single stepping until exit from function _ZN19QApplicationPrivate13notify_helperEP7QObjectP6QEvent,
which has no line number information.
0x00007ffff7bf1a2a in QCoreApplication::notifyInternal2(QObject*, QEvent*) () from /usr/lib/libQt5Core.so.5
(gdb) 
Single stepping until exit from function _ZN16QCoreApplication15notifyInternal2EP7QObjectP6QEvent,
which has no line number information.
0x00007ffff64a4594 in QGuiApplicationPrivate::processMouseEvent(QWindowSystemInterfacePrivate::MouseEvent*) () from /usr/lib/libQt5Gui.so.5
(gdb) 
Single stepping until exit from function _ZN22QGuiApplicationPrivate17processMouseEventEPN29QWindowSystemInterfacePrivate10MouseEventE,
which has no line number information.
0x00007ffff6479bb5 in QWindowSystemInterface::sendWindowSystemEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/libQt5Gui.so.5
(gdb) 
Single stepping until exit from function _ZN22QWindowSystemInterface22sendWindowSystemEventsE6QFlagsIN10QEventLoop17ProcessEventsFlagEE,
which has no line number information.
0x00007ffff57c6f9c in g_main_context_dispatch () from /usr/lib/libglib-2.0.so.0
(gdb) 
Single stepping until exit from function g_main_context_dispatch,
which has no line number information.
0x00007ffff58149a0 in g_mutex_unlock () from /usr/lib/libglib-2.0.so.0
(gdb) 
Single stepping until exit from function g_mutex_unlock,
which has no line number information.
0x00007ffff57c46f1 in g_main_context_iteration () from /usr/lib/libglib-2.0.so.0
(gdb) 
Single stepping until exit from function g_main_context_iteration,
which has no line number information.
0x00007ffff7c4a691 in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/libQt5Core.so.5
(gdb) 
Single stepping until exit from function _ZN20QEventDispatcherGlib13processEventsE6QFlagsIN10QEventLoop17ProcessEventsFlagEE,
which has no line number information.
0x00007ffff7bf03ac in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/libQt5Core.so.5
(gdb) 
Single stepping until exit from function _ZN10QEventLoop4execE6QFlagsINS_17ProcessEventsFlagEE,
which has no line number information.
qt.qpa.xcb: QXcbConnection: XCB error: 8 (BadMatch), sequence: 3905, resource id: 169869344, major code: 130 (Unknown), minor code: 3
qt.qpa.xcb: QXcbConnection: XCB error: 8 (BadMatch), sequence: 3910, resource id: 169869344, major code: 130 (Unknown), minor code: 3
qt.qpa.xcb: QXcbConnection: XCB error: 8 (BadMatch), sequence: 3915, resource id: 169869344, major code: 130 (Unknown), minor code: 3
qt.qpa.xcb: QXcbConnection: XCB error: 8 (BadMatch), sequence: 3920, resource id: 169869344, major code: 130 (Unknown), minor code: 3
qt.qpa.xcb: QXcbConnection: XCB error: 8 (BadMatch), sequence: 3925, resource id: 169869344, major code: 130 (Unknown), minor code: 3
qt.qpa.xcb: QXcbConnection: XCB error: 8 (BadMatch), sequence: 3930, resource id: 169869344, major code: 130 (Unknown), minor code: 3
qt.qpa.xcb: QXcbConnection: XCB error: 8 (BadMatch), sequence: 3935, resource id: 169869344, major code: 130 (Unknown), minor code: 3
qt.qpa.xcb: QXcbConnection: XCB error: 8 (BadMatch), sequence: 4105, resource id: 169869344, major code: 130 (Unknown), minor code: 3
Comment 4 firewalker 2021-04-03 09:38:15 UTC
launching konsole with --notransparency seems to adress the issue.
Comment 5 firewalker 2021-04-24 10:39:22 UTC
It has something to do with my selected theme.

Removing those lines from [KDE] in ./config/kdeglobals fixes the issue.

[KDE]
ColorScheme=Breeze
LookAndFeelPackage=org.kde.oxygen
widgetStyle=oxygen
Comment 6 Vlad Zahorodnii 2021-04-27 15:33:37 UTC
When I create the second split, for some reason, konsole creates a new toplevel window. At this point, everything just breaks. If compositing is disabled, konsole doesn't create any window.

Furthermore, this issue appears to be present only when using oxygen widget style. When using breeze or fusion, splits work fine.

On Wayland, konsole won't create a toplevel window after splitting the window the second time, but one half of konsole will be corrupted similar as in bug report. I run konsole as `konsole -style oxygen -platform xcb`
Comment 7 Vlad Zahorodnii 2021-04-27 15:36:45 UTC
If konsole runs as a native wayland app with oxygen style, this bug can't be reproduced.
Comment 8 Vlad Zahorodnii 2021-04-27 16:10:28 UTC
The issue is in Oxygen's BlurHelper, it creates a window which then breaks everything

  * frame #0: 0x00007ffff4570fb0 libxcb.so.1`xcb_create_window
    frame #1: 0x00007ffff0b586f5 libQt5XcbQpa.so.5`QXcbWindow::create() + 1157
    frame #2: 0x00007ffff0b47787 libQt5XcbQpa.so.5`QXcbIntegration::createPlatformWindow(QWindow*) const + 295
    frame #3: 0x00007ffff5b69067 libQt5Gui.so.5`QWindowPrivate::create(bool, unsigned long long) + 167
    frame #4: 0x00007ffff6280928 libQt5Widgets.so.5`QWidgetPrivate::create() + 632
    frame #5: 0x00007ffff6280ea1 libQt5Widgets.so.5`QWidget::create(unsigned long long, bool, bool) + 241
    frame #6: 0x00007ffff6283335 libQt5Widgets.so.5`QWidget::winId() const + 85
    frame #7: 0x00007fffeaedae2c oxygen.so`Oxygen::BlurHelper::clear(this=0x00005555557c69d0, widget=0x0000555555e10700) const at oxygenblurhelper.cpp:274:60
    frame #8: 0x00007fffeaedacaf oxygen.so`Oxygen::BlurHelper::unregisterWidget(this=0x00005555557c69d0, widget=0x0000555555e10700) at oxygenblurhelper.cpp:100:39
    frame #9: 0x00007fffeaeea63c oxygen.so`Oxygen::Style::unpolish(this=0x00005555557c5720, widget=0x0000555555e10700) at oxygenstyle.cpp:520:22
Comment 9 Bug Janitor Service 2021-04-27 16:15:57 UTC
A possibly relevant merge request was started @ https://invent.kde.org/plasma/oxygen/-/merge_requests/6
Comment 10 Vlad Zahorodnii 2021-04-28 16:46:05 UTC
Git commit 8bd426dbcf45e09501a365d72f0ddcb839fad4fe by Vlad Zahorodnii.
Committed on 27/04/2021 at 16:17.
Pushed by ngraham into branch 'master'.

Don't call BlurHelper::clear() for unregistered widgets

BlurHelper::clear() will call QWidget::winId(), which may create a
toplevel window.

M  +3    -3    kstyle/oxygenblurhelper.cpp

https://invent.kde.org/plasma/oxygen/commit/8bd426dbcf45e09501a365d72f0ddcb839fad4fe
Comment 11 firewalker 2021-04-28 17:55:07 UTC
Yep! That single change addressees the issue. Thanks you!