[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