File indexing completed on 2024-04-28 05:49:32
0001 /* 0002 SPDX-FileCopyrightText: 2021 Christoph Cullmann <cullmann@kde.org> 0003 SPDX-FileCopyrightText: 2021 Michal Humpula <kde@hudrydum.cz> 0004 0005 SPDX-License-Identifier: LGPL-2.0-or-later 0006 */ 0007 0008 #include "katesplitter.h" 0009 #include <QEvent> 0010 0011 class SplitterHandle : public QSplitterHandle 0012 { 0013 public: 0014 SplitterHandle(Qt::Orientation orientation, QSplitter *parent) 0015 : QSplitterHandle(orientation, parent) 0016 , m_mouseReleaseWasReceived(false) 0017 { 0018 } 0019 0020 protected: 0021 bool event(QEvent *event) override 0022 { 0023 switch (event->type()) { 0024 case QEvent::MouseButtonPress: 0025 m_mouseReleaseWasReceived = false; 0026 break; 0027 case QEvent::MouseButtonRelease: 0028 if (m_mouseReleaseWasReceived) { 0029 resetSplitterSizes(); 0030 } 0031 m_mouseReleaseWasReceived = !m_mouseReleaseWasReceived; 0032 break; 0033 case QEvent::MouseButtonDblClick: 0034 m_mouseReleaseWasReceived = false; 0035 resetSplitterSizes(); 0036 break; 0037 default: 0038 break; 0039 } 0040 0041 return QSplitterHandle::event(event); 0042 } 0043 0044 private: 0045 void resetSplitterSizes() 0046 { 0047 QList<int> splitterSizes = splitter()->sizes(); 0048 std::fill(splitterSizes.begin(), splitterSizes.end(), 0); 0049 splitter()->setSizes(splitterSizes); 0050 } 0051 0052 // Sometimes QSplitterHandle doesn't receive MouseButtonDblClick event. 0053 // We can detect that MouseButtonDblClick event should have been 0054 // received if we receive two MouseButtonRelease events in a row. 0055 bool m_mouseReleaseWasReceived; 0056 }; 0057 0058 KateSplitter::KateSplitter(Qt::Orientation orientation, QWidget *parent) 0059 : QSplitter(orientation, parent) 0060 { 0061 } 0062 0063 KateSplitter::KateSplitter(QWidget *parent) 0064 : QSplitter(parent) 0065 { 0066 } 0067 0068 QSplitterHandle *KateSplitter::createHandle() 0069 { 0070 return new SplitterHandle(orientation(), this); 0071 } 0072 0073 #include "moc_katesplitter.cpp"