[tor-commits] [vidalia/master] Improve Jason's patch with Matt's suggestions

chiiph at torproject.org chiiph at torproject.org
Fri Oct 7 19:20:39 UTC 2011


commit 1a4249ab2e678349c508dc1d6bdbf85a638d311b
Author: Tomás Touceda <chiiph at torproject.org>
Date:   Thu Sep 1 15:56:39 2011 -0300

    Improve Jason's patch with Matt's suggestions
---
 pkg/osx/MacOSXBundleInfo.plist.in      |   38 --------------------------------
 src/vidalia/CMakeLists.txt             |    7 ++++-
 src/vidalia/HelperProcess.cpp          |   17 ++++++++++++++
 src/vidalia/HelperProcess.h            |    2 +
 src/vidalia/MainWindow.cpp             |    6 +++-
 src/vidalia/config/AppearancePage.cpp  |   24 ++++++++++----------
 src/vidalia/config/VidaliaSettings.cpp |   33 +++++++++++++++++++++------
 src/vidalia/config/VidaliaSettings.h   |   12 ++++++++-
 8 files changed, 76 insertions(+), 63 deletions(-)

diff --git a/pkg/osx/MacOSXBundleInfo.plist.in b/pkg/osx/MacOSXBundleInfo.plist.in
deleted file mode 100644
index 3b5bfe0..0000000
--- a/pkg/osx/MacOSXBundleInfo.plist.in
+++ /dev/null
@@ -1,38 +0,0 @@
-<?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/CMakeLists.txt b/src/vidalia/CMakeLists.txt
index be3e012..52ba510 100644
--- a/src/vidalia/CMakeLists.txt
+++ b/src/vidalia/CMakeLists.txt
@@ -361,8 +361,11 @@ if (APPLE)
   set(CMAKE_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX}/)
   add_executable(${vidalia_BIN} MACOSX_BUNDLE ${vidalia_SRCS})
 
-  ## Specify location of custom Info.plist file
-  set_target_properties(${vidalia_BIN} PROPERTIES MACOSX_BUNDLE_INFO_PLIST ../pkg/osx/MacOSXBundleInfo.plist.in)
+  ## 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)
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/MainWindow.cpp b/src/vidalia/MainWindow.cpp
index 967e2df..d646ebe 100644
--- a/src/vidalia/MainWindow.cpp
+++ b/src/vidalia/MainWindow.cpp
@@ -222,7 +222,7 @@ MainWindow::MainWindow()
 
 #if defined(Q_WS_MAC)
   /* Display OSX dock icon if icon preference is not set to "Tray Only" */
-  if (settings.getIconPref() != "Tray") {
+  if (settings.getIconPref() != VidaliaSettings::Tray) {
       ProcessSerialNumber psn = { 0, kCurrentProcess };
       TransformProcessType(&psn, kProcessTransformToForegroundApplication);
   }
@@ -589,7 +589,7 @@ MainWindow::setTrayIcon(const QString &iconFile)
   VidaliaSettings settings;
   QApplication::setWindowIcon(QPixmap(iconFile));
   /* only display tray icon if icon preference is not set to "Dock Only" */
-  if (settings.getIconPref() != "Dock")
+  if (settings.getIconPref() != VidaliaSettings::Dock)
     _trayIcon.setIcon(QIcon(iconFile));
 #else
   /* always display tray icon for other platforms */
@@ -648,6 +648,7 @@ MainWindow::launchBrowserFromDirectory()
 
   /* Launch the browser */
   _browserProcess->start(browserExecutable, commandLine);
+  _browserProcess->toForeground();
 }
 
 /** Starts the web browser and IM client, if appropriately configured */
@@ -665,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 */
diff --git a/src/vidalia/config/AppearancePage.cpp b/src/vidalia/config/AppearancePage.cpp
index 647b67a..95998e9 100644
--- a/src/vidalia/config/AppearancePage.cpp
+++ b/src/vidalia/config/AppearancePage.cpp
@@ -76,14 +76,14 @@ AppearancePage::save(QString &errmsg)
 #if defined(Q_WS_MAC)
   /* Save new icon preference */
   if(ui.rdoIconPrefDock->isChecked()) {
-    _settings->setIconPref("Dock");
+    _settings->setIconPref(VidaliaSettings::Dock);
   }
   else if(ui.rdoIconPrefTray->isChecked()) {
-    _settings->setIconPref("Tray");
+    _settings->setIconPref(VidaliaSettings::Tray);
   }
   else {
     /* default setting */
-    _settings->setIconPref("Both");
+    _settings->setIconPref(VidaliaSettings::Both);
   }
 #endif
 
@@ -101,16 +101,16 @@ AppearancePage::load()
   ui.cmboStyle->setCurrentIndex(index);
 
 #if defined(Q_WS_MAC)
-    /* set current icon preference */
-    ui.rdoIconPrefBoth->setChecked(_settings->getIconPref() == "Both");
-    ui.rdoIconPrefTray->setChecked(_settings->getIconPref() == "Tray");
-    ui.rdoIconPrefDock->setChecked(_settings->getIconPref() == "Dock");
+  /* 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);
+  /* 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/VidaliaSettings.cpp b/src/vidalia/config/VidaliaSettings.cpp
index 858ca8e..85b70e9 100644
--- a/src/vidalia/config/VidaliaSettings.cpp
+++ b/src/vidalia/config/VidaliaSettings.cpp
@@ -46,7 +46,7 @@
 #endif
 
 #if defined(Q_WS_MAC)
-#define SETTING_ICON_PREF	"IconPref"
+#define SETTING_ICON_PREF	"IconDisplayPreference"
 #endif
 
 /** Default Constructor */
@@ -85,7 +85,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");
+  setDefault(SETTING_ICON_PREF, Both);
 }
 
 /** Gets the currently preferred language code for Vidalia. */
@@ -326,15 +326,34 @@ VidaliaSettings::setLocalGeoIpDatabase(const QString &databaseFile)
 }
 
 /** Get the icon preference */
-QString
-VidaliaSettings::getIconPref() const
+VidaliaSettings::IconPosition
+VidaliaSettings::getIconPref()
 {
-  return value(SETTING_ICON_PREF).toString();
+  return fromString(value(SETTING_ICON_PREF).toString());
 }
 
 /** Set the icon preference */
 void
-VidaliaSettings::setIconPref(const QString &iconPref)
+VidaliaSettings::setIconPref(const IconPosition iconPref)
+{
+  setValue(SETTING_ICON_PREF, toString(iconPref));
+}
+
+QString
+VidaliaSettings::toString(const IconPosition iconPref)
 {
-  setValue(SETTING_ICON_PREF, 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 2efec12..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();
 
@@ -127,10 +133,12 @@ public:
   void setLocalGeoIpDatabase(const QString &databaseFile);
 
   /** Get the icon preference */
-  QString getIconPref() const;
+  IconPosition getIconPref();
 
   /** Set the icon preference */
-  void setIconPref(const QString &iconPref);
+  void setIconPref(const IconPosition iconPref);
+  QString toString(const IconPosition iconPref);
+  IconPosition fromString(QString iconPref);
 };
 
 #endif





More information about the tor-commits mailing list