Added fix for mzbz#1762816
This commit is contained in:
		
							parent
							
								
									118a6c91ec
								
							
						
					
					
						commit
						ffa346e745
					
				
							
								
								
									
										1343
									
								
								0025-Add-KDE-integration-to-Firefox-toolkit-parts.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1343
									
								
								0025-Add-KDE-integration-to-Firefox-toolkit-parts.patch
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										279
									
								
								0026-Add-KDE-integration-to-Firefox.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										279
									
								
								0026-Add-KDE-integration-to-Firefox.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,279 @@ | ||||
| From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 | ||||
| From: Martin Sirringhaus <msirringhaus@suse.de> | ||||
| Date: Tue, 8 Aug 2023 16:18:24 +0300 | ||||
| Subject: [PATCH] Add KDE integration to Firefox | ||||
| 
 | ||||
| Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=140751 | ||||
| Bug: https://bugzilla.suse.com/show_bug.cgi?id=170055 | ||||
| 
 | ||||
| How to apply this patch: | ||||
| 
 | ||||
| 1. Import and apply it | ||||
| 2. cp browser/base/content/browser.xul browser/base/content/browser-kde.xul | ||||
| 3. Find editBookmarkPanelDoneButton | ||||
| 4. Replace #ifndef with #ifdef in the line above (this hanges the button order from Gnome-style to KDE-style) | ||||
| 5. hg qrefresh | ||||
| ---
 | ||||
|  browser/components/preferences/main.js        |  18 +++ | ||||
|  browser/components/shell/moz.build            |   2 + | ||||
|  .../components/shell/nsKDEShellService.cpp    | 109 ++++++++++++++++++ | ||||
|  browser/components/shell/nsKDEShellService.h  |  32 +++++ | ||||
|  .../components/shell/nsUnixShellService.cpp   |  22 ++++ | ||||
|  browser/components/shell/nsUnixShellService.h |  15 +++ | ||||
|  6 files changed, 198 insertions(+) | ||||
|  create mode 100644 browser/components/shell/nsKDEShellService.cpp | ||||
|  create mode 100644 browser/components/shell/nsKDEShellService.h | ||||
|  create mode 100644 browser/components/shell/nsUnixShellService.cpp | ||||
|  create mode 100644 browser/components/shell/nsUnixShellService.h | ||||
| 
 | ||||
| diff --git a/browser/components/preferences/main.js b/browser/components/preferences/main.js
 | ||||
| index 820e46fb006567bfdf93e2a46da5e3c07d42bf10..57d1c21bdecc2d55d0bed30246e684d3b97ad7fa 100644
 | ||||
| --- a/browser/components/preferences/main.js
 | ||||
| +++ b/browser/components/preferences/main.js
 | ||||
| @@ -294,6 +294,13 @@ var gMainPane = {
 | ||||
|        }, backoffTimes[this._backoffIndex]); | ||||
|      } | ||||
|   | ||||
| +    var env = Components.classes["@mozilla.org/process/environment;1"]
 | ||||
| +      .getService(Components.interfaces.nsIEnvironment);
 | ||||
| +    var kde_session = 0;
 | ||||
| +    if (env.get('KDE_FULL_SESSION') == "true") {
 | ||||
| +      kde_session = 1;
 | ||||
| +    }
 | ||||
| +
 | ||||
|      this.initBrowserContainers(); | ||||
|      this.buildContentProcessCountMenuList(); | ||||
|   | ||||
| @@ -1727,6 +1734,17 @@ var gMainPane = {
 | ||||
|        } | ||||
|        try { | ||||
|          shellSvc.setDefaultBrowser(true, false); | ||||
| +        if (kde_session == 1) {
 | ||||
| +          var shellObj = Components.classes["@mozilla.org/file/local;1"]
 | ||||
| +            .createInstance(Components.interfaces.nsILocalFile);
 | ||||
| +          shellObj.initWithPath("/usr/bin/kwriteconfig");
 | ||||
| +          var process = Components.classes["@mozilla.org/process/util;1"]
 | ||||
| +            .createInstance(Components.interfaces.nsIProcess);
 | ||||
| +          process.init(shellObj);
 | ||||
| +          var args = ["--file", "kdeglobals", "--group", "General", "--key",
 | ||||
| +              "BrowserApplication", "firefox"];
 | ||||
| +          process.run(false, args, args.length);
 | ||||
| +        }
 | ||||
|        } catch (ex) { | ||||
|          console.error(ex); | ||||
|          return; | ||||
| diff --git a/browser/components/shell/moz.build b/browser/components/shell/moz.build
 | ||||
| index eb88cb287dc3f04022b74b978666118bbd5fa6b2..95277533781a7224d108e3c45731a6d9a89ba1a0 100644
 | ||||
| --- a/browser/components/shell/moz.build
 | ||||
| +++ b/browser/components/shell/moz.build
 | ||||
| @@ -36,6 +36,8 @@ elif CONFIG["MOZ_WIDGET_TOOLKIT"] == "gtk":
 | ||||
|   | ||||
|      SOURCES += [ | ||||
|          "nsGNOMEShellService.cpp", | ||||
| +        "nsKDEShellService.cpp",
 | ||||
| +        "nsUnixShellService.cpp",
 | ||||
|      ] | ||||
|      if CONFIG["MOZ_ENABLE_DBUS"]: | ||||
|          SOURCES += [ | ||||
| diff --git a/browser/components/shell/nsKDEShellService.cpp b/browser/components/shell/nsKDEShellService.cpp
 | ||||
| new file mode 100644 | ||||
| index 0000000000000000000000000000000000000000..152a3aca87ea73477bc75c4e93c01e5a52dda102
 | ||||
| --- /dev/null
 | ||||
| +++ b/browser/components/shell/nsKDEShellService.cpp
 | ||||
| @@ -0,0 +1,109 @@
 | ||||
| +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
 | ||||
| +/* This Source Code Form is subject to the terms of the Mozilla Public
 | ||||
| + * License, v. 2.0. If a copy of the MPL was not distributed with this
 | ||||
| + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 | ||||
| +
 | ||||
| +#include "mozilla/ArrayUtils.h"
 | ||||
| +
 | ||||
| +#include "nsCOMPtr.h"
 | ||||
| +#include "nsKDEShellService.h"
 | ||||
| +#include "nsShellService.h"
 | ||||
| +#include "nsKDEUtils.h"
 | ||||
| +#include "nsIPrefService.h"
 | ||||
| +#include "nsIProcess.h"
 | ||||
| +#include "nsIFile.h"
 | ||||
| +#include "nsServiceManagerUtils.h"
 | ||||
| +#include "nsComponentManagerUtils.h"
 | ||||
| +#include "nsIMutableArray.h"
 | ||||
| +#include "nsISupportsPrimitives.h"
 | ||||
| +#include "nsArrayUtils.h"
 | ||||
| +
 | ||||
| +using namespace mozilla;
 | ||||
| +
 | ||||
| +nsresult
 | ||||
| +nsKDEShellService::Init()
 | ||||
| +{
 | ||||
| +    if( !nsKDEUtils::kdeSupport())
 | ||||
| +        return NS_ERROR_NOT_AVAILABLE;
 | ||||
| +    return NS_OK;
 | ||||
| +}
 | ||||
| +
 | ||||
| +NS_IMPL_ISUPPORTS(nsKDEShellService, nsIGNOMEShellService, nsIShellService)
 | ||||
| +
 | ||||
| +NS_IMETHODIMP
 | ||||
| +nsKDEShellService::IsDefaultBrowser(bool aForAllTypes,
 | ||||
| +                                    bool* aIsDefaultBrowser)
 | ||||
| +{
 | ||||
| +    *aIsDefaultBrowser = false;
 | ||||
| +
 | ||||
| +    nsCOMPtr<nsIMutableArray> command = do_CreateInstance( NS_ARRAY_CONTRACTID );
 | ||||
| +    if (!command)
 | ||||
| +        return NS_ERROR_FAILURE;
 | ||||
| +
 | ||||
| +    nsCOMPtr<nsISupportsCString> str = do_CreateInstance( NS_SUPPORTS_CSTRING_CONTRACTID );
 | ||||
| +    if (!str)
 | ||||
| +        return NS_ERROR_FAILURE;
 | ||||
| +
 | ||||
| +    str->SetData("ISDEFAULTBROWSER"_ns);
 | ||||
| +    command->AppendElement( str );
 | ||||
| +
 | ||||
| +    if( nsKDEUtils::command( command ))
 | ||||
| +        *aIsDefaultBrowser = true;
 | ||||
| +    return NS_OK;
 | ||||
| +}
 | ||||
| +
 | ||||
| +NS_IMETHODIMP
 | ||||
| +nsKDEShellService::SetDefaultBrowser(bool aClaimAllTypes,
 | ||||
| +                                     bool aForAllUsers)
 | ||||
| +{
 | ||||
| +    nsCOMPtr<nsIMutableArray> command = do_CreateInstance( NS_ARRAY_CONTRACTID );
 | ||||
| +    if (!command)
 | ||||
| +        return NS_ERROR_FAILURE;
 | ||||
| +
 | ||||
| +    nsCOMPtr<nsISupportsCString> cmdstr = do_CreateInstance( NS_SUPPORTS_CSTRING_CONTRACTID );
 | ||||
| +    nsCOMPtr<nsISupportsCString> paramstr = do_CreateInstance( NS_SUPPORTS_CSTRING_CONTRACTID );
 | ||||
| +    if (!cmdstr || !paramstr)
 | ||||
| +        return NS_ERROR_FAILURE;
 | ||||
| +
 | ||||
| +    cmdstr->SetData("SETDEFAULTBROWSER"_ns);
 | ||||
| +    command->AppendElement( cmdstr );
 | ||||
| +
 | ||||
| +    paramstr->SetData( aClaimAllTypes ? "ALLTYPES"_ns : "NORMAL"_ns );
 | ||||
| +    command->AppendElement( paramstr );
 | ||||
| +
 | ||||
| +    return nsKDEUtils::command( command ) ? NS_OK : NS_ERROR_FAILURE;
 | ||||
| +}
 | ||||
| +
 | ||||
| +NS_IMETHODIMP
 | ||||
| +nsKDEShellService::GetCanSetDesktopBackground(bool* aResult)
 | ||||
| +{
 | ||||
| +  *aResult = true;
 | ||||
| +  return NS_OK;
 | ||||
| +}
 | ||||
| +
 | ||||
| +NS_IMETHODIMP
 | ||||
| +nsKDEShellService::SetDesktopBackground(dom::Element* aElement,
 | ||||
| +                                        int32_t aPosition,
 | ||||
| +                                        const nsACString& aImageName)
 | ||||
| +{
 | ||||
| +    return NS_ERROR_NOT_IMPLEMENTED;
 | ||||
| +}
 | ||||
| +
 | ||||
| +NS_IMETHODIMP
 | ||||
| +nsKDEShellService::GetDesktopBackgroundColor(PRUint32 *aColor)
 | ||||
| +{
 | ||||
| +    return NS_ERROR_NOT_IMPLEMENTED;
 | ||||
| +}
 | ||||
| +
 | ||||
| +NS_IMETHODIMP
 | ||||
| +nsKDEShellService::SetDesktopBackgroundColor(PRUint32 aColor)
 | ||||
| +{
 | ||||
| +    return NS_ERROR_NOT_IMPLEMENTED;
 | ||||
| +}
 | ||||
| +
 | ||||
| +NS_IMETHODIMP
 | ||||
| +nsKDEShellService::IsDefaultForScheme(nsTSubstring<char> const& aScheme, bool* aIsDefaultBrowser)
 | ||||
| +{
 | ||||
| +    return NS_ERROR_NOT_IMPLEMENTED;
 | ||||
| +}
 | ||||
| +
 | ||||
| diff --git a/browser/components/shell/nsKDEShellService.h b/browser/components/shell/nsKDEShellService.h
 | ||||
| new file mode 100644 | ||||
| index 0000000000000000000000000000000000000000..8b0bb19164352453cfa453dd87c19263160b9ad8
 | ||||
| --- /dev/null
 | ||||
| +++ b/browser/components/shell/nsKDEShellService.h
 | ||||
| @@ -0,0 +1,32 @@
 | ||||
| +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
 | ||||
| +/* This Source Code Form is subject to the terms of the Mozilla Public
 | ||||
| + * License, v. 2.0. If a copy of the MPL was not distributed with this
 | ||||
| + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 | ||||
| +
 | ||||
| +#ifndef nskdeshellservice_h____
 | ||||
| +#define nskdeshellservice_h____
 | ||||
| +
 | ||||
| +#include "nsIGNOMEShellService.h"
 | ||||
| +#include "nsToolkitShellService.h"
 | ||||
| +#include "nsString.h"
 | ||||
| +#include "mozilla/Attributes.h"
 | ||||
| +
 | ||||
| +class nsKDEShellService final : public nsIGNOMEShellService,
 | ||||
| +                                public nsToolkitShellService
 | ||||
| +{
 | ||||
| +public:
 | ||||
| +  nsKDEShellService() : mCheckedThisSession(false) { }
 | ||||
| +
 | ||||
| +  NS_DECL_ISUPPORTS
 | ||||
| +  NS_DECL_NSISHELLSERVICE
 | ||||
| +  NS_DECL_NSIGNOMESHELLSERVICE
 | ||||
| +
 | ||||
| +  nsresult Init();
 | ||||
| +
 | ||||
| +private:
 | ||||
| +  ~nsKDEShellService() {}
 | ||||
| +
 | ||||
| +  bool mCheckedThisSession;
 | ||||
| +};
 | ||||
| +
 | ||||
| +#endif // nskdeshellservice_h____
 | ||||
| diff --git a/browser/components/shell/nsUnixShellService.cpp b/browser/components/shell/nsUnixShellService.cpp
 | ||||
| new file mode 100644 | ||||
| index 0000000000000000000000000000000000000000..abf266ebdc52e136f495911da3454e69c770c6db
 | ||||
| --- /dev/null
 | ||||
| +++ b/browser/components/shell/nsUnixShellService.cpp
 | ||||
| @@ -0,0 +1,22 @@
 | ||||
| +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
 | ||||
| +/* This Source Code Form is subject to the terms of the Mozilla Public
 | ||||
| + * License, v. 2.0. If a copy of the MPL was not distributed with this
 | ||||
| + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 | ||||
| +
 | ||||
| +
 | ||||
| +#include "nsUnixShellService.h"
 | ||||
| +#include "nsGNOMEShellService.h"
 | ||||
| +#include "nsKDEShellService.h"
 | ||||
| +#include "nsKDEUtils.h"
 | ||||
| +#include "mozilla/ModuleUtils.h"
 | ||||
| +
 | ||||
| +NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsGNOMEShellService, Init)
 | ||||
| +NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsKDEShellService, Init)
 | ||||
| +
 | ||||
| +NS_IMETHODIMP
 | ||||
| +nsUnixShellServiceConstructor(REFNSIID aIID, void **aResult)
 | ||||
| +{
 | ||||
| +    if( nsKDEUtils::kdeSupport())
 | ||||
| +        return nsKDEShellServiceConstructor( aIID, aResult );
 | ||||
| +    return nsGNOMEShellServiceConstructor( aIID, aResult );
 | ||||
| +}
 | ||||
| diff --git a/browser/components/shell/nsUnixShellService.h b/browser/components/shell/nsUnixShellService.h
 | ||||
| new file mode 100644 | ||||
| index 0000000000000000000000000000000000000000..26b5dbac47dd9a8ec1fcb6c93575cca750692735
 | ||||
| --- /dev/null
 | ||||
| +++ b/browser/components/shell/nsUnixShellService.h
 | ||||
| @@ -0,0 +1,15 @@
 | ||||
| +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
 | ||||
| +/* This Source Code Form is subject to the terms of the Mozilla Public
 | ||||
| + * License, v. 2.0. If a copy of the MPL was not distributed with this
 | ||||
| + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 | ||||
| +
 | ||||
| +
 | ||||
| +#ifndef nsunixshellservice_h____
 | ||||
| +#define nsunixshellservice_h____
 | ||||
| +
 | ||||
| +#include "nsIGNOMEShellService.h"
 | ||||
| +
 | ||||
| +NS_IMETHODIMP
 | ||||
| +nsUnixShellServiceConstructor(nsISupports *aOuter, REFNSIID aIID, void **aResult);
 | ||||
| +
 | ||||
| +#endif // nsunixshellservice_h____
 | ||||
							
								
								
									
										12
									
								
								firefox.spec
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								firefox.spec
									
									
									
									
									
								
							| @ -169,7 +169,7 @@ ExcludeArch: i686 | ||||
| Summary:        Mozilla Firefox Web browser | ||||
| Name:           firefox | ||||
| Version:        119.0 | ||||
| Release:        3%{?pre_tag}%{?dist} | ||||
| Release:        4%{?pre_tag}%{?dist} | ||||
| URL:            https://www.mozilla.org/firefox/ | ||||
| License:        MPLv1.1 or GPLv2+ or LGPLv2+ | ||||
| Source0:        https://archive.mozilla.org/pub/firefox/releases/%{version}%{?pre_version}/source/firefox-%{version}%{?pre_version}.source.tar.xz | ||||
| @ -241,12 +241,15 @@ Patch228:        disable-openh264-download.patch | ||||
| Patch229:        firefox-nss-addon-hack.patch | ||||
| Patch230:        firefox-enable-vaapi.patch | ||||
| Patch231:        fedora-customization.patch | ||||
| Patch241:        0025-Add-KDE-integration-to-Firefox-toolkit-parts.patch | ||||
| Patch242:        0026-Add-KDE-integration-to-Firefox.patch | ||||
| 
 | ||||
| # Upstream patches | ||||
| Patch402:        mozilla-1196777.patch | ||||
| Patch407:        mozilla-1667096.patch | ||||
| Patch408:        D167159.diff | ||||
| Patch409:        D192061.1698487416.diff | ||||
| Patch410:        mozilla-1762816.patch | ||||
| 
 | ||||
| # PGO/LTO patches | ||||
| Patch600:        pgo.patch | ||||
| @ -532,10 +535,14 @@ This package contains results of tests executed during build. | ||||
| %patch230 -p1 -b .firefox-enable-vaapi | ||||
| %patch231 -p1 -b .fedora-customization | ||||
| 
 | ||||
| #%patch241 -p1 -b .kde-integration-toolkit | ||||
| #%patch242 -p1 -b .kde-integration | ||||
| 
 | ||||
| %patch402 -p1 -b .1196777 | ||||
| %patch407 -p1 -b .1667096 | ||||
| %patch408 -p1 -b .D167159 | ||||
| %patch409 -p1 -b .D192061 | ||||
| %patch410 -p1 -b .mozilla-1762816 | ||||
| 
 | ||||
| # PGO patches | ||||
| %if %{build_with_pgo} | ||||
| @ -1144,6 +1151,9 @@ fi | ||||
| #--------------------------------------------------------------------- | ||||
| 
 | ||||
| %changelog | ||||
| * Mon Nov 06 2023 Martin Stransky <stransky@redhat.com>- 119.0-3 | ||||
| - Added fix for mzbz#1762816 | ||||
| 
 | ||||
| * Mon Oct 30 2023 Jan Horak <jhorak@redhat.com> - 119.0-3 | ||||
| - Enable mozilla crash reporter | ||||
| 
 | ||||
|  | ||||
							
								
								
									
										121
									
								
								mozilla-1762816.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										121
									
								
								mozilla-1762816.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,121 @@ | ||||
| changeset:   688555:933a3df01cfa | ||||
| tag:         tip | ||||
| parent:      688549:db8c28afe588 | ||||
| user:        stransky <stransky@redhat.com> | ||||
| date:        Tue Oct 31 15:27:05 2023 +0100 | ||||
| files:       widget/gtk/nsLookAndFeel.cpp widget/gtk/nsLookAndFeel.h | ||||
| description: | ||||
| Bug 1762816 [Linux] Watch org.freedesktop.portal.Desktop DBus name and get session data only if it's running r?emilio | ||||
| 
 | ||||
| Don't autostart org.freedesktop.portal.Desktop by g_dbus_proxy_new_for_bus_sync(), that may block Firefox start for 30~ seconds after desktop start. | ||||
| Use g_bus_watch_name() and get session data only if org.freedesktop.portal.Desktop is available. | ||||
| 
 | ||||
| Differential Revision: https://phabricator.services.mozilla.com/D192335 | ||||
| 
 | ||||
| 
 | ||||
| diff --git a/widget/gtk/nsLookAndFeel.cpp b/widget/gtk/nsLookAndFeel.cpp
 | ||||
| --- a/widget/gtk/nsLookAndFeel.cpp
 | ||||
| +++ b/widget/gtk/nsLookAndFeel.cpp
 | ||||
| @@ -134,6 +134,35 @@ static void settings_changed_signal_cb(G
 | ||||
|    } | ||||
|  } | ||||
|   | ||||
| +void nsLookAndFeel::WatchDBus() {
 | ||||
| +  GUniquePtr<GError> error;
 | ||||
| +  mDBusSettingsProxy = dont_AddRef(g_dbus_proxy_new_for_bus_sync(
 | ||||
| +      G_BUS_TYPE_SESSION, G_DBUS_PROXY_FLAGS_NONE, nullptr,
 | ||||
| +      "org.freedesktop.portal.Desktop", "/org/freedesktop/portal/desktop",
 | ||||
| +      "org.freedesktop.portal.Settings", nullptr, getter_Transfers(error)));
 | ||||
| +  if (mDBusSettingsProxy) {
 | ||||
| +    g_signal_connect(mDBusSettingsProxy, "g-signal",
 | ||||
| +                     G_CALLBACK(settings_changed_signal_cb), this);
 | ||||
| +  } else {
 | ||||
| +    LOGLNF("Can't create DBus proxy for settings: %s\n", error->message);
 | ||||
| +    return;
 | ||||
| +  }
 | ||||
| +
 | ||||
| +  // DBus interface was started after L&F init so we need to load
 | ||||
| +  // our settings from DBus explicitly.
 | ||||
| +  if (!sIgnoreChangedSettings) {
 | ||||
| +    OnColorSchemeSettingChanged();
 | ||||
| +  }
 | ||||
| +}
 | ||||
| +
 | ||||
| +void nsLookAndFeel::UnwatchDBus() {
 | ||||
| +  if (mDBusSettingsProxy) {
 | ||||
| +    g_signal_handlers_disconnect_by_func(
 | ||||
| +        mDBusSettingsProxy, FuncToGpointer(settings_changed_signal_cb), this);
 | ||||
| +    mDBusSettingsProxy = nullptr;
 | ||||
| +  }
 | ||||
| +}
 | ||||
| +
 | ||||
|  nsLookAndFeel::nsLookAndFeel() { | ||||
|    static constexpr nsLiteralCString kObservedSettings[] = { | ||||
|        // Affects system font sizes. | ||||
| @@ -172,27 +201,29 @@ nsLookAndFeel::nsLookAndFeel() {
 | ||||
|        nsWindow::GetSystemGtkWindowDecoration() != nsWindow::GTK_DECORATION_NONE; | ||||
|   | ||||
|    if (ShouldUsePortal(PortalKind::Settings)) { | ||||
| -    GUniquePtr<GError> error;
 | ||||
| -    mDBusSettingsProxy = dont_AddRef(g_dbus_proxy_new_for_bus_sync(
 | ||||
| -        G_BUS_TYPE_SESSION, G_DBUS_PROXY_FLAGS_NONE, nullptr,
 | ||||
| -        "org.freedesktop.portal.Desktop", "/org/freedesktop/portal/desktop",
 | ||||
| -        "org.freedesktop.portal.Settings", nullptr, getter_Transfers(error)));
 | ||||
| -    if (mDBusSettingsProxy) {
 | ||||
| -      g_signal_connect(mDBusSettingsProxy, "g-signal",
 | ||||
| -                       G_CALLBACK(settings_changed_signal_cb), this);
 | ||||
| -    } else {
 | ||||
| -      LOGLNF("Can't create DBus proxy for settings: %s\n", error->message);
 | ||||
| -    }
 | ||||
| +    mDBusID = g_bus_watch_name(
 | ||||
| +        G_BUS_TYPE_SESSION, "org.freedesktop.portal.Desktop",
 | ||||
| +        G_BUS_NAME_WATCHER_FLAGS_AUTO_START,
 | ||||
| +        [](GDBusConnection*, const gchar*, const gchar*,
 | ||||
| +           gpointer data) -> void {
 | ||||
| +          auto* lnf = static_cast<nsLookAndFeel*>(data);
 | ||||
| +          lnf->WatchDBus();
 | ||||
| +        },
 | ||||
| +        [](GDBusConnection*, const gchar*, gpointer data) -> void {
 | ||||
| +          auto* lnf = static_cast<nsLookAndFeel*>(data);
 | ||||
| +          lnf->UnwatchDBus();
 | ||||
| +        },
 | ||||
| +        this, nullptr);
 | ||||
|    } | ||||
|  } | ||||
|   | ||||
|  nsLookAndFeel::~nsLookAndFeel() { | ||||
|    ClearRoundedCornerProvider(); | ||||
| -  if (mDBusSettingsProxy) {
 | ||||
| -    g_signal_handlers_disconnect_by_func(
 | ||||
| -        mDBusSettingsProxy, FuncToGpointer(settings_changed_signal_cb), this);
 | ||||
| -    mDBusSettingsProxy = nullptr;
 | ||||
| +  if (mDBusID) {
 | ||||
| +    g_bus_unwatch_name(mDBusID);
 | ||||
| +    mDBusID = 0;
 | ||||
|    } | ||||
| +  UnwatchDBus();
 | ||||
|    g_signal_handlers_disconnect_by_func( | ||||
|        gtk_settings_get_default(), FuncToGpointer(settings_changed_cb), nullptr); | ||||
|  } | ||||
| diff --git a/widget/gtk/nsLookAndFeel.h b/widget/gtk/nsLookAndFeel.h
 | ||||
| --- a/widget/gtk/nsLookAndFeel.h
 | ||||
| +++ b/widget/gtk/nsLookAndFeel.h
 | ||||
| @@ -53,6 +53,9 @@ class nsLookAndFeel final : public nsXPL
 | ||||
|    static bool ShouldHonorThemeScrollbarColors(); | ||||
|    mozilla::Maybe<ColorScheme> ComputeColorSchemeSetting(); | ||||
|   | ||||
| +  void WatchDBus();
 | ||||
| +  void UnwatchDBus();
 | ||||
| +
 | ||||
|    enum class ThemeFamily : uint8_t { | ||||
|      // Adwaita, the default GTK theme. | ||||
|      Adwaita, | ||||
| @@ -160,6 +163,7 @@ class nsLookAndFeel final : public nsXPL
 | ||||
|      return mSystemThemeOverridden ? mAltTheme : mSystemTheme; | ||||
|    } | ||||
|   | ||||
| +  uint32_t mDBusID = 0;
 | ||||
|    RefPtr<GDBusProxy> mDBusSettingsProxy; | ||||
|    mozilla::Maybe<ColorScheme> mColorSchemePreference; | ||||
|    int32_t mCaretBlinkTime = 0; | ||||
| 
 | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user