mirror of
https://github.com/debauchee/barrier.git
synced 2026-02-12 14:45:21 +08:00
Compare commits
40 Commits
v1.8.0-bet
...
v1.8.1-sta
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d196ec5e9a | ||
|
|
6dd7f340c2 | ||
|
|
0034ca4b76 | ||
|
|
2ed3d26817 | ||
|
|
5f6ea6054f | ||
|
|
5e35fe2c1b | ||
|
|
7cbd3fdcb4 | ||
|
|
b5b2cdfade | ||
|
|
5661a41d42 | ||
|
|
e5c1821088 | ||
|
|
3ce078f0e8 | ||
|
|
70104190e4 | ||
|
|
20d9b80291 | ||
|
|
1ac8db56d9 | ||
|
|
92a3c47ed2 | ||
|
|
da5e9527a3 | ||
|
|
4d19941428 | ||
|
|
42038ce24e | ||
|
|
89eb64a0aa | ||
|
|
4344b16a20 | ||
|
|
221a9a71c4 | ||
|
|
6d0f820db5 | ||
|
|
3067560f7b | ||
|
|
ee20d08080 | ||
|
|
5fae9efe78 | ||
|
|
eb36db6c26 | ||
|
|
2fb36c4f86 | ||
|
|
6f904e55f1 | ||
|
|
bab2e985a3 | ||
|
|
425fc8b925 | ||
|
|
9036d42469 | ||
|
|
1fc28392d0 | ||
|
|
3e37518b92 | ||
|
|
48069f1a3b | ||
|
|
b85b9125ea | ||
|
|
8f0530c507 | ||
|
|
1fde0f3e71 | ||
|
|
0d310a8464 | ||
|
|
6c11de6a22 | ||
|
|
7a207b4a54 |
@@ -17,8 +17,8 @@
|
||||
# Version number for Synergy
|
||||
set(VERSION_MAJOR 1)
|
||||
set(VERSION_MINOR 8)
|
||||
set(VERSION_REV 0)
|
||||
set(VERSION_STAGE beta)
|
||||
set(VERSION_REV 1)
|
||||
set(VERSION_STAGE stable)
|
||||
set(VERSION "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_REV}")
|
||||
|
||||
cmake_minimum_required(VERSION 2.6)
|
||||
|
||||
14
ChangeLog
14
ChangeLog
@@ -1,3 +1,7 @@
|
||||
v1.8.1-stable
|
||||
=============
|
||||
Bug #5461 - GUI crash during activation on Mac
|
||||
|
||||
v1.8.0-beta
|
||||
=============
|
||||
Enhancement #4696 - Include 'ns' plugin in installers (instead of wizard download)
|
||||
@@ -9,6 +13,16 @@ Enhancement #4793 - Additional logging to output OpenSSL version
|
||||
Enhancement #4932 - Notify activation system when wizard finishes
|
||||
Enhancement #4716 - Allow software to be time limited with serial key
|
||||
|
||||
v1.7.6-stable
|
||||
=============
|
||||
Bug #451 - Fast cursor on any client with Mac server
|
||||
Bug #5041 - Copying from the Chrome web browser doesn't work
|
||||
Bug #4735 - Clipboard doesn't work from client to server
|
||||
Bug #2909 - Clipboard copies only plaintext between Mac and Windows
|
||||
Bug #4353 - Large clipboard causes crash
|
||||
Bug #3774 - Missing MinGW dependencies after install on Windows
|
||||
Bug #4723 - Waiting for active desktop result freezes Windows service
|
||||
|
||||
v1.7.5-stable
|
||||
=============
|
||||
Bug #5030 - Display scaling breaks edge detection on Windows
|
||||
|
||||
@@ -32,5 +32,10 @@ void ActivationNotifier::setIdentity(QString identity)
|
||||
void ActivationNotifier::notify()
|
||||
{
|
||||
CoreInterface coreInterface;
|
||||
coreInterface.notifyActivation(m_Identity);
|
||||
try {
|
||||
coreInterface.notifyActivation(m_Identity);
|
||||
}
|
||||
catch (...) {
|
||||
// catch all exceptions and fails silently
|
||||
}
|
||||
}
|
||||
|
||||
@@ -243,8 +243,7 @@ void SetupWizard::reject()
|
||||
}
|
||||
|
||||
// treat cancel as skip
|
||||
CoreInterface coreInterface;
|
||||
coreInterface.notifyActivation("skip:unknown");
|
||||
notifyActivation("skip:unknown");
|
||||
|
||||
QWizard::reject();
|
||||
}
|
||||
|
||||
@@ -21,7 +21,6 @@
|
||||
#include "../plugin/ns/SecureSocket.h"
|
||||
#include "client/ServerProxy.h"
|
||||
#include "synergy/Screen.h"
|
||||
#include "synergy/Clipboard.h"
|
||||
#include "synergy/FileChunk.h"
|
||||
#include "synergy/DropHelper.h"
|
||||
#include "synergy/PacketStreamFilter.h"
|
||||
@@ -75,7 +74,10 @@ Client::Client(
|
||||
m_socket(NULL),
|
||||
m_useSecureNetwork(false),
|
||||
m_args(args),
|
||||
m_sendClipboardThread(NULL)
|
||||
m_sendClipboardThread(NULL),
|
||||
m_mutex(NULL),
|
||||
m_condData(false),
|
||||
m_condVar(NULL)
|
||||
{
|
||||
assert(m_socketFactory != NULL);
|
||||
assert(m_screen != NULL);
|
||||
@@ -107,6 +109,8 @@ Client::Client(
|
||||
LOG((CLOG_NOTE "crypto disabled because of ns plugin not available"));
|
||||
}
|
||||
}
|
||||
m_mutex = new Mutex();
|
||||
m_condVar = new CondVar<bool>(m_mutex, m_condData);
|
||||
}
|
||||
|
||||
Client::~Client()
|
||||
@@ -125,6 +129,8 @@ Client::~Client()
|
||||
cleanupConnecting();
|
||||
cleanupConnection();
|
||||
delete m_socketFactory;
|
||||
delete m_condVar;
|
||||
delete m_mutex;
|
||||
}
|
||||
|
||||
void
|
||||
@@ -262,8 +268,6 @@ Client::enter(SInt32 xAbs, SInt32 yAbs, UInt32, KeyModifierMask mask, bool)
|
||||
bool
|
||||
Client::leave()
|
||||
{
|
||||
m_screen->leave();
|
||||
|
||||
m_active = false;
|
||||
|
||||
if (m_sendClipboardThread != NULL) {
|
||||
@@ -272,11 +276,26 @@ Client::leave()
|
||||
m_sendClipboardThread = NULL;
|
||||
}
|
||||
|
||||
m_condData = false;
|
||||
m_sendClipboardThread = new Thread(
|
||||
new TMethodJob<Client>(
|
||||
this,
|
||||
&Client::sendClipboardThread,
|
||||
NULL));
|
||||
// Bug #4735 - we can't leave() until fillClipboard()s all finish
|
||||
Stopwatch timer(false);
|
||||
m_mutex->lock();
|
||||
while (!m_condData) {
|
||||
if (!m_condVar->wait(timer, 0.5)) {
|
||||
LOG((CLOG_WARN "timed out %fs waiting for clipboard fill",
|
||||
(double) timer.getTime()));
|
||||
break;
|
||||
}
|
||||
LOG((CLOG_DEBUG1 "leave %fs elapsed", (double) timer.getTime()));
|
||||
}
|
||||
m_mutex->unlock();
|
||||
|
||||
m_screen->leave();
|
||||
|
||||
if (!m_receivedFileData.empty()) {
|
||||
m_receivedFileData.clear();
|
||||
@@ -382,9 +401,20 @@ Client::getName() const
|
||||
}
|
||||
|
||||
void
|
||||
Client::sendClipboard(ClipboardID id)
|
||||
Client::fillClipboard(ClipboardID id, Clipboard *clipboard)
|
||||
{
|
||||
assert(m_screen != NULL);
|
||||
assert(m_server != NULL);
|
||||
|
||||
if (clipboard->open(m_timeClipboard[id])) {
|
||||
clipboard->close();
|
||||
}
|
||||
m_screen->getClipboard(id, clipboard);
|
||||
}
|
||||
|
||||
void
|
||||
Client::sendClipboard(ClipboardID id, Clipboard *clipboard)
|
||||
{
|
||||
// note -- m_mutex must be locked on entry
|
||||
assert(m_screen != NULL);
|
||||
assert(m_server != NULL);
|
||||
|
||||
@@ -392,26 +422,21 @@ Client::sendClipboard(ClipboardID id)
|
||||
// clipboard time before getting the data from the screen
|
||||
// as the screen may detect an unchanged clipboard and
|
||||
// avoid copying the data.
|
||||
Clipboard clipboard;
|
||||
if (clipboard.open(m_timeClipboard[id])) {
|
||||
clipboard.close();
|
||||
}
|
||||
m_screen->getClipboard(id, &clipboard);
|
||||
|
||||
// check time
|
||||
if (m_timeClipboard[id] == 0 ||
|
||||
clipboard.getTime() != m_timeClipboard[id]) {
|
||||
clipboard->getTime() != m_timeClipboard[id]) {
|
||||
// save new time
|
||||
m_timeClipboard[id] = clipboard.getTime();
|
||||
m_timeClipboard[id] = clipboard->getTime();
|
||||
|
||||
// marshall the data
|
||||
String data = clipboard.marshall();
|
||||
String data = clipboard->marshall();
|
||||
|
||||
// save and send data if different or not yet sent
|
||||
if (!m_sentClipboard[id] || data != m_dataClipboard[id]) {
|
||||
m_sentClipboard[id] = true;
|
||||
m_dataClipboard[id] = data;
|
||||
m_server->onClipboardChanged(id, &clipboard);
|
||||
m_server->onClipboardChanged(id, clipboard);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -673,8 +698,10 @@ Client::handleClipboardGrabbed(const Event& event, void*)
|
||||
|
||||
// if we're not the active screen then send the clipboard now,
|
||||
// otherwise we'll wait until we leave.
|
||||
Clipboard clipboard;
|
||||
if (!m_active) {
|
||||
sendClipboard(info->m_id);
|
||||
fillClipboard(info->m_id, &clipboard);
|
||||
sendClipboard(info->m_id, &clipboard);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -762,16 +789,33 @@ Client::onFileRecieveCompleted()
|
||||
}
|
||||
|
||||
void
|
||||
Client::sendClipboardThread(void*)
|
||||
Client::sendClipboardThread(void * data)
|
||||
{
|
||||
Stopwatch timer(false);
|
||||
Clipboard clipboard[kClipboardEnd];
|
||||
// fill clipboards that we own and that have changed
|
||||
for (ClipboardID id = 0; id < kClipboardEnd; ++id) {
|
||||
if (m_ownClipboard[id]) {
|
||||
fillClipboard(id, &clipboard[id]);
|
||||
}
|
||||
}
|
||||
LOG((CLOG_DEBUG1 "fill took %fs, signaling", (double) timer.getTime()));
|
||||
|
||||
// signal that fill is done
|
||||
m_mutex->lock();
|
||||
m_condData = true;
|
||||
m_condVar->signal();
|
||||
m_mutex->unlock();
|
||||
|
||||
// send clipboards that we own and that have changed
|
||||
for (ClipboardID id = 0; id < kClipboardEnd; ++id) {
|
||||
if (m_ownClipboard[id]) {
|
||||
sendClipboard(id);
|
||||
sendClipboard(id, &clipboard[id]);
|
||||
}
|
||||
}
|
||||
|
||||
m_sendClipboardThread = NULL;
|
||||
LOG((CLOG_DEBUG1 "send took %fs", (double) timer.getTime()));
|
||||
}
|
||||
|
||||
void
|
||||
|
||||
@@ -20,12 +20,13 @@
|
||||
|
||||
#include "synergy/IClient.h"
|
||||
|
||||
#include "synergy/IClipboard.h"
|
||||
#include "synergy/Clipboard.h"
|
||||
#include "synergy/DragInformation.h"
|
||||
#include "synergy/INode.h"
|
||||
#include "synergy/ClientArgs.h"
|
||||
#include "net/NetworkAddress.h"
|
||||
#include "base/EventTypes.h"
|
||||
#include "mt/CondVar.h"
|
||||
|
||||
class EventQueueTimer;
|
||||
namespace synergy { class Screen; }
|
||||
@@ -162,7 +163,8 @@ public:
|
||||
virtual String getName() const;
|
||||
|
||||
private:
|
||||
void sendClipboard(ClipboardID);
|
||||
void fillClipboard(ClipboardID, Clipboard*);
|
||||
void sendClipboard(ClipboardID, Clipboard*);
|
||||
void sendEvent(Event::Type, void*);
|
||||
void sendConnectionFailedEvent(const char* msg);
|
||||
void sendFileChunk(const void* data);
|
||||
@@ -223,4 +225,7 @@ private:
|
||||
bool m_useSecureNetwork;
|
||||
ClientArgs& m_args;
|
||||
Thread* m_sendClipboardThread;
|
||||
Mutex* m_mutex;
|
||||
bool m_condData;
|
||||
CondVar<bool>* m_condVar;
|
||||
};
|
||||
|
||||
@@ -63,13 +63,19 @@ CondVarBase::broadcast()
|
||||
bool
|
||||
CondVarBase::wait(Stopwatch& timer, double timeout) const
|
||||
{
|
||||
// check timeout against timer
|
||||
if (timeout >= 0.0) {
|
||||
timeout -= timer.getTime();
|
||||
if (timeout < 0.0)
|
||||
return false;
|
||||
}
|
||||
return wait(timeout);
|
||||
double remain = timeout-timer.getTime();
|
||||
// Some ARCH wait()s return prematurely, retry until really timed out
|
||||
// In particular, ArchMultithreadPosix::waitCondVar() returns every 100ms
|
||||
do {
|
||||
// Always call wait at least once, even if remain is 0, to give
|
||||
// other thread a chance to grab the mutex to avoid deadlocks on
|
||||
// busy waiting.
|
||||
if (remain<0.0) remain=0.0;
|
||||
if (wait(remain))
|
||||
return true;
|
||||
remain = timeout - timer.getTime();
|
||||
} while (remain >= 0.0);
|
||||
return false;
|
||||
}
|
||||
|
||||
bool
|
||||
|
||||
@@ -166,22 +166,19 @@ MSWindowsClipboard::get(EFormat format) const
|
||||
{
|
||||
// find the converter for the first clipboard format we can handle
|
||||
IMSWindowsClipboardConverter* converter = NULL;
|
||||
UINT win32Format = EnumClipboardFormats(0);
|
||||
while (converter == NULL && win32Format != 0) {
|
||||
for (ConverterList::const_iterator index = m_converters.begin();
|
||||
index != m_converters.end(); ++index) {
|
||||
converter = *index;
|
||||
if (converter->getWin32Format() == win32Format &&
|
||||
converter->getFormat() == format) {
|
||||
break;
|
||||
}
|
||||
converter = NULL;
|
||||
for (ConverterList::const_iterator index = m_converters.begin();
|
||||
index != m_converters.end(); ++index) {
|
||||
|
||||
converter = *index;
|
||||
if (converter->getFormat() == format) {
|
||||
break;
|
||||
}
|
||||
win32Format = EnumClipboardFormats(win32Format);
|
||||
converter = NULL;
|
||||
}
|
||||
|
||||
// if no converter then we don't recognize any formats
|
||||
if (converter == NULL) {
|
||||
LOG((CLOG_WARN "no converter for format %d", format));
|
||||
return String();
|
||||
}
|
||||
|
||||
|
||||
@@ -283,9 +283,10 @@ private:
|
||||
HKL m_keyLayout;
|
||||
|
||||
// screen saver stuff
|
||||
MSWindowsScreenSaver* m_screensaver;
|
||||
bool m_screensaverNotify;
|
||||
bool m_screensaverActive;
|
||||
MSWindowsScreenSaver*
|
||||
m_screensaver;
|
||||
bool m_screensaverNotify;
|
||||
bool m_screensaverActive;
|
||||
|
||||
// clipboard stuff. our window is used mainly as a clipboard
|
||||
// owner and as a link in the clipboard viewer chain.
|
||||
|
||||
@@ -37,6 +37,7 @@
|
||||
#include <UserEnv.h>
|
||||
#include <Shellapi.h>
|
||||
|
||||
#define MAXIMUM_WAIT_TIME 3
|
||||
enum {
|
||||
kOutputBufferSize = 4096
|
||||
};
|
||||
@@ -292,6 +293,7 @@ MSWindowsWatchdog::startProcess()
|
||||
|
||||
ZeroMemory(&sa, sizeof(SECURITY_ATTRIBUTES));
|
||||
HANDLE userToken = getUserToken(&sa);
|
||||
m_elevateProcess = m_autoElevated ? m_autoElevated : m_elevateProcess;
|
||||
m_autoElevated = false;
|
||||
|
||||
// patch by Jack Zhou and Henry Tung
|
||||
@@ -319,8 +321,10 @@ MSWindowsWatchdog::startProcess()
|
||||
m_processRunning = true;
|
||||
m_processFailures = 0;
|
||||
|
||||
LOG((CLOG_DEBUG "started process, session=%i, command=%s",
|
||||
m_session.getActiveSessionId(), m_command.c_str()));
|
||||
LOG((CLOG_DEBUG "started process, session=%i, elevated: %s, command=%s",
|
||||
m_session.getActiveSessionId(),
|
||||
m_elevateProcess ? "yes" : "no",
|
||||
m_command.c_str()));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -549,8 +553,14 @@ MSWindowsWatchdog::getActiveDesktop(LPSECURITY_ATTRIBUTES security)
|
||||
}
|
||||
|
||||
ARCH->lockMutex(m_mutex);
|
||||
int waitTime = 0;
|
||||
while (!m_ready) {
|
||||
if (waitTime >= MAXIMUM_WAIT_TIME) {
|
||||
break;
|
||||
}
|
||||
|
||||
ARCH->waitCondVar(m_condVar, m_mutex, 1.0);
|
||||
waitTime++;
|
||||
}
|
||||
m_ready = false;
|
||||
ARCH->unlockMutex(m_mutex);
|
||||
|
||||
@@ -95,7 +95,6 @@ OSXClipboard::synchronize()
|
||||
void
|
||||
OSXClipboard::add(EFormat format, const String & data)
|
||||
{
|
||||
bool emptied = false;
|
||||
if (m_pboard == NULL)
|
||||
return;
|
||||
|
||||
@@ -121,24 +120,16 @@ OSXClipboard::add(EFormat format, const String & data)
|
||||
CFStringRef flavorType = converter->getOSXFormat();
|
||||
CFDataRef dataRef = CFDataCreate(kCFAllocatorDefault, (UInt8 *)osXData.data(), osXData.size());
|
||||
|
||||
// integ tests showed that if you call add(...) twice, then the
|
||||
// second call will actually fail to set clipboard data. calling
|
||||
// empty() seems to solve this problem. but, only clear the clipboard
|
||||
// for the first converter, otherwise further converters will wipe out
|
||||
// what we just added.
|
||||
if (!emptied) {
|
||||
empty();
|
||||
emptied = true;
|
||||
}
|
||||
|
||||
PasteboardPutItemFlavor(
|
||||
m_pboard,
|
||||
(PasteboardItemID) 0,
|
||||
flavorType,
|
||||
dataRef,
|
||||
kPasteboardFlavorNoFlags);
|
||||
LOG((CLOG_DEBUG "added %d bytes to clipboard format: %d", data.size(), format));
|
||||
}
|
||||
PasteboardPutItemFlavor(
|
||||
m_pboard,
|
||||
(PasteboardItemID) 0,
|
||||
flavorType,
|
||||
dataRef,
|
||||
kPasteboardFlavorNoFlags);
|
||||
|
||||
LOG((CLOG_DEBUG "added %d bytes to clipboard format: %d", data.size(), format));
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -841,11 +841,13 @@ OSXScreen::disable()
|
||||
// FIXME -- stop watching jump zones, stop capturing input
|
||||
|
||||
if (m_eventTapRLSR) {
|
||||
CFRunLoopRemoveSource(CFRunLoopGetCurrent(), m_eventTapRLSR, kCFRunLoopDefaultMode);
|
||||
CFRelease(m_eventTapRLSR);
|
||||
m_eventTapRLSR = nullptr;
|
||||
}
|
||||
|
||||
if (m_eventTapPort) {
|
||||
CGEventTapEnable(m_eventTapPort, false);
|
||||
CFRelease(m_eventTapPort);
|
||||
m_eventTapPort = nullptr;
|
||||
}
|
||||
|
||||
@@ -315,8 +315,8 @@ bool
|
||||
XWindowsClipboard::open(Time time) const
|
||||
{
|
||||
if (m_open) {
|
||||
return false;
|
||||
LOG((CLOG_DEBUG "failed to open clipboard: already opened"));
|
||||
return false;
|
||||
}
|
||||
|
||||
LOG((CLOG_DEBUG "open clipboard %d", m_id));
|
||||
@@ -1317,7 +1317,7 @@ XWindowsClipboard::CICCCMGetClipboard::readClipboard(Display* display,
|
||||
// by badly behaved selection owners.
|
||||
XEvent xevent;
|
||||
std::vector<XEvent> events;
|
||||
Stopwatch timeout(true);
|
||||
Stopwatch timeout(false); // timer not stopped, not triggered
|
||||
static const double s_timeout = 0.25; // FIXME -- is this too short?
|
||||
bool noWait = false;
|
||||
while (!m_done && !m_failed) {
|
||||
@@ -1361,7 +1361,7 @@ XWindowsClipboard::CICCCMGetClipboard::readClipboard(Display* display,
|
||||
XSelectInput(display, m_requestor, attr.your_event_mask);
|
||||
|
||||
// return success or failure
|
||||
LOG((CLOG_DEBUG1 "request %s", m_failed ? "failed" : "succeeded"));
|
||||
LOG((CLOG_DEBUG1 "request %s after %fs", m_failed ? "failed" : "succeeded", timeout.getTime()));
|
||||
return !m_failed;
|
||||
}
|
||||
|
||||
|
||||
@@ -516,10 +516,10 @@ Server::switchScreen(BaseClientProxy* dst,
|
||||
|
||||
// send the clipboard data to new active screen
|
||||
m_sendClipboardThread = new Thread(
|
||||
new TMethodJob<Server>(
|
||||
this,
|
||||
&Server::sendClipboardThread,
|
||||
NULL));
|
||||
new TMethodJob<Server>(
|
||||
this,
|
||||
&Server::sendClipboardThread,
|
||||
NULL));
|
||||
|
||||
Server::SwitchToScreenInfo* info =
|
||||
Server::SwitchToScreenInfo::alloc(m_active->getName());
|
||||
|
||||
@@ -46,7 +46,8 @@ void DpiHelper::calculateDpi(size_t width, size_t height)
|
||||
s_dpiScaled = true;
|
||||
|
||||
LOG((CLOG_DEBUG "DPI: %d%%", s_dpi));
|
||||
LOG((CLOG_DEBUG "physical resolution: %d, %d scaled resolution: %d, %d", s_resolutionWidth, s_resolutionHeight, width, height));
|
||||
LOG((CLOG_DEBUG "physical resolution: %d, %d scaled resolution: %d, %d",
|
||||
s_resolutionWidth, s_resolutionHeight, width, height));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -66,6 +66,13 @@ IClipboard::unmarshall(IClipboard* clipboard, const String& data, Time time)
|
||||
String
|
||||
IClipboard::marshall(const IClipboard* clipboard)
|
||||
{
|
||||
// return data format:
|
||||
// 4 bytes => number of formats included
|
||||
// 4 bytes => format enum
|
||||
// 4 bytes => clipboard data size n
|
||||
// n bytes => clipboard data
|
||||
// back to the second 4 bytes if there is another format
|
||||
|
||||
assert(clipboard != NULL);
|
||||
|
||||
String data;
|
||||
|
||||
@@ -57,8 +57,8 @@ public:
|
||||
*/
|
||||
enum EFormat {
|
||||
kText, //!< Text format, UTF-8, newline is LF
|
||||
kHTML, //!< HTML format, HTML fragment, UTF-8, newline is LF
|
||||
kBitmap, //!< Bitmap format, BMP 24/32bpp, BI_RGB
|
||||
kHTML, //!< HTML format, HTML fragment, UTF-8, newline is LF
|
||||
kNumFormats //!< The number of clipboard formats
|
||||
};
|
||||
|
||||
|
||||
@@ -112,13 +112,13 @@
|
||||
<fire:FirewallException Id="GuiFirewallException" Name="$(var.Name)" Scope="any" IgnoreFailure="yes" />
|
||||
</File>
|
||||
|
||||
<File Source="$(var.QtPath)\libgcc_s_dw2-1.dll" CompanionFile="GuiProgram" />
|
||||
<File Source="$(var.QtPath)\mingwm10.dll" CompanionFile="GuiProgram" />
|
||||
<File Source="$(var.QtPath)\QtCore4.dll" CompanionFile="GuiProgram" />
|
||||
<File Source="$(var.QtPath)\QtGui4.dll" CompanionFile="GuiProgram" />
|
||||
<File Source="$(var.QtPath)\QtNetwork4.dll" CompanionFile="GuiProgram" />
|
||||
<File Source="$(var.QtPath)\libgcc_s_dw2-1.dll" />
|
||||
<File Source="$(var.QtPath)\mingwm10.dll" />
|
||||
<File Source="$(var.QtPath)\QtCore4.dll" />
|
||||
<File Source="$(var.QtPath)\QtGui4.dll" />
|
||||
<File Source="$(var.QtPath)\QtNetwork4.dll" />
|
||||
|
||||
<File Source="$(var.ExtPath)\bonjour\x64\dnssd.dll" CompanionFile="GuiProgram" />
|
||||
<File Source="$(var.ExtPath)\bonjour\x64\dnssd.dll" />
|
||||
|
||||
</Component>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user