mirror of
https://invent.kde.org/network/falkon.git
synced 2024-12-20 10:46:35 +01:00
Windows: At first try to show native default app settings UI (>=Vista).
This commit is contained in:
parent
1bc35dafc4
commit
2aa25fe0b1
@ -1092,7 +1092,8 @@ void MainApplication::checkDefaultWebBrowser()
|
|||||||
dialog.setIcon(QMessageBox::Warning);
|
dialog.setIcon(QMessageBox::Warning);
|
||||||
|
|
||||||
if (dialog.exec() == QMessageBox::Yes) {
|
if (dialog.exec() == QMessageBox::Yes) {
|
||||||
associationManager()->registerAllAssociation();
|
if (!mApp->associationManager()->showNativeDefaultAppSettingsUi())
|
||||||
|
mApp->associationManager()->registerAllAssociation();
|
||||||
}
|
}
|
||||||
|
|
||||||
checkAgain = dialog.isChecked();
|
checkAgain = dialog.isChecked();
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* ============================================================
|
/* ============================================================
|
||||||
* Copyright (C) 2012-2014 S. Razi Alavizadeh <s.r.alavizadeh@gmail.com>
|
* Copyright (C) 2012-2017 S. Razi Alavizadeh <s.r.alavizadeh@gmail.com>
|
||||||
* This file is part of QupZilla - WebKit based browser 2010-2014
|
* This file is part of QupZilla - WebKit based browser 2010-2014
|
||||||
* by David Rosca <nowrep@gmail.com>
|
* by David Rosca <nowrep@gmail.com>
|
||||||
*
|
*
|
||||||
@ -148,6 +148,12 @@ bool RegisterQAppAssociation::isVistaOrNewer()
|
|||||||
QSysInfo::windowsVersion() <= QSysInfo::WV_NT_based);
|
QSysInfo::windowsVersion() <= QSysInfo::WV_NT_based);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool RegisterQAppAssociation::isWin10OrNewer()
|
||||||
|
{
|
||||||
|
return (QSysInfo::windowsVersion() >= QSysInfo::WV_WINDOWS10 &&
|
||||||
|
QSysInfo::windowsVersion() <= QSysInfo::WV_NT_based);
|
||||||
|
}
|
||||||
|
|
||||||
void RegisterQAppAssociation::registerAssociation(const QString &assocName, AssociationType type)
|
void RegisterQAppAssociation::registerAssociation(const QString &assocName, AssociationType type)
|
||||||
{
|
{
|
||||||
if (isVistaOrNewer()) { // Vista and newer
|
if (isVistaOrNewer()) { // Vista and newer
|
||||||
@ -261,6 +267,65 @@ void RegisterQAppAssociation::registerAllAssociation()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// The code of the following method was taken
|
||||||
|
// from https://github.com/mozilla/gecko-dev/blob/master/browser/components/shell/nsWindowsShellService.cpp#L364
|
||||||
|
// that is licensed under MPL-2.0.
|
||||||
|
bool RegisterQAppAssociation::showNativeDefaultAppSettingsUi()
|
||||||
|
{
|
||||||
|
if (!isVistaOrNewer()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isWin10OrNewer()) {
|
||||||
|
IApplicationActivationManager* pActivator;
|
||||||
|
HRESULT hr = CoCreateInstance(CLSID_ApplicationActivationManager,
|
||||||
|
nullptr,
|
||||||
|
CLSCTX_INPROC,
|
||||||
|
IID_IApplicationActivationManager,
|
||||||
|
(void**)&pActivator);
|
||||||
|
|
||||||
|
if (!SUCCEEDED(hr)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
DWORD pid;
|
||||||
|
hr = pActivator->ActivateApplication(
|
||||||
|
L"windows.immersivecontrolpanel_cw5n1h2txyewy"
|
||||||
|
L"!microsoft.windows.immersivecontrolpanel",
|
||||||
|
L"page=SettingsPageAppsDefaults", AO_NONE, &pid);
|
||||||
|
|
||||||
|
if (!SUCCEEDED(hr)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Do not check error because we could at least open
|
||||||
|
// the "Default apps" setting.
|
||||||
|
pActivator->ActivateApplication(
|
||||||
|
L"windows.immersivecontrolpanel_cw5n1h2txyewy"
|
||||||
|
L"!microsoft.windows.immersivecontrolpanel",
|
||||||
|
L"page=SettingsPageAppsDefaults"
|
||||||
|
L"&target=SystemSettings_DefaultApps_Browser", AO_NONE, &pid);
|
||||||
|
|
||||||
|
pActivator->Release();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
IApplicationAssociationRegistrationUI* pAARUI = NULL;
|
||||||
|
|
||||||
|
HRESULT hr = CoCreateInstance(CLSID_ApplicationAssociationRegistrationUI,
|
||||||
|
NULL, CLSCTX_INPROC, __uuidof(IApplicationAssociationRegistrationUI),
|
||||||
|
reinterpret_cast< void** > (&pAARUI));
|
||||||
|
|
||||||
|
if (!SUCCEEDED(hr)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
hr = pAARUI->LaunchAdvancedAssociationUI(reinterpret_cast<LPCWSTR>(_appRegisteredName.utf16()));
|
||||||
|
pAARUI->Release();
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
void RegisterQAppAssociation::createProgId(const QString &progId)
|
void RegisterQAppAssociation::createProgId(const QString &progId)
|
||||||
{
|
{
|
||||||
QSettings regUserRoot(_UserRootKey, QSettings::NativeFormat);
|
QSettings regUserRoot(_UserRootKey, QSettings::NativeFormat);
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* ============================================================
|
/* ============================================================
|
||||||
* Copyright (C) 2012-2014 S. Razi Alavizadeh <s.r.alavizadeh@gmail.com>
|
* Copyright (C) 2012-2017 S. Razi Alavizadeh <s.r.alavizadeh@gmail.com>
|
||||||
* This file is part of QupZilla - WebKit based browser 2010-2014
|
* This file is part of QupZilla - WebKit based browser 2010-2014
|
||||||
* by David Rosca <nowrep@gmail.com>
|
* by David Rosca <nowrep@gmail.com>
|
||||||
*
|
*
|
||||||
@ -50,6 +50,7 @@ public:
|
|||||||
void setPerMachineRegisteration(bool enable);
|
void setPerMachineRegisteration(bool enable);
|
||||||
bool registerAppCapabilities();
|
bool registerAppCapabilities();
|
||||||
bool isVistaOrNewer();
|
bool isVistaOrNewer();
|
||||||
|
bool isWin10OrNewer();
|
||||||
void registerAssociation(const QString &assocName, AssociationType type);
|
void registerAssociation(const QString &assocName, AssociationType type);
|
||||||
void createProgId(const QString &progId);
|
void createProgId(const QString &progId);
|
||||||
|
|
||||||
@ -57,6 +58,7 @@ public:
|
|||||||
bool isDefaultForAllCapabilities();
|
bool isDefaultForAllCapabilities();
|
||||||
void registerAllAssociation();
|
void registerAllAssociation();
|
||||||
|
|
||||||
|
bool showNativeDefaultAppSettingsUi();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QString _appRegisteredName;
|
QString _appRegisteredName;
|
||||||
|
@ -611,9 +611,11 @@ void Preferences::makeQupZillaDefault()
|
|||||||
{
|
{
|
||||||
#if defined(Q_OS_WIN) && !defined(Q_OS_OS2)
|
#if defined(Q_OS_WIN) && !defined(Q_OS_OS2)
|
||||||
disconnect(ui->checkNowDefaultBrowser, SIGNAL(clicked()), this, SLOT(makeQupZillaDefault()));
|
disconnect(ui->checkNowDefaultBrowser, SIGNAL(clicked()), this, SLOT(makeQupZillaDefault()));
|
||||||
mApp->associationManager()->registerAllAssociation();
|
|
||||||
ui->checkNowDefaultBrowser->setText(tr("Default"));
|
ui->checkNowDefaultBrowser->setText(tr("Default"));
|
||||||
ui->checkNowDefaultBrowser->setEnabled(false);
|
ui->checkNowDefaultBrowser->setEnabled(false);
|
||||||
|
|
||||||
|
if (!mApp->associationManager()->showNativeDefaultAppSettingsUi())
|
||||||
|
mApp->associationManager()->registerAllAssociation();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user