[Pkg-privacy-commits] [vidalia] 83/160: Imported Upstream version 0.2.15

Ximin Luo infinity0 at moszumanska.debian.org
Sat Aug 22 13:14:34 UTC 2015


This is an automated email from the git hooks/post-receive script.

infinity0 pushed a commit to branch master
in repository vidalia.

commit 4031b6652bb394c2aa2a0d0681c2b7abbd4e83c8
Author: Dererk <dererk at debian.org>
Date:   Tue Nov 15 17:10:49 2011 -0300

    Imported Upstream version 0.2.15
---
 CHANGELOG                                 | 18 ++++++
 CMakeLists.txt                            |  2 +-
 changes/bug2188                           |  2 +
 changes/bug2644                           |  3 +
 changes/bug3342                           |  2 +
 changes/bug3759                           |  3 +
 changes/bug3843                           |  2 +
 changes/feat2163                          |  2 +
 src/vidalia/CMakeLists.txt                |  6 ++
 src/vidalia/HelperProcess.cpp             | 17 ++++++
 src/vidalia/HelperProcess.h               |  2 +
 src/vidalia/MacOSXBundleInfo.plist.in     | 38 ++++++++++++
 src/vidalia/MainWindow.cpp                | 44 ++++++++++++--
 src/vidalia/bwgraph/GraphFrame.cpp        | 45 +++++++++++---
 src/vidalia/bwgraph/GraphFrame.h          |  4 ++
 src/vidalia/config/AdvancedPage.cpp       | 16 ++++-
 src/vidalia/config/AppearancePage.cpp     | 28 +++++++++
 src/vidalia/config/AppearancePage.ui      | 55 +++++++++++++++++
 src/vidalia/config/ServerPage.cpp         | 99 +++++++++++++++++++------------
 src/vidalia/config/ServerPage.ui          | 17 ++++--
 src/vidalia/config/ServerSettings.cpp     | 18 +++++-
 src/vidalia/config/ServerSettings.h       |  6 ++
 src/vidalia/config/VidaliaSettings.cpp    | 34 +++++++++++
 src/vidalia/config/VidaliaSettings.h      | 14 +++++
 src/vidalia/i18n/po/templates/vidalia.pot | 60 +++++++++----------
 src/vidalia/log/StatusEventItem.cpp       | 12 ++--
 src/vidalia/log/StatusEventItem.h         |  6 +-
 src/vidalia/log/StatusEventWidget.cpp     |  4 +-
 28 files changed, 459 insertions(+), 100 deletions(-)

diff --git a/CHANGELOG b/CHANGELOG
index f39003e..23c1c23 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,21 @@
+0.2.15  07-Oct-2011
+  o Draw the bandwidth graph curves based on the local maximum, not
+    the global maximum. Fixes bug 2188.
+  o Add an option for setting up a non-exit relay to the Sharing
+    configuration panel. This is meant to clarify what an exit policy
+    and an exit relay are. Resolves bug 2644.
+  o Display time statistics for bridges in UTC time, rather than local
+    time. Fixes bug 3342.
+  o Change the parameter for ordering the entries in the Basic Log
+    list from currentTime to currentDateTime to avoid missplacing
+    entries from different days.
+  o Check the tor version and that settings are sanitized before
+    trying to use the port autoconfiguration feature. Fixes bug 3843.
+  o Provide a way to hide Dock or System Tray icons in OSX. Resolves
+    ticket 2163.
+  o Make new processes appear at front when they are started (OSX
+    specific).
+
 0.2.14  26-Aug-2011
   o Make the AutoPort setting default to false, so that it doesn't
     break backwards compatibility for people that aren't using Vidalia
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 18f2575..9303d6b 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -13,7 +13,7 @@
 
 set(VER_MAJOR   "0")
 set(VER_MINOR   "2")
-set(VER_PATCH   "14")
+set(VER_PATCH   "15")
 set(VERSION     "${VER_MAJOR}.${VER_MINOR}.${VER_PATCH}")
 message(STATUS  "Configuring Vidalia ${VERSION}")
 project(Vidalia)
diff --git a/changes/bug2188 b/changes/bug2188
new file mode 100644
index 0000000..9925519
--- /dev/null
+++ b/changes/bug2188
@@ -0,0 +1,2 @@
+  o Draw the bandwidth graph curves based on the local maximum, not
+    the global maximum. Fixes bug 2188.
\ No newline at end of file
diff --git a/changes/bug2644 b/changes/bug2644
new file mode 100644
index 0000000..258b13c
--- /dev/null
+++ b/changes/bug2644
@@ -0,0 +1,3 @@
+  o Add an option for setting up a non-exit relay to the Sharing configuration
+    panel. This is meant to clarify what an exit policy and an exit relay are.
+    Resolves bug 2644.
\ No newline at end of file
diff --git a/changes/bug3342 b/changes/bug3342
new file mode 100644
index 0000000..3b026f5
--- /dev/null
+++ b/changes/bug3342
@@ -0,0 +1,2 @@
+  o Display time statistics for bridges in UTC time, rather than local
+    time. Fixes bug 3342.
\ No newline at end of file
diff --git a/changes/bug3759 b/changes/bug3759
new file mode 100644
index 0000000..b7dc074
--- /dev/null
+++ b/changes/bug3759
@@ -0,0 +1,3 @@
+  o Change the parameter for ordering the entries in the Basic Log
+    list from currentTime to currentDateTime to avoid missplacing
+    entries from different days.
\ No newline at end of file
diff --git a/changes/bug3843 b/changes/bug3843
new file mode 100644
index 0000000..6ccd062
--- /dev/null
+++ b/changes/bug3843
@@ -0,0 +1,2 @@
+  o Check tor version and that settings are sanitized before trying to
+    use the port autoconfiguration feature. Fixes bug 3843.
\ No newline at end of file
diff --git a/changes/feat2163 b/changes/feat2163
new file mode 100644
index 0000000..058714d
--- /dev/null
+++ b/changes/feat2163
@@ -0,0 +1,2 @@
+  o Provide a way to hide Dock or System Tray icons in OSX. Resolves
+    ticket 2163.
\ No newline at end of file
diff --git a/src/vidalia/CMakeLists.txt b/src/vidalia/CMakeLists.txt
index 08fb510..52ba510 100644
--- a/src/vidalia/CMakeLists.txt
+++ b/src/vidalia/CMakeLists.txt
@@ -361,6 +361,12 @@ if (APPLE)
   set(CMAKE_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX}/)
   add_executable(${vidalia_BIN} MACOSX_BUNDLE ${vidalia_SRCS})
 
+  ## Specify location of custom Info.plist file 
+  configure_file(${CMAKE_CURRENT_SOURCE_DIR}/MacOSXBundleInfo.plist.in
+                 ${CMAKE_CURRENT_BINARY_DIR}/MacOSXBundleInfo.plist)
+  set_target_properties(${vidalia_BIN} PROPERTIES MACOSX_BUNDLE_INFO_PLIST 
+                        ${CMAKE_CURRENT_BINARY_DIR}/MacOSXBundleInfo.plist)
+
   ## Get the location of the app bundle for the current configuration
   get_target_property(VIDALIA_EXECUTABLE ${vidalia_BIN} LOCATION)
   get_filename_component(MACOSX_BUNDLE_DIRECTORY ${VIDALIA_EXECUTABLE} PATH)
diff --git a/src/vidalia/HelperProcess.cpp b/src/vidalia/HelperProcess.cpp
index 0abc848..b80f151 100644
--- a/src/vidalia/HelperProcess.cpp
+++ b/src/vidalia/HelperProcess.cpp
@@ -45,6 +45,9 @@
 #include <QString>
 #include <QFileInfo>
 
+#ifdef Q_WS_MAC 
+#include <Carbon/Carbon.h> 
+#endif 
 
 /** Default constructor */
 HelperProcess::HelperProcess(QObject *parent)
@@ -131,3 +134,17 @@ HelperProcess::isDone() const
   return state() == NotRunning;
 }
 
+void
+HelperProcess::toForeground()
+{
+#if defined(Q_WS_MAC) 
+  ProcessSerialNumber psn;
+  OSStatus st;
+
+  do {
+    st = GetProcessForPID(pid(), &psn);
+  } while(st == -600);
+
+  SetFrontProcess(&psn);
+#endif 
+}
diff --git a/src/vidalia/HelperProcess.h b/src/vidalia/HelperProcess.h
index cf2b234..62aef98 100644
--- a/src/vidalia/HelperProcess.h
+++ b/src/vidalia/HelperProcess.h
@@ -58,6 +58,8 @@ public:
   void start(const QString &app, const QStringList &args);
   /** Returns true iff process is not running. */
   bool isDone() const;
+  /** Bring process to foreground */
+  void toForeground();
 
 signals:
   /** Invoked when start() fails. */
diff --git a/src/vidalia/MacOSXBundleInfo.plist.in b/src/vidalia/MacOSXBundleInfo.plist.in
new file mode 100644
index 0000000..3b5bfe0
--- /dev/null
+++ b/src/vidalia/MacOSXBundleInfo.plist.in
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>CFBundleDevelopmentRegion</key>
+	<string>English</string>
+	<key>CFBundleExecutable</key>
+	<string>${MACOSX_BUNDLE_EXECUTABLE_NAME}</string>
+	<key>CFBundleGetInfoString</key>
+	<string>${MACOSX_BUNDLE_INFO_STRING}</string>
+	<key>CFBundleIconFile</key>
+	<string>${MACOSX_BUNDLE_ICON_FILE}</string>
+	<key>CFBundleIdentifier</key>
+	<string>${MACOSX_BUNDLE_GUI_IDENTIFIER}</string>
+	<key>CFBundleInfoDictionaryVersion</key>
+	<string>6.0</string>
+	<key>CFBundleLongVersionString</key>
+	<string>${MACOSX_BUNDLE_LONG_VERSION_STRING}</string>
+	<key>CFBundleName</key>
+	<string>${MACOSX_BUNDLE_BUNDLE_NAME}</string>
+	<key>CFBundlePackageType</key>
+	<string>APPL</string>
+	<key>CFBundleShortVersionString</key>
+	<string>${MACOSX_BUNDLE_SHORT_VERSION_STRING}</string>
+	<key>CFBundleSignature</key>
+	<string>????</string>
+	<key>CFBundleVersion</key>
+	<string>${MACOSX_BUNDLE_BUNDLE_VERSION}</string>
+	<key>CSResourcesFileMapped</key>
+	<true/>
+	<key>LSRequiresCarbon</key>
+	<true/>
+	<key>NSHumanReadableCopyright</key>
+	<string>${MACOSX_BUNDLE_COPYRIGHT}</string>
+        <key>LSUIElement</key>
+        <string>1</string>
+</dict>
+</plist>
diff --git a/src/vidalia/MainWindow.cpp b/src/vidalia/MainWindow.cpp
index b159d2e..bbd86d2 100644
--- a/src/vidalia/MainWindow.cpp
+++ b/src/vidalia/MainWindow.cpp
@@ -39,6 +39,10 @@
 #include <QTimer>
 #include <QTextStream>
 
+#ifdef Q_WS_MAC
+#include <Carbon/Carbon.h>
+#endif
+
 #define IMG_BWGRAPH        ":/images/16x16/utilities-system-monitor.png"
 #define IMG_CONTROL_PANEL  ":/images/16x16/system-run.png"
 #define IMG_MESSAGELOG     ":/images/16x16/format-justify-fill.png"
@@ -215,6 +219,16 @@ MainWindow::MainWindow()
     show(); 
   /* Optimistically hope that the tray icon gets added. */
   _trayIcon.show();
+
+#if defined(Q_WS_MAC)
+  /* Display OSX dock icon if icon preference is not set to "Tray Only" */
+  if (settings.getIconPref() != VidaliaSettings::Tray) {
+      ProcessSerialNumber psn = { 0, kCurrentProcess };
+      TransformProcessType(&psn, kProcessTransformToForegroundApplication);
+  }
+  /* Vidalia launched in background (LSUIElement=true). Bring to foreground. */
+  VidaliaWindow::setVisible(true);
+#endif
 }
 
 /** Destructor. */
@@ -572,9 +586,15 @@ void
 MainWindow::setTrayIcon(const QString &iconFile)
 {
 #if defined(Q_WS_MAC)
+  VidaliaSettings settings;
   QApplication::setWindowIcon(QPixmap(iconFile));
-#endif
+  /* only display tray icon if icon preference is not set to "Dock Only" */
+  if (settings.getIconPref() != VidaliaSettings::Dock)
+    _trayIcon.setIcon(QIcon(iconFile));
+#else
+  /* always display tray icon for other platforms */
   _trayIcon.setIcon(QIcon(iconFile));
+#endif
 }
 
 /** Respond to a double-click on the tray icon by opening the Control Panel
@@ -628,6 +648,7 @@ MainWindow::launchBrowserFromDirectory()
 
   /* Launch the browser */
   _browserProcess->start(browserExecutable, commandLine);
+  _browserProcess->toForeground();
 }
 
 /** Starts the web browser and IM client, if appropriately configured */
@@ -645,6 +666,7 @@ MainWindow::startSubprocesses()
     /* BrowserDirectory is not set, but BrowserExecutable is; use this */
     _browserProcess->setEnvironment(updateBrowserEnv());
     _browserProcess->start(subprocess, QStringList());
+    _browserProcess->toForeground();
   }
 
   /* Launch the IM client */
@@ -995,6 +1017,14 @@ MainWindow::start()
 
   updateTorStatus(Starting);
 
+  // Disable autoconfiguration if there are missing config data
+  if(settings.autoControlPort()) {
+    if(settings.getDataDirectory().isEmpty()) {
+      vWarn("Disabling ControlPort autoconfiguration. DataDirectory is empty!");
+      settings.setAutoControlPort(false);
+    }
+  }
+
   /* Check if Tor is already running separately */
   if(settings.getControlMethod() == ControlMethod::Port) {
     if(!settings.autoControlPort() && net_test_connect(settings.getControlAddress(),
@@ -1155,9 +1185,15 @@ MainWindow::started()
 
     if(tries >= maxtries) {
       vWarn("Couldn't read port.conf file");
-      connectFailed(QString("Vidalia can't find out how to talk to Tor because it can't access this file: %1\n\nHere's the last error message:\n %2")
-		    .arg(file.fileName())
-		    .arg(file.errorString()));
+      if(_torControl->isRunning()) {
+        connectFailed(tr("Vidalia can't find out how to talk to Tor because it can't access this file: %1\n\nHere's the last error message:\n%2")
+                      .arg(file.fileName())
+                      .arg(file.errorString()));
+      } else {
+        vWarn("Tor isn't running!");
+        connectFailed(tr("It seems Tor has stopped running since Vidalia started it.\n\nSee the Advanced Message Log for more information."));
+      }
+
       return;
     }
 
diff --git a/src/vidalia/bwgraph/GraphFrame.cpp b/src/vidalia/bwgraph/GraphFrame.cpp
index c9537a0..c5d3f60 100644
--- a/src/vidalia/bwgraph/GraphFrame.cpp
+++ b/src/vidalia/bwgraph/GraphFrame.cpp
@@ -15,7 +15,7 @@
 
 #include "GraphFrame.h"
 
-#include <QtGlobal>
+#include <QtGui>
 
 
 /** Default contructor */
@@ -31,7 +31,8 @@ GraphFrame::GraphFrame(QWidget *parent)
   /* Initialize graph values */
   _recvData->prepend(0);
   _sendData->prepend(0);
-  _maxPoints = getNumPoints();  
+  _maxPoints = getNumPoints();
+  _maxPosition = 0;
   _showRecv = true;
   _showSend = true;
   _maxValue = MIN_SCALE;
@@ -51,9 +52,7 @@ GraphFrame::~GraphFrame()
 int
 GraphFrame::getNumPoints()
 {
-  QDesktopWidget *desktop = QApplication::desktop();
-  int width = desktop->width();
-  return width;
+  return size().width() - _scaleWidth;
 }
 
 /** Adds new data points to the graph. */
@@ -66,6 +65,18 @@ GraphFrame::addPoints(qreal recv, qreal send)
     _recvData->removeLast();
   }
 
+  /* Update the displayed maximum */
+  if (_maxPosition >= _maxPoints) {
+    _maxValue = MIN_SCALE;
+    foreach(qreal send, *_sendData)
+      if(send > _maxValue)
+        _maxValue = send;
+    foreach(qreal recv, *_recvData)
+      if(recv > _maxValue)
+        _maxValue = recv;
+    _maxPosition = 0;
+  }
+
   /* Add the points to their respective lists */
   _sendData->prepend(send);
   _recvData->prepend(recv);
@@ -74,9 +85,23 @@ GraphFrame::addPoints(qreal recv, qreal send)
   _totalSend += send;
   _totalRecv += recv;
   
+  bool maxUpdated = false;
   /* Check for a new maximum value */
-  if (send > _maxValue) _maxValue = send;
-  if (recv > _maxValue) _maxValue = recv;
+  if (send > _maxValue) {
+    _maxValue = send;
+    maxUpdated = true;
+  }
+
+  if (recv > _maxValue) {
+    _maxValue = recv;
+    maxUpdated = true;
+  }
+
+  if (maxUpdated) {
+    _maxPosition = 0;
+  } else {
+    _maxPosition++;
+  }
 
   this->update();
 }
@@ -318,3 +343,9 @@ GraphFrame::paintScale()
   _painter->drawLine(_scaleWidth, top, _scaleWidth, bottom);
 }
 
+void
+GraphFrame::resizeEvent(QResizeEvent *ev)
+{
+  _maxPoints = ev->size().width() - _scaleWidth;
+  _maxPoints /= SCROLL_STEP;
+}
diff --git a/src/vidalia/bwgraph/GraphFrame.h b/src/vidalia/bwgraph/GraphFrame.h
index 4819396..8e29cc2 100644
--- a/src/vidalia/bwgraph/GraphFrame.h
+++ b/src/vidalia/bwgraph/GraphFrame.h
@@ -89,6 +89,8 @@ private:
   /** Paints an integral using the supplied data. */
   void paintIntegral(QVector<QPointF> points, QColor color, qreal alpha = 1.0);
 
+  void resizeEvent(QResizeEvent *ev);
+
   /** Style with which the bandwidth data will be graphed. */
   GraphStyle _graphStyle;
   /** A QPainter object that handles drawing the various graph elements. */
@@ -101,6 +103,8 @@ private:
   QRect _rec;
   /** The maximum data value plotted. */
   qreal _maxValue;
+  /** The position of the local maximum in the displayed bandwidth */
+  int _maxPosition;
   /** The maximum number of points to store. */
   int _maxPoints;
   /** The total data sent/recv. */
diff --git a/src/vidalia/config/AdvancedPage.cpp b/src/vidalia/config/AdvancedPage.cpp
index 12842bc..865516d 100644
--- a/src/vidalia/config/AdvancedPage.cpp
+++ b/src/vidalia/config/AdvancedPage.cpp
@@ -121,6 +121,16 @@ AdvancedPage::save(QString &errmsg)
   QHostAddress controlAddress(ui.lineControlAddress->text());
   QString path(ui.lineSocketPath->text());
 
+  if(ui.chkAuto->isChecked()) {
+    if(ui.lineTorDataDirectory->text().isEmpty()) {
+      errmsg = tr("You've checked the autoconfiguration option for the ControlPort, but"
+                  " provided no Data Directory. Please add one, or uncheck the"
+                  " \"Configure ControlPort automatically\" option.");
+      return false;
+    }
+    _settings->setAutoControlPort(true);
+  }
+
   /* Validate the control settings */
   if(ui.rdoControlPort->isChecked()) {
     if (controlAddress.isNull()) {
@@ -190,7 +200,6 @@ AdvancedPage::save(QString &errmsg)
     _settings->setControlPort(ui.lineControlPort->text().toUShort());
   }
   _settings->setSocketPath(ui.lineSocketPath->text());
-  _settings->setAutoControlPort(ui.chkAuto->isChecked());
 
   _settings->setAuthenticationMethod(authMethod);
   _settings->setUseRandomPassword(ui.chkRandomPassword->isChecked());
@@ -233,6 +242,11 @@ AdvancedPage::load()
   ui.chkUseService->setChecked(s.isInstalled());
 #endif
 #endif
+
+  if(Vidalia::torControl()->getTorVersion() < 0x2021a) { // 0x2021a == 0.2.2.26
+    ui.chkAuto->setChecked(false);
+    ui.chkAuto->setVisible(false);
+  }
 }
 
 /** Called when the user selects a different authentication method from the
diff --git a/src/vidalia/config/AppearancePage.cpp b/src/vidalia/config/AppearancePage.cpp
index 11939c3..95998e9 100644
--- a/src/vidalia/config/AppearancePage.cpp
+++ b/src/vidalia/config/AppearancePage.cpp
@@ -72,6 +72,21 @@ AppearancePage::save(QString &errmsg)
   /* Set the new style */
   Vidalia::setStyle(ui.cmboStyle->currentText());
   _settings->setInterfaceStyle(ui.cmboStyle->currentText());
+
+#if defined(Q_WS_MAC)
+  /* Save new icon preference */
+  if(ui.rdoIconPrefDock->isChecked()) {
+    _settings->setIconPref(VidaliaSettings::Dock);
+  }
+  else if(ui.rdoIconPrefTray->isChecked()) {
+    _settings->setIconPref(VidaliaSettings::Tray);
+  }
+  else {
+    /* default setting */
+    _settings->setIconPref(VidaliaSettings::Both);
+  }
+#endif
+
   return true;
 }
   
@@ -84,5 +99,18 @@ AppearancePage::load()
   
   index = ui.cmboStyle->findData(Vidalia::style().toLower());
   ui.cmboStyle->setCurrentIndex(index);
+
+#if defined(Q_WS_MAC)
+  /* set current icon preference */
+  ui.rdoIconPrefBoth->setChecked(_settings->getIconPref() == VidaliaSettings::Both);
+  ui.rdoIconPrefTray->setChecked(_settings->getIconPref() == VidaliaSettings::Tray);
+  ui.rdoIconPrefDock->setChecked(_settings->getIconPref() == VidaliaSettings::Dock);
+#else
+  /* hide preference on non-OSX platforms */
+  ui.grpIconPref->setVisible(false);
+  ui.rdoIconPrefBoth->setVisible(false);
+  ui.rdoIconPrefTray->setVisible(false);
+  ui.rdoIconPrefDock->setVisible(false);
+#endif
 }
 
diff --git a/src/vidalia/config/AppearancePage.ui b/src/vidalia/config/AppearancePage.ui
index 8672af3..ef7ef5f 100644
--- a/src/vidalia/config/AppearancePage.ui
+++ b/src/vidalia/config/AppearancePage.ui
@@ -111,6 +111,61 @@
     </widget>
    </item>
    <item>
+    <widget class="QGroupBox" name="grpIconPref">
+     <property name="minimumSize">
+      <size>
+       <width>0</width>
+       <height>100</height>
+      </size>
+     </property>
+     <property name="contextMenuPolicy">
+      <enum>Qt::PreventContextMenu</enum>
+     </property>
+     <property name="title">
+      <string>System Icon Preferences (changes will take effect when you restart Vidalia)</string>
+     </property>
+     <widget class="QRadioButton" name="rdoIconPrefBoth">
+      <property name="geometry">
+       <rect>
+        <x>20</x>
+        <y>30</y>
+        <width>441</width>
+        <height>20</height>
+       </rect>
+      </property>
+      <property name="text">
+       <string>Show the Tray Icon and Dock Icon (default)</string>
+      </property>
+     </widget>
+     <widget class="QRadioButton" name="rdoIconPrefDock">
+      <property name="geometry">
+       <rect>
+        <x>20</x>
+        <y>70</y>
+        <width>441</width>
+        <height>20</height>
+       </rect>
+      </property>
+      <property name="text">
+       <string>Hide the Tray Icon</string>
+      </property>
+     </widget>
+     <widget class="QRadioButton" name="rdoIconPrefTray">
+      <property name="geometry">
+       <rect>
+        <x>20</x>
+        <y>50</y>
+        <width>441</width>
+        <height>20</height>
+       </rect>
+      </property>
+      <property name="text">
+       <string>Hide the Dock Icon</string>
+      </property>
+     </widget>
+    </widget>
+   </item>
+   <item>
     <spacer>
      <property name="orientation" >
       <enum>Qt::Vertical</enum>
diff --git a/src/vidalia/config/ServerPage.cpp b/src/vidalia/config/ServerPage.cpp
index 5e8e2b6..28308d8 100644
--- a/src/vidalia/config/ServerPage.cpp
+++ b/src/vidalia/config/ServerPage.cpp
@@ -89,6 +89,8 @@ ServerPage::ServerPage(QWidget *parent)
                          this, SLOT(customRateChanged()));
   connect(ui.rdoClientMode, SIGNAL(toggled(bool)),
                       this, SLOT(serverModeChanged(bool)));
+  connect(ui.rdoNonExitMode, SIGNAL(toggled(bool)),
+                       this, SLOT(serverModeChanged(bool)));
   connect(ui.rdoServerMode, SIGNAL(toggled(bool)),
                       this, SLOT(serverModeChanged(bool)));
   connect(ui.rdoBridgeMode, SIGNAL(toggled(bool)),
@@ -220,10 +222,12 @@ ServerPage::serverModeChanged(bool enabled)
 {
   Q_UNUSED(enabled);
   bool bridgeEnabled = ui.rdoBridgeMode->isChecked();
+  bool relayEnabled = ui.rdoServerMode->isChecked() ||
+                      ui.rdoNonExitMode->isChecked();
   
   /* Show the tab menu only if the user is running a normal relay or a bridge
    * relay. */
-  ui.tabsMenu->setVisible(ui.rdoServerMode->isChecked() || bridgeEnabled);
+  ui.tabsMenu->setVisible(relayEnabled || bridgeEnabled);
   
   /* Disable the Exit Policies tab when bridge relay mode is selected */
   ui.tabsMenu->setTabEnabled(2, !bridgeEnabled);
@@ -254,6 +258,10 @@ ServerPage::serverModeChanged(bool enabled)
     ui.lblDirPort->setEnabled(!bridgeEnabled);
     ui.lineDirPort->setEnabled(!bridgeEnabled);
   }
+
+  /* Disable the Exit Policies tab when bridge or non-exit relay mode is 
+   * selected */
+  ui.tabsMenu->setTabEnabled(2, !bridgeEnabled and !ui.rdoNonExitMode->isChecked());
 }
 
 /** Returns true if the user has changed their server settings since the
@@ -287,8 +295,10 @@ ServerPage::save(QString &errmsg)
 {
   /* Force the bandwidth rate limits to validate */
   customRateChanged();
-  
-  if (ui.rdoServerMode->isChecked() || ui.rdoBridgeMode->isChecked()) {
+
+  if (ui.rdoServerMode->isChecked() || 
+      ui.rdoNonExitMode->isChecked() ||
+      ui.rdoBridgeMode->isChecked()) {
     /* A server must have an ORPort and a nickname */
     if (ui.lineServerPort->text().isEmpty() ||
         ui.lineServerNickname->text().isEmpty()) {
@@ -307,7 +317,9 @@ ServerPage::save(QString &errmsg)
   /* "Server" is enabled whether we're a bridge or normal relay. "Bridge" is
    * only enabled if we're a bridge (obviously). */
   _settings->setServerEnabled(ui.rdoServerMode->isChecked()
-                                || ui.rdoBridgeMode->isChecked());
+                              || ui.rdoNonExitMode->isChecked()
+                              || ui.rdoBridgeMode->isChecked());
+  _settings->setNonExitEnabled(ui.rdoNonExitMode->isChecked());
   _settings->setBridgeEnabled(ui.rdoBridgeMode->isChecked());
   if (ui.rdoBridgeMode->isChecked())
     _settings->setPublishServerDescriptor(ui.chkPublishBridgeAddress->isChecked());
@@ -338,6 +350,8 @@ ServerPage::load()
 {
   if (_settings->isBridgeEnabled())
     ui.rdoBridgeMode->setChecked(true);
+  else if (_settings->isNonExitEnabled())
+    ui.rdoNonExitMode->setChecked(true);
   else if (_settings->isServerEnabled())
     ui.rdoServerMode->setChecked(true);
   else
@@ -478,41 +492,47 @@ ServerPage::loadExitPolicies()
 void
 ServerPage::saveExitPolicies()
 {
-  ExitPolicy exitPolicy;
-  bool rejectUnchecked = ui.chkMisc->isChecked();
-  
-  /* If misc is checked, then reject unchecked items and leave the default exit
-   * policy alone. Else, accept only checked items and end with reject *:*,
-   * replacing the default exit policy. */
-  if (ui.chkWebsites->isChecked() && !rejectUnchecked) {
-    exitPolicy.addAcceptedPorts(PORTS_HTTP);
-  } else if (!ui.chkWebsites->isChecked() && rejectUnchecked) {
-    exitPolicy.addRejectedPorts(PORTS_HTTP);
-  }
-  if (ui.chkSecWebsites->isChecked() && !rejectUnchecked) {
-    exitPolicy.addAcceptedPorts(PORTS_HTTPS);
-  } else if (!ui.chkSecWebsites->isChecked() && rejectUnchecked) {
-    exitPolicy.addRejectedPorts(PORTS_HTTPS);
-  }
-  if (ui.chkMail->isChecked() && !rejectUnchecked) {
-    exitPolicy.addAcceptedPorts(PORTS_MAIL);
-  } else if (!ui.chkMail->isChecked() && rejectUnchecked) {
-    exitPolicy.addRejectedPorts(PORTS_MAIL);
-  }
-  if (ui.chkIRC->isChecked() && !rejectUnchecked) {
-    exitPolicy.addAcceptedPorts(PORTS_IRC);
-  } else if (!ui.chkIRC->isChecked() && rejectUnchecked) {
-    exitPolicy.addRejectedPorts(PORTS_IRC);
-  }
-  if (ui.chkIM->isChecked() && !rejectUnchecked) {
-    exitPolicy.addAcceptedPorts(PORTS_IM);
-  } else if (!ui.chkIM->isChecked() && rejectUnchecked) {
-    exitPolicy.addRejectedPorts(PORTS_IM);
-  }
-  if (!ui.chkMisc->isChecked()) {
-    exitPolicy.addPolicy(Policy(Policy::RejectAll));
+  ExitPolicy *exitPolicy;
+  if(ui.rdoNonExitMode->isChecked()) {
+    exitPolicy = new ExitPolicy(ExitPolicy::Middleman);
+  } else {
+    exitPolicy = new ExitPolicy();
+    bool rejectUnchecked = ui.chkMisc->isChecked();
+    
+    /* If misc is checked, then reject unchecked items and leave the default exit
+     * policy alone. Else, accept only checked items and end with reject *:*,
+     * replacing the default exit policy. */
+    if (ui.chkWebsites->isChecked() && !rejectUnchecked) {
+      exitPolicy->addAcceptedPorts(PORTS_HTTP);
+    } else if (!ui.chkWebsites->isChecked() && rejectUnchecked) {
+      exitPolicy->addRejectedPorts(PORTS_HTTP);
+    }
+    if (ui.chkSecWebsites->isChecked() && !rejectUnchecked) {
+      exitPolicy->addAcceptedPorts(PORTS_HTTPS);
+    } else if (!ui.chkSecWebsites->isChecked() && rejectUnchecked) {
+      exitPolicy->addRejectedPorts(PORTS_HTTPS);
+    }
+    if (ui.chkMail->isChecked() && !rejectUnchecked) {
+      exitPolicy->addAcceptedPorts(PORTS_MAIL);
+    } else if (!ui.chkMail->isChecked() && rejectUnchecked) {
+      exitPolicy->addRejectedPorts(PORTS_MAIL);
+    }
+    if (ui.chkIRC->isChecked() && !rejectUnchecked) {
+      exitPolicy->addAcceptedPorts(PORTS_IRC);
+    } else if (!ui.chkIRC->isChecked() && rejectUnchecked) {
+      exitPolicy->addRejectedPorts(PORTS_IRC);
+    }
+    if (ui.chkIM->isChecked() && !rejectUnchecked) {
+      exitPolicy->addAcceptedPorts(PORTS_IM);
+    } else if (!ui.chkIM->isChecked() && rejectUnchecked) {
+      exitPolicy->addRejectedPorts(PORTS_IM);
+    }
+    if (!ui.chkMisc->isChecked()) {
+      exitPolicy->addPolicy(Policy(Policy::RejectAll));
+    }
   }
-  _settings->setExitPolicy(exitPolicy);
+
+  _settings->setExitPolicy(*exitPolicy);
 }
 
 /** Called when the user selects a new value from the rate combo box. */
@@ -608,6 +628,9 @@ ServerPage::displayBridgeUsage()
     if (!timeStarted.isValid())
       goto err;
 
+    // Default is LocalTime, force UTC
+    timeStarted.setTimeSpec(Qt::UTC);
+
     QStringList summary = keyvals.value("CountrySummary")
                                  .split(",", QString::SkipEmptyParts);
     if (summary.isEmpty()) {
diff --git a/src/vidalia/config/ServerPage.ui b/src/vidalia/config/ServerPage.ui
index a642471..cfb3251 100644
--- a/src/vidalia/config/ServerPage.ui
+++ b/src/vidalia/config/ServerPage.ui
@@ -23,28 +23,28 @@
        </property>
       </widget>
      </item>
-     <item row="1" column="0" colspan="3">
+     <item row="2" column="0" colspan="3">
       <widget class="QRadioButton" name="rdoServerMode">
        <property name="text">
-        <string>Relay traffic for the Tor network</string>
+        <string>Relay traffic for the Tor network (exit relay)</string>
        </property>
       </widget>
      </item>
-     <item row="2" column="0">
+     <item row="3" column="0">
       <widget class="QRadioButton" name="rdoBridgeMode">
        <property name="text">
         <string>Help censored users reach the Tor network</string>
        </property>
       </widget>
      </item>
-     <item row="2" column="1">
+     <item row="3" column="1">
       <widget class="QLabel" name="lblWhatsThis">
        <property name="text">
         <string><a href="#bridgeHelp">What's this?</a></string>
        </property>
       </widget>
      </item>
-     <item row="2" column="2" colspan="2">
+     <item row="3" column="2" colspan="2">
       <spacer name="horizontalSpacer_2">
        <property name="orientation">
         <enum>Qt::Horizontal</enum>
@@ -57,6 +57,13 @@
        </property>
       </spacer>
      </item>
+     <item row="1" column="0" colspan="3">
+      <widget class="QRadioButton" name="rdoNonExitMode">
+       <property name="text">
+        <string>Relay traffic inside the Tor network (non-exit relay)</string>
+       </property>
+      </widget>
+     </item>
     </layout>
    </item>
    <item>
diff --git a/src/vidalia/config/ServerSettings.cpp b/src/vidalia/config/ServerSettings.cpp
index 91f8600..f1caa53 100644
--- a/src/vidalia/config/ServerSettings.cpp
+++ b/src/vidalia/config/ServerSettings.cpp
@@ -43,6 +43,7 @@
 #define SETTING_BANDWIDTH_RATE  "BandwidthRate"
 #define SETTING_BANDWIDTH_BURST "BandwidthBurst"
 #define SETTING_BRIDGE_RELAY    "BridgeRelay"
+#define SETTING_NONEXIT_RELAY   "NonExitRelay"
 #define SETTING_ENABLE_UPNP     "EnableUPnP"
 #define SETTING_RELAY_BANDWIDTH_RATE   "RelayBandwidthRate"
 #define SETTING_RELAY_BANDWIDTH_BURST  "RelayBandwidthBurst"
@@ -71,7 +72,7 @@ ServerSettings::ServerSettings(TorControl *torControl)
   setDefault(SETTING_BANDWIDTH_BURST,       10485760);
   setDefault(SETTING_RELAY_BANDWIDTH_BURST, 10485760);
   setDefault(SETTING_EXITPOLICY,
-    ExitPolicy(ExitPolicy::Default).toString());
+             ExitPolicy(ExitPolicy::Middleman).toString());
   setDefault(SETTING_ENABLE_UPNP, false); 
   setDefault(SETTING_BRIDGE_RELAY, false);
   setDefault(SETTING_PUBLISH_SERVER_DESCRIPTOR, "1");
@@ -257,6 +258,21 @@ ServerSettings::isBridgeEnabled()
 {
   return value(SETTING_BRIDGE_RELAY).toBool() && isServerEnabled();
 }
+ 
+/** Sets to <b>enabled</b> whether Tor should be a non-exit node when acting as
+ * a server. */
+void
+ServerSettings::setNonExitEnabled(bool enabled)
+{
+  setValue(SETTING_NONEXIT_RELAY, enabled);
+}
+
+/** Returns true if Tor is configured to act as a non-exit node. */
+bool
+ServerSettings::isNonExitEnabled()
+{
+  return value(SETTING_NONEXIT_RELAY).toBool() && isServerEnabled();
+}
 
 /** Sets the server's ORPort. */
 void
diff --git a/src/vidalia/config/ServerSettings.h b/src/vidalia/config/ServerSettings.h
index 775c92d..9479c5a 100644
--- a/src/vidalia/config/ServerSettings.h
+++ b/src/vidalia/config/ServerSettings.h
@@ -42,6 +42,12 @@ public:
   /** Returns true if Tor is configured to act as a bridge node. */
   bool isBridgeEnabled();
 
+  /** Sets to <b>enabled</b> whether Tor should be a non-exit node when acting
+   * as a server. */
+  void setNonExitEnabled(bool enable);
+  /** Returns true if Tor is configured to act as a non-exit node. */
+  bool isNonExitEnabled();
+
   /** Sets the server's ORPort value. */
   void setORPort(quint16 orPort);
   /** Gets the server's ORPort value. */
diff --git a/src/vidalia/config/VidaliaSettings.cpp b/src/vidalia/config/VidaliaSettings.cpp
index 0812b03..6cf3238 100644
--- a/src/vidalia/config/VidaliaSettings.cpp
+++ b/src/vidalia/config/VidaliaSettings.cpp
@@ -45,6 +45,7 @@
 #define VIDALIA_REG_KEY        "Vidalia" 
 #endif
 
+#define SETTING_ICON_PREF	"IconDisplayPreference"
 
 /** Default Constructor */
 VidaliaSettings::VidaliaSettings()
@@ -82,6 +83,7 @@ VidaliaSettings::VidaliaSettings()
   setDefault(SETTING_LAST_UPDATE_CHECK, QDateTime());
   setDefault(SETTING_USE_LOCAL_GEOIP_DATABASE, false);
   setDefault(SETTING_LOCAL_GEOIP_DATABASE, "");
+  setDefault(SETTING_ICON_PREF, Both);
 }
 
 /** Gets the currently preferred language code for Vidalia. */
@@ -321,3 +323,35 @@ VidaliaSettings::setLocalGeoIpDatabase(const QString &databaseFile)
   setValue(SETTING_LOCAL_GEOIP_DATABASE, databaseFile);
 }
 
+/** Get the icon preference */
+VidaliaSettings::IconPosition
+VidaliaSettings::getIconPref()
+{
+  return fromString(value(SETTING_ICON_PREF).toString());
+}
+
+/** Set the icon preference */
+void
+VidaliaSettings::setIconPref(const IconPosition iconPref)
+{
+  setValue(SETTING_ICON_PREF, toString(iconPref));
+}
+
+QString
+VidaliaSettings::toString(const IconPosition iconPref)
+{
+  switch(iconPref) {
+  case Dock: return "Dock";
+  case Tray: return "Tray";
+  default: return "Both";
+  }
+}
+
+VidaliaSettings::IconPosition
+VidaliaSettings::fromString(QString iconPref)
+{
+  if(iconPref == "Dock") return Dock;
+  if(iconPref == "Tray") return Tray;
+
+  return Both;
+}
diff --git a/src/vidalia/config/VidaliaSettings.h b/src/vidalia/config/VidaliaSettings.h
index 2667b12..6cbdefb 100644
--- a/src/vidalia/config/VidaliaSettings.h
+++ b/src/vidalia/config/VidaliaSettings.h
@@ -33,6 +33,12 @@ class VidaliaSettings : public VSettings
   Q_OBJECT
 
 public:
+  enum IconPosition {
+    Tray,
+    Dock,
+    Both,
+  };
+
   /** Default constructor. */
   VidaliaSettings();
 
@@ -125,6 +131,14 @@ public:
   QString localGeoIpDatabase() const;
   /** Sets the file to use as a local GeoIP database. */
   void setLocalGeoIpDatabase(const QString &databaseFile);
+
+  /** Get the icon preference */
+  IconPosition getIconPref();
+
+  /** Set the icon preference */
+  void setIconPref(const IconPosition iconPref);
+  QString toString(const IconPosition iconPref);
+  IconPosition fromString(QString iconPref);
 };
 
 #endif
diff --git a/src/vidalia/i18n/po/templates/vidalia.pot b/src/vidalia/i18n/po/templates/vidalia.pot
index 3070fb0..b273ebf 100644
--- a/src/vidalia/i18n/po/templates/vidalia.pot
+++ b/src/vidalia/i18n/po/templates/vidalia.pot
@@ -2,7 +2,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Vidalia\n"
 "Report-Msgid-Bugs-To: translations at vidalia-project.net\n"
-"POT-Creation-Date: 2011-03-09 13:05+0000\n"
+"POT-Creation-Date: 2011-09-07 14:40+0000\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: \n"
 "Language-Team: translations at vidalia-project.net\n"
@@ -185,6 +185,10 @@ msgid "Select a file to use for Tor socket path"
 msgstr ""
 
 msgctxt "AdvancedPage"
+msgid "Configure ControlPort automatically"
+msgstr ""
+
+msgctxt "AdvancedPage"
 msgid "Vidalia was unable to remove the Tor service.\n"
 "\n"
 "You may need to remove it manually."
@@ -1251,43 +1255,35 @@ msgid "Vidalia encountered an error and needed to close"
 msgstr ""
 
 msgctxt "CrashReportDialog"
-msgid "A crash report has been created that you can automatically send to the Vidalia developers to help identify and fix the problem. The submitted report does not contain any personally identifying information, but your connection to the crash reporting server may not be anonymous."
+msgid "Restart Vidalia"
 msgstr ""
 
 msgctxt "CrashReportDialog"
-msgid "Please also describe what you were doing before the application crashed (optional):"
+msgid "Don't Restart"
 msgstr ""
 
 msgctxt "CrashReportDialog"
-msgid "Send my crash report to the Vidalia developers"
+msgid "Unable to restart Vidalia"
 msgstr ""
 
 msgctxt "CrashReportDialog"
-msgid "Restart Vidalia"
+msgid "We were unable to automatically restart Vidalia. Please restart Vidalia manually."
 msgstr ""
 
 msgctxt "CrashReportDialog"
-msgid "Don't Restart"
+msgid "Please fill a ticket in:"
 msgstr ""
 
 msgctxt "CrashReportDialog"
-msgid "Unable to restart Vidalia"
+msgid "<a href=\"https://trac.torproject.org/projects/tor/newticket\">https://trac.torproject.org/projects/tor/newticket</a>"
 msgstr ""
 
 msgctxt "CrashReportDialog"
-msgid "We were unable to automatically restart Vidalia. Please restart Vidalia manually."
-msgstr ""
-
-msgctxt "CrashReportUploader"
-msgid "Connecting..."
-msgstr ""
-
-msgctxt "CrashReportUploader"
-msgid "Sending crash report..."
+msgid "A crash report has been created that you can send to the Vidalia developers to help identify and fix the problem. The submitted report does not contain any personally identifying information."
 msgstr ""
 
-msgctxt "CrashReportUploader"
-msgid "Receiving response..."
+msgctxt "CrashReportDialog"
+msgid "with a description of what you were doing before the application crashed, along with the following files corresponding to the crash report:"
 msgstr ""
 
 msgctxt "GeneralPage"
@@ -2015,10 +2011,6 @@ msgid "The following error occurred:"
 msgstr ""
 
 msgctxt "MainWindow"
-msgid "One of your applications%1appears to be making a potentially unencrypted and unsafe connection to port %2."
-msgstr ""
-
-msgctxt "MainWindow"
 msgid "Anything sent over this connection could be monitored. Please check your application's configuration and use only encrypted protocols, such as SSL, if possible."
 msgstr ""
 
@@ -2032,6 +2024,10 @@ msgid "Your relay is shutting down.\n"
 msgstr ""
 
 msgctxt "MainWindow"
+msgid "Bootstrapping torrc from %1 to %2"
+msgstr ""
+
+msgctxt "MainWindow"
 msgid "You are currently running a relay. Terminating your relay will interrupt any open connections from clients.\n"
 "\n"
 "Would you like to shutdown gracefully and give clients time to find a new relay?"
@@ -2044,11 +2040,15 @@ msgid "Vidalia detected that the Tor software exited unexpectedly.\n"
 msgstr ""
 
 msgctxt "MainWindow"
-msgid ", probably Telnet,"
+msgid "(probably Telnet)"
+msgstr ""
+
+msgctxt "MainWindow"
+msgid "(probably an email client)"
 msgstr ""
 
 msgctxt "MainWindow"
-msgid ", probably an email client,"
+msgid "One of your applications %1 appears to be making a potentially unencrypted and unsafe connection to port %2."
 msgstr ""
 
 msgctxt "MessageLog"
@@ -3505,14 +3505,6 @@ msgctxt "UpdatesAvailableDialog"
 msgid "Version"
 msgstr ""
 
-msgctxt "UploadProgressDialog"
-msgid "Uploading Crash Report"
-msgstr ""
-
-msgctxt "UploadProgressDialog"
-msgid "Unable to send report: %1"
-msgstr ""
-
 msgctxt "VMessageBox"
 msgid "OK"
 msgstr ""
@@ -3606,6 +3598,10 @@ msgid "Unable to open log file '%1': %2"
 msgstr ""
 
 msgctxt "Vidalia"
+msgid "Value required for parameter :"
+msgstr ""
+
+msgctxt "Vidalia"
 msgid "Invalid language code specified:"
 msgstr ""
 
diff --git a/src/vidalia/log/StatusEventItem.cpp b/src/vidalia/log/StatusEventItem.cpp
index ef62360..a0ec2b2 100644
--- a/src/vidalia/log/StatusEventItem.cpp
+++ b/src/vidalia/log/StatusEventItem.cpp
@@ -15,7 +15,7 @@
 
 #include "StatusEventItem.h"
 
-#include <QTime>
+#include <QDateTime>
 #include <QPixmap>
 #include <QString>
 
@@ -25,15 +25,15 @@ StatusEventItem::StatusEventItem(QTreeWidget *parent)
 }
 
 void
-StatusEventItem::setTimestamp(const QTime &timestamp)
+StatusEventItem::setTimestamp(const QDateTime &timestamp)
 {
   setData(0, TimestampRole, timestamp);
 }
 
-QTime
+QDateTime
 StatusEventItem::timestamp() const
 {
-  return data(0, TimestampRole).toTime();
+  return data(0, TimestampRole).toDateTime();
 }
 
 void
@@ -101,8 +101,8 @@ StatusEventItem::toString() const
 bool
 StatusEventItem::operator<(const QTreeWidgetItem &other) const
 {
-  QTime a = data(0, TimestampRole).toTime();
-  QTime b = other.data(0, TimestampRole).toTime();
+  QDateTime a = data(0, TimestampRole).toDateTime();
+  QDateTime b = other.data(0, TimestampRole).toDateTime();
 
   return (a < b);
 }
diff --git a/src/vidalia/log/StatusEventItem.h b/src/vidalia/log/StatusEventItem.h
index 8e599a2..8aeb1cd 100644
--- a/src/vidalia/log/StatusEventItem.h
+++ b/src/vidalia/log/StatusEventItem.h
@@ -18,7 +18,7 @@
 
 #include <QTreeWidgetItem>
 
-class QTime;
+class QDateTime;
 class QPixmap;
 class QString;
 
@@ -44,12 +44,12 @@ public:
   /** Sets the <b>timestamp</b> at which this status event occurred.
    * \sa timestamp()
    */
-  void setTimestamp(const QTime &timestamp);
+  void setTimestamp(const QDateTime &timestamp);
 
   /** Returns the timestamp at which this status event occurred.
    * \sa setTimestamp()
    */
-  QTime timestamp() const;
+  QDateTime timestamp() const;
 
   /** Sets the icon to be drawn along with this status event to <b>pixmap</b>.
    * \sa icon()
diff --git a/src/vidalia/log/StatusEventWidget.cpp b/src/vidalia/log/StatusEventWidget.cpp
index 4bd11d0..c496aa1 100644
--- a/src/vidalia/log/StatusEventWidget.cpp
+++ b/src/vidalia/log/StatusEventWidget.cpp
@@ -186,7 +186,7 @@ StatusEventWidget::find(const QString &text, bool highlight)
       continue;
 
     if (item->title().contains(text, Qt::CaseInsensitive)
-          || item->description().contains(text, Qt::CaseInsensitive)) {
+        || item->description().contains(text, Qt::CaseInsensitive)) {
       items.append(item);
       if (highlight)
         item->setSelected(true);
@@ -217,7 +217,7 @@ StatusEventWidget::addNotification(const QPixmap &icon,
 
   // Create the new notification item
   StatusEventItem *item = new StatusEventItem(this);
-  item->setTimestamp(QTime::currentTime());
+  item->setTimestamp(QDateTime::currentDateTime());
   item->setIcon(icon);
   item->setTitle(title);
   item->setDescription(description);

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-privacy/packages/vidalia.git



More information about the Pkg-privacy-commits mailing list