summaryrefslogtreecommitdiff
path: root/freefilesync/ffs_desktop_notifications.patch
blob: 5989a9cd26b0b1d360b04e38d081b20d02650286 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
Version: 11.25
Date: 2022-09-14
Author: bgstack15
Message: Add support for building with desktop notification support.
--- a/FreeFileSync/Source/Makefile
+++ b/FreeFileSync/Source/Makefile
@@ -23,6 +23,13 @@ LDFLAGS   += `pkg-config --libs   gtk+-3
 #treat as system headers so that warnings are hidden:
 CXXFLAGS  += -isystem/usr/include/gtk-3.0
 
+with_notifications ?= NO
+ifeq ($(with_notifications),YES)
+# package libglibmm-2.4-dev or glibmm24-devel
+cxxFlags  += `pkg-config --cflags giomm-2.4` -Dwith_notifications
+linkFlags += `pkg-config --libs   giomm-2.4`
+endif
+
 #support for SELinux (optional)
 SELINUX_EXISTING=$(shell pkg-config --exists libselinux && echo YES)
 ifeq ($(SELINUX_EXISTING),YES)
--- a/FreeFileSync/Source/ui/progress_indicator.cpp
+++ b/FreeFileSync/Source/ui/progress_indicator.cpp
@@ -31,6 +31,9 @@
 #include "../icon_buffer.h"
 #include "../base/speed_test.h"
 
+#ifdef with_notifications
+#include<giomm-2.4/giomm.h>
+#endif
 
 using namespace zen;
 using namespace fff;
@@ -1377,6 +1380,22 @@ void SyncProgressDialogImpl<TopLevelDial
     pnl_.m_staticTextPhase->SetLabelText(getSyncResultLabel(syncResult));
     //pnl_.m_bitmapStatus->SetToolTip(); -> redundant
 
+#ifdef with_notifications
+    // Desktop notification for Linux
+    char title[] = "FreeFileSync";
+    // from https://stackoverflow.com/a/12097772
+    std::wstring ssR {getSyncResultLabel(syncResult)};
+    std::string body;
+    std::transform(ssR.begin(), ssR.end(), std::back_inserter(body), [] (wchar_t c){ return (char)c;});
+    char icon[] = "freefilesync";
+    auto Application = Gio::Application::create("org.zenju.freefilesync", Gio::APPLICATION_FLAGS_NONE);
+    Application->register_application();
+    auto Notification = Gio::Notification::create(title);
+    Notification->set_body(body);
+    auto Icon = Gio::ThemedIcon::create(icon);
+    Notification->set_icon (Icon);
+    Application->send_notification(Notification);
+#endif
     //show status on Windows 7 taskbar
     if (taskbar_.get())
         switch (syncResult)
bgstack15