--- /dev/null
+author "Danilo Luvizotto <danilo.luvizotto@gmail.com>"
+description "Google Latitude Updater Daemon"
+
+start on started hildon-desktop
+
+console output
+
+post-stop script
+ killall -9 googlelatitude-daemon
+end script
+
+exec /bin/su - user -c "/opt/linfati.com/googlelatitude-daemon -s"
Version=1.0
Type=Application
Name=Google Latitude Update
-Exec=/opt/linfati.com/googlelatitude
+Exec=/opt/linfati.com/googlelatitude-daemon
Icon=googlelatitude
X-HildonDesk-ShowInToolbar=true
X-Osso-Type=application/x-executable
--- /dev/null
+[Desktop Entry]
+Encoding=UTF-8
+Version=1.0
+Name=Google Latitude Updater
+Comment=Google Latitude Updater Settings
+Type=HildonControlPanelPlugin
+Icon=googlelatitude
+X-control-panel-plugin=libglsettingsplugin.so
+Categories=connectivity
+
+googlelatitude (0.5-0) unstable; urgency=low
+
+ * Changed the old code to work as a daemon
+ * Implemented dbus (adaptor and client)
+ * Added a settings plugin to the system settings with various options
+ * Maybe more
+
+ -- Danilo Luvizotto <danilo.luvizotto@gmail.com> Thu, 06 Jan 2011 18:34:12 +0200
+
googlelatitude (0.4-0) unstable; urgency=low
* Bump version
data/googlelatitude.desktop usr/share/applications/hildon
data/googlelatitude.png usr/share/icons/hicolor/64x64/apps
-build/googlelatitude opt/linfati.com
+data/libglsettingsplugin.desktop usr/share/applications/hildon-control-panel
+data/glupdater etc/event.d
+src/daemon/build/googlelatitude-daemon opt/linfati.com
+src/settings/build/googlelatitude-settings opt/linfati.com
+src/settingsplugin/build/libglsettingsplugin.so usr/lib/hildon-control-panel
-TARGET = googlelatitude
-HEADERS += src/latitude.h src/glatitude.h src/gps.h
-SOURCES += src/main.cpp src/latitude.cpp src/glatitude.cpp src/gps.cpp
-
-OBJECTS_DIR = build
-MOC_DIR = build
-DESTDIR = build
-
-TEMPLATE = app
-QT += network webkit
-
-contains(QT_CONFIG, maemo5) {
- QT += maemo5
- CONFIG += link_pkgconfig
- PKGCONFIG += glib-2.0 liblocation
+QMAKEVERSION = $$[QMAKE_VERSION]
+ISQT4 = $$find(QMAKEVERSION, ^[2-9])
+isEmpty( ISQT4 ) {
+error("Use the qmake include with Qt4.4 or greater, on Debian that is qmake-qt4");
}
+
+TEMPLATE = subdirs
+SUBDIRS = src
--- /dev/null
+#include "dbusclient.h"
+
+#ifdef Q_WS_MAEMO_5
+#include <QDebug>
+#include <QDBusReply>
+#include <icd/dbus_api.h>
+
+QDBusConnection DBusClient::system_bus(QDBusConnection::systemBus());
+QDBusConnection DBusClient::session_bus(QDBusConnection::sessionBus());
+QDBusInterface* DBusClient::icd_interface = new QDBusInterface(ICD_DBUS_API_INTERFACE,
+ ICD_DBUS_API_PATH,
+ ICD_DBUS_API_INTERFACE,
+ system_bus);
+QDBusInterface* DBusClient::gl_interface = new QDBusInterface("com.linfati.GoogleLatitude",
+ "/",
+ "com.linfati.GoogleLatitude",
+ session_bus);
+
+DBusClient::DBusClient(QObject *parent) :
+ QObject(parent)
+{
+ QDBusConnection::systemBus().connect(ICD_DBUS_API_INTERFACE,
+ ICD_DBUS_API_PATH,
+ ICD_DBUS_API_INTERFACE,
+ ICD_DBUS_API_CONNECT_SIG,
+ this,
+ SLOT(networkStateChanged()));
+}
+
+bool DBusClient::daemonRunning()
+{
+ return ((QDBusReply<bool>)gl_interface->call("running")).value();
+}
+
+bool DBusClient::networkConnected()
+{
+ QDBusReply<uint> reply = icd_interface->call(ICD_DBUS_API_STATE_REQ);
+
+ return (reply.value() > 0) ? true : false;
+}
+
+void DBusClient::networkStateChanged()
+{
+ networkConnected() ? emit sigNetworkConnected() : sigNetworkDisconnected();
+}
+
+
+void DBusClient::quitDaemon()
+{
+ gl_interface->call("quit");
+}
+
+void DBusClient::reloadDaemonConfig()
+{
+ gl_interface->call("reparseConfiguration");
+}
+
+void DBusClient::showWindow()
+{
+ gl_interface->call("show");
+}
+#endif
--- /dev/null
+#ifndef DBUSCLIENT_H
+#define DBUSCLIENT_H
+
+
+#include <QObject>
+#ifdef Q_WS_MAEMO_5
+#include <QDBusMessage>
+#include <QDBusInterface>
+
+class DBusClient : public QObject
+{
+ Q_OBJECT
+public:
+ explicit DBusClient(QObject *parent = 0);
+ static bool daemonRunning();
+ static bool networkConnected();
+ static void quitDaemon();
+ static void reloadDaemonConfig();
+ static void showWindow();
+
+signals:
+ void sigNetworkConnected();
+ void sigNetworkDisconnected();
+
+public slots:
+ void networkStateChanged();
+
+private:
+ static QDBusConnection system_bus;
+ static QDBusConnection session_bus;
+ static QDBusInterface *icd_interface;
+ static QDBusInterface *gl_interface;
+};
+
+#endif //Q_WS_MAEMO_5
+#endif // DBUSCLIENT_H
--- /dev/null
+#ifndef CUSTOMUSERAGENTPAGE_H
+#define CUSTOMUSERAGENTPAGE_H
+
+#include <QWebPage>
+
+class customUAPage : public QWebPage
+{
+ Q_OBJECT
+
+public:
+ customUAPage(QObject* parent = 0) : QWebPage(parent) {}
+
+protected:
+ QString userAgentForUrl(const QUrl &url ) const
+ {return QString("Mozilla/5.0 (%Platform%; %Security%; %Subplatform%; %Locale%) AppleWebKit/%WebKitVersion% (KHTML, like Gecko) %AppVersion Mobile");}
+
+};
+
+#endif // CUSTOMUSERAGENTPAGE_H
--- /dev/null
+TARGET = googlelatitude-daemon
+HEADERS += latitude.h glatitude.h gps.h \
+ dbusadaptor.h ../common/dbusclient.h \
+ qwebviewselectionsuppressor.h \
+ customuseragentpage.h
+SOURCES += main.cpp latitude.cpp glatitude.cpp gps.cpp \
+ dbusadaptor.cpp ../common/dbusclient.cpp
+
+OBJECTS_DIR = build
+MOC_DIR = build
+DESTDIR = build
+
+TEMPLATE = app
+QT += network webkit dbus
+
+contains(QT_CONFIG, maemo5) {
+ QT += maemo5
+ CONFIG += link_pkgconfig
+ PKGCONFIG += glib-2.0 liblocation
+}
+
+unix {
+ #VARIABLES
+ isEmpty(PREFIX) {
+ PREFIX = /usr
+ }
+ BINDIR = $$PREFIX/bin
+ DATADIR =$$PREFIX/share
+
+ DEFINES += DATADIR=\\\"$$DATADIR\\\" PKGDATADIR=\\\"$$PKGDATADIR\\\"
+
+ #MAKE INSTALL
+
+ INSTALLS += target desktop icon64 updater
+ target.path =$$BINDIR
+
+ #service.path = $$DATADIR/dbus-1/services
+ #service.files += $${TARGET}.service
+
+ desktop.path = $$DATADIR/applications/hildon
+ desktop.files += ../../data/googlelatitude.desktop
+
+ icon64.path = $$DATADIR/icons/hicolor/64x64/apps
+ icon64.files += ../../data/googlelatitude.png
+
+ updater.path = /etc/event.d
+ updater.files += ../../data/glupdater
+}
+
--- /dev/null
+#include "dbusadaptor.h"
+
+#include <QDBusConnection>
+
+DBusAdaptor::DBusAdaptor(QApplication *application) :
+ QDBusAbstractAdaptor(application), app(application)
+{}
+
+void DBusAdaptor::quit()
+{
+ exit(0);
+}
+
+void DBusAdaptor::reparseConfiguration()
+{
+ daemon->reparseConfiguration();
+}
+
+bool DBusAdaptor::running()
+{
+ return true;
+}
+
+void DBusAdaptor::setDaemon(LatitudeGUI* d)
+{
+ daemon = d;
+}
+
+void DBusAdaptor::show()
+{
+ daemon->show();
+}
--- /dev/null
+#ifndef DBUSADAPTOR_H
+#define DBUSADAPTOR_H
+
+#include <QDBusAbstractAdaptor>
+#include <QApplication>
+#include <QWidget>
+#include <QDebug>
+
+#include "latitude.h"
+
+class DBusAdaptor : public QDBusAbstractAdaptor
+{
+ Q_OBJECT
+ Q_CLASSINFO("D-Bus Interface", "com.linfati.GoogleLatitude")
+
+public:
+ explicit DBusAdaptor(QApplication *application);
+ void setDaemon(LatitudeGUI* d);
+
+signals:
+
+public slots:
+ Q_NOREPLY void quit();
+ Q_NOREPLY void show();
+ bool running();
+ void reparseConfiguration();
+
+private:
+ QApplication *app;
+ LatitudeGUI *daemon;
+};
+
+#endif // DBUSADAPTOR_H
--- /dev/null
+#include "glatitude.h"
+
+GoogleLatitude::GoogleLatitude(QObject *parent) :
+ QObject(parent)
+{
+ user = "";
+ pass = "";
+ latitude = 0.;
+ longitude = 0.;
+ accuracy = 0.;
+
+ worker = new QNetworkAccessManager();
+ connect(worker, SIGNAL(finished(QNetworkReply *)), this, SLOT(finishedreply(QNetworkReply *)));
+
+ urllogin = QUrl::fromEncoded("https://www.google.com/accounts/ServiceLogin?service=friendview");
+ urldologin = QUrl::fromEncoded("https://www.google.com/accounts/ServiceLoginAuth?service=friendview");
+ urlupdate = QUrl::fromEncoded("http://maps.google.com/glm/mmap/mwmfr?hl=en");
+ on = true;
+}
+
+void GoogleLatitude::login(QString u, QString p) {
+ if ( !u.contains('@') ) u.append("@gmail.com");
+ user = u;
+ pass = p;
+}
+
+void GoogleLatitude::set(double la, double lo, double ac) {
+ latitude = la;
+ longitude = lo;
+ accuracy = ac;
+
+ if (la*lo == 0) return;
+ if (!on) return;
+ worker->get(QNetworkRequest(urllogin));
+}
+
+void GoogleLatitude::finishedreply(QNetworkReply *r) {
+ if ( r->url() == urllogin ) {
+ QString aidis = r->readAll();
+ QRegExp regexp ("type=\"hidden\".*name=\"GALX\".*value=\"(.*)\"");
+ regexp.setMinimal(1);
+ regexp.indexIn(aidis, 1);
+ QString googleGALX = regexp.capturedTexts().last();
+
+ QByteArray datalogin;
+ datalogin += "&service=friendview";
+ datalogin += "&GALX=" + googleGALX;
+ datalogin += "&Email=" + user;
+ datalogin += "&Passwd=" + pass;
+ worker->post(QNetworkRequest(urldologin), datalogin);
+ } else if ( r->url() == urldologin ) {
+ QByteArray datagps;
+ datagps += "t=ul";
+ datagps += "&lat=" + QString::number(latitude);
+ datagps += "&lng=" + QString::number(longitude);
+ datagps += "&accuracy=" + QString::number(accuracy);
+
+ QNetworkRequest request(urlupdate);
+ request.setRawHeader("X-ManualHeader", QString("true").toAscii() );
+ worker->post(request, datagps);
+ } else if ( r->url() == urlupdate ) {
+ QString output = r->readAll();
+ QRegExp regexp ("Authentication required");
+ if (regexp.indexIn(output, 1) != -1) {
+ emit ERROR();
+ } else {
+ emit OK();
+ }
+ qDebug() << output;
+ } else {
+ qDebug() << "Error";
+ qDebug() << "url:" << r->url();
+ qDebug() << r->rawHeaderList();
+ qDebug() << r->readAll();
+ }
+}
--- /dev/null
+#ifndef GLATITUDE_H
+#define GLATITUDE_H
+
+#include <QtNetwork>
+
+class GoogleLatitude : public QObject {
+ Q_OBJECT
+
+signals:
+ void OK();
+ void ERROR();
+
+public:
+ GoogleLatitude(QObject *parent = 0);
+ void login(QString username, QString password);
+ void set(double latitude, double longitude, double accuracy=1000.);
+ double get_lat() { return latitude; }
+ double get_lon() { return longitude; }
+ double get_acc() { return accuracy; }
+
+public slots:
+ void disableUpdates() { on = false; }
+ void enableUpdates() { on = true; }
+ void setUpdates(bool u) { on = u; }
+
+private slots:
+ void finishedreply(QNetworkReply *r);
+
+private:
+ // info
+ bool networkConnected();
+ QString user;
+ QString pass;
+ double latitude;
+ double longitude;
+ double accuracy;
+ // stuff
+ QNetworkAccessManager *worker;
+ QUrl urllogin;
+ QUrl urldologin;
+ QUrl urlupdate;
+ bool on;
+};
+
+#endif // GLATITUDE_H
--- /dev/null
+#include "gps.h"
+
+#include <QDebug>
+
+#ifdef Q_WS_MAEMO_5
+
+bool ValidQReal(qreal value);
+
+GpsMaemo5::GpsMaemo5(LocationGPSDControlInterval location_interval,
+ LocationGPSDControlMethod location_method,
+ QObject *parent) :
+ QObject(parent)
+{
+ latitude = 0;
+ longitude = 0;
+ accuracy = 0;
+
+ control = location_gpsd_control_get_default();
+ device = (LocationGPSDevice*) g_object_new(LOCATION_TYPE_GPS_DEVICE, NULL);
+
+ updateGPSConfig (location_interval, location_method);
+
+ g_signal_connect(device, "changed", G_CALLBACK(GpsMaemo5_changed), this);
+}
+
+void GpsMaemo5::enable()
+{
+ location_gpsd_control_start(control);
+}
+void GpsMaemo5::disable()
+{
+ location_gpsd_control_stop(control);
+}
+
+void GpsMaemo5::updateGPSConfig (LocationGPSDControlInterval location_interval,
+ LocationGPSDControlMethod location_method)
+{
+ g_object_set(G_OBJECT(control), "preferred-interval", location_interval, NULL);
+ g_object_set(G_OBJECT(control), "preferred-method", location_method, NULL);
+ qDebug() << "preferred-interval: " << location_interval;
+ qDebug() << "preferred-method: " << location_method;
+}
+
+void GpsMaemo5_changed(LocationGPSDevice *device, GpsMaemo5 *gps) {
+ if (device->fix) {
+ if (device->fix->fields) {
+ if ( !ValidQReal(gps->device->fix->eph/100.) )
+ return;
+ g_print("lat = %f, long = %f, eph = %f\n", gps->device->fix->latitude, gps->device->fix->longitude, gps->device->fix->eph/100.);
+ gps->latitude = gps->device->fix->latitude;
+ gps->longitude = gps->device->fix->longitude;
+ gps->accuracy = gps->device->fix->eph/100.;
+ emit gps->fix();
+ }
+ }
+}
+
+bool ValidQReal(qreal value)
+{
+ if (value != value){
+ return false;
+ }
+ else if (value > std::numeric_limits<qreal>::max()){
+ return false;
+ }
+ else if (value < -std::numeric_limits<qreal>::max()){
+ return false;
+ }
+ else
+ return true;
+}
+
+#endif // Q_WS_MAEMO_5
--- /dev/null
+#ifndef GPS_H
+#define GPS_H
+
+#include <QObject>
+
+#ifdef Q_WS_MAEMO_5
+
+extern "C" {
+#include <location/location-gps-device.h>
+#include <location/location-gpsd-control.h>
+}
+
+class GpsMaemo5 : public QObject {
+ Q_OBJECT
+
+signals:
+ void fix();
+
+public:
+ GpsMaemo5(LocationGPSDControlInterval location_interval,
+ LocationGPSDControlMethod location_method,
+ QObject *parent = 0);
+ double get_lat() { return latitude; }
+ double get_lon() { return longitude; }
+ double get_acc() { return accuracy; }
+ friend void GpsMaemo5_changed(LocationGPSDevice *device, GpsMaemo5 *gps);
+ void updateGPSConfig (LocationGPSDControlInterval interval,
+ LocationGPSDControlMethod method);
+
+public slots:
+ void enable();
+ void disable();
+
+private:
+ double latitude;
+ double longitude;
+ double accuracy;
+
+ GMainLoop *loop;
+ LocationGPSDControl *control;
+ LocationGPSDevice *device;
+};
+
+void GpsMaemo5_changed(LocationGPSDevice *device, GpsMaemo5 *gps);
+
+#else // Q_WS_MAEMO_5
+
+class GpsMaemo5 : public QObject {
+ Q_OBJECT
+
+signals:
+ void fix();
+
+public:
+ GpsMaemo5(QObject *parent = 0) { Q_UNUSED(parent); }
+ double get_lat() { return 0; }
+ double get_lon() { return 0; }
+ double get_acc() { return 0; }
+};
+
+#endif // Q_WS_MAEMO_5
+
+#endif // GPS_H
--- /dev/null
+#include "latitude.h"
+
+LatitudeGUI::LatitudeGUI(QObject *parent) : QObject(parent) {
+#ifdef Q_WS_MAEMO_5
+ //setAttribute(Qt::WA_Maemo5AutoOrientation, true);
+#endif
+ setting = new QSettings();
+
+ //TODO: move to settings
+ // login input
+ /*
+ QDialog *dialoglogin = new QDialog();
+ QLineEdit *login_user = new QLineEdit(setting->value("user","my_username").toString());
+ QLineEdit *login_pass = new QLineEdit(setting->value("pass","my_password").toString());
+ login_pass->setEchoMode(QLineEdit::Password);
+ QFormLayout *layout_login = new QFormLayout();
+ layout_login->addRow(tr("&Username"), login_user);
+ layout_login->addRow(tr("&Password"), login_pass);
+ connect(login_user, SIGNAL(textEdited(QString)), this, SLOT(save_user(QString)));
+ connect(login_pass, SIGNAL(textEdited(QString)), this, SLOT(save_pass(QString)));
+ connect(login_user, SIGNAL(returnPressed()), login_pass, SLOT(setFocus()));
+ connect(login_pass, SIGNAL(returnPressed()), dialoglogin, SLOT(accept()));
+ dialoglogin->setLayout(layout_login);
+ dialoglogin->exec();
+ */
+
+ // GUI
+ url = QUrl::fromEncoded("https://www.google.com/accounts/ServiceLogin?service=friendview&continue=http://www.google.com/maps/m?mode=latitude");
+ maps = new QWebView();
+ maps->settings()->setAttribute(QWebSettings::PluginsEnabled, true);
+ connect(maps, SIGNAL(loadFinished(bool)), this, SLOT(maps_login()));
+ maps->load(url);
+ //menuBar()->addAction(tr("&Latitude"), this, SLOT(mode_latitude()));
+ //menuBar()->addAction(tr("&Buzz"), this, SLOT(mode_buzz()));
+
+ // updater
+ glatitude = new GoogleLatitude(this);
+ gps = new GpsMaemo5(this);
+ connect(gps, SIGNAL(fix()), this, SLOT(set()));
+ connect(glatitude, SIGNAL(OK()), this, SLOT(latitude_OK()));
+ connect(glatitude, SIGNAL(ERROR()), this, SLOT(latitude_ERROR()));
+
+ // show it
+ //setCentralWidget(maps);
+}
+
+void LatitudeGUI::set() {
+#ifdef Q_WS_MAEMO_5
+ //QMaemo5InformationBox::information(this, "new position...", 1000);
+#else
+ qDebug() << "new position...";
+#endif
+ glatitude->login(setting->value("user","my_username").toString(),
+ setting->value("pass","my_password").toString());
+ glatitude->set(gps->get_lat(),
+ gps->get_lon(),
+ gps->get_acc());
+}
+
+void LatitudeGUI::latitude_OK() {
+#ifdef Q_WS_MAEMO_5
+ //QMaemo5InformationBox::information(this, "...location Sent!", 1000);
+#else
+ qDebug() << "...location Sent!";
+#endif
+}
+
+void LatitudeGUI::latitude_ERROR() {
+#ifdef Q_WS_MAEMO_5
+ //QMaemo5InformationBox::information(this, "Error in Authentification !", 3000);
+#else
+ qDebug() << "Error in Authentification !";
+#endif
+}
+
+void LatitudeGUI::save_user(QString _user) {
+ setting->setValue("user", _user);
+}
+void LatitudeGUI::save_pass(QString _pass) {
+ setting->setValue("pass", _pass);
+}
+
+void LatitudeGUI::mode_buzz() {
+ maps->load(QUrl::fromEncoded("http://www.google.com/maps/m?l-view=map&l-lci=m,com.google.latitudepublicupdates&ac=f,s,l"));
+}
+
+void LatitudeGUI::mode_latitude() {
+ maps->load(QUrl::fromEncoded("https://www.google.com/accounts/ServiceLogin?service=friendview&continue=http://www.google.com/maps/m?mode=latitude"));
+}
+
+void LatitudeGUI::maps_login() {
+ if ( maps->url() == url ) {
+ maps->page()->mainFrame()->evaluateJavaScript(
+ QString("document.getElementById('Email').value = \"%1\";").arg(
+ setting->value("user").toString()));
+ maps->page()->mainFrame()->evaluateJavaScript(
+ QString("document.getElementById('Passwd').value = \"%1\";").arg(
+ setting->value("pass").toString()));
+ maps->page()->mainFrame()->evaluateJavaScript("document.getElementById('gaia_loginform').submit();");
+ }
+}
--- /dev/null
+#ifndef LATITUDE_H
+#define LATITUDE_H
+
+#include <QtGui>
+#include <QtWebKit>
+#include "glatitude.h"
+#include "gps.h"
+#ifdef Q_WS_MAEMO_5
+#include <QtMaemo5>
+#endif
+
+class LatitudeGUI : public QObject {
+ Q_OBJECT
+
+signals:
+ void newpos();
+
+public:
+ LatitudeGUI(QObject *parent = 0);
+
+private slots:
+ void set();
+ void latitude_OK();
+ void latitude_ERROR();
+ void save_user(QString);
+ void save_pass(QString);
+ void maps_login();
+ void mode_buzz();
+ void mode_latitude();
+
+private:
+ GoogleLatitude *glatitude;
+ GpsMaemo5 *gps;
+ QSettings *setting;
+ QWebView *maps;
+ QUrl url;
+};
+
+#endif // LATITUDE_H
--- /dev/null
+#include "latitude.h"
+#include "qwebviewselectionsuppressor.h"
+#include "../common/dbusclient.h"
+#include "customuseragentpage.h"
+
+#include <QTimer>
+
+LatitudeGUI::LatitudeGUI(QSettings *set, QWidget *parent) : QMainWindow(parent)
+{
+#ifdef Q_WS_MAEMO_5
+ setAttribute(Qt::WA_Maemo5AutoOrientation, true);
+ DBusClient* dbcli = new DBusClient(this);
+#endif
+ loginOk = false;
+ settings = set;
+ loadSettings();
+
+ // GUI
+ url = QUrl::fromEncoded("https://www.google.com/accounts/ServiceLogin?service=friendview&continue=http://www.google.com/maps/m?mode=latitude");
+ maps = new QWebView();
+ maps->setPage(new customUAPage(this));
+ maps->settings()->enablePersistentStorage();
+ maps->setZoomFactor(1.4);
+ maps->settings()->setAttribute(QWebSettings::PluginsEnabled, true);
+ maps->setContextMenuPolicy(Qt::NoContextMenu);
+ connect(maps, SIGNAL(loadFinished(bool)), this, SLOT(maps_login()));
+ maps->load(url);
+ new QWebViewSelectionSuppressor(maps);
+ menuBar()->addAction(tr("&Latitude"), this, SLOT(mode_latitude()));
+ menuBar()->addAction(tr("&Buzz"), this, SLOT(mode_buzz()));
+
+ // updater
+ glatitude = new GoogleLatitude(this);
+#ifdef Q_WS_MAEMO_5
+ gps = new GpsMaemo5(location_interval, location_method, this);
+ enableServices();
+
+ connect(gps, SIGNAL(fix()), this, SLOT(set()));
+ connect(dbcli, SIGNAL(sigNetworkConnected()),
+ this, SLOT(enableServices()));
+ connect(dbcli, SIGNAL(sigNetworkDisconnected()),
+ this, SLOT(disableServices()));
+
+#endif
+ connect(glatitude, SIGNAL(OK()), this, SLOT(latitude_OK()));
+ connect(glatitude, SIGNAL(ERROR()), this, SLOT(latitude_ERROR()));
+
+ // show it
+ setCentralWidget(maps);
+}
+
+#ifdef Q_WS_MAEMO_5
+void LatitudeGUI::enableServices() {
+ if (!DBusClient::networkConnected())
+ return;
+
+ gps->enable();
+ glatitude->enableUpdates();
+}
+void LatitudeGUI::disableServices() {
+ gps->disable();
+ glatitude->disableUpdates();
+}
+#endif
+
+void LatitudeGUI::set() {
+#ifdef Q_WS_MAEMO_5
+ //QMaemo5InformationBox::information(this, "new position...", 1000);
+#else
+ qDebug() << "new position...";
+#endif
+ glatitude->login(settings->value("user","my_username").toString(),
+ settings->value("pass","my_password").toString());
+ glatitude->set(gps->get_lat(),
+ gps->get_lon(),
+ gps->get_acc());
+ glatitude->disableUpdates();
+#ifdef Q_WS_MAEMO_5
+ QTimer::singleShot(location_interval*100, glatitude, SLOT(enableUpdates()));
+#endif
+}
+
+void LatitudeGUI::latitude_OK() {
+ loginOk = true; //We could login at least once!
+ //TODO: REMOVE THIS
+ qDebug() << maps->url();
+#ifdef Q_WS_MAEMO_5
+ //QMaemo5InformationBox::information(this, "...location Sent!", 1000);
+#else
+ qDebug() << "...location Sent!";
+#endif
+}
+
+void LatitudeGUI::latitude_ERROR() {
+ //Errors in authentication may occur frequently due to transmition or
+ //reception problems in low signal situations, so we will only alert the
+ //user if we can't login at least once
+ if (loginOk)
+ return;
+
+#ifdef Q_WS_MAEMO_5
+ disableServices();
+ QString error_message = tr("<b>Error in Authentification!</b><br><br> ") +
+ tr("Plese verify your login details<br>");
+ QMaemo5InformationBox::information(this, error_message,
+ QMaemo5InformationBox::NoTimeout);
+ system("/usr/bin/googlelatitude-settings");
+ enableServices();
+#else
+ qDebug() << "Error in Authentification!";
+#endif
+}
+
+void LatitudeGUI::loadSettings()
+{
+ settings->sync();
+#ifdef Q_WS_MAEMO_5
+ location_method = (LocationGPSDControlMethod) settings->value("location", LOCATION_METHOD_GNSS).toInt();
+ location_interval = (LocationGPSDControlInterval) settings->value("interval", LOCATION_INTERVAL_20S).toUInt();
+#endif
+}
+
+void LatitudeGUI::maps_login() {
+ if ( maps->url() == url ) {
+ maps->page()->mainFrame()->evaluateJavaScript(
+ QString("document.getElementById('Email').value = \"%1\";").arg(
+ settings->value("user").toString()));
+ maps->page()->mainFrame()->evaluateJavaScript(
+ QString("document.getElementById('Passwd').value = \"%1\";").arg(
+ settings->value("pass").toString()));
+ maps->page()->mainFrame()->evaluateJavaScript("document.getElementById('gaia_loginform').submit();");
+ }
+}
+
+void LatitudeGUI::mode_buzz() {
+ maps->load(QUrl::fromEncoded("http://www.google.com/maps/m?l-view=map&l-lci=m,com.google.latitudepublicupdates&ac=f,s,l"));
+}
+
+void LatitudeGUI::mode_latitude() {
+ maps->load(QUrl::fromEncoded("https://www.google.com/accounts/ServiceLogin?service=friendview&continue=http://www.google.com/maps/m?mode=latitude"));
+}
+
+void LatitudeGUI::reparseConfiguration()
+{
+#ifdef Q_WS_MAEMO_5
+ disableServices();
+ loadSettings();
+ gps->updateGPSConfig(location_interval, location_method);
+ enableServices();
+ QMaemo5InformationBox::information(this,
+ tr("Google Latitude daemon updated"),
+ 2000);
+#endif
+}
+
+void LatitudeGUI::save_user(QString _user) {
+ settings->setValue("user", _user);
+}
+void LatitudeGUI::save_pass(QString _pass) {
+ settings->setValue("pass", _pass);
+}
--- /dev/null
+#ifndef LATITUDE_H
+#define LATITUDE_H
+
+#include <QtGui>
+#include <QtWebKit>
+#include "glatitude.h"
+#include "gps.h"
+#ifdef Q_WS_MAEMO_5
+#include <QtMaemo5>
+#endif
+
+class LatitudeGUI : public QMainWindow {
+ Q_OBJECT
+
+signals:
+ void newpos();
+
+public:
+ LatitudeGUI(QSettings *set, QWidget *parent = 0);
+ void reparseConfiguration();
+
+protected:
+ void loadSettings();
+
+private slots:
+#ifdef Q_WS_MAEMO_5
+ void enableServices();
+ void disableServices();
+#endif
+ void set();
+ void latitude_OK();
+ void latitude_ERROR();
+ void save_user(QString);
+ void save_pass(QString);
+ void maps_login();
+ void mode_buzz();
+ void mode_latitude();
+
+private:
+ GoogleLatitude *glatitude;
+ GpsMaemo5 *gps;
+ QSettings *settings;
+ QWebView *maps;
+ QUrl url;
+#ifdef Q_WS_MAEMO_5
+ LocationGPSDControlInterval location_interval;
+ LocationGPSDControlMethod location_method;
+#endif
+ bool loginOk;
+};
+
+#endif // LATITUDE_H
--- /dev/null
+#include "latitude.h"
+#include "dbusadaptor.h"
+#include "../common/dbusclient.h"
+
+#include <QDBusConnection>
+#include <QDebug>
+
+int main(int argc, char *argv[]) {
+ QApplication app(argc, argv);
+ DBusAdaptor* adaptor = new DBusAdaptor(&app);
+ QCoreApplication::setOrganizationName("linfati");
+ QCoreApplication::setOrganizationDomain("linfati.com");
+ QCoreApplication::setApplicationName("GoogleLatitude");
+ if (!QDBusConnection::sessionBus().registerService("com.linfati.GoogleLatitude")) {
+#ifdef Q_WS_MAEMO_5
+ DBusClient::showWindow();
+#endif
+ return 0; //The application is already running
+ }
+ QDBusConnection::sessionBus().registerObject("/", &app);
+
+ QSettings* settings = new QSettings();
+
+ if(app.arguments().contains(QString("-s")) ||
+ app.arguments().contains(QString("--startup")))
+ if (!settings->value("autolaunch",false).toBool())
+ return 0;
+
+ app.setQuitOnLastWindowClosed(false);
+ LatitudeGUI *gui = new LatitudeGUI(settings);
+ adaptor->setDaemon(gui);
+
+ return app.exec();
+}
+
+/*
+ TODO:
+ on auth error -> stop gps
+ on new pos, only set it
+ send new pos every 120s, only if is diferent
+ no n900 -> por ip
+ */
--- /dev/null
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QWEBVIEWSELECTIONSUPPRESSOR_H
+#define QWEBVIEWSELECTIONSUPPRESSOR_H
+
+#include <QtWebKit/qwebview.h>
+#include <QtGui/qevent.h>
+
+class QWebViewSelectionSuppressor : public QObject
+{
+ Q_OBJECT
+public:
+ QWebViewSelectionSuppressor(QWebView *v)
+ : QObject(v), view(v), enabled(false), mousePressed(false)
+ {
+ Q_ASSERT(view);
+ enable();
+ }
+
+ inline void enable()
+ {
+ if (enabled)
+ return;
+ view->installEventFilter(this);
+ enabled = true;
+ }
+
+ inline void disable()
+ {
+ if (!enabled)
+ return;
+ view->removeEventFilter(this);
+ enabled = false;
+ }
+
+ inline bool isEnabled() const
+ {
+ return enabled;
+ }
+
+protected:
+ inline bool eventFilter(QObject *, QEvent *e);
+
+private:
+ QWebView *view;
+ bool enabled;
+ bool mousePressed;
+};
+
+bool QWebViewSelectionSuppressor::eventFilter(QObject *, QEvent *e)
+{
+ switch (e->type()) {
+ case QEvent::MouseButtonPress:
+ if (static_cast<QMouseEvent *>(e)->button() == Qt::LeftButton)
+ mousePressed = true;
+ break;
+ case QEvent::MouseButtonRelease:
+ if (static_cast<QMouseEvent *>(e)->button() == Qt::LeftButton)
+ mousePressed = false;
+ break;
+ case QEvent::MouseMove:
+ if (mousePressed)
+ return true;
+ break;
+ default:
+ break;
+ }
+ return false;
+}
+
+#endif
+++ /dev/null
-#include "glatitude.h"
-
-GoogleLatitude::GoogleLatitude(QObject *parent) : QObject(parent) {
- user = "";
- pass = "";
- latitude = 0.;
- longitude = 0.;
- accuracy = 0.;
-
- worker = new QNetworkAccessManager();
- connect(worker, SIGNAL(finished(QNetworkReply *)), this, SLOT(finishedreply(QNetworkReply *)));
-
- urllogin = QUrl::fromEncoded("https://www.google.com/accounts/ServiceLogin?service=friendview");
- urldologin = QUrl::fromEncoded("https://www.google.com/accounts/ServiceLoginAuth?service=friendview");
- urlupdate = QUrl::fromEncoded("http://maps.google.com/glm/mmap/mwmfr?hl=en");
-}
-
-void GoogleLatitude::login(QString u, QString p) {
- if ( !u.contains('@') ) u.append("@gmail.com");
- user = u;
- pass = p;
-}
-
-void GoogleLatitude::set(double la, double lo, double ac) {
- latitude = la;
- longitude = lo;
- accuracy = ac;
-
- if (la*lo == 0) return;
- worker->get(QNetworkRequest(urllogin));
-}
-
-void GoogleLatitude::finishedreply(QNetworkReply *r) {
- if ( r->url() == urllogin ) {
- QString aidis = r->readAll();
- QRegExp regexp ("type=\"hidden\".*name=\"GALX\".*value=\"(.*)\"");
- regexp.setMinimal(1);
- regexp.indexIn(aidis, 1);
- QString googleGALX = regexp.capturedTexts().last();
-
- QByteArray datalogin;
- datalogin += "&service=friendview";
- datalogin += "&GALX=" + googleGALX;
- datalogin += "&Email=" + user;
- datalogin += "&Passwd=" + pass;
- worker->post(QNetworkRequest(urldologin), datalogin);
- } else if ( r->url() == urldologin ) {
- QByteArray datagps;
- datagps += "t=ul";
- datagps += "&lat=" + QString::number(latitude);
- datagps += "&lng=" + QString::number(longitude);
- datagps += "&accuracy=" + QString::number(accuracy);
-
- QNetworkRequest request(urlupdate);
- request.setRawHeader("X-ManualHeader", QString("true").toAscii() );
- worker->post(request, datagps);
- } else if ( r->url() == urlupdate ) {
- QString output = r->readAll();
- QRegExp regexp ("Authentication required");
- if (regexp.indexIn(output, 1) != -1) {
- emit ERROR();
- } else {
- emit OK();
- }
- qDebug() << output;
- } else {
- qDebug() << "Error";
- qDebug() << "url:" << r->url();
- qDebug() << r->rawHeaderList();
- qDebug() << r->readAll();
- }
-}
+++ /dev/null
-#ifndef GLATITUDE_H
-#define GLATITUDE_H
-
-#include <QtNetwork>
-
-class GoogleLatitude : public QObject {
- Q_OBJECT
-
-signals:
- void OK();
- void ERROR();
-
-public:
- GoogleLatitude(QObject *parent = 0);
- void login(QString username, QString password);
- void set(double latitude, double longitude, double accuracy=1000.);
- double get_lat() { return latitude; }
- double get_lon() { return longitude; }
- double get_acc() { return accuracy; }
-
-private slots:
- void finishedreply(QNetworkReply *r);
-
-private:
- // info
- QString user;
- QString pass;
- double latitude;
- double longitude;
- double accuracy;
- // stuff
- QNetworkAccessManager *worker;
- QUrl urllogin;
- QUrl urldologin;
- QUrl urlupdate;
-};
-
-#endif // GLATITUDE_H
+++ /dev/null
-#include "gps.h"
-
-#ifdef Q_WS_MAEMO_5
-
-GpsMaemo5::GpsMaemo5(QObject *parent) : QObject(parent) {
- latitude = 0;
- longitude = 0;
- accuracy = 0;
-
- control = location_gpsd_control_get_default();
- device = (LocationGPSDevice*) g_object_new(LOCATION_TYPE_GPS_DEVICE, NULL);
-
- g_signal_connect(device, "changed", G_CALLBACK(GpsMaemo5_changed), this);
- g_object_set(G_OBJECT(control), "preferred-method", LOCATION_METHOD_ACWP, NULL);
- g_object_set(G_OBJECT(control), "preferred-interval", LOCATION_INTERVAL_120S, NULL);
-
- location_gpsd_control_start(control);
-}
-
-void GpsMaemo5_changed(LocationGPSDevice *device, GpsMaemo5 *gps) {
- if (device->fix) {
- if (device->fix->fields) {
- g_print("lat = %f, long = %f, eph = %f\n", gps->device->fix->latitude, gps->device->fix->longitude, gps->device->fix->eph/100.);
- gps->latitude = gps->device->fix->latitude;
- gps->longitude = gps->device->fix->longitude;
- gps->accuracy = gps->device->fix->eph/100.;
- emit gps->fix();
- }
- }
-}
-
-#endif // Q_WS_MAEMO_5
+++ /dev/null
-#ifndef GPS_H
-#define GPS_H
-
-#include <QObject>
-
-#ifdef Q_WS_MAEMO_5
-
-extern "C" {
-#include <location/location-gps-device.h>
-#include <location/location-gpsd-control.h>
-}
-
-class GpsMaemo5 : public QObject {
- Q_OBJECT
-
-signals:
- void fix();
-
-public:
- GpsMaemo5(QObject *parent = 0);
- double get_lat() { return latitude; }
- double get_lon() { return longitude; }
- double get_acc() { return accuracy; }
- friend void GpsMaemo5_changed(LocationGPSDevice *device, GpsMaemo5 *gps);
-
-private:
- double latitude;
- double longitude;
- double accuracy;
-
- GMainLoop *loop;
- LocationGPSDControl *control;
- LocationGPSDevice *device;
-};
-
-void GpsMaemo5_changed(LocationGPSDevice *device, GpsMaemo5 *gps);
-
-#else // Q_WS_MAEMO_5
-
-class GpsMaemo5 : public QObject {
- Q_OBJECT
-
-signals:
- void fix();
-
-public:
- GpsMaemo5(QObject *parent = 0) { Q_UNUSED(parent); }
- double get_lat() { return 0; }
- double get_lon() { return 0; }
- double get_acc() { return 0; }
-};
-
-#endif // Q_WS_MAEMO_5
-
-#endif // GPS_H
+++ /dev/null
-#include "latitude.h"
-
-LatitudeGUI::LatitudeGUI(QMainWindow *parent) : QMainWindow(parent) {
-#ifdef Q_WS_MAEMO_5
- setAttribute(Qt::WA_Maemo5AutoOrientation, true);
-#endif
- setWindowTitle(tr("Latitude & Buzz"));
-
- setting = new QSettings();
-
- // login input
- QDialog *dialoglogin = new QDialog(this);
- QLineEdit *login_user = new QLineEdit(setting->value("user","my_username").toString());
- QLineEdit *login_pass = new QLineEdit(setting->value("pass","my_password").toString());
- login_pass->setEchoMode(QLineEdit::Password);
- QFormLayout *layout_login = new QFormLayout();
- layout_login->addRow(tr("&Username"), login_user);
- layout_login->addRow(tr("&Password"), login_pass);
- connect(login_user, SIGNAL(textEdited(QString)), this, SLOT(save_user(QString)));
- connect(login_pass, SIGNAL(textEdited(QString)), this, SLOT(save_pass(QString)));
- connect(login_user, SIGNAL(returnPressed()), login_pass, SLOT(setFocus()));
- connect(login_pass, SIGNAL(returnPressed()), dialoglogin, SLOT(accept()));
- dialoglogin->setLayout(layout_login);
- dialoglogin->exec();
-
- // GUI
- url = QUrl::fromEncoded("https://www.google.com/accounts/ServiceLogin?service=friendview&continue=http://www.google.com/maps/m?mode=latitude");
- maps = new QWebView();
- maps->settings()->setAttribute(QWebSettings::PluginsEnabled, true);
- connect(maps, SIGNAL(loadFinished(bool)), this, SLOT(maps_login()));
- maps->load(url);
- menuBar()->addAction(tr("&Latitude"), this, SLOT(mode_latitude()));
- menuBar()->addAction(tr("&Buzz"), this, SLOT(mode_buzz()));
-
- // updater
- glatitude = new GoogleLatitude(this);
- gps = new GpsMaemo5(this);
- connect(gps, SIGNAL(fix()), this, SLOT(set()));
- connect(glatitude, SIGNAL(OK()), this, SLOT(latitude_OK()));
- connect(glatitude, SIGNAL(ERROR()), this, SLOT(latitude_ERROR()));
-
- // show it
- setCentralWidget(maps);
-}
-
-void LatitudeGUI::set() {
-#ifdef Q_WS_MAEMO_5
- QMaemo5InformationBox::information(this, "new position...", 1000);
-#else
- qDebug() << "new position...";
-#endif
- glatitude->login(setting->value("user","my_username").toString(),
- setting->value("pass","my_password").toString());
- glatitude->set(gps->get_lat(),
- gps->get_lon(),
- gps->get_acc());
-}
-
-void LatitudeGUI::latitude_OK() {
-#ifdef Q_WS_MAEMO_5
- QMaemo5InformationBox::information(this, "...location Sent!", 1000);
-#else
- qDebug() << "...location Sent!";
-#endif
-}
-
-void LatitudeGUI::latitude_ERROR() {
-#ifdef Q_WS_MAEMO_5
- QMaemo5InformationBox::information(this, "Error in Authentification !", 3000);
-#else
- qDebug() << "Error in Authentification !";
-#endif
-}
-
-void LatitudeGUI::save_user(QString _user) {
- setting->setValue("user", _user);
-}
-void LatitudeGUI::save_pass(QString _pass) {
- setting->setValue("pass", _pass);
-}
-
-void LatitudeGUI::mode_buzz() {
- maps->load(QUrl::fromEncoded("http://www.google.com/maps/m?l-view=map&l-lci=m,com.google.latitudepublicupdates&ac=f,s,l"));
-}
-
-void LatitudeGUI::mode_latitude() {
- maps->load(QUrl::fromEncoded("https://www.google.com/accounts/ServiceLogin?service=friendview&continue=http://www.google.com/maps/m?mode=latitude"));
-}
-
-void LatitudeGUI::maps_login() {
- if ( maps->url() == url ) {
- maps->page()->mainFrame()->evaluateJavaScript(
- QString("document.getElementById('Email').value = \"%1\";").arg(
- setting->value("user").toString()));
- maps->page()->mainFrame()->evaluateJavaScript(
- QString("document.getElementById('Passwd').value = \"%1\";").arg(
- setting->value("pass").toString()));
- maps->page()->mainFrame()->evaluateJavaScript("document.getElementById('gaia_loginform').submit();");
- }
-}
+++ /dev/null
-#ifndef LATITUDE_H
-#define LATITUDE_H
-
-#include <QtGui>
-#include <QtWebKit>
-#include "glatitude.h"
-#include "gps.h"
-#ifdef Q_WS_MAEMO_5
-#include <QtMaemo5>
-#endif
-
-class LatitudeGUI : public QMainWindow {
- Q_OBJECT
-
-signals:
- void newpos();
-
-public:
- LatitudeGUI(QMainWindow *parent = 0);
-
-private slots:
- void set();
- void latitude_OK();
- void latitude_ERROR();
- void save_user(QString);
- void save_pass(QString);
- void maps_login();
- void mode_buzz();
- void mode_latitude();
-
-private:
- GoogleLatitude *glatitude;
- GpsMaemo5 *gps;
- QSettings *setting;
- QWebView *maps;
- QUrl url;
-};
-
-#endif // LATITUDE_H
+++ /dev/null
-#include "latitude.h"
-
-int main(int argc, char *argv[]) {
- QApplication app(argc, argv);
- QCoreApplication::setOrganizationName("linfati");
- QCoreApplication::setOrganizationDomain("linfati.com");
- QCoreApplication::setApplicationName("GoogleLatitude");
-
- LatitudeGUI *gui = new LatitudeGUI();
- gui->show();
-
- return app.exec();
-}
-
-/*
- TODO:
- on auth error -> stop gps
- on new pos, only set it
- send new pos every 120s, only if is diferent
- no n900 -> por ip
- */
--- /dev/null
+#include <QApplication>
+
+#include "settings.h"
+
+int main(int argc, char *argv[]) {
+ QApplication app(argc, argv);
+ QCoreApplication::setOrganizationName("linfati");
+ QCoreApplication::setOrganizationDomain("linfati.com");
+ QCoreApplication::setApplicationName("GoogleLatitude");
+
+ Settings *settings = new Settings();
+ settings->setWindowModality(Qt::ApplicationModal);
+ settings->show();
+
+ return app.exec();
+}
+
+/*
+ TODO:
+ on auth error -> stop gps
+ on new pos, only set it
+ send new pos every 120s, only if is diferent
+ no n900 -> por ip
+ */
+
--- /dev/null
+#include "settings.h"
+#include "ui_settings.h"
+#include "../common/dbusclient.h"
+
+#include <QProcess>
+#include <QDebug>
+
+Settings::Settings(QWidget *parent) :
+ QWidget(parent),
+ ui(new Ui::Settings)
+{
+ intervals << tr("1 second") << tr("2 seconds") << tr("5 seconds") <<
+ tr("10 seconds") << tr("20 seconds") << tr("30 seconds") <<
+ tr("60 seconds") << tr("120 seconds");
+
+ ui->setupUi(this);
+ addUIElements(); //Add Maemo 5 Specific widgets
+
+ settings = new QSettings();
+ loadSettings();
+
+ //Make the window a modal panel
+ setWindowFlags(Qt::Dialog);
+ setWindowModality(Qt::ApplicationModal);
+
+ connect(ui->login_user, SIGNAL(returnPressed()), ui->login_pass, SLOT(setFocus()));
+ connect(ui->login_pass, SIGNAL(returnPressed()), SLOT(close()));
+ connect(ui->ok_button, SIGNAL(clicked()), SLOT(close()));
+
+}
+
+Settings::~Settings()
+{
+#ifdef Q_WS_MAEMO_5
+ delete interval_button;
+ delete interval_selector;
+ delete interval_model;
+#endif
+ delete ui;
+ delete settings;
+}
+
+void Settings::addUIElements()
+{
+ QVBoxLayout* ui_layout = (QVBoxLayout*)ui->scrollArea->widget()->layout();
+#ifdef Q_WS_MAEMO_5
+ interval_button = new QMaemo5ValueButton("Update Interval",ui->scrollArea->widget());
+ interval_button->setValueLayout(QMaemo5ValueButton::ValueBesideText);
+ interval_selector = new QMaemo5ListPickSelector;
+ interval_model = new QStandardItemModel(0, 1);
+ populateListModel(interval_model);
+ interval_selector->setModel(interval_model);
+ interval_button->setPickSelector(interval_selector);
+ ui_layout->insertWidget(4, interval_button);
+#endif
+}
+
+void Settings::closeEvent(QCloseEvent *event)
+{
+ storeSettings();
+ settings->sync();
+#ifdef Q_WS_MAEMO_5
+ updateDaemon();
+#endif
+ event->accept();
+}
+
+void Settings::loadSettings()
+{
+ unsigned short location;
+ unsigned short interval;
+
+ ui->connectIfNecessary->setChecked( settings->value("autoconnect",true).toBool() );
+ ui->launchOnPowerOn->setChecked( settings->value("autolaunch",false).toBool() );
+#ifdef Q_WS_MAEMO_5
+ location = settings->value("location", LOCATION_METHOD_GNSS).toInt();
+#endif
+ ui->login_user->setText(settings->value("user","my_username").toString());
+ ui->login_pass->setText(settings->value("pass","my_password").toString());
+#ifdef Q_WS_MAEMO_5
+ switch(settings->value("interval", LOCATION_INTERVAL_20S).toInt()) {
+ case LOCATION_INTERVAL_1S:
+ interval = 0;
+ break;
+ case LOCATION_INTERVAL_2S:
+ interval = 1;
+ break;
+ case LOCATION_INTERVAL_5S:
+ interval = 2;
+ break;
+ case LOCATION_INTERVAL_10S:
+ interval = 3;
+ break;
+ case LOCATION_INTERVAL_20S:
+ interval = 4;
+ break;
+ case LOCATION_INTERVAL_30S:
+ interval = 5;
+ break;
+ case LOCATION_INTERVAL_60S:
+ interval = 6;
+ break;
+ case LOCATION_INTERVAL_120S:
+ interval = 7;
+ break;
+ }
+ interval_selector->setCurrentIndex(interval);
+
+
+ if (DBusClient::daemonRunning())
+ ui->status_on->setChecked(true);
+ else
+ ui->status_off->setChecked(true);
+
+
+ switch (location) {
+ case LOCATION_METHOD_GNSS:
+ ui->location_gps->setChecked(true);
+ break;
+ case LOCATION_METHOD_AGNSS | LOCATION_METHOD_ACWP:
+ ui->location_gps_network->setChecked(true);
+ break;
+ case LOCATION_METHOD_ACWP:
+ ui->location_network->setChecked(true);
+ break;
+ }
+#endif
+}
+
+void Settings::populateListModel(QStandardItemModel *model)
+{
+ for(int i = 0; i < intervals.size(); ++i) {
+ QStandardItem *item = new QStandardItem(intervals.at(i));
+ item->setTextAlignment(Qt::AlignCenter); // the Maemo 5 design spec recommends this.
+ item->setEditable(false); // prevent editing of the item
+ model->appendRow(item);
+ }
+}
+
+void Settings::storeSettings()
+{
+ unsigned short status;
+ unsigned short location;
+ unsigned short interval;
+
+ settings->setValue("autoconnect", ui->connectIfNecessary->checkState());
+ settings->setValue("autolaunch", ui->launchOnPowerOn->checkState());
+ settings->setValue("user", ui->login_user->text());
+ settings->setValue("pass", ui->login_pass->text());
+#ifdef Q_WS_MAEMO_5
+ switch(interval_selector->currentIndex()) {
+ case 0:
+ interval = LOCATION_INTERVAL_1S;
+ break;
+ case 1:
+ interval = LOCATION_INTERVAL_2S;
+ break;
+ case 2:
+ interval = LOCATION_INTERVAL_5S;
+ break;
+ case 3:
+ interval = LOCATION_INTERVAL_10S;
+ break;
+ case 4:
+ interval = LOCATION_INTERVAL_20S;
+ break;
+ case 5:
+ interval = LOCATION_INTERVAL_30S;
+ break;
+ case 6:
+ interval = LOCATION_INTERVAL_60S;
+ break;
+ case 7:
+ interval = LOCATION_INTERVAL_120S;
+ break;
+ }
+ settings->setValue("interval", interval);
+
+ if (ui->location_gps->isChecked())
+ location = LOCATION_METHOD_GNSS;
+ else if (ui->location_gps_network->isChecked())
+ location = LOCATION_METHOD_AGNSS | LOCATION_METHOD_ACWP;
+ else if (ui->location_network->isChecked())
+ location = LOCATION_METHOD_ACWP;
+ settings->setValue("location", location);
+#endif
+
+ settings->setValue("status", status);
+}
+
+#ifdef Q_WS_MAEMO_5
+void Settings::updateDaemon()
+{
+ if (ui->status_on->isChecked()) {
+ if (DBusClient::daemonRunning())
+ DBusClient::reloadDaemonConfig();
+ else
+ (new QProcess())->start(QString("/opt/linfati.com/googlelatitude-daemon"));
+ }
+ else if (ui->status_off->isChecked())
+ DBusClient::quitDaemon();
+ //else if (ui->status_hide->isChecked())
+ // status = STATUS_HIDE;
+}
+#endif
+
+void Settings::changeEvent(QEvent *e)
+{
+ QWidget::changeEvent(e);
+ switch (e->type()) {
+ case QEvent::LanguageChange:
+ ui->retranslateUi(this);
+ break;
+ default:
+ break;
+ }
+}
--- /dev/null
+#ifndef SETTINGS_H
+#define SETTINGS_H
+
+#include <QWidget>
+#include <QStandardItemModel>
+#include <QSettings>
+#include <QPushButton>
+#include <QCloseEvent>
+#include <QLineEdit>
+#include <QFormLayout>
+#ifdef Q_WS_MAEMO_5
+#include <QMaemo5ValueButton>
+#include <QMaemo5ListPickSelector>
+#include <QStandardItemModel>
+extern "C" {
+#include <location/location-gps-device.h>
+#include <location/location-gpsd-control.h>
+}
+#endif
+namespace Ui {
+ class Settings;
+}
+
+class Settings : public QWidget
+{
+ Q_OBJECT
+
+public:
+ explicit Settings(QWidget *parent = 0);
+ ~Settings();
+
+protected:
+ void changeEvent(QEvent *e);
+ void closeEvent(QCloseEvent *e);
+
+private:
+#ifdef Q_WS_MAEMO_5
+ void updateDaemon();
+#endif
+ void addUIElements();
+ void loadSettings();
+ void storeSettings();
+ void populateListModel(QStandardItemModel *model);
+ enum statuses { STATUS_ON, STATUS_OFF, STATUS_HIDE };
+ Ui::Settings *ui;
+ QStringList intervals;
+ QSettings *settings;
+#ifdef Q_WS_MAEMO_5
+ QMaemo5ValueButton *interval_button;
+ QMaemo5ListPickSelector *interval_selector;
+ QStandardItemModel* interval_model;
+#endif
+};
+
+#endif // SETTINGS_H
--- /dev/null
+TARGET = googlelatitude-settings
+HEADERS += settings.h ../common/dbusclient.h
+SOURCES += main.cpp settings.cpp ../common/dbusclient.cpp
+
+OBJECTS_DIR = build
+MOC_DIR = build
+DESTDIR = build
+
+TEMPLATE = app
+
+contains(QT_CONFIG, maemo5) {
+ QT += maemo5 dbus
+ CONFIG += link_pkgconfig
+ PKGCONFIG += glib-2.0 liblocation
+}
+
+FORMS += \
+ settings.ui
+
+unix {
+ #VARIABLES
+ isEmpty(PREFIX) {
+ PREFIX = /usr
+ }
+ BINDIR = $$PREFIX/bin
+ DATADIR =$$PREFIX/share
+
+ DEFINES += DATADIR=\\\"$$DATADIR\\\" PKGDATADIR=\\\"$$PKGDATADIR\\\"
+
+ #MAKE INSTALL
+
+ INSTALLS += target
+ target.path =$$BINDIR
+}
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>Settings</class>
+ <widget class="QWidget" name="Settings">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>640</width>
+ <height>480</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string>Settings</string>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout">
+ <item>
+ <widget class="QScrollArea" name="scrollArea">
+ <property name="horizontalScrollBarPolicy">
+ <enum>Qt::ScrollBarAlwaysOff</enum>
+ </property>
+ <property name="widgetResizable">
+ <bool>true</bool>
+ </property>
+ <widget class="QWidget" name="widget">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>618</width>
+ <height>458</height>
+ </rect>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout_2">
+ <item>
+ <widget class="QGroupBox" name="groupBox">
+ <property name="title">
+ <string>Latitude Status</string>
+ </property>
+ <layout class="QHBoxLayout" name="horizontalLayout">
+ <property name="spacing">
+ <number>0</number>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <item>
+ <widget class="QRadioButton" name="status_on">
+ <property name="text">
+ <string>On</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QRadioButton" name="status_off">
+ <property name="text">
+ <string>Off</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QRadioButton" name="status_hide">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>Hide</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item>
+ <widget class="QGroupBox" name="groupBox_2">
+ <property name="title">
+ <string>Location Mode</string>
+ </property>
+ <layout class="QHBoxLayout" name="horizontalLayout_2">
+ <property name="spacing">
+ <number>0</number>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <item>
+ <widget class="QRadioButton" name="location_gps">
+ <property name="text">
+ <string>GPS Only</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QRadioButton" name="location_gps_network">
+ <property name="text">
+ <string>GPS + Mobile Network</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QRadioButton" name="location_network">
+ <property name="text">
+ <string>Mobile Network</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item>
+ <widget class="QCheckBox" name="launchOnPowerOn">
+ <property name="text">
+ <string>Launch on power on</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QCheckBox" name="connectIfNecessary">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>Connect to network if necessary</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QGroupBox" name="groupBox_3">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Preferred" vsizetype="Maximum">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="title">
+ <string>Google Login</string>
+ </property>
+ <layout class="QFormLayout" name="formLayout">
+ <property name="fieldGrowthPolicy">
+ <enum>QFormLayout::ExpandingFieldsGrow</enum>
+ </property>
+ <item row="0" column="0">
+ <widget class="QLabel" name="label">
+ <property name="text">
+ <string>Login</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <widget class="QLineEdit" name="login_user"/>
+ </item>
+ <item row="2" column="0">
+ <widget class="QLabel" name="label_2">
+ <property name="text">
+ <string>Password</string>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="1">
+ <widget class="QLineEdit" name="login_pass">
+ <property name="echoMode">
+ <enum>QLineEdit::Password</enum>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item>
+ <widget class="QWidget" name="widget_2" native="true">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Preferred" vsizetype="Maximum">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <layout class="QHBoxLayout" name="horizontalLayout_3">
+ <item>
+ <widget class="QPushButton" name="about_button">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>About...</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="ok_button">
+ <property name="text">
+ <string>Ok</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
--- /dev/null
+/********************************************************************************
+** Form generated from reading UI file 'settings.ui'
+**
+** Created: Thu Jan 6 21:00:12 2011
+** by: Qt User Interface Compiler version 4.7.0
+**
+** WARNING! All changes made in this file will be lost when recompiling UI file!
+********************************************************************************/
+
+#ifndef UI_SETTINGS_H
+#define UI_SETTINGS_H
+
+#include <QtCore/QVariant>
+#include <QtGui/QAction>
+#include <QtGui/QApplication>
+#include <QtGui/QButtonGroup>
+#include <QtGui/QCheckBox>
+#include <QtGui/QFormLayout>
+#include <QtGui/QGroupBox>
+#include <QtGui/QHBoxLayout>
+#include <QtGui/QHeaderView>
+#include <QtGui/QLabel>
+#include <QtGui/QLineEdit>
+#include <QtGui/QPushButton>
+#include <QtGui/QRadioButton>
+#include <QtGui/QScrollArea>
+#include <QtGui/QVBoxLayout>
+#include <QtGui/QWidget>
+
+QT_BEGIN_NAMESPACE
+
+class Ui_Settings
+{
+public:
+ QVBoxLayout *verticalLayout;
+ QScrollArea *scrollArea;
+ QWidget *widget;
+ QVBoxLayout *verticalLayout_2;
+ QGroupBox *groupBox;
+ QHBoxLayout *horizontalLayout;
+ QRadioButton *status_on;
+ QRadioButton *status_off;
+ QRadioButton *status_hide;
+ QGroupBox *groupBox_2;
+ QHBoxLayout *horizontalLayout_2;
+ QRadioButton *location_gps;
+ QRadioButton *location_gps_network;
+ QRadioButton *location_network;
+ QCheckBox *launchOnPowerOn;
+ QCheckBox *connectIfNecessary;
+ QGroupBox *groupBox_3;
+ QFormLayout *formLayout;
+ QLabel *label;
+ QLineEdit *login_user;
+ QLabel *label_2;
+ QLineEdit *login_pass;
+ QWidget *widget_2;
+ QHBoxLayout *horizontalLayout_3;
+ QPushButton *about_button;
+ QPushButton *ok_button;
+
+ void setupUi(QWidget *Settings)
+ {
+ if (Settings->objectName().isEmpty())
+ Settings->setObjectName(QString::fromUtf8("Settings"));
+ Settings->resize(640, 480);
+ verticalLayout = new QVBoxLayout(Settings);
+ verticalLayout->setObjectName(QString::fromUtf8("verticalLayout"));
+ scrollArea = new QScrollArea(Settings);
+ scrollArea->setObjectName(QString::fromUtf8("scrollArea"));
+ scrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
+ scrollArea->setWidgetResizable(true);
+ widget = new QWidget();
+ widget->setObjectName(QString::fromUtf8("widget"));
+ widget->setGeometry(QRect(0, 0, 618, 458));
+ verticalLayout_2 = new QVBoxLayout(widget);
+ verticalLayout_2->setObjectName(QString::fromUtf8("verticalLayout_2"));
+ groupBox = new QGroupBox(widget);
+ groupBox->setObjectName(QString::fromUtf8("groupBox"));
+ horizontalLayout = new QHBoxLayout(groupBox);
+ horizontalLayout->setSpacing(0);
+ horizontalLayout->setContentsMargins(0, 0, 0, 0);
+ horizontalLayout->setObjectName(QString::fromUtf8("horizontalLayout"));
+ status_on = new QRadioButton(groupBox);
+ status_on->setObjectName(QString::fromUtf8("status_on"));
+
+ horizontalLayout->addWidget(status_on);
+
+ status_off = new QRadioButton(groupBox);
+ status_off->setObjectName(QString::fromUtf8("status_off"));
+
+ horizontalLayout->addWidget(status_off);
+
+ status_hide = new QRadioButton(groupBox);
+ status_hide->setObjectName(QString::fromUtf8("status_hide"));
+ status_hide->setEnabled(false);
+
+ horizontalLayout->addWidget(status_hide);
+
+
+ verticalLayout_2->addWidget(groupBox);
+
+ groupBox_2 = new QGroupBox(widget);
+ groupBox_2->setObjectName(QString::fromUtf8("groupBox_2"));
+ horizontalLayout_2 = new QHBoxLayout(groupBox_2);
+ horizontalLayout_2->setSpacing(0);
+ horizontalLayout_2->setContentsMargins(0, 0, 0, 0);
+ horizontalLayout_2->setObjectName(QString::fromUtf8("horizontalLayout_2"));
+ location_gps = new QRadioButton(groupBox_2);
+ location_gps->setObjectName(QString::fromUtf8("location_gps"));
+
+ horizontalLayout_2->addWidget(location_gps);
+
+ location_gps_network = new QRadioButton(groupBox_2);
+ location_gps_network->setObjectName(QString::fromUtf8("location_gps_network"));
+
+ horizontalLayout_2->addWidget(location_gps_network);
+
+ location_network = new QRadioButton(groupBox_2);
+ location_network->setObjectName(QString::fromUtf8("location_network"));
+
+ horizontalLayout_2->addWidget(location_network);
+
+
+ verticalLayout_2->addWidget(groupBox_2);
+
+ launchOnPowerOn = new QCheckBox(widget);
+ launchOnPowerOn->setObjectName(QString::fromUtf8("launchOnPowerOn"));
+
+ verticalLayout_2->addWidget(launchOnPowerOn);
+
+ connectIfNecessary = new QCheckBox(widget);
+ connectIfNecessary->setObjectName(QString::fromUtf8("connectIfNecessary"));
+ connectIfNecessary->setEnabled(false);
+
+ verticalLayout_2->addWidget(connectIfNecessary);
+
+ groupBox_3 = new QGroupBox(widget);
+ groupBox_3->setObjectName(QString::fromUtf8("groupBox_3"));
+ QSizePolicy sizePolicy(QSizePolicy::Preferred, QSizePolicy::Maximum);
+ sizePolicy.setHorizontalStretch(0);
+ sizePolicy.setVerticalStretch(0);
+ sizePolicy.setHeightForWidth(groupBox_3->sizePolicy().hasHeightForWidth());
+ groupBox_3->setSizePolicy(sizePolicy);
+ formLayout = new QFormLayout(groupBox_3);
+ formLayout->setObjectName(QString::fromUtf8("formLayout"));
+ formLayout->setFieldGrowthPolicy(QFormLayout::ExpandingFieldsGrow);
+ label = new QLabel(groupBox_3);
+ label->setObjectName(QString::fromUtf8("label"));
+
+ formLayout->setWidget(0, QFormLayout::LabelRole, label);
+
+ login_user = new QLineEdit(groupBox_3);
+ login_user->setObjectName(QString::fromUtf8("login_user"));
+
+ formLayout->setWidget(0, QFormLayout::FieldRole, login_user);
+
+ label_2 = new QLabel(groupBox_3);
+ label_2->setObjectName(QString::fromUtf8("label_2"));
+
+ formLayout->setWidget(2, QFormLayout::LabelRole, label_2);
+
+ login_pass = new QLineEdit(groupBox_3);
+ login_pass->setObjectName(QString::fromUtf8("login_pass"));
+ login_pass->setEchoMode(QLineEdit::Password);
+
+ formLayout->setWidget(2, QFormLayout::FieldRole, login_pass);
+
+
+ verticalLayout_2->addWidget(groupBox_3);
+
+ widget_2 = new QWidget(widget);
+ widget_2->setObjectName(QString::fromUtf8("widget_2"));
+ sizePolicy.setHeightForWidth(widget_2->sizePolicy().hasHeightForWidth());
+ widget_2->setSizePolicy(sizePolicy);
+ horizontalLayout_3 = new QHBoxLayout(widget_2);
+ horizontalLayout_3->setObjectName(QString::fromUtf8("horizontalLayout_3"));
+ about_button = new QPushButton(widget_2);
+ about_button->setObjectName(QString::fromUtf8("about_button"));
+ about_button->setEnabled(false);
+
+ horizontalLayout_3->addWidget(about_button);
+
+ ok_button = new QPushButton(widget_2);
+ ok_button->setObjectName(QString::fromUtf8("ok_button"));
+
+ horizontalLayout_3->addWidget(ok_button);
+
+
+ verticalLayout_2->addWidget(widget_2);
+
+ scrollArea->setWidget(widget);
+
+ verticalLayout->addWidget(scrollArea);
+
+
+ retranslateUi(Settings);
+
+ QMetaObject::connectSlotsByName(Settings);
+ } // setupUi
+
+ void retranslateUi(QWidget *Settings)
+ {
+ Settings->setWindowTitle(QApplication::translate("Settings", "Settings", 0, QApplication::UnicodeUTF8));
+ groupBox->setTitle(QApplication::translate("Settings", "Latitude Status", 0, QApplication::UnicodeUTF8));
+ status_on->setText(QApplication::translate("Settings", "On", 0, QApplication::UnicodeUTF8));
+ status_off->setText(QApplication::translate("Settings", "Off", 0, QApplication::UnicodeUTF8));
+ status_hide->setText(QApplication::translate("Settings", "Hide", 0, QApplication::UnicodeUTF8));
+ groupBox_2->setTitle(QApplication::translate("Settings", "Location Mode", 0, QApplication::UnicodeUTF8));
+ location_gps->setText(QApplication::translate("Settings", "GPS Only", 0, QApplication::UnicodeUTF8));
+ location_gps_network->setText(QApplication::translate("Settings", "GPS + Mobile Network", 0, QApplication::UnicodeUTF8));
+ location_network->setText(QApplication::translate("Settings", "Mobile Network", 0, QApplication::UnicodeUTF8));
+ launchOnPowerOn->setText(QApplication::translate("Settings", "Launch on power on", 0, QApplication::UnicodeUTF8));
+ connectIfNecessary->setText(QApplication::translate("Settings", "Connect to network if necessary", 0, QApplication::UnicodeUTF8));
+ groupBox_3->setTitle(QApplication::translate("Settings", "Google Login", 0, QApplication::UnicodeUTF8));
+ label->setText(QApplication::translate("Settings", "Login", 0, QApplication::UnicodeUTF8));
+ label_2->setText(QApplication::translate("Settings", "Password", 0, QApplication::UnicodeUTF8));
+ about_button->setText(QApplication::translate("Settings", "About...", 0, QApplication::UnicodeUTF8));
+ ok_button->setText(QApplication::translate("Settings", "Ok", 0, QApplication::UnicodeUTF8));
+ } // retranslateUi
+
+};
+
+namespace Ui {
+ class Settings: public Ui_Settings {};
+} // namespace Ui
+
+QT_END_NAMESPACE
+
+#endif // UI_SETTINGS_H
--- /dev/null
+[Dolphin]
+AdditionalInfo=3
+CategorizedSorting=true
+ShowPreview=true
+Sorting=6
+Timestamp=2010,12,23,20,40,38
+ViewMode=1
--- /dev/null
+#include <string.h>
+#include <stdlib.h>
+#include <X11/Xlib.h>
+#include <gdk/gdkx.h>
+#include <gtk/gtk.h>
+
+#ifdef MAEMO_CHANGES
+#include <libosso.h>
+
+static const char binary[] = "/opt/linfati.com/googlelatitude-settings";
+
+osso_return_t execute(osso_context_t *osso_context, gpointer parent, gboolean user_activated)
+{
+ char args[sizeof(binary) + 64];
+ Window id = None;
+
+ (void) osso_context;
+
+ if (parent && GTK_WIDGET(parent) && GTK_WIDGET(parent)->window)
+ id = gdk_x11_drawable_get_xid(GTK_WIDGET(parent)->window);
+
+ sprintf(args, "%s --parent 0x%08x%s", binary, (unsigned int) id, user_activated ? " --user" : "");
+ return system(args);
+}
+
+osso_return_t save_state(osso_context_t *osso_context, gpointer parent)
+{
+ (void) osso_context;
+ (void) parent;
+
+ return OSSO_OK;
+}
+
+#endif
--- /dev/null
+TARGET = glsettingsplugin
+TEMPLATE = lib
+SOURCES = settingsplugin.c
+
+OBJECTS_DIR = build
+MOC_DIR = build
+DESTDIR = build
+
+CONFIG += plugin link_pkgconfig
+PKGCONFIG += gtk+-2.0 libosso
+
+unix {
+ #VARIABLES
+ isEmpty(PREFIX) {
+ PREFIX = /usr
+ }
+ BINDIR = $$PREFIX/bin
+ DATADIR =$$PREFIX/share
+
+ DEFINES += DATADIR=\\\"$$DATADIR\\\" PKGDATADIR=\\\"$$PKGDATADIR\\\"
+
+ #MAKE INSTALL
+
+ INSTALLS += target desktop
+
+ target.path = $$system(pkg-config hildon-control-panel --variable=pluginlibdir)
+
+ desktop.path = $$system(pkg-config hildon-control-panel --variable=plugindesktopentrydir)
+ desktop.files = ../../data/libglsettingsplugin.desktop
+}
+
--- /dev/null
+QMAKEVERSION = $$[QMAKE_VERSION]
+ISQT4 = $$find(QMAKEVERSION, ^[2-9])
+isEmpty( ISQT4 ) {
+error("Use the qmake include with Qt4.4 or greater, on Debian that is qmake-qt4");
+}
+
+TEMPLATE = subdirs
+SUBDIRS = daemon settings settingsplugin