blob: b66004422d2a3cbb54e77e52dbfc5cc9b06bc225 (
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: 12.1
Date: 2023-02-21
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
@@ -30,6 +30,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;
@@ -1368,6 +1371,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)
|