Hello community, here is the log from the commit of package syncthing-gtk for openSUSE:Factory checked in at 2016-03-26 15:29:32 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/syncthing-gtk (Old) and /work/SRC/openSUSE:Factory/.syncthing-gtk.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "syncthing-gtk" Changes: -------- --- /work/SRC/openSUSE:Factory/syncthing-gtk/syncthing-gtk.changes 2016-01-26 10:15:02.000000000 +0100 +++ /work/SRC/openSUSE:Factory/.syncthing-gtk.new/syncthing-gtk.changes 2016-03-26 18:15:20.000000000 +0100 @@ -1,0 +2,9 @@ +Fri Mar 25 15:09:10 UTC 2016 - [email protected] + +- Update to 0.8.3: + * Add "Advanced" tab into UI Settings with options to change + Syncthing daemon arguments and environment variables. + * Fix handling Syncthing restarting. + * Fix repository with space in ID not refreshing correctly. + +------------------------------------------------------------------- Old: ---- syncthing-gtk-0.8.2.tar.gz New: ---- syncthing-gtk-0.8.3.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ syncthing-gtk.spec ++++++ --- /var/tmp/diff_new_pack.9K6DAq/_old 2016-03-26 18:15:22.000000000 +0100 +++ /var/tmp/diff_new_pack.9K6DAq/_new 2016-03-26 18:15:22.000000000 +0100 @@ -19,7 +19,7 @@ %global __requires_exclude typelib\\((Caja|Nautilus|Nemo)\\) %define _name syncthing_gtk Name: syncthing-gtk -Version: 0.8.2 +Version: 0.8.3 Release: 0 Summary: Syncthing Gtk-based graphical interface License: GPL-2.0+ ++++++ syncthing-gtk-0.8.2.tar.gz -> syncthing-gtk-0.8.3.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/syncthing-gtk-0.8.2/README.md new/syncthing-gtk-0.8.3/README.md --- old/syncthing-gtk-0.8.2/README.md 2016-01-18 09:43:56.000000000 +0100 +++ new/syncthing-gtk-0.8.3/README.md 2016-03-06 07:45:44.000000000 +0100 @@ -20,6 +20,14 @@ - Nautilus (a.k.a. Files), Nemo and Caja integration - Desktop notifications +Packages: +- Ubuntu (deb-based distros): in [Web Upd8 PPA](https://launchpad.net/~nilarimogard/+archive/ubuntu/webupd8/) (thanks!) or [DEBs](http://ppa.launchpad.net/nilarimogard/webupd8/ubuntu/pool/main/s/syncthing-gtk/) +- Arch Linux: In [[community] repository](https://www.archlinux.org/packages/community/any/syncthing-gtk/) +- Fedora: [in decathorpe's copr repository](https://copr.fedoraproject.org/coprs/decathorpe/syncthing/) +- SUSE (and other rpm-based distros): in [OpenSUSE Build Service](http://software.opensuse.org/download.html?project=home%3Akozec&package=syncthing-gtk). +- Windows: Get [latest installer from here](https://github.com/kozec/syncthing-gui/releases/latest), or use [the Chocolatey package](https://chocolatey.org/packages/syncthing-gtk). +- Or, in worst case scenario, download [latest tarball](https://github.com/kozec/syncthing-gui/releases/latest), extract it and run syncthing-gtk.py. + Dependencies: - python 2.7, GTK 3.8 or newer and [PyGObject](https://live.gnome.org/PyGObject) - [python-gi-cairo](https://packages.debian.org/sid/python-gi-cairo) and [gir1.2-rsvg-2.0](https://packages.debian.org/sid/gir1.2-rsvg-2.0) on debian based distros (included in PyGObject elsewhere) @@ -33,13 +41,14 @@ - libnotify for desktop notifications. - nautilus-python, nemo-python or caja-python for filemanager integration -Packages: -- Ubuntu (deb-based distros): in [Web Upd8 PPA](https://launchpad.net/~nilarimogard/+archive/ubuntu/webupd8/) (thanks!) or [DEBs](http://ppa.launchpad.net/nilarimogard/webupd8/ubuntu/pool/main/s/syncthing-gtk/) -- Arch Linux: In [[community] repository](https://www.archlinux.org/packages/community/any/syncthing-gtk/) -- Fedora: [in decathorpe's copr repository](https://copr.fedoraproject.org/coprs/decathorpe/syncthing/) -- SUSE (and other rpm-based distros): in [OpenSUSE Build Service](http://software.opensuse.org/download.html?project=home%3Akozec&package=syncthing-gtk). -- Windows: Get [latest installer from here](https://github.com/kozec/syncthing-gui/releases/latest), or use [the Chocolatey package](https://chocolatey.org/packages/syncthing-gtk). -- Or, in worst case scenario, download [latest tarball](https://github.com/kozec/syncthing-gui/releases/latest), extract it and run syncthing-gtk.py. +Windows Building Dependencies _(you don't need to install these just to **run** Syncthing-GTK)_ +- Python for Windows 2.7 +- [PyGObject for Windows](http://sourceforge.net/projects/pygobjectwin32/) with GTK3 enabled (tested with version 3.14.0) +- [python-dateutil](http://labix.org/python-dateutil) (Python 2 version) +- [Python for Windows Extensions](http://sourceforge.net/projects/pywin32/) +- [WMI](http://timgolden.me.uk/python/wmi/index.html) +- [syncthing-inotify](https://github.com/syncthing/syncthing-inotify) (optional) +- [NSIS2](http://nsis.sourceforge.net/NSIS_2) with NSISdl, [ZipDLL](http://nsis.sourceforge.net/ZipDLL_plug-in) and [FindProcDLL](http://forums.winamp.com/showpost.php?p=2777729&postcount=8) plugins (optional, for building installer) Related links: - http://syncthing.net diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/syncthing-gtk-0.8.2/build_windows.py new/syncthing-gtk-0.8.3/build_windows.py --- old/syncthing-gtk-0.8.2/build_windows.py 2016-01-18 09:43:56.000000000 +0100 +++ new/syncthing-gtk-0.8.3/build_windows.py 2016-03-06 07:45:44.000000000 +0100 @@ -69,8 +69,10 @@ include_files += [ (os.path.join(gnome_dll_path, x), x) for x in missing_dll ] # GTK locales -include_files += [ (os.path.join(gnome_dll_path, "share/locale", x), "share/locale/" + x ) for x in enabled_gtk_locales ] -enabled_gtk_locales +include_files += [ (os.path.join(gnome_dll_path, "share/locale", x, "LC_MESSAGES", "glib20.mo"), + "share/locale/" + x + "/LC_MESSAGES/glib20.mo" ) for x in enabled_gtk_locales ] +include_files += [ (os.path.join(gnome_dll_path, "share/locale", x, "LC_MESSAGES", "gtk30.mo"), + "share/locale/" + x + "/LC_MESSAGES/gtk30.mo" ) for x in enabled_gtk_locales ] # Data files include_files += [ x for x in os.listdir(".") if x.endswith(".glade") ] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/syncthing-gtk-0.8.2/find-daemon.glade new/syncthing-gtk-0.8.3/find-daemon.glade --- old/syncthing-gtk-0.8.2/find-daemon.glade 2016-01-18 09:43:56.000000000 +0100 +++ new/syncthing-gtk-0.8.3/find-daemon.glade 2016-03-06 07:45:44.000000000 +0100 @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<!-- Generated with glade 3.18.3 --> +<!-- Generated with glade 3.19.0 --> <interface> <requires lib="gtk+" version="3.8"/> <object class="GtkDialog" id="editor"> @@ -27,6 +27,21 @@ <property name="can_focus">False</property> <property name="layout_style">end</property> <child> + <object class="GtkButton" id="bt_ui_settings"> + <property name="label">UI _Settings</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="use_underline">True</property> + <signal name="clicked" handler="cb_bt_ui_settings_clicked" swapped="no"/> + </object> + <packing> + <property name="expand">True</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> <object class="GtkButton" id="btQuit"> <property name="label">gtk-quit</property> <property name="visible">True</property> @@ -38,7 +53,7 @@ <packing> <property name="expand">True</property> <property name="fill">True</property> - <property name="position">0</property> + <property name="position">1</property> </packing> </child> <child> @@ -54,7 +69,7 @@ <packing> <property name="expand">True</property> <property name="fill">True</property> - <property name="position">1</property> + <property name="position">3</property> </packing> </child> </object> @@ -77,10 +92,10 @@ <property name="can_focus">False</property> <property name="margin_bottom">10</property> <property name="hexpand">True</property> - <property name="xalign">0</property> <property name="label">... message goes here ...</property> <property name="use_markup">True</property> <property name="wrap">True</property> + <property name="xalign">0</property> </object> <packing> <property name="expand">False</property> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/syncthing-gtk-0.8.2/locale/fr/LC_MESSAGES/syncthing-gtk.po new/syncthing-gtk-0.8.3/locale/fr/LC_MESSAGES/syncthing-gtk.po --- old/syncthing-gtk-0.8.2/locale/fr/LC_MESSAGES/syncthing-gtk.po 2016-01-18 09:43:56.000000000 +0100 +++ new/syncthing-gtk-0.8.3/locale/fr/LC_MESSAGES/syncthing-gtk.po 2016-03-06 07:45:44.000000000 +0100 @@ -3,15 +3,15 @@ # This file is distributed under the same license as the Syncthing-GTK package. # # Translators: -# Gérald Maruccia <[email protected]>, 2015 +# Gérald Maruccia <[email protected]>, 2015-2016 # kozec <[email protected]>, 2016 msgid "" msgstr "" "Project-Id-Version: syncthing-gtk\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-11-02 23:51+0100\n" -"PO-Revision-Date: 2016-01-13 19:09+0000\n" -"Last-Translator: kozec <[email protected]>\n" +"PO-Revision-Date: 2016-01-31 13:48+0000\n" +"Last-Translator: Gérald Maruccia <[email protected]>\n" "Language-Team: French (France) (http://www.transifex.com/syncthing-gtk/syncthing-gtk/language/fr_FR/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -560,28 +560,28 @@ #: syncthing_gtk/notifications.py:160 #, python-format msgid "The file '%s' was updated on remote device." -msgstr "Le fichier '%s' a été mis à jour sur l'appareil distant." +msgstr "Le fichier '%s' a été mis à jour." #: syncthing_gtk/notifications.py:165 #, python-format msgid "The file '%s' was deleted on remote device." -msgstr "Le fichier '%s' a été supprimé sur l'appareil distant." +msgstr "Le fichier '%s' a été supprimé." #: syncthing_gtk/notifications.py:168 #, python-format msgid "%s files were updated on remote device." -msgstr "%s fichiers ont été mis à jour sur l'appareil distant." +msgstr "%s fichiers ont été mis à jour." #: syncthing_gtk/notifications.py:171 #, python-format msgid "%s files were deleted on remote device." -msgstr "%s ont été supprimés sur l'appareil distant." +msgstr "%s fichiers ont été supprimés." #: syncthing_gtk/notifications.py:175 #, python-format msgid "" "%(updated)s files were updated and %(deleted)s deleted on remote device." -msgstr "%(updated)s ont été mis à jour et %(deleted)s ont été supprimés sur l'appareil distant." +msgstr "%(updated)s fichiers ont été mis à jour et %(deleted)s ont été supprimés." #: syncthing_gtk/statusicon.py:48 msgid "Syncthing" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/syncthing-gtk-0.8.2/syncthing-gtk.nsis new/syncthing-gtk-0.8.3/syncthing-gtk.nsis --- old/syncthing-gtk-0.8.2/syncthing-gtk.nsis 2016-01-18 09:43:56.000000000 +0100 +++ new/syncthing-gtk-0.8.3/syncthing-gtk.nsis 2016-03-06 07:45:44.000000000 +0100 @@ -3,7 +3,7 @@ # Initial stuff !include MUI2.nsh !define APP_NAME SyncthingGTK -!define LIBRARIES_FILE "syncthing-gtk-windows-libraries-0.7.2.zip" +!define LIBRARIES_FILE "syncthing-gtk-windows-libraries-0.8.2.zip" !define LIBRARIES_URL "http://kozec.com/${LIBRARIES_FILE}" !define MUI_FINISHPAGE_RUN "$INSTDIR\syncthing-gtk.exe" !include "build\version.nsh" @@ -50,7 +50,7 @@ File /r build\exe.win32-2.7\icons # Check if random file that should be part of libraries zip exists # and download&extract zip if not - IfFileExists $INSTDIR\syncthing-inotify-v0.6.3.exe SkipDownload DoDownload + IfFileExists $INSTDIR\share\locale\vi\LC_MESSAGES\gtk30.mo SkipDownload DoDownload DoDownload: NSISdl::download ${LIBRARIES_URL} $TEMP\${LIBRARIES_FILE} ZipDLL::extractall $TEMP\${LIBRARIES_FILE} $INSTDIR diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/syncthing-gtk-0.8.2/syncthing_gtk/app.py new/syncthing-gtk-0.8.3/syncthing_gtk/app.py --- old/syncthing-gtk-0.8.2/syncthing_gtk/app.py 2016-01-18 09:43:56.000000000 +0100 +++ new/syncthing-gtk-0.8.3/syncthing_gtk/app.py 2016-03-06 07:45:44.000000000 +0100 @@ -11,7 +11,7 @@ from syncthing_gtk.tools import * from syncthing_gtk.tools import _ # gettext function from datetime import datetime -import os, webbrowser, sys, logging, shutil, re +import os, webbrowser, sys, time, logging, shutil, re log = logging.getLogger("App") # Internal version used by updater (if enabled) @@ -49,6 +49,9 @@ REFRESH_INTERVAL_DEFAULT = 1 REFRESH_INTERVAL_TRAY = 5 +# If daemon dies twice in this interval, broken settings are assumed +RESTART_TOO_FREQUENT_INTERVAL = 5 + UPDATE_CHECK_INTERVAL = 12 * 60 * 60 # Speed values in outcoming/incoming speed limit menus @@ -77,6 +80,7 @@ self.process = None self.hide_window = self.config["minimize_on_start"] self.exit_after_wizard = False + self.last_restart_time = 0.0 # Can be changed by --force-update=vX.Y.Z argument self.force_update_version = None # Determine if header bar should be shown @@ -315,7 +319,7 @@ if IS_XP: # Wizard can't run on old Windows versions. Instead of # it, 'Give me daemon executable' dialog is shown - self.cb_daemon_startup_failed(None, "File not found") + self.cb_daemon_startup_failed(None, "Syncthing is not configured or configuration file cannot be found.") return False self.hide() self.show_wizard() @@ -403,7 +407,11 @@ Sets self.process, adds related handlers and starts daemon. Just so I don't have to write same code all over the place. """ - self.process = DaemonProcess([self.config["syncthing_binary"], "-no-browser"], self.config["daemon_priority"], self.config["max_cpus"]) + cmdline = [self.config["syncthing_binary"], "-no-browser"] + vars, preargs, args = parse_config_arguments(self.config["syncthing_arguments"]) + cmdline = preargs + cmdline + args + + self.process = DaemonProcess(cmdline, self.config["daemon_priority"], self.config["max_cpus"], env=vars) self.process.connect('failed', self.cb_daemon_startup_failed) self.process.connect('exit', self.cb_daemon_exit) self.process.start() @@ -1939,10 +1947,14 @@ self.quit() def cb_daemon_exit(self, proc, error_code): - print "cb_daemon_exit", proc, self.process if proc == self.process: # Whatever happens, if daemon dies while it shouldn't, - # restart it + # restart it... + if time.time() - self.last_restart_time < RESTART_TOO_FREQUENT_INTERVAL: + # ... unless it keeps restarting + self.cb_daemon_startup_failed(proc, "Daemon exits too fast") + return + self.last_restart_time = time.time() if not StDownloader is None and self.config["st_autoupdate"] and os.path.exists(self.config["syncthing_binary"] + ".new"): # New daemon version is downloaded and ready to use. # Switch to this version before restarting diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/syncthing-gtk-0.8.2/syncthing_gtk/configuration.py new/syncthing-gtk-0.8.3/syncthing_gtk/configuration.py --- old/syncthing-gtk-0.8.2/syncthing_gtk/configuration.py 2016-01-18 09:43:56.000000000 +0100 +++ new/syncthing-gtk-0.8.3/syncthing_gtk/configuration.py 2016-03-06 07:45:44.000000000 +0100 @@ -31,6 +31,7 @@ "daemon_priority" : (int, 0), # uses nice values "max_cpus" : (int, 0), # 0 for all cpus "syncthing_binary" : (str, "/usr/bin/syncthing"), + "syncthing_arguments" : (str, ""), "minimize_on_start" : (bool, False), "folder_as_path" : (bool, True), "use_inotify" : (list, []), diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/syncthing-gtk-0.8.2/syncthing_gtk/daemon.py new/syncthing-gtk-0.8.3/syncthing_gtk/daemon.py --- old/syncthing-gtk-0.8.2/syncthing_gtk/daemon.py 2016-01-18 09:43:56.000000000 +0100 +++ new/syncthing-gtk-0.8.3/syncthing_gtk/daemon.py 2016-03-06 07:45:44.000000000 +0100 @@ -901,6 +901,7 @@ else: if self._instance_id != data["startTime"]: log.warning("Daemon instance was replaced unexpedtedly. Disconnecting from daemon.") + self._my_id = None if self._connected: self._connected = False self.emit("disconnected", Daemon.UNEXPECTED, "Daemon instance replaced") @@ -1205,7 +1206,8 @@ callback("\n".join(data["ignore"]).strip(" \t\n"), *a) else: callback("", *a) - self._rest_request("db/ignores?folder=%s" % (folder_id,), r_filter, error_callback, *calbackdata) + id_enc = urllib.quote(folder_id.encode('utf-8')) + self._rest_request("db/ignores?folder=%s" % (id_enc,), r_filter, error_callback, *calbackdata) def write_stignore(self, folder_id, text, callback, error_callback=None, *calbackdata): """ @@ -1213,7 +1215,8 @@ with on success, error_callback(exception) on failure. """ data = { 'ignore': text.split("\n") } - self._rest_post("db/ignores?folder=%s" % (folder_id,), data, callback, error_callback, *calbackdata) + id_enc = urllib.quote(folder_id.encode('utf-8')) + self._rest_post("db/ignores?folder=%s" % (id_enc,), data, callback, error_callback, *calbackdata) def restart(self): """ @@ -1295,14 +1298,16 @@ def rescan(self, folder_id, path=None): """ Asks daemon to rescan entire folder or specified path """ if path is None: - self._rest_post("db/scan?folder=%s" % (folder_id,), {}, lambda *a: a, lambda *a: log.error(a), folder_id) + id_enc = urllib.quote(folder_id.encode('utf-8')) + self._rest_post("db/scan?folder=%s" % (id_enc,), {}, lambda *a: a, lambda *a: log.error(a), folder_id) else: path_enc = urllib.quote(path.encode('utf-8'), ''.encode('utf-8')) self._rest_post("db/scan?folder=%s&sub=%s" % (folder_id, path_enc), {}, lambda *a: a, lambda *a: log.error(a), folder_id) def override(self, folder_id): """ Asks daemon to override changes made in specified folder """ - self._rest_post("model/override?folder=%s" % (folder_id,), {}, lambda *a: a, lambda *a: log.error(a), folder_id) + id_enc = urllib.quote(folder_id.encode('utf-8')) + self._rest_post("model/override?folder=%s" % (id_enc,), {}, lambda *a: a, lambda *a: log.error(a), folder_id) def request_events(self): """ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/syncthing-gtk-0.8.2/syncthing_gtk/daemonprocess.py new/syncthing-gtk-0.8.3/syncthing_gtk/daemonprocess.py --- old/syncthing-gtk-0.8.2/syncthing_gtk/daemonprocess.py 2016-01-18 09:43:56.000000000 +0100 +++ new/syncthing-gtk-0.8.3/syncthing_gtk/daemonprocess.py 2016-03-06 07:45:44.000000000 +0100 @@ -39,19 +39,21 @@ PRIORITY_HIGH = -10 PRIORITY_HIGHEST = -20 - def __init__(self, commandline, priority=PRIORITY_NORMAL, max_cpus=0): - """ commandline should be list of arguments """ + def __init__(self, cmdline, priority=PRIORITY_NORMAL, max_cpus=0, env={}): + """ cmdline should be list of arguments """ GObject.GObject.__init__(self) - self.commandline = commandline + self.cmdline = cmdline self.priority = priority - self.max_cpus = max_cpus + self.env = { x:env[x] for x in env } + self.env["STNORESTART"] = "1" # see syncthing --help + self.env["STNOUPGRADE"] = "1" + if max_cpus > 0: + self.env["GOMAXPROCS"] = str(max_cpus) self._proc = None def start(self): - os.environ["STNORESTART"] = "1" # see syncthing --help - os.environ["STNOUPGRADE"] = "1" # hopefully implemented later - if self.max_cpus > 0: - os.environ["GOMAXPROCS"] = str(self.max_cpus) + for x in self.env: + os.environ[x] = self.env[x] try: self._cancel = Gio.Cancellable() if IS_WINDOWS: @@ -60,7 +62,7 @@ sinfo.dwFlags = STARTF_USESHOWWINDOW sinfo.wShowWindow = 0 cflags = nice_to_priority_class(self.priority) - self._proc = Popen(self.commandline, + self._proc = Popen(self.cmdline, stdin=PIPE, stdout=PIPE, stderr=PIPE, startupinfo=sinfo, creationflags=cflags) self._stdout = WinPopenReader(self._proc.stdout) @@ -69,16 +71,16 @@ # New Gio flags = Gio.SubprocessFlags.STDOUT_PIPE | Gio.SubprocessFlags.STDERR_MERGE if self.priority == 0: - self._proc = Gio.Subprocess.new(self.commandline, flags) + self._proc = Gio.Subprocess.new(self.cmdline, flags) else: # I just really do hope that there is no distro w/out nice command - self._proc = Gio.Subprocess.new([ "nice", "-n", "%s" % self.priority ] + self.commandline, flags) + self._proc = Gio.Subprocess.new([ "nice", "-n", "%s" % self.priority ] + self.cmdline, flags) self._proc.wait_check_async(None, self._cb_finished) self._stdout = self._proc.get_stdout_pipe() else: # Gio < 3.12 - Gio.Subprocess is missing :( if self.priority == 0: - self._proc = Popen(self.commandline, stdout=PIPE) + self._proc = Popen(self.cmdline, stdout=PIPE) else: # still hoping self._proc = Popen([ "nice", "-n", "%s" % self.priority ], stdout=PIPE) @@ -188,4 +190,4 @@ def get_commandline(self): """ Returns commandline used to start process """ - return self.commandline + return self.cmdline diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/syncthing-gtk-0.8.2/syncthing_gtk/finddaemondialog.py new/syncthing-gtk-0.8.3/syncthing_gtk/finddaemondialog.py --- old/syncthing-gtk-0.8.2/syncthing_gtk/finddaemondialog.py 2016-01-18 09:43:56.000000000 +0100 +++ new/syncthing-gtk-0.8.3/syncthing_gtk/finddaemondialog.py 2016-03-06 07:45:44.000000000 +0100 @@ -11,7 +11,7 @@ from syncthing_gtk import EditorDialog, StDownloader from syncthing_gtk.tools import get_config_dir, IS_WINDOWS, IS_XP from syncthing_gtk.tools import _ # gettext function -from syncthing_gtk.uisettingsdialog import browse_for_binary +from syncthing_gtk.uisettingsdialog import UISettingsDialog, browse_for_binary import os, platform VALUES = [ "vsyncthing_binary" ] @@ -109,6 +109,16 @@ """ Handler for 'Quit' button """ self["editor"].response(FindDaemonDialog.RESPONSE_QUIT) + def cb_bt_ui_settings_clicked(self, *a): + """ Handler for 'UI Settings' button """ + e = UISettingsDialog(self.app) + e.connect('close', self.cb_ui_settings_closed) + e.load() + e.show(self["window"]) + + def cb_ui_settings_closed(self, *a): + self.load() + ### EditorDialog overrides #@Overrides @@ -175,3 +185,4 @@ self["lblDownloadProgress"].set_markup("<b>" + _("Download finished.") + "</b>") self["pbDownload"].set_visible(False) self["btSave"].set_sensitive(True) + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/syncthing-gtk-0.8.2/syncthing_gtk/tools.py new/syncthing-gtk-0.8.3/syncthing_gtk/tools.py --- old/syncthing-gtk-0.8.2/syncthing_gtk/tools.py 2016-01-18 09:43:56.000000000 +0100 +++ new/syncthing-gtk-0.8.3/syncthing_gtk/tools.py 2016-03-06 07:45:44.000000000 +0100 @@ -11,7 +11,7 @@ from datetime import datetime, tzinfo, timedelta from subprocess import Popen from dateutil import parser -import re, os, sys, platform, logging, gettext, __main__ +import re, os, sys, platform, logging, shlex, gettext, __main__ log = logging.getLogger("tools.py") IS_WINDOWS = sys.platform in ('win32', 'win64') @@ -157,6 +157,27 @@ except ValueError: raise ValueError("Failed to parse '%s' as time" % m) +def parse_config_arguments(lst): + """ + Parses list of arguments and variables set in configuration + Returns tuple of (variables_dict, prefix_arguments, arguments_list) + """ + vars, preargs, args = {}, [], [] + split = shlex.split(lst, False, False) + args_target = preargs if "!" in split else args + for i in split: + if "=" in i and not i.startswith("-"): + # Environment variable + k, v = i.split("=", 1) + vars[k] = v + continue + elif i == "!": + args_target = args + elif len(i.strip()) > 0: + # Argument + args_target.append(i.strip()) + return vars, preargs, args + def delta_to_string(d): """ Returns aproximate, human-readable and potentialy localized @@ -338,7 +359,7 @@ """ if is_portable(): return os.environ["XDG_CONFIG_HOME"] - if IS_WINDOWS: + if IS_WINDOWS and not IS_XP: try: import windows return windows.get_unicode_home() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/syncthing-gtk-0.8.2/syncthing_gtk/uisettingsdialog.py new/syncthing-gtk-0.8.3/syncthing_gtk/uisettingsdialog.py --- old/syncthing-gtk-0.8.2/syncthing_gtk/uisettingsdialog.py 2016-01-18 09:43:56.000000000 +0100 +++ new/syncthing-gtk-0.8.3/syncthing_gtk/uisettingsdialog.py 2016-03-06 07:45:44.000000000 +0100 @@ -20,7 +20,7 @@ "vforce_dark_theme", "vdaemon_priority", "vfolder_as_path", "vnotification_for_update", "vnotification_for_folder", "vnotification_for_error", "vst_autoupdate", "vsyncthing_binary", - "vmax_cpus", + "vsyncthing_arguments", "vmax_cpus", ] # Values for filemanager integration. Key is ID of checkbox widget diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/syncthing-gtk-0.8.2/syncthing_gtk/windows.py new/syncthing-gtk-0.8.3/syncthing_gtk/windows.py --- old/syncthing-gtk-0.8.2/syncthing_gtk/windows.py 2016-01-18 09:43:56.000000000 +0100 +++ new/syncthing-gtk-0.8.3/syncthing_gtk/windows.py 2016-03-06 07:45:44.000000000 +0100 @@ -44,7 +44,8 @@ loc = locale.getdefaultlocale()[0] except Exception, e: pass - os.environ['LANGUAGE'] = loc + if not 'LANGUAGE' in os.environ: + os.environ['LANGUAGE'] = loc def is_shutting_down(): """ Returns True if Windows initiated shutdown process """ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/syncthing-gtk-0.8.2/ui-settings.glade new/syncthing-gtk-0.8.3/ui-settings.glade --- old/syncthing-gtk-0.8.2/ui-settings.glade 2016-01-18 09:43:56.000000000 +0100 +++ new/syncthing-gtk-0.8.3/ui-settings.glade 2016-03-06 07:45:44.000000000 +0100 @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<!-- Generated with glade 3.18.3 --> +<!-- Generated with glade 3.19.0 --> <interface> <requires lib="gtk+" version="3.8"/> <object class="GtkAdjustment" id="adjKeepVersions"> @@ -116,14 +116,13 @@ <property name="visible">True</property> <property name="can_focus">False</property> <property name="margin_top">10</property> - <property name="xalign">0</property> <property name="label" translatable="yes">When starting and Syncthing daemon is not running...</property> + <property name="xalign">0</property> </object> <packing> <property name="left_attach">0</property> <property name="top_attach">10</property> <property name="width">3</property> - <property name="height">1</property> </packing> </child> <child> @@ -141,7 +140,6 @@ <property name="left_attach">1</property> <property name="top_attach">11</property> <property name="width">2</property> - <property name="height">1</property> </packing> </child> <child> @@ -158,8 +156,6 @@ <packing> <property name="left_attach">1</property> <property name="top_attach">12</property> - <property name="width">1</property> - <property name="height">1</property> </packing> </child> <child> @@ -176,8 +172,6 @@ <packing> <property name="left_attach">1</property> <property name="top_attach">13</property> - <property name="width">1</property> - <property name="height">1</property> </packing> </child> <child> @@ -185,14 +179,13 @@ <property name="visible">True</property> <property name="can_focus">False</property> <property name="margin_top">10</property> - <property name="xalign">0</property> <property name="label" translatable="yes">When exiting after daemon was started in background...</property> + <property name="xalign">0</property> </object> <packing> <property name="left_attach">0</property> <property name="top_attach">14</property> <property name="width">3</property> - <property name="height">1</property> </packing> </child> <child> @@ -209,8 +202,6 @@ <packing> <property name="left_attach">1</property> <property name="top_attach">15</property> - <property name="width">1</property> - <property name="height">1</property> </packing> </child> <child> @@ -227,8 +218,6 @@ <packing> <property name="left_attach">1</property> <property name="top_attach">16</property> - <property name="width">1</property> - <property name="height">1</property> </packing> </child> <child> @@ -245,8 +234,6 @@ <packing> <property name="left_attach">1</property> <property name="top_attach">17</property> - <property name="width">1</property> - <property name="height">1</property> </packing> </child> <child> @@ -264,7 +251,6 @@ <property name="left_attach">0</property> <property name="top_attach">2</property> <property name="width">3</property> - <property name="height">1</property> </packing> </child> <child> @@ -272,14 +258,13 @@ <property name="visible">True</property> <property name="can_focus">False</property> <property name="margin_top">10</property> - <property name="xalign">0</property> <property name="label" translatable="yes">Display desktop notifications for...</property> + <property name="xalign">0</property> </object> <packing> <property name="left_attach">0</property> <property name="top_attach">6</property> <property name="width">3</property> - <property name="height">1</property> </packing> </child> <child> @@ -295,8 +280,6 @@ <packing> <property name="left_attach">1</property> <property name="top_attach">7</property> - <property name="width">1</property> - <property name="height">1</property> </packing> </child> <child> @@ -312,8 +295,6 @@ <packing> <property name="left_attach">1</property> <property name="top_attach">9</property> - <property name="width">1</property> - <property name="height">1</property> </packing> </child> <child> @@ -329,8 +310,6 @@ <packing> <property name="left_attach">1</property> <property name="top_attach">8</property> - <property name="width">1</property> - <property name="height">1</property> </packing> </child> <child> @@ -347,7 +326,6 @@ <property name="left_attach">0</property> <property name="top_attach">0</property> <property name="width">3</property> - <property name="height">1</property> </packing> </child> <child> @@ -364,7 +342,6 @@ <property name="left_attach">0</property> <property name="top_attach">1</property> <property name="width">3</property> - <property name="height">1</property> </packing> </child> <child> @@ -381,7 +358,6 @@ <property name="left_attach">0</property> <property name="top_attach">4</property> <property name="width">3</property> - <property name="height">1</property> </packing> </child> <child> @@ -398,7 +374,6 @@ <property name="left_attach">0</property> <property name="top_attach">5</property> <property name="width">3</property> - <property name="height">1</property> </packing> </child> <child> @@ -415,7 +390,6 @@ <property name="left_attach">0</property> <property name="top_attach">3</property> <property name="width">3</property> - <property name="height">1</property> </packing> </child> <child> @@ -496,10 +470,10 @@ <object class="GtkLabel" id="label10"> <property name="visible">True</property> <property name="can_focus">False</property> - <property name="xalign">0</property> <property name="label" translatable="yes">Integrate Syncthing with filemanagers</property> <property name="use_underline">True</property> <property name="ellipsize">end</property> + <property name="xalign">0</property> <attributes> <attribute name="weight" value="bold"/> </attributes> @@ -507,8 +481,6 @@ <packing> <property name="left_attach">0</property> <property name="top_attach">0</property> - <property name="width">1</property> - <property name="height">1</property> </packing> </child> <child> @@ -526,8 +498,6 @@ <packing> <property name="left_attach">0</property> <property name="top_attach">1</property> - <property name="width">1</property> - <property name="height">1</property> </packing> </child> <child> @@ -544,8 +514,6 @@ <packing> <property name="left_attach">0</property> <property name="top_attach">2</property> - <property name="width">1</property> - <property name="height">1</property> </packing> </child> <child> @@ -562,8 +530,6 @@ <packing> <property name="left_attach">0</property> <property name="top_attach">3</property> - <property name="width">1</property> - <property name="height">1</property> </packing> </child> <child> @@ -572,10 +538,10 @@ <property name="sensitive">False</property> <property name="can_focus">False</property> <property name="margin_top">7</property> - <property name="xalign">0</property> <property name="label">Install blahblahblah to enable Nemo support Install blahblahblah to enable Nautilus support Install blahblahblah to enable Caja support</property> + <property name="xalign">0</property> <attributes> <attribute name="style" value="italic"/> </attributes> @@ -583,8 +549,6 @@ <packing> <property name="left_attach">0</property> <property name="top_attach">5</property> - <property name="width">1</property> - <property name="height">1</property> </packing> </child> <child> @@ -592,17 +556,15 @@ <property name="visible">True</property> <property name="can_focus">False</property> <property name="margin_top">8</property> - <property name="xalign">0</property> <property name="xpad">3</property> <property name="label" translatable="yes"><b>Note:</b> You may need to restart your filemanager after toggling integration.</property> <property name="use_markup">True</property> <property name="wrap">True</property> + <property name="xalign">0</property> </object> <packing> <property name="left_attach">0</property> <property name="top_attach">4</property> - <property name="width">1</property> - <property name="height">1</property> </packing> </child> </object> @@ -623,42 +585,216 @@ </packing> </child> <child> - <object class="GtkGrid" id="pageAdvanced"> + <object class="GtkGrid" id="pageDaemon"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="margin_left">5</property> <property name="margin_right">5</property> <property name="margin_top">5</property> + <property name="margin_bottom">5</property> <child> - <object class="GtkLabel" id="label3"> + <object class="GtkCheckButton" id="vst_autoupdate"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="no_show_all">True</property> + <property name="margin_top">10</property> + <property name="xalign">0</property> + <property name="draw_indicator">True</property> + <child> + <object class="GtkLabel" id="label7"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">Keep Syncthing binary up-to-date</property> + <property name="xalign">0</property> + <attributes> + <attribute name="weight" value="bold"/> + </attributes> + </object> + </child> + </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">9</property> + <property name="width">2</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="lblAutoupdate"> <property name="visible">True</property> <property name="can_focus">False</property> + <property name="no_show_all">True</property> + <property name="margin_left">10</property> + <property name="label" translatable="yes">If enabled, Syncthing-GTK will automatically check for new daemon releases and replace binary with latest version.</property> + <property name="use_markup">True</property> + <property name="wrap">True</property> <property name="xalign">0</property> - <property name="label" translatable="yes">Syncthing binary location</property> + </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">10</property> + <property name="width">2</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label12"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">Daemon process priority</property> <property name="use_underline">True</property> + <property name="xalign">0</property> <attributes> <attribute name="weight" value="bold"/> </attributes> </object> <packing> <property name="left_attach">0</property> - <property name="top_attach">0</property> + <property name="top_attach">3</property> <property name="width">2</property> - <property name="height">1</property> </packing> </child> <child> - <object class="GtkEntry" id="vsyncthing_binary"> + <object class="GtkComboBox" id="vdaemon_priority"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="model">lststrPriority</property> + <child> + <object class="GtkCellRendererText" id="cellrenderertext1"/> + <attributes> + <attribute name="text">1</attribute> + </attributes> + </child> + </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">4</property> + <property name="width">2</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label13"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="margin_bottom">10</property> + <property name="label" translatable="yes">Priority will be used only if "<i>start daemon in background</i>" option is checked on "<i>Interface</i>" page.</property> + <property name="use_markup">True</property> + <property name="wrap">True</property> + <property name="xalign">0</property> + </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">5</property> + <property name="width">2</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label14"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">Maximum number of CPU cores</property> + <property name="use_underline">True</property> + <property name="xalign">0</property> + <attributes> + <attribute name="weight" value="bold"/> + </attributes> + </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">6</property> + <property name="width">2</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label15"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="margin_bottom">10</property> + <property name="label" translatable="yes">Sets the maximum number of CPU cores for daemon to use. This value will be used only if "<i>start daemon in background</i>" option is checked on "<i>Interface</i>" page.</property> + <property name="use_markup">True</property> + <property name="wrap">True</property> + <property name="xalign">0</property> + </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">8</property> + <property name="width">2</property> + </packing> + </child> + <child> + <object class="GtkSpinButton" id="vmax_cpus"> <property name="visible">True</property> <property name="can_focus">True</property> - <property name="margin_right">5</property> - <signal name="changed" handler="cb_check_value" swapped="no"/> + <property name="margin_bottom">10</property> + <property name="text">1</property> + <property name="adjustment">adjMaxCPUs</property> + <property name="value">1</property> + <signal name="value-changed" handler="cb_vmax_cpus_value_changed" swapped="no"/> </object> <packing> <property name="left_attach">0</property> - <property name="top_attach">1</property> - <property name="width">1</property> - <property name="height">1</property> + <property name="top_attach">7</property> + <property name="width">2</property> + </packing> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> + </object> + <packing> + <property name="position">2</property> + <property name="tab_expand">True</property> + </packing> + </child> + <child type="tab"> + <object class="GtkLabel" id="label2"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">Daemon</property> + <property name="use_underline">True</property> + </object> + <packing> + <property name="position">2</property> + <property name="tab_expand">True</property> + <property name="tab_fill">False</property> + </packing> + </child> + <child> + <object class="GtkGrid" id="pageAdvanced"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="margin_left">5</property> + <property name="margin_right">5</property> + <property name="margin_top">5</property> + <property name="margin_bottom">5</property> + <child> + <object class="GtkLabel" id="label6"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="margin_bottom">10</property> + <property name="label" translatable="yes">This binary will be started when syncthing daemon is not running and "<i>start daemon in background</i>" option is checked on "<i>Interface</i>" page.</property> + <property name="use_markup">True</property> + <property name="wrap">True</property> + <property name="xalign">0</property> + </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">4</property> + <property name="width">2</property> </packing> </child> <child> @@ -667,216 +803,140 @@ <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">True</property> - <property name="margin_left">5</property> <property name="use_underline">True</property> <property name="yalign">0.51999998092651367</property> <signal name="clicked" handler="cb_btBrowse_clicked" swapped="no"/> </object> <packing> <property name="left_attach">1</property> - <property name="top_attach">1</property> - <property name="width">1</property> - <property name="height">1</property> + <property name="top_attach">3</property> </packing> </child> <child> - <object class="GtkLabel" id="label6"> + <object class="GtkLabel" id="label3"> <property name="visible">True</property> <property name="can_focus">False</property> - <property name="margin_left">10</property> - <property name="margin_bottom">10</property> + <property name="label" translatable="yes">Syncthing binary location</property> + <property name="use_underline">True</property> <property name="xalign">0</property> - <property name="label" translatable="yes">This binary will be started when syncthing daemon is not running and "<i>start daemon in background</i>" option is checked on "<i>Interface</i>" page.</property> - <property name="use_markup">True</property> - <property name="wrap">True</property> + <attributes> + <attribute name="weight" value="bold"/> + </attributes> </object> <packing> <property name="left_attach">0</property> <property name="top_attach">2</property> <property name="width">2</property> - <property name="height">1</property> </packing> </child> <child> - <object class="GtkCheckButton" id="vst_autoupdate"> + <object class="GtkEntry" id="vsyncthing_binary"> <property name="visible">True</property> <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="no_show_all">True</property> + <property name="hexpand">True</property> + <signal name="changed" handler="cb_check_value" swapped="no"/> + </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">3</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label16"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">Daemon arguments and variables</property> + <property name="use_underline">True</property> <property name="xalign">0</property> - <property name="draw_indicator">True</property> - <child> - <object class="GtkLabel" id="label7"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="margin_top">10</property> - <property name="xalign">0</property> - <property name="label" translatable="yes">Keep Syncthing binary up-to-date</property> - <attributes> - <attribute name="weight" value="bold"/> - </attributes> - </object> - </child> + <attributes> + <attribute name="weight" value="bold"/> + </attributes> </object> <packing> <property name="left_attach">0</property> - <property name="top_attach">4</property> + <property name="top_attach">5</property> <property name="width">2</property> - <property name="height">1</property> </packing> </child> <child> - <object class="GtkLabel" id="lblAutoupdate"> + <object class="GtkEntry" id="vsyncthing_arguments"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="hexpand">True</property> + </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">6</property> + <property name="width">2</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label17"> <property name="visible">True</property> <property name="can_focus">False</property> - <property name="no_show_all">True</property> - <property name="margin_left">10</property> - <property name="xalign">0</property> - <property name="label" translatable="yes">If enabled, Syncthing-GTK will automatically check for new daemon releases and replace binary with latest version.</property> + <property name="margin_bottom">10</property> + <property name="label" translatable="yes">Space-separated list of arguments and environment variables passed when starting above binary + +Use <i>VARIABLE="value"</i> to set variable and <i>-argument="value"</i> (with dash) for argument. + +If you need to pass commandline to different command (such as logger or ionice), separate prefixed arguments with exclamation mark "!" + +Example: + <i>STTRACE="all" logger -t /var/log/syncthing.log ! -logflags=10</i></property> <property name="use_markup">True</property> <property name="wrap">True</property> + <property name="xalign">0</property> </object> <packing> <property name="left_attach">0</property> - <property name="top_attach">5</property> + <property name="top_attach">7</property> <property name="width">2</property> - <property name="height">1</property> </packing> </child> <child> - <object class="GtkGrid" id="grid1"> + <object class="GtkLabel" id="label18"> <property name="visible">True</property> <property name="can_focus">False</property> - <child> - <object class="GtkLabel" id="label12"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="xalign">0</property> - <property name="label" translatable="yes">Daemon process priority</property> - <property name="use_underline">True</property> - <attributes> - <attribute name="weight" value="bold"/> - </attributes> - </object> - <packing> - <property name="left_attach">0</property> - <property name="top_attach">0</property> - <property name="width">2</property> - <property name="height">1</property> - </packing> - </child> - <child> - <object class="GtkComboBox" id="vdaemon_priority"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="hexpand">True</property> - <property name="model">lststrPriority</property> - <child> - <object class="GtkCellRendererText" id="cellrenderertext1"/> - <attributes> - <attribute name="text">1</attribute> - </attributes> - </child> - </object> - <packing> - <property name="left_attach">0</property> - <property name="top_attach">1</property> - <property name="width">2</property> - <property name="height">1</property> - </packing> - </child> - <child> - <object class="GtkLabel" id="label13"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="margin_bottom">10</property> - <property name="xalign">0</property> - <property name="label" translatable="yes">Sets the maximum number of CPU cores for daemon to use. This value will be used only if "<i>start daemon in background</i>" option is checked on "<i>Interface</i>" page.</property> - <property name="use_markup">True</property> - <property name="wrap">True</property> - </object> - <packing> - <property name="left_attach">0</property> - <property name="top_attach">5</property> - <property name="width">2</property> - <property name="height">1</property> - </packing> - </child> - <child> - <object class="GtkSpinButton" id="vmax_cpus"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="text">1</property> - <property name="adjustment">adjMaxCPUs</property> - <property name="value">1</property> - <signal name="value-changed" handler="cb_vmax_cpus_value_changed" swapped="no"/> - </object> - <packing> - <property name="left_attach">0</property> - <property name="top_attach">4</property> - <property name="width">2</property> - <property name="height">1</property> - </packing> - </child> - <child> - <object class="GtkLabel" id="label8"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="xalign">0</property> - <property name="label" translatable="yes">Maximum number of CPU cores</property> - <property name="use_underline">True</property> - <attributes> - <attribute name="weight" value="bold"/> - </attributes> - </object> - <packing> - <property name="left_attach">0</property> - <property name="top_attach">3</property> - <property name="width">2</property> - <property name="height">1</property> - </packing> - </child> - <child> - <object class="GtkLabel" id="label14"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="margin_bottom">10</property> - <property name="xalign">0</property> - <property name="label" translatable="yes">Priority will be used only if "<i>start daemon in background</i>" option is checked on "<i>Interface</i>" page.</property> - <property name="use_markup">True</property> - <property name="wrap">True</property> - </object> - <packing> - <property name="left_attach">0</property> - <property name="top_attach">2</property> - <property name="width">2</property> - <property name="height">1</property> - </packing> - </child> + <property name="margin_left">5</property> + <property name="margin_right">5</property> + <property name="label" translatable="yes"><b>Warning:</b> Changing settings on this page may prevent you from using Syncthing-GTK</property> + <property name="use_markup">True</property> </object> <packing> <property name="left_attach">0</property> - <property name="top_attach">3</property> + <property name="top_attach">0</property> + <property name="width">2</property> + </packing> + </child> + <child> + <object class="GtkSeparator" id="separator1"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="margin_left">5</property> + <property name="margin_right">5</property> + <property name="margin_top">5</property> + <property name="margin_bottom">5</property> + </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">1</property> <property name="width">2</property> - <property name="height">1</property> </packing> </child> </object> <packing> - <property name="position">2</property> - <property name="tab_expand">True</property> + <property name="position">3</property> </packing> </child> <child type="tab"> - <object class="GtkLabel" id="label2"> + <object class="GtkLabel" id="label8"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="label" translatable="yes">_Advanced</property> <property name="use_underline">True</property> </object> <packing> - <property name="position">2</property> - <property name="tab_expand">True</property> + <property name="position">3</property> <property name="tab_fill">False</property> </packing> </child>
