From 6dd3c55a8f548fdf765eb58f1068ceed491afd36 Mon Sep 17 00:00:00 2001 From: Luc Schrijvers Date: Sat, 26 Apr 2025 19:12:21 +0200 Subject: Don't default to xcb qt plugin on Haiku diff --git a/src/frontend/LabPlot.cpp b/src/frontend/LabPlot.cpp index 23bab67..50cf6dd 100644 --- a/src/frontend/LabPlot.cpp +++ b/src/frontend/LabPlot.cpp @@ -42,7 +42,7 @@ #endif int main(int argc, char* argv[]) { -#if defined(Q_OS_UNIX) && !defined(Q_OS_DARWIN) +#if defined(Q_OS_UNIX) && !defined(Q_OS_DARWIN) && !defined(Q_OS_HAIKU) // the qads library has issues on wayland so we force qt to use x11 instead // see https://invent.kde.org/education/labplot/-/issues/1067 QByteArray xcbQtQpaEnvVar("xcb"); -- 2.48.1 From 762fc82832ef9581f8793f29d8848f9ba56cff10 Mon Sep 17 00:00:00 2001 From: Luc Schrijvers Date: Tue, 5 Aug 2025 15:46:28 +0200 Subject: Haiku fixes to disable libxcb diff --git a/src/3rdparty/Qt-Advanced-Docking-System/src/CMakeLists.txt b/src/3rdparty/Qt-Advanced-Docking-System/src/CMakeLists.txt index cc84e23..0257e56 100644 --- a/src/3rdparty/Qt-Advanced-Docking-System/src/CMakeLists.txt +++ b/src/3rdparty/Qt-Advanced-Docking-System/src/CMakeLists.txt @@ -66,7 +66,7 @@ set(ads_HEADERS ResizeHandle.h ) add_compile_options("$<$:/utf-8>") -if (UNIX AND NOT APPLE) +if (UNIX AND NOT APPLE AND NOT HAIKU) set(ads_SRCS linux/FloatingWidgetTitleBar.cpp ${ads_SRCS}) set(ads_HEADERS linux/FloatingWidgetTitleBar.h ${ads_HEADERS}) endif() @@ -89,7 +89,7 @@ endif() target_link_libraries(${library_name} PUBLIC Qt${QT_VERSION_MAJOR}::Core Qt${QT_VERSION_MAJOR}::Gui Qt${QT_VERSION_MAJOR}::Widgets) -if (UNIX AND NOT APPLE) +if (UNIX AND NOT APPLE AND NOT HAIKU) if (${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD") find_package(X11 REQUIRED) target_link_libraries(${library_name} PUBLIC X11::xcb) diff --git a/src/3rdparty/Qt-Advanced-Docking-System/src/DockFocusController.cpp b/src/3rdparty/Qt-Advanced-Docking-System/src/DockFocusController.cpp index 27acc4a..b7a0539 100644 --- a/src/3rdparty/Qt-Advanced-Docking-System/src/DockFocusController.cpp +++ b/src/3rdparty/Qt-Advanced-Docking-System/src/DockFocusController.cpp @@ -27,7 +27,7 @@ #include "DockManager.h" #include "DockAreaTitleBar.h" -#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) +#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) && !defined(Q_OS_HAIKU) #include "linux/FloatingWidgetTitleBar.h" #endif @@ -44,7 +44,7 @@ struct DockFocusControllerPrivate QPointer FocusedDockWidget = nullptr; QPointer FocusedArea = nullptr; QPointer OldFocusedDockWidget = nullptr; -#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) +#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) && !defined(Q_OS_HAIKU) QPointer FloatingWidget = nullptr; #endif CDockManager* DockManager; @@ -85,7 +85,7 @@ static void updateDockAreaFocusStyle(CDockAreaWidget* DockArea, bool Focused) //=========================================================================== -#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) +#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) && !defined(Q_OS_HAIKU) static void updateFloatingWidgetFocusStyle(CFloatingDockContainer* FloatingWidget, bool Focused) { if (FloatingWidget->hasNativeTitleBar()) @@ -170,7 +170,7 @@ void DockFocusControllerPrivate::updateDockWidgetFocus(CDockWidget* DockWidget) } -#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) +#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) && !defined(Q_OS_HAIKU) // This code is required for styling the floating widget titlebar for linux // depending on the current focus state if (FloatingWidget != NewFloatingWidget) @@ -289,7 +289,7 @@ void CDockFocusController::onApplicationFocusChanged(QWidget* focusedOld, QWidge DockWidget = internal::findParent(focusedNow); } -#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) +#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) && !defined(Q_OS_HAIKU) if (!DockWidget) { return; diff --git a/src/3rdparty/Qt-Advanced-Docking-System/src/DockManager.cpp b/src/3rdparty/Qt-Advanced-Docking-System/src/DockManager.cpp index bf568d7..26f7283 100644 --- a/src/3rdparty/Qt-Advanced-Docking-System/src/DockManager.cpp +++ b/src/3rdparty/Qt-Advanced-Docking-System/src/DockManager.cpp @@ -63,7 +63,7 @@ #include "DockComponentsFactory.h" -#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) +#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) && !defined(Q_OS_HAIKU) #include "linux/FloatingWidgetTitleBar.h" #endif @@ -207,7 +207,7 @@ void DockManagerPrivate::loadStylesheet() QString FileName = QStringLiteral(":ads/stylesheets/"); FileName += CDockManager::testConfigFlag(CDockManager::FocusHighlighting) ? QStringLiteral("focus_highlighting") : QStringLiteral("default"); -#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) +#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) && !defined(Q_OS_HAIKU) FileName += QStringLiteral("_linux"); #endif FileName += QStringLiteral(".css"); @@ -529,7 +529,7 @@ CDockManager::CDockManager(QWidget *parent) : window()->installEventFilter(this); -#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) +#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) && !defined(Q_OS_HAIKU) connect(qApp, &QApplication::focusWindowChanged, [](QWindow* focusWindow) { // bring modal dialogs to foreground to ensure that they are in front of any @@ -614,7 +614,7 @@ void CDockManager::setComponentsFactory(QSharedPointerMode = Mode; d->Cross = new CDockOverlayCross(this); -#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) +#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) && !defined(Q_OS_HAIKU) setWindowFlags(Qt::Tool | Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint | Qt::X11BypassWindowManagerHint); #else setWindowFlags(Qt::Tool | Qt::FramelessWindowHint); @@ -738,7 +738,7 @@ CDockOverlayCross::CDockOverlayCross(CDockOverlay* overlay) : d(new DockOverlayCrossPrivate(this)) { d->DockOverlay = overlay; -#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) +#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) && !defined(Q_OS_HAIKU) setWindowFlags(Qt::Tool | Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint | Qt::X11BypassWindowManagerHint); #else setWindowFlags(Qt::Tool | Qt::FramelessWindowHint); diff --git a/src/3rdparty/Qt-Advanced-Docking-System/src/FloatingDockContainer.cpp b/src/3rdparty/Qt-Advanced-Docking-System/src/FloatingDockContainer.cpp index f151a9f..50a16de 100644 --- a/src/3rdparty/Qt-Advanced-Docking-System/src/FloatingDockContainer.cpp +++ b/src/3rdparty/Qt-Advanced-Docking-System/src/FloatingDockContainer.cpp @@ -52,7 +52,7 @@ #pragma comment(lib, "User32.lib") #endif #endif -#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) +#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) && !defined(Q_OS_HAIKU) #include "linux/FloatingWidgetTitleBar.h" #include #endif @@ -374,7 +374,7 @@ struct FloatingDockContainerPrivate QPoint DragStartPos; bool Hiding = false; bool AutoHideChildren = true; -#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) +#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) && !defined(Q_OS_HAIKU) QWidget* MouseEventHandler = nullptr; CFloatingWidgetTitleBar* TitleBar = nullptr; bool IsResizing = false; @@ -425,7 +425,7 @@ struct FloatingDockContainerPrivate void setWindowTitle(const QString &Text) { -#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) +#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) && !defined(Q_OS_HAIKU) if (TitleBar) { TitleBar->setTitle(Text); @@ -545,7 +545,7 @@ void FloatingDockContainerPrivate::updateDropOverlays(const QPoint &GlobalPos) return; } -#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) +#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) && !defined(Q_OS_HAIKU) // Prevent display of drop overlays and docking as long as a model dialog // is active if (qApp->activeModalWidget()) @@ -660,7 +660,7 @@ CFloatingDockContainer::CFloatingDockContainer(CDockManager *DockManager) : connect(d->DockContainer, SIGNAL(dockAreasRemoved()), this, SLOT(onDockAreasAddedOrRemoved())); -#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) +#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) && !defined(Q_OS_HAIKU) QDockWidget::setWidget(d->DockContainer); QDockWidget::setFeatures(QDockWidget::DockWidgetClosable | QDockWidget::DockWidgetMovable | QDockWidget::DockWidgetFloatable); @@ -820,7 +820,7 @@ void CFloatingDockContainer::changeEvent(QEvent *event) ADS_PRINT("FloatingWidget::changeEvent QEvent::ActivationChange "); d->zOrderIndex = ++zOrderCounterFloating; -#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) +#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) && !defined(Q_OS_HAIKU) if (d->DraggingState == DraggingFloatingWidget) { d->titleMouseReleaseEvent(); @@ -994,7 +994,7 @@ void CFloatingDockContainer::hideEvent(QHideEvent *event) void CFloatingDockContainer::showEvent(QShowEvent *event) { Super::showEvent(event); -#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) +#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) && !defined(Q_OS_HAIKU) if (CDockManager::testConfigFlag(CDockManager::FocusHighlighting)) { this->window()->activateWindow(); @@ -1007,7 +1007,7 @@ void CFloatingDockContainer::showEvent(QShowEvent *event) void CFloatingDockContainer::startFloating(const QPoint &DragStartMousePos, const QSize &Size, eDragState DragState, QWidget *MouseEventHandler) { -#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) +#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) && !defined(Q_OS_HAIKU) if (!isMaximized()) { resize(Size); @@ -1144,7 +1144,7 @@ bool CFloatingDockContainer::restoreState(CDockingStateReader &Stream, return false; } onDockAreasAddedOrRemoved(); -#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) +#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) && !defined(Q_OS_HAIKU) if(d->TitleBar) { d->TitleBar->setMaximizedIcon(windowState() == Qt::WindowMaximized); @@ -1198,7 +1198,7 @@ void CFloatingDockContainer::finishDropOperation() void CFloatingDockContainer::finishDragging() { ADS_PRINT("CFloatingDockContainer::finishDragging"); -#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) +#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) && !defined(Q_OS_HAIKU) setWindowOpacity(1); activateWindow(); if (d->MouseEventHandler) @@ -1210,7 +1210,7 @@ void CFloatingDockContainer::finishDragging() d->titleMouseReleaseEvent(); } -#ifdef Q_OS_MACOS +#if defined(Q_OS_MACOS) || defined(Q_OS_HAIKU) //============================================================================ bool CFloatingDockContainer::event(QEvent *e) { @@ -1313,7 +1313,7 @@ void CFloatingDockContainer::moveEvent(QMoveEvent *event) #endif -#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) +#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) && !defined(Q_OS_HAIKU) //============================================================================ void CFloatingDockContainer::onMaximizeRequest() { diff --git a/src/3rdparty/Qt-Advanced-Docking-System/src/FloatingDockContainer.h b/src/3rdparty/Qt-Advanced-Docking-System/src/FloatingDockContainer.h index a26cbac..3df39d3 100644 --- a/src/3rdparty/Qt-Advanced-Docking-System/src/FloatingDockContainer.h +++ b/src/3rdparty/Qt-Advanced-Docking-System/src/FloatingDockContainer.h @@ -33,7 +33,7 @@ #include -#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) +#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) && !defined(Q_OS_HAIKU) #include #define tFloatingWidgetBase QDockWidget #else @@ -178,7 +178,7 @@ protected: // reimplements QWidget virtual void hideEvent(QHideEvent *event) override; virtual void showEvent(QShowEvent *event) override; -#ifdef Q_OS_MACOS +#if defined(Q_OS_MACOS) || defined(Q_OS_HAIKU) virtual bool event(QEvent *e) override; virtual void moveEvent(QMoveEvent *event) override; #elif defined(Q_OS_UNIX) @@ -269,7 +269,7 @@ public: */ void finishDropOperation(); -#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) +#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) && !defined(Q_OS_HAIKU) /** * This is a function that responds to FloatingWidgetTitleBar::maximizeRequest() * Maximize or normalize the container size. diff --git a/src/3rdparty/Qt-Advanced-Docking-System/src/FloatingDragPreview.cpp b/src/3rdparty/Qt-Advanced-Docking-System/src/FloatingDragPreview.cpp index f7a45a2..9b8041e 100644 --- a/src/3rdparty/Qt-Advanced-Docking-System/src/FloatingDragPreview.cpp +++ b/src/3rdparty/Qt-Advanced-Docking-System/src/FloatingDragPreview.cpp @@ -295,7 +295,7 @@ CFloatingDragPreview::CFloatingDragPreview(QWidget* Content, QWidget* parent) : setAttribute(Qt::WA_TranslucentBackground); } -#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) +#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) && !defined(Q_OS_HAIKU) auto Flags = windowFlags(); Flags |= Qt::WindowStaysOnTopHint | Qt::X11BypassWindowManagerHint; setWindowFlags(Flags); diff --git a/src/3rdparty/Qt-Advanced-Docking-System/src/ads_globals.cpp b/src/3rdparty/Qt-Advanced-Docking-System/src/ads_globals.cpp index 2abcd03..5714528 100644 --- a/src/3rdparty/Qt-Advanced-Docking-System/src/ads_globals.cpp +++ b/src/3rdparty/Qt-Advanced-Docking-System/src/ads_globals.cpp @@ -38,7 +38,7 @@ #include "IconProvider.h" #include "ads_globals.h" -#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) +#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) && !defined(Q_OS_HAIKU) #include #include #include @@ -52,7 +52,7 @@ namespace internal { const int FloatingWidgetDragStartEvent = QEvent::registerEventType(); const int DockedWidgetDragStartEvent = QEvent::registerEventType(); -#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) +#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) && !defined(Q_OS_HAIKU) static QString _window_manager; static QHash _xcb_atom_cache; @@ -412,7 +412,7 @@ void setButtonIcon(QAbstractButton* Button, QStyle::StandardPixmap StandarPixmap return; } -#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) +#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) && !defined(Q_OS_HAIKU) Button->setIcon(Button->style()->standardIcon(StandarPixmap)); #else // The standard icons does not look good on high DPI screens so we create diff --git a/src/3rdparty/Qt-Advanced-Docking-System/src/ads_globals.h b/src/3rdparty/Qt-Advanced-Docking-System/src/ads_globals.h index f7ccc8e..ddede0a 100644 --- a/src/3rdparty/Qt-Advanced-Docking-System/src/ads_globals.h +++ b/src/3rdparty/Qt-Advanced-Docking-System/src/ads_globals.h @@ -40,7 +40,7 @@ #include -#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) +#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) && !defined(Q_OS_HAIKU) #include #endif @@ -171,7 +171,7 @@ static const char* const LocationProperty = "Location"; extern const int FloatingWidgetDragStartEvent; extern const int DockedWidgetDragStartEvent; -#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) +#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) && !defined(Q_OS_HAIKU) // Utils to directly communicate with the X server /** * Get atom from cache or request it from the XServer. -- 2.48.1