Репозиторий Sisyphus
Последнее обновление: 1 октября 2023 | Пакетов: 18631 | Посещений: 37510387
en ru br
Репозитории ALT

Группа :: Сети/WWW
Пакет: palemoon

 Главная   Изменения   Спек   Патчи   Sources   Загрузить   Gear   Bugs and FR  Repocop 

Патч: palemoon-29.4.6-kde-background.patch
Скачать


diff -uNrBbwp palemoon-29.4.6/palemoon/palemoon/components/shell/nsKDEShellService.cpp palemoon-29.4.6-new/palemoon/palemoon/components/shell/nsKDEShellService.cpp
--- palemoon-29.4.6/palemoon/palemoon/components/shell/nsKDEShellService.cpp	2022-05-08 03:23:56.582470041 +0000
+++ palemoon-29.4.6-new/palemoon/palemoon/components/shell/nsKDEShellService.cpp	2022-05-08 03:22:30.758431138 +0000
@@ -17,6 +17,21 @@
 #include "nsIMutableArray.h"
 #include "nsISupportsPrimitives.h"
 #include "nsArrayUtils.h"
+#include "nsIImageLoadingContent.h"
+#include "imgIRequest.h"
+#include "nsIStringBundle.h"
+#include "nsIDOMHTMLImageElement.h"
+#include "prenv.h"
+
+#include <glib.h>
+#include <glib-object.h>
+#include <gtk/gtk.h>
+#include <gdk/gdk.h>
+#if defined(MOZ_WIDGET_GTK)
+#include "nsIImageToPixbuf.h"
+#endif
+#include <limits.h>
+#include <stdlib.h>
 
 using namespace mozilla;
 
@@ -28,6 +43,30 @@ nsKDEShellService::Init()
     return NS_OK;
 }
 
+static nsresult
+WriteImage(const nsCString& aPath, imgIContainer* aImage)
+{
+#if !defined(MOZ_WIDGET_GTK)
+  return NS_ERROR_NOT_AVAILABLE;
+#else
+  nsCOMPtr<nsIImageToPixbuf> imgToPixbuf =
+    do_GetService("@mozilla.org/widget/image-to-gdk-pixbuf;1");
+  if (!imgToPixbuf)
+      return NS_ERROR_NOT_AVAILABLE;
+
+  GdkPixbuf* pixbuf = imgToPixbuf->ConvertImageToPixbuf(aImage);
+  if (!pixbuf)
+      return NS_ERROR_NOT_AVAILABLE;
+
+  gboolean res = gdk_pixbuf_save(pixbuf, aPath.get(), "png", nullptr, nullptr);
+
+  g_object_unref(pixbuf);
+  return res ? NS_OK : NS_ERROR_FAILURE;
+#endif
+}
+
+
+
 NS_IMPL_ISUPPORTS(nsKDEShellService, nsIShellService)
 
 NS_IMETHODIMP
@@ -123,19 +162,83 @@ NS_IMETHODIMP
 nsKDEShellService::SetDesktopBackground(nsIDOMElement* aElement,
                                           PRInt32 aPosition)
 {
-    return NS_ERROR_NOT_IMPLEMENTED;
+  nsresult rv;
+  nsCOMPtr<nsIImageLoadingContent> imageContent = do_QueryInterface(aElement, &rv);
+  if (!imageContent) return rv;
+
+  // get the image container
+  nsCOMPtr<imgIRequest> request;
+  rv = imageContent->GetRequest(nsIImageLoadingContent::CURRENT_REQUEST,
+                                getter_AddRefs(request));
+  if (!request) return rv;
+  nsCOMPtr<imgIContainer> container;
+  rv = request->GetImage(getter_AddRefs(container));
+  if (!container) return rv;
+
+  // Set desktop wallpaper filling style
+  nsAutoCString options;
+  if (aPosition == BACKGROUND_TILE)
+    options.Assign("TiledResize");
+  else if (aPosition == BACKGROUND_STRETCH)
+    options.Assign("ScaledResize");
+  else if (aPosition == BACKGROUND_FILL)
+    options.Assign("ScaledAndCroppedResize");
+  else if (aPosition == BACKGROUND_FIT)
+    options.Assign("MaxpectResize");
+  else
+    options.Assign("CenteredResize");
+
+  // Write the background file to the home directory.
+  nsAutoCString filePath(PR_GetEnv("HOME"));
+
+  // get the product brand name from localized strings
+  nsString brandName;
+  nsCID bundleCID = NS_STRINGBUNDLESERVICE_CID;
+  nsCOMPtr<nsIStringBundleService> bundleService(do_GetService(bundleCID));
+  if (bundleService) {
+    nsCOMPtr<nsIStringBundle> brandBundle;
+    rv = bundleService->CreateBundle(BRAND_PROPERTIES,
+                                     getter_AddRefs(brandBundle));
+    if (NS_SUCCEEDED(rv) && brandBundle) {
+      rv = brandBundle->GetStringFromName(NS_LITERAL_STRING("brandShortName").get(),
+                                          getter_Copies(brandName));
+      NS_ENSURE_SUCCESS(rv, rv);
+    }
+  }
+
+  // build the file name
+  filePath.Append('/');
+  filePath.Append(NS_ConvertUTF16toUTF8(brandName));
+  filePath.Append("_wallpaper.png");
+
+  // write the image to a file in the home dir
+  rv = WriteImage(filePath, container);
+  NS_ENSURE_SUCCESS(rv, rv);
+
+  nsCOMPtr<nsIMutableArray> command = do_CreateInstance( NS_ARRAY_CONTRACTID );
+  nsCOMPtr<nsISupportsCString> cmdstr = do_CreateInstance( NS_SUPPORTS_CSTRING_CONTRACTID );
+  nsCOMPtr<nsISupportsCString> imgstr = do_CreateInstance( NS_SUPPORTS_CSTRING_CONTRACTID );
+  nsCOMPtr<nsISupportsCString> modestr = do_CreateInstance( NS_SUPPORTS_CSTRING_CONTRACTID );
+  cmdstr->SetData( NS_LITERAL_CSTRING( "SETWALLPAPER" ));
+  command->AppendElement( cmdstr, false );
+  imgstr->SetData( filePath );
+  command->AppendElement( imgstr, false );
+  modestr->SetData( options );
+  command->AppendElement( modestr, false );
+  return nsKDEUtils::command( command ) ? rv : NS_ERROR_FAILURE;
 }
 
 NS_IMETHODIMP
 nsKDEShellService::GetDesktopBackgroundColor(PRUint32 *aColor)
 {
-    return NS_ERROR_NOT_IMPLEMENTED;
+    aColor = 0;
+    return NS_OK;
 }
 
 NS_IMETHODIMP
 nsKDEShellService::SetDesktopBackgroundColor(PRUint32 aColor)
 {
-    return NS_ERROR_NOT_IMPLEMENTED;
+    return NS_OK;
 }
 
 NS_IMETHODIMP
 
дизайн и разработка: Vladimir Lettiev aka crux © 2004-2005, Andrew Avramenko aka liks © 2007-2008
текущий майнтейнер: Michael Shigorin