gnome-screenshot/0001-app-Specify-empty-filename-to-let-GNOME-Shell-store-.patch
2024-04-30 01:56:38 +00:00

111 lines
4.0 KiB
Diff

From ca1877d100e05ba1c04ae020c2543b6bd7c5e407 Mon Sep 17 00:00:00 2001
From: Carlos Garnacho <carlosg@gnome.org>
Date: Fri, 16 Feb 2024 17:55:21 +0100
Subject: [PATCH] app: Specify empty filename to let GNOME Shell store in
clipboard
---
src/screenshot-application.c | 6 ++++++
src/screenshot-backend-shell.c | 15 ++++++++++-----
src/screenshot-backend.c | 4 ++--
src/screenshot-utils.c | 4 ++++
4 files changed, 22 insertions(+), 7 deletions(-)
diff --git a/src/screenshot-application.c b/src/screenshot-application.c
index f7f5022..eb9cf59 100644
--- a/src/screenshot-application.c
+++ b/src/screenshot-application.c
@@ -486,6 +486,12 @@ finish_take_screenshot (ScreenshotApplication *self)
screenshot = screenshot_get_pixbuf (self->rectangle);
g_clear_pointer (&self->rectangle, g_free);
+ if (screenshot == NULL && screenshot_config->copy_to_clipboard)
+ {
+ g_application_release (G_APPLICATION (self));
+ return;
+ }
+
if (screenshot == NULL)
{
g_critical ("Unable to capture a screenshot of any window");
diff --git a/src/screenshot-backend-shell.c b/src/screenshot-backend-shell.c
index 84c5ead..b651311 100644
--- a/src/screenshot-backend-shell.c
+++ b/src/screenshot-backend-shell.c
@@ -38,8 +38,8 @@ G_DEFINE_TYPE_WITH_CODE (ScreenshotBackendShell, screenshot_backend_shell, G_TYP
G_IMPLEMENT_INTERFACE (SCREENSHOT_TYPE_BACKEND, screenshot_backend_shell_backend_init))
static GdkPixbuf *
-screenshot_backend_shell_get_pixbuf (ScreenshotBackend *backend,
- GdkRectangle *rectangle)
+screenshot_backend_shell_get_pixbuf (ScreenshotBackend *backend,
+ GdkRectangle *rectangle)
{
g_autoptr(GError) error = NULL;
g_autofree gchar *path = NULL, *filename = NULL, *tmpname = NULL;
@@ -51,8 +51,13 @@ screenshot_backend_shell_get_pixbuf (ScreenshotBackend *backend,
path = g_build_filename (g_get_user_cache_dir (), "gnome-screenshot", NULL);
g_mkdir_with_parents (path, 0700);
- tmpname = g_strdup_printf ("scr-%d.png", g_random_int ());
- filename = g_build_filename (path, tmpname, NULL);
+ if (!screenshot_config->copy_to_clipboard)
+ {
+ tmpname = g_strdup_printf ("scr-%d.png", g_random_int ());
+ filename = g_build_filename (path, tmpname, NULL);
+ }
+ else
+ filename = g_strdup ("");
if (screenshot_config->take_window_shot)
{
@@ -94,7 +99,7 @@ screenshot_backend_shell_get_pixbuf (ScreenshotBackend *backend,
NULL,
&error);
- if (error == NULL)
+ if (error == NULL && *filename)
{
screenshot = gdk_pixbuf_new_from_file (filename, &error);
diff --git a/src/screenshot-backend.c b/src/screenshot-backend.c
index 73b4e5d..026bdcf 100644
--- a/src/screenshot-backend.c
+++ b/src/screenshot-backend.c
@@ -29,8 +29,8 @@ screenshot_backend_default_init (ScreenshotBackendInterface *iface)
}
GdkPixbuf *
-screenshot_backend_get_pixbuf (ScreenshotBackend *self,
- GdkRectangle *rectangle)
+screenshot_backend_get_pixbuf (ScreenshotBackend *self,
+ GdkRectangle *rectangle)
{
ScreenshotBackendInterface *iface;
diff --git a/src/screenshot-utils.c b/src/screenshot-utils.c
index df0b6e9..87929be 100644
--- a/src/screenshot-utils.c
+++ b/src/screenshot-utils.c
@@ -27,6 +27,7 @@
#include <glib/gi18n.h>
#include "screenshot-backend-shell.h"
+#include "screenshot-config.h"
#ifdef HAVE_X11
#include "screenshot-backend-x11.h"
@@ -47,6 +48,9 @@ screenshot_get_pixbuf (GdkRectangle *rectangle)
{
backend = screenshot_backend_shell_new ();
screenshot = screenshot_backend_get_pixbuf (backend, rectangle);
+ if (!screenshot && screenshot_config->copy_to_clipboard)
+ return NULL;
+
if (!screenshot)
#ifdef HAVE_X11
g_message ("Unable to use GNOME Shell's builtin screenshot interface, "
--
2.44.0