Skip to content

Commit

Permalink
Merge pull request PrismLauncher#2360 from PrismLauncher/backport-234…
Browse files Browse the repository at this point in the history
…8-to-release-8.x

[Backport release-8.x] Use proxy style to force ActivateItemOnSingleClick off
  • Loading branch information
Trial97 authored Apr 30, 2024
2 parents d436536 + 257297d commit cf87aed
Show file tree
Hide file tree
Showing 5 changed files with 75 additions and 2 deletions.
2 changes: 2 additions & 0 deletions launcher/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -827,6 +827,8 @@ SET(LAUNCHER_SOURCES
ui/themes/DarkTheme.h
ui/themes/ITheme.cpp
ui/themes/ITheme.h
ui/themes/HintOverrideProxyStyle.cpp
ui/themes/HintOverrideProxyStyle.h
ui/themes/SystemTheme.cpp
ui/themes/SystemTheme.h
ui/themes/IconTheme.cpp
Expand Down
30 changes: 30 additions & 0 deletions launcher/ui/themes/HintOverrideProxyStyle.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
// SPDX-License-Identifier: GPL-3.0-only
/*
* Prism Launcher - Minecraft Launcher
* Copyright (C) 2024 TheKodeToad <[email protected]>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, version 3.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/

#include "HintOverrideProxyStyle.h"

int HintOverrideProxyStyle::styleHint(QStyle::StyleHint hint,
const QStyleOption* option,
const QWidget* widget,
QStyleHintReturn* returnData) const
{
if (hint == QStyle::SH_ItemView_ActivateItemOnSingleClick)
return 0;

return QProxyStyle::styleHint(hint, option, widget, returnData);
}
34 changes: 34 additions & 0 deletions launcher/ui/themes/HintOverrideProxyStyle.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
// SPDX-License-Identifier: GPL-3.0-only
/*
* Prism Launcher - Minecraft Launcher
* Copyright (C) 2024 TheKodeToad <[email protected]>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, version 3.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/

#pragma once

#include <QProxyStyle>
#include <iostream>

/// Used to override platform-specific behaviours which the launcher does work well with.
class HintOverrideProxyStyle : public QProxyStyle {
Q_OBJECT
public:
HintOverrideProxyStyle(QStyle* style) : QProxyStyle(style) {}

int styleHint(QStyle::StyleHint hint,
const QStyleOption* option = nullptr,
const QWidget* widget = nullptr,
QStyleHintReturn* returnData = nullptr) const override;
};
4 changes: 3 additions & 1 deletion launcher/ui/themes/ITheme.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
/*
* Prism Launcher - Minecraft Launcher
* Copyright (C) 2022 Tayou <[email protected]>
* Copyright (C) 2024 TheKodeToad <[email protected]>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Expand Down Expand Up @@ -36,12 +37,13 @@
#include <QDir>
#include <QStyleFactory>
#include "Application.h"
#include "HintOverrideProxyStyle.h"
#include "rainbow.h"

void ITheme::apply(bool)
{
APPLICATION->setStyleSheet(QString());
QApplication::setStyle(QStyleFactory::create(qtTheme()));
QApplication::setStyle(new HintOverrideProxyStyle(QStyleFactory::create(qtTheme())));
if (hasColorScheme()) {
QApplication::setPalette(colorScheme());
}
Expand Down
7 changes: 6 additions & 1 deletion launcher/ui/themes/SystemTheme.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
/*
* Prism Launcher - Minecraft Launcher
* Copyright (C) 2022 Tayou <[email protected]>
* Copyright (C) 2024 TheKodeToad <[email protected]>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Expand Down Expand Up @@ -37,6 +38,7 @@
#include <QDebug>
#include <QStyle>
#include <QStyleFactory>
#include "HintOverrideProxyStyle.h"
#include "ThemeManager.h"

SystemTheme::SystemTheme()
Expand Down Expand Up @@ -64,8 +66,11 @@ void SystemTheme::apply(bool initial)
{
// See https://github.com/MultiMC/Launcher/issues/1790
// or https://github.com/PrismLauncher/PrismLauncher/issues/490
if (initial)
if (initial) {
QApplication::setStyle(new HintOverrideProxyStyle(QStyleFactory::create(qtTheme())));
return;
}

ITheme::apply(initial);
}

Expand Down

0 comments on commit cf87aed

Please sign in to comment.