Hello community, here is the log from the commit of package spectacle for openSUSE:Factory checked in at 2017-01-25 23:15:23 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/spectacle (Old) and /work/SRC/openSUSE:Factory/.spectacle.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "spectacle" Changes: -------- --- /work/SRC/openSUSE:Factory/spectacle/spectacle.changes 2016-12-17 10:58:13.395073870 +0100 +++ /work/SRC/openSUSE:Factory/.spectacle.new/spectacle.changes 2017-01-25 23:15:24.950431361 +0100 @@ -1,0 +2,13 @@ +Sat Jan 21 11:24:27 UTC 2017 - [email protected] + +- Add patch to support Plasma 5.9 feature of images in notifications: + * set-screenshot-URL-for-notification.patch + +------------------------------------------------------------------- +Sat Jan 14 09:08:57 UTC 2017 - [email protected] + +- - Update to KDE Applications 16.12.1 + * KDE Applications 16.12.1 + * https://www.kde.org/announcements/announce-applications-16.12.1.php + +------------------------------------------------------------------- Old: ---- spectacle-16.12.0.tar.xz New: ---- set-screenshot-URL-for-notification.patch spectacle-16.12.1.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ spectacle.spec ++++++ --- /var/tmp/diff_new_pack.wwVMbm/_old 2017-01-25 23:15:25.434358394 +0100 +++ /var/tmp/diff_new_pack.wwVMbm/_new 2017-01-25 23:15:25.446356585 +0100 @@ -1,7 +1,7 @@ # # spec file for package spectacle # -# Copyright (c) 2016 SUSE LINUX GmbH, Nuernberg, Germany. +# Copyright (c) 2017 SUSE LINUX GmbH, Nuernberg, Germany. # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -17,16 +17,18 @@ Name: spectacle -Version: 16.12.0 +Version: 16.12.1 Release: 0 -%define kf5_version 5.26.0 -# Latest stable Applications (e.g. 16.08 in KA, but 16.12.0 in KUA) +%define kf5_version 5.29.0 +# Latest stable Applications (e.g. 16.08 in KA, but 16.12.1 in KUA) %{!?_kapp_version: %global _kapp_version %(echo %{version}| awk -F. '{print $1"."$2}')} Summary: Screen Capture Program License: LGPL-2.0+ and GPL-2.0+ Group: Productivity/Graphics/Other Url: http://www.kde.org Source0: %{name}-%{version}.tar.xz +# PATCH-FIX-UPSTREAM set-screenshot-URL-for-notification.patch [email protected] -- Set screenshot URL for notification +Patch1: set-screenshot-URL-for-notification.patch BuildRequires: extra-cmake-modules BuildRequires: kconfig-devel BuildRequires: kcoreaddons-devel @@ -36,7 +38,7 @@ BuildRequires: kf5-filesystem BuildRequires: ki18n-devel BuildRequires: kio-devel -BuildRequires: knotifications-devel +BuildRequires: knotifications-devel >= %{kf5_version} BuildRequires: kwidgetsaddons-devel BuildRequires: kwindowsystem-devel BuildRequires: kxmlgui-devel @@ -79,6 +81,7 @@ %prep %setup -q +%patch1 -p1 %build %cmake_kf5 -d build ++++++ set-screenshot-URL-for-notification.patch ++++++ >From 945548e8c63f02c39aef492d31d8942ee6063bd6 Mon Sep 17 00:00:00 2001 From: Kai Uwe Broulik <[email protected]> Date: Tue, 13 Dec 2016 10:42:54 +0100 Subject: [PATCH] Set screenshot URL for notification This will have Plasma show a beautiful interactive (can be dragged to e.g. a browser window) preview for the thumbnail. REVIEW: 129593 --- CMakeLists.txt | 2 +- src/SpectacleCore.cpp | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 2b75638..dfbbe37 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -14,7 +14,7 @@ set(SPECTACLE_VERSION ${KDE_APPLICATIONS_VERSION}) cmake_minimum_required (VERSION 2.8.12 FATAL_ERROR) set(QT_MIN_VERSION "5.4.0") -set(KF5_MIN_VERSION "5.25.0") +set(KF5_MIN_VERSION "5.29.0") set(PLASMA_MIN_VERSION "5.4.0") find_package(ECM ${KF5_MIN_VERSION} REQUIRED NO_MODULE) diff --git a/src/SpectacleCore.cpp b/src/SpectacleCore.cpp index 82c84a2..96044c6 100644 --- a/src/SpectacleCore.cpp +++ b/src/SpectacleCore.cpp @@ -252,6 +252,7 @@ void SpectacleCore::doNotify(const QUrl &savedAt) } notify->setActions({i18nc("Open the screenshot we just saved", "Open")}); + notify->setUrls({savedAt}); connect(notify, &KNotification::action1Activated, this, [this, savedAt] { new KRun(savedAt, nullptr); ++++++ spectacle-16.12.0.tar.xz -> spectacle-16.12.1.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/spectacle-16.12.0/CMakeLists.txt new/spectacle-16.12.1/CMakeLists.txt --- old/spectacle-16.12.0/CMakeLists.txt 2016-12-06 20:57:05.000000000 +0100 +++ new/spectacle-16.12.1/CMakeLists.txt 2017-01-09 06:50:34.000000000 +0100 @@ -5,7 +5,7 @@ # KDE Application Version, managed by release script set(KDE_APPLICATIONS_VERSION_MAJOR "16") set(KDE_APPLICATIONS_VERSION_MINOR "12") -set(KDE_APPLICATIONS_VERSION_MICRO "0") +set(KDE_APPLICATIONS_VERSION_MICRO "1") set(KDE_APPLICATIONS_VERSION "${KDE_APPLICATIONS_VERSION_MAJOR}.${KDE_APPLICATIONS_VERSION_MINOR}.${KDE_APPLICATIONS_VERSION_MICRO}") set(SPECTACLE_VERSION ${KDE_APPLICATIONS_VERSION}) @@ -14,7 +14,7 @@ cmake_minimum_required (VERSION 2.8.12 FATAL_ERROR) set(QT_MIN_VERSION "5.4.0") -set(KF5_MIN_VERSION "5.18.0") +set(KF5_MIN_VERSION "5.25.0") set(PLASMA_MIN_VERSION "5.4.0") find_package(ECM ${KF5_MIN_VERSION} REQUIRED NO_MODULE) @@ -38,6 +38,7 @@ find_package( Qt5 ${QT_MIN_VERSION} CONFIG REQUIRED Core + Concurrent Widgets DBus PrintSupport diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/spectacle-16.12.0/desktop/org.kde.spectacle.appdata.xml new/spectacle-16.12.1/desktop/org.kde.spectacle.appdata.xml --- old/spectacle-16.12.0/desktop/org.kde.spectacle.appdata.xml 2016-12-06 20:57:05.000000000 +0100 +++ new/spectacle-16.12.1/desktop/org.kde.spectacle.appdata.xml 2017-01-09 06:50:34.000000000 +0100 @@ -14,6 +14,7 @@ <name xml:lang="fi">Spectacle</name> <name xml:lang="id">Spectacle</name> <name xml:lang="it">Spectacle</name> + <name xml:lang="ko">Spectacle</name> <name xml:lang="nl">Spectacle</name> <name xml:lang="nn">Spectacle</name> <name xml:lang="pl">Spectacle</name> @@ -38,6 +39,7 @@ <p xml:lang="fi">Spectacle on yksinkertainen sovellus ruutukaappauskuvien ottamiseksi. Se voi kaapata kuvan koko työpöydältä, yksittäiseltä näytöltä, aktiivisesta ikkunasta, hiiren alla olevasta ikkunasta tai suorakulmaisesta näytön alueesta. Kuvat voi myöhemmin tulostaa, lähettää muihin sovelluksiin käsiteltäväksi tai tallentaa sellaisinaan.</p> <p xml:lang="id">Spectacle adalah aplikasi sederhana untuk menangkap cuplikan layar desktop. Hal ini bisa menangkap citra-citra dari seluruh desktop, monitor tunggal, jendela yang sedang aktif, jendela saat ini yang sedang di bawah mouse, atau wilayah berbentuk persegi pada layar. Citra-citra kemudian bisa dicetak, dikirim ke aplikasi lain untuk manipulasi, atau secara cepat disimpan sebagai apa.</p> <p xml:lang="it">Spectacle è una semplice applicazione per catturare schermate. Può acquisire immagini dell'intero desktop, di un singolo monitor, della finestra attiva, della finestra sotto il puntatore del mouse, o di una regione rettangolare dello schermo. Le immagini possono essere stampate, inviate ad altre applicazioni per essere modificate, o salvate rapidamente così come sono.</p> + <p xml:lang="ko">Spectacle은 데스크톱 스크린샷을 찍는 프로그램입니다. 전체 데스크톱, 단일 모니터, 활성 창, 마우스 아래 창, 화면의 사각형 영역을 찍을 수 있습니다. 사진을 인쇄하거나, 그대로 저장하거나, 다른 프로그램에서 곧바로 편집할 수 있습니다.</p> <p xml:lang="nl">Spectacle is een eenvoudige toepassing voor het opnemen van schermafbeeldingen van het bureaublad. Het kan afbeeldingen van het gehele bureaublad, een enkele monitor, het nu actieve venster, het venster nu onder de muis of een rechthoekig gebied van het scherm. De afbeelding kan dan afgedrukt worden, naar een andere toepassing voor bewerking worden verzonden of snel worden opgeslagen zoals deze nu is.</p> <p xml:lang="nn">Spectacle er eit enkel program for å ta skjermbilete. Det kan ta bilete av heile skrivebordet, ein einskild skjerm, det gjeldande vindauget, vindauget under musepeikaren eller eit utsnitt av skjermflata. Bileta kan skrivast ut, sendast til andre program for vidare arbeid eller lagrast direkte.</p> <p xml:lang="pl">Spectacle to prosta aplikacja do wykonywania zrzutów ekranu. Za jej pomocą można przechwycić cały pulpit, pojedynczy monitor, obecnie aktywne okno, okno obecnie pod wskaźnikiem myszy lub prostokątny obszar ekrany. Zrzuty można wydrukować, wysłać do innej aplikacji do obróbki lub szybko zapisać tak jak go wykonano.</p> @@ -47,6 +49,7 @@ <p xml:lang="sv">Spectacle är ett enkelt program för att ta skärmbilder av skrivbordet. Det kan ta bilder av hela skrivbordet, en enda bildskärm, fönstret som för närvarande är aktivt, fönstret som för närvarande är under musen, eller ett rektangulärt skärmområde. Bilderna kan därefter skrivas ut, skickas till andra program för behandling, eller snabbt sparas som de är.</p> <p xml:lang="uk">Spectacle — проста програма для створення знімків екрана. Передбачено можливість захоплення знімків усієї стільниці, окремого монітора, поточного активного вікна, вікна під вказівником миші або прямокутної ділянки на екрані. Створені зображення можна надрукувати, надіслати до іншої програми для обробки або зберегти без змін.</p> <p xml:lang="x-test">xxSpectacle is a simple application for capturing desktop screenshots. It can capture images of the entire desktop, a single monitor, the currently active window, the window currently under the mouse, or a rectangular region of the screen. The images can then be printed, sent to other applications for manipulation, or quickly be saved as-is.xx</p> + <p xml:lang="zh-CN">Spectacle 是一个用于抓取桌面截图的简单应用程序。它可以抓取整个桌面、单个显示器、当前活动窗口、鼠标所在的窗口或是屏幕上的一块方形区域的图像。这些图像稍后便可以用于打印、向其它应用程序发送以进行进一步操作或是直接保存下来。</p> <p xml:lang="zh-TW">Spectale 是一個用來擷取桌面快照的簡易應用程式。它可以擷取整個桌面、單一個顯示器、目前作用中的視窗、目前滑鼠底下的的視窗或是螢幕上的矩形區域等。其所擷取的圖片可以被列印、傳送到其他應用程式以供進一步操作或是快速儲存而不進行修改。</p> <p>Features:</p> <p xml:lang="ca">Característiques:</p> @@ -60,6 +63,7 @@ <p xml:lang="he">תכונות</p> <p xml:lang="id">Fitur:</p> <p xml:lang="it">Funzionalità:</p> + <p xml:lang="ko">기능:</p> <p xml:lang="nl">Mogelijkheden:</p> <p xml:lang="nn">Funksjonar:</p> <p xml:lang="pl">Możliwości:</p> @@ -85,6 +89,7 @@ <li xml:lang="he">צילום כל שולחן עבודה</li> <li xml:lang="id">Tangkap Entri Desktop</li> <li xml:lang="it">Cattura l'intero desktop</li> + <li xml:lang="ko">전체 데스크톱 찍기</li> <li xml:lang="nl">Opname van het gehele bureaublad</li> <li xml:lang="nn">Ta bilete av heile skrivebordet</li> <li xml:lang="pl">Przechwytywanie całego pulpitu</li> @@ -108,6 +113,7 @@ <li xml:lang="he">צילום המסך הנוכחי</li> <li xml:lang="id">Tangkap Monitor Saat Ini</li> <li xml:lang="it">Cattura il monitor attuale</li> + <li xml:lang="ko">현재 모니터 찍기</li> <li xml:lang="nl">Opname van de huidige monitor</li> <li xml:lang="nn">Ta bilete av gjeldande skjerm</li> <li xml:lang="pl">Przechwytywanie bieżącego monitora</li> @@ -131,6 +137,7 @@ <li xml:lang="he">צילום החלון הפעיל</li> <li xml:lang="id">Tangkap Jendela Aktif</li> <li xml:lang="it">Cattura la finestra attiva</li> + <li xml:lang="ko">활성 창 찍기</li> <li xml:lang="nl">Opname van het actieve venster</li> <li xml:lang="nn">Ta bilete av aktivt vindauge</li> <li xml:lang="pl">Przechwytywanie aktywnego okna</li> @@ -154,6 +161,7 @@ <li xml:lang="he">צילון מלבן</li> <li xml:lang="id">Tangkap Wilayah Berbentuk Persegi</li> <li xml:lang="it">Cattura una regione rettangolare</li> + <li xml:lang="ko">화면의 사각형 영역 찍기</li> <li xml:lang="nl">Opname van een rechthoekig gebied</li> <li xml:lang="nn">Ta bilete av skjermutsnitt</li> <li xml:lang="pl">Przechwytywanie obszaru prostokątnego</li> @@ -176,6 +184,7 @@ <li xml:lang="he">קיצור דרך לצילום מסך</li> <li xml:lang="id">Pintasan keyboard untuk mengambil cuplikan-layar</li> <li xml:lang="it">Scorciatoie di tastiera per acquisire schermate</li> + <li xml:lang="ko">화면 스크린샷 찍기 단축키</li> <li xml:lang="nl">Sneltoetsen voor het maken van schermafdrukken</li> <li xml:lang="nn">Snøggtastar for å ta bilete av skjermen</li> <li xml:lang="pl">Skróty klawiszowe do wykonywania zrzutów ekranu</li> @@ -185,6 +194,7 @@ <li xml:lang="sv">Snabbtangenter för att ta skärmbilder</li> <li xml:lang="uk">Створення знімків за допомогою натискання комбінацій клавіш</li> <li xml:lang="x-test">xxKeyboard shortcuts for taking screenshotsxx</li> + <li xml:lang="zh-CN">用于截图的键盘快捷键</li> <li xml:lang="zh-TW">螢幕快照的鍵盤快捷鍵</li> </ul> </description> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/spectacle-16.12.0/desktop/org.kde.spectacle.desktop new/spectacle-16.12.1/desktop/org.kde.spectacle.desktop --- old/spectacle-16.12.0/desktop/org.kde.spectacle.desktop 2016-12-06 20:57:05.000000000 +0100 +++ new/spectacle-16.12.1/desktop/org.kde.spectacle.desktop 2017-01-09 06:50:34.000000000 +0100 @@ -19,7 +19,7 @@ GenericName[it]=Accessorio per catturare schermate GenericName[ko]=화면 캡처 유틸리티 GenericName[lt]=KDE ekranvaizdžių paveikslavimas -GenericName[nl]=Hulpmiddel voor het vangen van een schermafdruk +GenericName[nl]=Hulpmiddel voor het maken van een schermafdruk GenericName[nn]=Verktøy for å lagra skjermbilete GenericName[pl]=Narzędzie do przechwytywania ekranu GenericName[pt]=Utilitário de Captura de Imagens diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/spectacle-16.12.0/desktop/spectacle.khotkeys new/spectacle-16.12.1/desktop/spectacle.khotkeys --- old/spectacle-16.12.0/desktop/spectacle.khotkeys 2016-12-06 20:57:05.000000000 +0100 +++ new/spectacle-16.12.1/desktop/spectacle.khotkeys 2017-01-09 06:50:34.000000000 +0100 @@ -21,6 +21,7 @@ Comment[he]=קיצור דרך לצילום מסך Comment[id]=Pintasan keyboard untuk mengambil cuplikan-layar Comment[it]=Scorciatoia per acquisire schermate +Comment[ko]=화면 스크린샷 찍기 단축키 Comment[nl]=Sneltoetsen voor het maken van schermafdrukken Comment[nn]=Snarvegar for å ta bilete av skjermen Comment[pl]=Skróty do zrzucania ekranu @@ -51,6 +52,7 @@ Name[he]=צילומי מסך Name[id]=Screenshots Name[it]=Schermate +Name[ko]=스크린샷 Name[nl]=Schermafdrukken Name[nn]=Skjermbilete Name[pl]=Zrzuty ekranu @@ -86,6 +88,7 @@ Comment[he]=הפעל את כלי צילום המסך והראה את הממשק הגרפי Comment[id]=Mulai alat cuplikan-layar dan tunjukkan GUI Comment[it]=Avvia lo strumento per le schermate e ne mostra l'interfaccia +Comment[ko]=스크린샷 도구를 시작하고 GUI 보이기 Comment[nl]=Start het hulpmiddel voor schermafdrukken en toon de GUI Comment[nn]=Start skjermbiletverktøyet og vis grafisk grensesnitt Comment[pl]=Wywołaj narzędzie zrzutów ekranu i pokaż graficzny interfejs @@ -115,6 +118,7 @@ Name[he]=הפעל את כלי צילום המסך Name[id]=Start Screenshot Tool Name[it]=Avvia lo strumento per le schermate +Name[ko]=스크린샷 도구 시작하기 Name[nl]=Het hulpmiddel voor schermafdrukken starten Name[nn]=Skjermbiletverktøyet Name[pl]=Wywołaj narzędzie zrzutów ekranu @@ -159,6 +163,7 @@ Comment[gl]=Acción_sinxela Comment[id]=Tindakan_sederhana Comment[it]=Azione_semplice +Comment[ko]=Simple_action Comment[nl]=Eenvoudige_handeling Comment[nn]=Enkel_handling Comment[pl]=Proste_działanie @@ -192,6 +197,7 @@ Comment[gl]=Capturar todas as pantallas e gardar a captura. Comment[id]=Ambil sebuah cuplikan-layar layar penuh (semua monitor) dan menyimpannya Comment[it]=Cattura una schermata a tutto schermo (tutti i monitor) e la salva +Comment[ko]=모든 모니터의 스크린샷을 찍고 저장하기 Comment[nl]=Een volledige schermafdruk maken (alle monitoren) en deze opslaan Comment[nn]=Ta eit fullskjermbilete (alle skjermar) og lagra det Comment[pl]=Wykonaj zrzut całego ekranu (wszystkie monitory) i zapisz go @@ -219,6 +225,7 @@ Name[gl]=Capturar todas as pantallas Name[id]=Take Full Screen Screenshot Name[it]=Cattura l'intero schermo +Name[ko]=전체 화면 스크린샷 찍기 Name[nl]=Schermafdruk van Volledig scherm maken Name[nn]=Ta fullskjermsbilete Name[pl]=Wykonaj zrzut całego ekranu @@ -263,6 +270,7 @@ Comment[gl]=Acción_sinxela Comment[id]=Tindakan_sederhana Comment[it]=Azione_semplice +Comment[ko]=Simple_action Comment[nl]=Eenvoudige_handeling Comment[nn]=Enkel_handling Comment[pl]=Proste_działanie @@ -296,6 +304,7 @@ Comment[gl]=Capturar a xanela activa e gardar a captura. Comment[id]=Ambil sebuah cuplikan-layar pada jendela yang aktif saat ini dan menyimpannya Comment[it]=Cattura una schermata della finestra attiva e la salva +Comment[ko]=현재 활성 창 스크린샷을 찍고 저장하기 Comment[nl]=Een schermafdruk van het huidige actieve venster maken en het opslaan Comment[nn]=Ta skjermbilete frå det aktive vindauget og lagra det Comment[pl]=Wykonaj zrzut obecnie aktywnego okna i zapisz go @@ -323,6 +332,7 @@ Name[gl]=Capturar a xanela activa Name[id]=Take Active Window Screenshot Name[it]=Cattura la finestra attiva +Name[ko]=활성 창 스크린샷 찍기 Name[nl]=Schermafdruk van actieve venster maken Name[nn]=Ta skjermbilete av aktivt vindauge Name[pl]=Wykonaj zrzut obecnie aktywnego okna @@ -367,6 +377,7 @@ Comment[gl]=Acción_sinxela Comment[id]=Tindakan_sederhana Comment[it]=Azione_semplice +Comment[ko]=Simple_action Comment[nl]=Eenvoudige_handeling Comment[nn]=Enkel_handling Comment[pl]=Proste_działanie @@ -400,6 +411,7 @@ Comment[gl]=Capturar unha rexión rectangular indicada e gardar a captura. Comment[id]=Ambil sebuah cuplikan-layar pada wilayah berbentuk persegi yang kamu tetapkan dan menyimpannya Comment[it]=Cattura una schermata di una regione rettangolare a piacere e la salva +Comment[ko]=지정한 사각형 영역의 스크린샷을 찍고 저장하기 Comment[nl]=Een schermafdruk van een rechthoekig gebied dat u specificeert maken en het opslaan Comment[nn]=Ta rektangulært skjermutsnitt og lagra det Comment[pl]=Wykonaj zrzut podanego przez ciebie prostokątnego obszaru i zapisz go @@ -427,6 +439,7 @@ Name[gl]=Capturar unha rexión rectangular Name[id]=Take Rectangular Region Screenshot Name[it]=Cattura una regione rettangolare +Name[ko]=사각형 영역 스크린샷 찍기 Name[nl]=Schermafdruk van rechthoekig gebied maken Name[nn]=Ta rektangulært skjermutsnitt Name[pl]=Wykonaj zrzut prostokątnego obszaru @@ -471,6 +484,7 @@ Comment[gl]=Acción_sinxela Comment[id]=Tindakan_sederhana Comment[it]=Azione_semplice +Comment[ko]=Simple_action Comment[nl]=Eenvoudige_handeling Comment[nn]=Enkel_handling Comment[pl]=Proste_działanie diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/spectacle-16.12.0/src/CMakeLists.txt new/spectacle-16.12.1/src/CMakeLists.txt --- old/spectacle-16.12.0/src/CMakeLists.txt 2016-12-06 20:57:05.000000000 +0100 +++ new/spectacle-16.12.1/src/CMakeLists.txt 2017-01-09 06:50:34.000000000 +0100 @@ -14,6 +14,7 @@ SpectacleDBusAdapter.cpp PlatformBackends/ImageGrabber.cpp PlatformBackends/DummyImageGrabber.cpp + PlatformBackends/KWinWaylandImageGrabber.cpp Gui/KSMainWindow.cpp Gui/KSWidget.cpp Gui/KSImageWidget.cpp @@ -60,6 +61,7 @@ target_link_libraries( spectacle + Qt5::Concurrent Qt5::DBus Qt5::PrintSupport Qt5::Quick diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/spectacle-16.12.0/src/Config.h.in new/spectacle-16.12.1/src/Config.h.in --- old/spectacle-16.12.0/src/Config.h.in 2016-12-06 20:57:05.000000000 +0100 +++ new/spectacle-16.12.1/src/Config.h.in 2017-01-09 06:50:34.000000000 +0100 @@ -14,6 +14,6 @@ #cmakedefine SPECTACLE_VERSION "@SPECTACLE_VERSION@" /* set the release codename */ -#define SPECTACLE_CODENAME "Everything Is Going To Be Alright" +#define SPECTACLE_CODENAME "Orderly Transfer of Power" #endif diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/spectacle-16.12.0/src/Gui/KSMainWindow.cpp new/spectacle-16.12.1/src/Gui/KSMainWindow.cpp --- old/spectacle-16.12.0/src/Gui/KSMainWindow.cpp 2016-12-06 20:57:05.000000000 +0100 +++ new/spectacle-16.12.1/src/Gui/KSMainWindow.cpp 2017-01-09 06:50:34.000000000 +0100 @@ -39,6 +39,7 @@ #include <KStandardGuiItem> #include <KHelpMenu> #include <KAboutData> +#include <KWindowSystem> #include "SettingsDialog/SettingsDialog.h" #include "ExportMenu.h" @@ -67,7 +68,7 @@ // credits for this goes to Thomas Lübking <[email protected]> #ifdef XCB_FOUND - if (qApp->platformName() == QStringLiteral("xcb")) { + if (KWindowSystem::isPlatformX11()) { // create a window if we haven't already. note that the QWidget constructor // should already have done this diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/spectacle-16.12.0/src/PlatformBackends/KWinWaylandImageGrabber.cpp new/spectacle-16.12.1/src/PlatformBackends/KWinWaylandImageGrabber.cpp --- old/spectacle-16.12.0/src/PlatformBackends/KWinWaylandImageGrabber.cpp 1970-01-01 01:00:00.000000000 +0100 +++ new/spectacle-16.12.1/src/PlatformBackends/KWinWaylandImageGrabber.cpp 2017-01-09 06:50:34.000000000 +0100 @@ -0,0 +1,169 @@ +/* + * Copyright (C) 2016 Martin Graesslin <[email protected]> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ +#include "KWinWaylandImageGrabber.h" + +#include <QDBusInterface> +#include <QDBusPendingCall> +#include <QDBusPendingReply> +#include <QDBusUnixFileDescriptor> + +#include <QtConcurrentRun> +#include <QFutureWatcher> +#include <qplatformdefs.h> + +#include <errno.h> + +static int readData(int fd, QByteArray &data) +{ + // implementation based on QtWayland file qwaylanddataoffer.cpp + char buf[4096]; + int retryCount = 0; + int n; + while (true) { + n = QT_READ(fd, buf, sizeof buf); + // give user 30 sec to click a window, afterwards considered as error + if (n == -1 && (errno == EAGAIN) && ++retryCount < 30000) { + usleep(1000); + } else { + break; + } + } + if (n > 0) { + data.append(buf, n); + n = readData(fd, data); + } + return n; +} + +static QImage readImage(int pipeFd) +{ + QByteArray content; + if (readData(pipeFd, content) != 0) { + close(pipeFd); + return QImage(); + } + close(pipeFd); + QDataStream ds(content); + QImage image; + ds >> image; + return image; +}; + +KWinWaylandImageGrabber::KWinWaylandImageGrabber(QObject *parent) : + ImageGrabber(parent) +{ +} + +KWinWaylandImageGrabber::~KWinWaylandImageGrabber() = default; + +bool KWinWaylandImageGrabber::onClickGrabSupported() const +{ + return true; +} + +void KWinWaylandImageGrabber::grabFullScreen() +{ + grab(Mode::FullScreen, mCapturePointer); +} + +void KWinWaylandImageGrabber::grabCurrentScreen() +{ + grab(Mode::CurrentScreen, mCapturePointer); +} + +void KWinWaylandImageGrabber::grabActiveWindow() +{ + // unsupported + emit pixmapChanged(QPixmap()); +} + +void KWinWaylandImageGrabber::grabRectangularRegion() +{ + // unsupported + emit pixmapChanged(QPixmap()); +} + +void KWinWaylandImageGrabber::grabWindowUnderCursor() +{ + int mask = 0; + if (mCaptureDecorations) { + mask = 1; + } + if (mCapturePointer) { + mask |= 1 << 1; + } + grab(Mode::Window, mask); +} + +void KWinWaylandImageGrabber::grabTransientWithParent() +{ + // unsupported, perform grab window under cursor + grabWindowUnderCursor(); +} + +QPixmap KWinWaylandImageGrabber::blendCursorImage(const QPixmap &pixmap, int x, int y, int width, int height) +{ + Q_UNUSED(x) + Q_UNUSED(y) + Q_UNUSED(width) + Q_UNUSED(height) + return pixmap; +} + +void KWinWaylandImageGrabber::startReadImage(int readPipe) +{ + QFutureWatcher<QImage> *watcher = new QFutureWatcher<QImage>(this); + QObject::connect(watcher, &QFutureWatcher<QImage>::finished, this, + [watcher, this] { + watcher->deleteLater(); + const QImage img = watcher->result(); + emit pixmapChanged(QPixmap::fromImage(img)); + } + ); + watcher->setFuture(QtConcurrent::run(readImage, readPipe)); +} + +template <typename T> +void KWinWaylandImageGrabber::callDBus(Mode mode, int writeFd, T argument) +{ + QDBusInterface interface(QStringLiteral("org.kde.KWin"), QStringLiteral("/Screenshot"), QStringLiteral("org.kde.kwin.Screenshot")); + static const QMap<Mode, QString> s_hash = { + {Mode::Window, QStringLiteral("interactive")}, + {Mode::CurrentScreen, QStringLiteral("screenshotScreen")}, + {Mode::FullScreen, QStringLiteral("screenshotFullscreen")} + }; + auto it = s_hash.find(mode); + Q_ASSERT(it != s_hash.end()); + interface.asyncCall(it.value(), QVariant::fromValue(QDBusUnixFileDescriptor(writeFd)), argument); +} + +template <typename T> +void KWinWaylandImageGrabber::grab(Mode mode, T argument) +{ + int pipeFds[2]; + if (pipe2(pipeFds, O_CLOEXEC|O_NONBLOCK) != 0) { + emit imageGrabFailed(); + return; + } + + callDBus(mode, pipeFds[1], argument); + startReadImage(pipeFds[0]); + + close(pipeFds[1]); +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/spectacle-16.12.0/src/PlatformBackends/KWinWaylandImageGrabber.h new/spectacle-16.12.1/src/PlatformBackends/KWinWaylandImageGrabber.h --- old/spectacle-16.12.0/src/PlatformBackends/KWinWaylandImageGrabber.h 1970-01-01 01:00:00.000000000 +0100 +++ new/spectacle-16.12.1/src/PlatformBackends/KWinWaylandImageGrabber.h 2017-01-09 06:50:34.000000000 +0100 @@ -0,0 +1,59 @@ +/* + * Copyright (C) 2016 Martin Graesslin <[email protected]> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ +#ifndef KWINWAYLANDIMAGEGRABBER_H +#define KWINWAYLANDIMAGEGRABBER_H + +#include "ImageGrabber.h" + +class KWinWaylandImageGrabber : public ImageGrabber +{ + Q_OBJECT + + public: + + explicit KWinWaylandImageGrabber(QObject * parent = 0); + virtual ~KWinWaylandImageGrabber(); + + bool onClickGrabSupported() const Q_DECL_OVERRIDE; + + protected: + + void grabFullScreen() Q_DECL_OVERRIDE; + void grabCurrentScreen() Q_DECL_OVERRIDE; + void grabActiveWindow() Q_DECL_OVERRIDE; + void grabRectangularRegion() Q_DECL_OVERRIDE; + void grabWindowUnderCursor() Q_DECL_OVERRIDE; + void grabTransientWithParent() Q_DECL_OVERRIDE; + QPixmap blendCursorImage(const QPixmap &pixmap, int x, int y, int width, int height) Q_DECL_OVERRIDE; + + private: + + void startReadImage(int readPipe); + enum class Mode { + Window, + CurrentScreen, + FullScreen + }; + template <typename T> + void callDBus(Mode mode, int writeFd, T argument); + template <typename T> + void grab(Mode mode, T argument); +}; + +#endif diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/spectacle-16.12.0/src/SpectacleCore.cpp new/spectacle-16.12.1/src/SpectacleCore.cpp --- old/spectacle-16.12.0/src/SpectacleCore.cpp 2016-12-06 20:57:05.000000000 +0100 +++ new/spectacle-16.12.1/src/SpectacleCore.cpp 2017-01-09 06:50:34.000000000 +0100 @@ -40,6 +40,7 @@ #ifdef XCB_FOUND #include "PlatformBackends/X11ImageGrabber.h" #endif +#include "PlatformBackends/KWinWaylandImageGrabber.h" SpectacleCore::SpectacleCore(StartMode startMode, ImageGrabber::GrabMode grabMode, QString &saveFileName, qint64 delayMsec, bool notifyOnGrab, QObject *parent) : @@ -62,10 +63,13 @@ } #ifdef XCB_FOUND - if (qApp->platformName() == QStringLiteral("xcb")) { + if (KWindowSystem::isPlatformX11()) { mImageGrabber = new X11ImageGrabber; } #endif + if (!mImageGrabber && KWindowSystem::isPlatformWayland()) { + mImageGrabber = new KWinWaylandImageGrabber; + } if (!mImageGrabber) { mImageGrabber = new DummyImageGrabber;
