From 36d22d82aa202bb199967e9512281e9a53db42c9 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 21:33:14 +0200 Subject: Adding upstream version 115.7.0esr. Signed-off-by: Daniel Baumann --- widget/cocoa/DesktopBackgroundImage.mm | 68 ++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 widget/cocoa/DesktopBackgroundImage.mm (limited to 'widget/cocoa/DesktopBackgroundImage.mm') diff --git a/widget/cocoa/DesktopBackgroundImage.mm b/widget/cocoa/DesktopBackgroundImage.mm new file mode 100644 index 0000000000..5ebb7ea938 --- /dev/null +++ b/widget/cocoa/DesktopBackgroundImage.mm @@ -0,0 +1,68 @@ +/* -*- Mode: C++; tab-width: 20; 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/Logging.h" +#include "nsCocoaUtils.h" +#include "nsIFile.h" +#include "DesktopBackgroundImage.h" + +#import + +extern mozilla::LazyLogModule gCocoaUtilsLog; +#undef LOG +#define LOG(...) MOZ_LOG(gCocoaUtilsLog, LogLevel::Debug, (__VA_ARGS__)) + +namespace mozilla { +namespace widget { + +void SetDesktopImage(nsIFile* aImage) { + nsAutoCString imagePath; + nsresult rv = aImage->GetNativePath(imagePath); + if (NS_FAILED(rv)) { + LOG("%s ERROR: failed to get image path", __func__); + return; + } + + bool exists = false; + rv = aImage->Exists(&exists); + if (NS_FAILED(rv) || !exists) { + LOG("%s ERROR: file \"%s\" does not exist", __func__, imagePath.get()); + return; + } + + NSString* urlString = [NSString stringWithUTF8String:imagePath.get()]; + if (!urlString) { + LOG("%s ERROR: null image path \"%s\"", __func__, imagePath.get()); + return; + } + + NSURL* url = [NSURL fileURLWithPath:urlString]; + if (!url) { + LOG("%s ERROR: null image path URL \"%s\"", __func__, imagePath.get()); + return; + } + + // Only apply the background to the screen with focus + NSScreen* currentScreen = [NSScreen mainScreen]; + if (!currentScreen) { + LOG("%s ERROR: got null NSScreen", __func__); + return; + } + + // Use existing options for this screen + NSDictionary* screenOptions = + [[NSWorkspace sharedWorkspace] desktopImageOptionsForScreen:currentScreen]; + + NSError* error = nil; + if (![[NSWorkspace sharedWorkspace] setDesktopImageURL:url + forScreen:currentScreen + options:screenOptions + error:&error]) { + LOG("%s ERROR: setDesktopImageURL failed (%ld)", __func__, (long)[error code]); + } +} + +} // namespace widget +} // namespace mozilla -- cgit v1.2.3