From: Nicolai Hess Date: Sun, 16 May 2010 20:37:50 +0000 (+0200) Subject: Initial git release X-Git-Url: http://git.maemo.org/git/?p=connectnow-hp;a=commitdiff_plain;h=refs%2Fheads%2Fmaster Initial git release --- diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..8a5c6f9 --- /dev/null +++ b/Makefile @@ -0,0 +1,49 @@ +SUBDIRS = src +DATA_FILE=connectnow-home-widget.desktop +BUILDDIR = build +HILDON_WIDGET_LIB_DIR=$(shell pkg-config libhildondesktop-1 --variable=hildondesktoplibdir) +HILDON_WIDGET_DATA_DIR=$(shell pkg-config libhildondesktop-1 --variable=hildonhomedesktopentrydir) +IMAGE_PATH=/usr/share/icons/hicolor/96x96/hildon/ + + +all: create_builddir subdirs + + + +subdirs: $(SUBDIRS) + + +$(SUBDIRS): + $(MAKE) -C $@ + +create_builddir: + mkdir -p $(BUILDDIR) + +install: all + install -d $(DESTDIR)/$(HILDON_WIDGET_LIB_DIR) + install $(BUILDDIR)/*.so $(DESTDIR)/$(HILDON_WIDGET_LIB_DIR) + install -d $(DESTDIR)/$(HILDON_WIDGET_DATA_DIR) + install data/$(DATA_FILE) $(DESTDIR)/$(HILDON_WIDGET_DATA_DIR) + install -d $(DESTDIR)/$(IMAGE_PATH) + install -m 644 data/connectnow_general_preview.png $(DESTDIR)/$(IMAGE_PATH) + install -m 644 data/connectnow_general_connected.png $(DESTDIR)/$(IMAGE_PATH) + install -m 644 data/connectnow_general_disconnected.png $(DESTDIR)/$(IMAGE_PATH) + install -m 644 data/connectnow_gprs_connected_net.png $(DESTDIR)/$(IMAGE_PATH) + install -m 644 data/connectnow_gprs_disconnected_net.png $(DESTDIR)/$(IMAGE_PATH) + install -m 644 data/connectnow_gprs_connected_mms.png $(DESTDIR)/$(IMAGE_PATH) + install -m 644 data/connectnow_gprs_disconnected_mms.png $(DESTDIR)/$(IMAGE_PATH) + install -m 644 data/connectnow_wifi_connected_home.png $(DESTDIR)/$(IMAGE_PATH) + install -m 644 data/connectnow_wifi_disconnected_home.png $(DESTDIR)/$(IMAGE_PATH) + install -m 644 data/connectnow_wifi_connected_work.png $(DESTDIR)/$(IMAGE_PATH) + install -m 644 data/connectnow_wifi_disconnected_work.png $(DESTDIR)/$(IMAGE_PATH) + install -m 644 data/connectnow_usb_connected.png $(DESTDIR)/$(IMAGE_PATH) + install -m 644 data/connectnow_usb_disconnected.png $(DESTDIR)/$(IMAGE_PATH) + install -m 644 data/connectnow_bt_connected.png $(DESTDIR)/$(IMAGE_PATH) + install -m 644 data/connectnow_bt_disconnected.png $(DESTDIR)/$(IMAGE_PATH) + + +.PHONY: all clean install $(SUBDIRS) + +clean: + rm -rf build + for d in $(SUBDIRS); do (cd $$d; $(MAKE) clean);done \ No newline at end of file diff --git a/data/connectnow-home-widget.desktop b/data/connectnow-home-widget.desktop new file mode 100644 index 0000000..c47325b --- /dev/null +++ b/data/connectnow-home-widget.desktop @@ -0,0 +1,6 @@ +[Desktop Entry] +Name=ConnectNow +Comment=Connect to switch between internet connections +Type=default +X-Multiple=true +X-Path=connectnow-home-widget.so diff --git a/data/connectnow_bt_connected.png b/data/connectnow_bt_connected.png new file mode 100644 index 0000000..80afc3b Binary files /dev/null and b/data/connectnow_bt_connected.png differ diff --git a/data/connectnow_bt_disconnected.png b/data/connectnow_bt_disconnected.png new file mode 100644 index 0000000..4b93f8a Binary files /dev/null and b/data/connectnow_bt_disconnected.png differ diff --git a/data/connectnow_general_connected.png b/data/connectnow_general_connected.png new file mode 100644 index 0000000..60662eb Binary files /dev/null and b/data/connectnow_general_connected.png differ diff --git a/data/connectnow_general_disconnected.png b/data/connectnow_general_disconnected.png new file mode 100644 index 0000000..87e5438 Binary files /dev/null and b/data/connectnow_general_disconnected.png differ diff --git a/data/connectnow_general_preview.png b/data/connectnow_general_preview.png new file mode 100644 index 0000000..6d8a82b Binary files /dev/null and b/data/connectnow_general_preview.png differ diff --git a/data/connectnow_gprs_connected_mms.png b/data/connectnow_gprs_connected_mms.png new file mode 100644 index 0000000..3f9b0b1 Binary files /dev/null and b/data/connectnow_gprs_connected_mms.png differ diff --git a/data/connectnow_gprs_connected_net.png b/data/connectnow_gprs_connected_net.png new file mode 100644 index 0000000..d63c2ba Binary files /dev/null and b/data/connectnow_gprs_connected_net.png differ diff --git a/data/connectnow_gprs_disconnected_mms.png b/data/connectnow_gprs_disconnected_mms.png new file mode 100644 index 0000000..e0ce6ec Binary files /dev/null and b/data/connectnow_gprs_disconnected_mms.png differ diff --git a/data/connectnow_gprs_disconnected_net.png b/data/connectnow_gprs_disconnected_net.png new file mode 100644 index 0000000..81bc5fa Binary files /dev/null and b/data/connectnow_gprs_disconnected_net.png differ diff --git a/data/connectnow_usb_connected.png b/data/connectnow_usb_connected.png new file mode 100644 index 0000000..980fe45 Binary files /dev/null and b/data/connectnow_usb_connected.png differ diff --git a/data/connectnow_usb_disconnected.png b/data/connectnow_usb_disconnected.png new file mode 100644 index 0000000..287011b Binary files /dev/null and b/data/connectnow_usb_disconnected.png differ diff --git a/data/connectnow_wifi_connected_home.png b/data/connectnow_wifi_connected_home.png new file mode 100644 index 0000000..ae620da Binary files /dev/null and b/data/connectnow_wifi_connected_home.png differ diff --git a/data/connectnow_wifi_connected_work.png b/data/connectnow_wifi_connected_work.png new file mode 100644 index 0000000..2583dc4 Binary files /dev/null and b/data/connectnow_wifi_connected_work.png differ diff --git a/data/connectnow_wifi_disconnected_home.png b/data/connectnow_wifi_disconnected_home.png new file mode 100644 index 0000000..ff0ac90 Binary files /dev/null and b/data/connectnow_wifi_disconnected_home.png differ diff --git a/data/connectnow_wifi_disconnected_work.png b/data/connectnow_wifi_disconnected_work.png new file mode 100644 index 0000000..a7dc70f Binary files /dev/null and b/data/connectnow_wifi_disconnected_work.png differ diff --git a/debian/changelog b/debian/changelog new file mode 100644 index 0000000..bdf8a67 --- /dev/null +++ b/debian/changelog @@ -0,0 +1,53 @@ +connectnow-home-widget (0.8) unstable; urgency=low + + * Fixed bug: Empty settings file or older settings file without + icon names crashed this widget - and hildon-desktop as well. + + -- Nicolai Hess Fri, 7 May 2010 00:24:56 +0200 + +connectnow-home-widget (0.7) unstable; urgency=low + + * Add icon selector to settingsmenu + * included predefined icons + + -- Nicolai Hess Tue, 4 May 2010 23:48:40 +0200 + +connectnow-home-widget (0.6) unstable; urgency=low + + * Fixed bug in settings dialog + + -- Nicolai Hess Mon, 19 Apr 2010 22:17:56 +0200 + +connectnow-home-widget (0.5) unstable; urgency=low + + * widget size is configurable. + * arbitrary display name. + + -- Nicolai Hess Mon, 29 Mar 2010 22:52:48 +0200 + +connectnow-home-widget (0.4) unstable; urgency=low + + * add patch from qwerty12 to switch to normal-mode before + trying to connenct while in offline-mode. + + -- Nicolai Hess Sun, 28 Mar 2010 13:15:52 +0200 + +connectnow-home-widget (0.3) unstable; urgency=low + + * change the widget size (bigger) + + * load icon from configfile (no settings dialog support to select an icon) + + -- Nicolai Hess Fri, 26 Mar 2010 20:09:46 +0100 + +connectnow-home-widget (0.2) unstable; urgency=low + + * changed section entry in debian/control + + -- Nicolai Hess Wed, 17 Mar 2010 18:20:47 +0100 + +connectnow-home-widget (0.1) unstable; urgency=low + + * Initial Release. + + -- Nicolai Hess Tue, 16 Mar 2010 20:32:42 +0100 diff --git a/debian/compat b/debian/compat new file mode 100644 index 0000000..7ed6ff8 --- /dev/null +++ b/debian/compat @@ -0,0 +1 @@ +5 diff --git a/debian/connectnow-home-widget-dev.dirs b/debian/connectnow-home-widget-dev.dirs new file mode 100644 index 0000000..4418816 --- /dev/null +++ b/debian/connectnow-home-widget-dev.dirs @@ -0,0 +1,2 @@ +usr/lib +usr/include diff --git a/debian/connectnow-home-widget-dev.install b/debian/connectnow-home-widget-dev.install new file mode 100644 index 0000000..3c996c8 --- /dev/null +++ b/debian/connectnow-home-widget-dev.install @@ -0,0 +1,6 @@ +usr/include/* +usr/lib/lib*.a +usr/lib/lib*.so +usr/lib/pkgconfig/* +usr/lib/*.la +usr/share/pkgconfig/* diff --git a/debian/connectnow-home-widget1.dirs b/debian/connectnow-home-widget1.dirs new file mode 100644 index 0000000..6845771 --- /dev/null +++ b/debian/connectnow-home-widget1.dirs @@ -0,0 +1 @@ +usr/lib diff --git a/debian/connectnow-home-widget1.install b/debian/connectnow-home-widget1.install new file mode 100644 index 0000000..d0dbfd1 --- /dev/null +++ b/debian/connectnow-home-widget1.install @@ -0,0 +1 @@ +usr/lib/lib*.so.* diff --git a/debian/control b/debian/control new file mode 100644 index 0000000..77f6ca1 --- /dev/null +++ b/debian/control @@ -0,0 +1,347 @@ +Source: connectnow-home-widget +Priority: extra +Maintainer: Nicolai Hess +Build-Depends: debhelper (>= 5), libgtk2.0-dev, libhildon1-dev, libhildondesktop1-dev, libconic0-dev, icd2-osso-ic-dev, mce-dev, libhildonfm2-dev +Standards-Version: 3.7.2 +Section: user/desktop + +Package: connectnow-home-widget +Architecture: any +Depends: ${shlibs:Depends}, +Description: A desktop widget to switch internet connections. + This desktop widget can be used to connect to a specific + internet connection. +XB-Maemo-Display-Name:ConnectNow internet connection switch +XSBC-Bugtracker: mailto:nicolaihess@web.de +XB-Maemo-Icon-26: + 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 + rrXMt7o8dgl12aBtrzxThiqvaLqnm2e+p7119cpj/Cf5p1uZf+0cWxpvLLTN + apBZkH3Y+JhSEAo3tMNqXkSJ8DKmqU/V4XhMTpQHIzVBReziJro3uW455tm3 + HzUs3FP0uOhjVta/IUi5BD91DsDO3EHWBNQFMCohMMcTWKjt4W/cT4kiDlAM + sgZ0eGtR3eqR+TCxYGTA6I3DG1Z0q3al+l/B350U4Ff3sG6qbpfujjrwdv/b + LncWJ3sc+XDw4NGePxZkVEpvmvrQkEQPlOdKPTqCNmKmSEMnOUSdLUdiL7vj + A23FKvsL9pbWy5WbHi6e9zzztIl+/X13+zW16u1q5Zbves2Cra5av7GOU06i + EW5QIQqKGxenFJ9UW2dcT1+evlhXGO8WfzThZKku2ZAc+MNZ1yZ/XH6LgmS1 + L+ajrgBCMFQYlRk4Y8pSW5hGcsaTJ49vPObcrTHzY+fFdChWR30cKYc7eB1v + r7a/0f64x2rtMO0w7Tjl7+qoNix4nBNG2I+MHjbJe9yK+ku8litfThSn6obp + ysk7OEMqrUctyoYqF6IypsOLzsBcLpUrRSuAr3JVEQEAWA4A/2kDstkNHQAs + l214FyDvi9qmR4DYh0Y0HOCr7MJtANWWp0sbFGjOigPmH+mHTa6VnfUTs9oY + BQBIL/5eHFXSzNT29JbTZ85+Sco9dv9oq6MrUvINWaWfDe9kX1qlfCETLTR2 + 5F2yLt6JqTyUzGDmecnzvbuvRcfWUW0SWr92tgoxhdQL2V5uivcy750VN9g4 + Wp63mm11QtPBLFPzSdNVlKMg8qROCAIAdAI4kZM5G0tNgcYKpgtyfIlNiSjp + bbL6tum717fpRb89T3px4MXirJb3P93rfn9jdkCq9kfX5Kf6u3ydVivtwWQn + uige5J1umT4qrYVx+fYqWzZuy0gql70k63nWIUNCv0/9W/eP9dFYX7S+bl1F + Y7KeZt3bqqMmhXYqXUUsFak/5VipQb6mRPQUbQHaB4OsBchQ9EI6oPrAGjmA + DKGecjyAlgCm/ZcAppWspR6Aas7veRIgrsAJaYCq5bnyKUB1uaHsCPAVFIiT + aJxfq2BAQTf1zQGbAy8OPkt63UomXWw5p9g9+tTnr5/1Bd/vpt75fnd9drKh + haGFMZ13i3m0GnFoZ/I21eLFmOIw0bnAKVkzrOetHmu7bXQN7ti1Q3aHZPeR + nqFe6z3zrMcptZXlCtNxhP5XDjkD//l2938UciEPcsZMs2xzmF0RsIc57GGO + GnC4VwNOCJ4S/FdwnOPsjqM65HXQV+hyK/Lm+FuNU79f7Xpl9pUpGd+zH+RE + 5jY3TRUTlEhlEjYVnSudW/pT3j086FDbozeTV/y4+KNGaoQusFqHagVBnWyv + PXj58PijxVkf82wL8goy1QviG11HFTRWQ9UdAgBvx1u4ALBATZMAUEWGYAyA + rqyyw3/V+59G2G2wa45bSFCgj7/PK59li7bRDBFu3sNhDhdyQ7mBsymfeshF + AMAJJAEOpOGYCpVPq+5yMJZzE2yFBhoahVR+jBhRKlppGmAlP8Qs3gQPriHf + qZ+xqKpataQqrDaOGzg+e1zPSuPrvqn7sc4l56eay5oczSNh829a3FO2k134 + S0G5gu8Frsb6yaU/NyTnFw9LTUiNTP1calEYUBhR1N64Boxl3A5sm2ZLtrfN + DlYY6b7b/Y2lhUeBR7B7X+vVdrft7tk9MLshzotr4jL5/fvAaUzlTUIWvX78 + etDr+dm1dnfctXdPjcTZ0U+iY2KGlWymSuIB+mM7tKiEZKSoVnI3l2KyuEhX + OBj+qAUnMoONsBTeYh4Wogh/ogMU1OHGIhjACJxQgwA+i9pUhZwxWf6tVstb + mxT3bVHS+GWT0//OCE5/8TnmXw/ABWqJaoC8xowbgBKjjjddAtgGbjgG4B0W + oAFAVakeFwIYyZ64D4WOYSFdwGJEi0k8G6WUwyViNCzkGC6RuwF84yFyHc7X + WVvHUMfZNnfGj5nq9Jf+mysPrjyvch27d7CDBtMA+UAelkdhkXQh0SppYiE9 + 8HoQ/WBP+rTnJU9dn5fm9vgZn3wuebb+flFMMRc1UmsaN+n3Go/LNFgKL54O + mHXTfDLfKCJtTLanbZ4rnzyLPQ94frYYEdI65GDIHsfrrZu0qd5qv9shn3U+ + e3yq2n7TmDRpGimyG6Y0/Nkw2SXKZbJLtstJrfeOZdt4x4S4ec/Es9XPmuXv + oqEKK5MxQVODhpIdLnBXGkm3oJcSFxAKLWz5Fi8FyXnIRDYAS7YwmQHiEbeg + GwCy2JYHATgr/0QEgOZ8Ef/VCf6fLGiNdT3rKy7l7OvY1Xfo2eIleeA+ndA2 + pb6w5q8oFRHoJrcC2MnfoAHUbTyTfwCURd3QGURjeaz0gpmU3IcCIdTfZCCf + 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 + AElFTkSuQmCC + ==== diff --git a/debian/copyright b/debian/copyright new file mode 100644 index 0000000..a52c8a7 --- /dev/null +++ b/debian/copyright @@ -0,0 +1,26 @@ +This is connectnow-home-widget, written and maintained by Nicolai Hess +on Tue, 16 Mar 2010 20:32:42 +0100. + +The original source can always be found at: + ftp://ftp.debian.org/dists/unstable/main/source/ + +Copyright Holder: Nicolai Hess + +License: + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this package; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +On Debian systems, the complete text of the GNU General +Public License can be found in `/usr/share/common-licenses/GPL'. diff --git a/debian/dirs b/debian/dirs new file mode 100644 index 0000000..ca882bb --- /dev/null +++ b/debian/dirs @@ -0,0 +1,2 @@ +usr/bin +usr/sbin diff --git a/debian/rules b/debian/rules new file mode 100755 index 0000000..f256356 --- /dev/null +++ b/debian/rules @@ -0,0 +1,105 @@ +#!/usr/bin/make -f +# -*- makefile -*- +# Sample debian/rules that uses debhelper. +# This file was originally written by Joey Hess and Craig Small. +# As a special exception, when this file is copied by dh-make into a +# dh-make output file, you may use that output file without restriction. +# This special exception was added by Craig Small in version 0.37 of dh-make. + +# Uncomment this to turn on verbose mode. +#export DH_VERBOSE=1 + + + + +CFLAGS = -Wall -g + +ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS))) + CFLAGS += -O0 +else + CFLAGS += -O2 +endif + +# shared library versions, option 1 +version=2.0.5 +major=2 +# option 2, assuming the library is created as src/.libs/libfoo.so.2.0.5 or so +#version=`ls src/.libs/lib*.so.* | \ +# awk '{if (match($$0,/[0-9]+\.[0-9]+\.[0-9]+$$/)) print substr($$0,RSTART)}'` +#major=`ls src/.libs/lib*.so.* | \ +# awk '{if (match($$0,/\.so\.[0-9]+$$/)) print substr($$0,RSTART+4)}'` + +configure: configure-stamp +configure-stamp: + dh_testdir + # Add here commands to configure the package. + + touch configure-stamp + + +build: build-stamp +build-stamp: configure-stamp + dh_testdir + + # Add here commands to compile the package. + $(MAKE) + + touch $@ + +clean: + dh_testdir + dh_testroot + rm -f build-stamp configure-stamp + + # Add here commands to clean up after the build process. + -$(MAKE) clean + + dh_clean + +install: build + dh_testdir + dh_testroot + dh_clean -k + dh_installdirs + + # Add here commands to install the package into debian/tmp + $(MAKE) DESTDIR=$(CURDIR)/debian/connectnow-home-widget install + + +# Build architecture-independent files here. +binary-indep: build install +# We have nothing to do by default. + +# Build architecture-dependent files here. +binary-arch: build install + dh_testdir + dh_testroot + dh_installchangelogs + dh_installdocs + dh_installexamples +# dh_install +# dh_installmenu +# dh_installdebconf +# dh_installlogrotate +# dh_installemacsen +# dh_installpam +# dh_installmime +# dh_installinit +# dh_installcron +# dh_installinfo + dh_installman + dh_link + dh_strip + dh_compress + dh_fixperms +# dh_perl +# dh_python +# dh_makeshlibs + dh_installdeb + dh_shlibdeps + dh_gencontrol + dh_md5sums + dh_builddeb + +binary: binary-indep binary-arch +.PHONY: build clean binary-indep binary-arch binary install configure diff --git a/src/Makefile b/src/Makefile new file mode 100644 index 0000000..8a5c6f9 --- /dev/null +++ b/src/Makefile @@ -0,0 +1,49 @@ +SUBDIRS = src +DATA_FILE=connectnow-home-widget.desktop +BUILDDIR = build +HILDON_WIDGET_LIB_DIR=$(shell pkg-config libhildondesktop-1 --variable=hildondesktoplibdir) +HILDON_WIDGET_DATA_DIR=$(shell pkg-config libhildondesktop-1 --variable=hildonhomedesktopentrydir) +IMAGE_PATH=/usr/share/icons/hicolor/96x96/hildon/ + + +all: create_builddir subdirs + + + +subdirs: $(SUBDIRS) + + +$(SUBDIRS): + $(MAKE) -C $@ + +create_builddir: + mkdir -p $(BUILDDIR) + +install: all + install -d $(DESTDIR)/$(HILDON_WIDGET_LIB_DIR) + install $(BUILDDIR)/*.so $(DESTDIR)/$(HILDON_WIDGET_LIB_DIR) + install -d $(DESTDIR)/$(HILDON_WIDGET_DATA_DIR) + install data/$(DATA_FILE) $(DESTDIR)/$(HILDON_WIDGET_DATA_DIR) + install -d $(DESTDIR)/$(IMAGE_PATH) + install -m 644 data/connectnow_general_preview.png $(DESTDIR)/$(IMAGE_PATH) + install -m 644 data/connectnow_general_connected.png $(DESTDIR)/$(IMAGE_PATH) + install -m 644 data/connectnow_general_disconnected.png $(DESTDIR)/$(IMAGE_PATH) + install -m 644 data/connectnow_gprs_connected_net.png $(DESTDIR)/$(IMAGE_PATH) + install -m 644 data/connectnow_gprs_disconnected_net.png $(DESTDIR)/$(IMAGE_PATH) + install -m 644 data/connectnow_gprs_connected_mms.png $(DESTDIR)/$(IMAGE_PATH) + install -m 644 data/connectnow_gprs_disconnected_mms.png $(DESTDIR)/$(IMAGE_PATH) + install -m 644 data/connectnow_wifi_connected_home.png $(DESTDIR)/$(IMAGE_PATH) + install -m 644 data/connectnow_wifi_disconnected_home.png $(DESTDIR)/$(IMAGE_PATH) + install -m 644 data/connectnow_wifi_connected_work.png $(DESTDIR)/$(IMAGE_PATH) + install -m 644 data/connectnow_wifi_disconnected_work.png $(DESTDIR)/$(IMAGE_PATH) + install -m 644 data/connectnow_usb_connected.png $(DESTDIR)/$(IMAGE_PATH) + install -m 644 data/connectnow_usb_disconnected.png $(DESTDIR)/$(IMAGE_PATH) + install -m 644 data/connectnow_bt_connected.png $(DESTDIR)/$(IMAGE_PATH) + install -m 644 data/connectnow_bt_disconnected.png $(DESTDIR)/$(IMAGE_PATH) + + +.PHONY: all clean install $(SUBDIRS) + +clean: + rm -rf build + for d in $(SUBDIRS); do (cd $$d; $(MAKE) clean);done \ No newline at end of file diff --git a/src/connectnow-home-widget.c b/src/connectnow-home-widget.c new file mode 100644 index 0000000..b88682d --- /dev/null +++ b/src/connectnow-home-widget.c @@ -0,0 +1,599 @@ +/* + * connectnow home widget for the maemo desktop. + * Copyright (C) 2010 Nicolai Hess + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "connectnow-home-widget.h" +#include "connectnow-settings-dialog.h" +#include "connectnow-load-and-store.h" + + +HD_DEFINE_PLUGIN_MODULE(ConnectNowHomePlugin, connect_now_home_plugin, HD_TYPE_HOME_PLUGIN_ITEM) + + +static GtkWidget* +build_ui() +{ + GtkWidget *contents = gtk_event_box_new(); + gtk_event_box_set_visible_window(GTK_EVENT_BOX(contents), FALSE); + gtk_container_set_border_width(GTK_CONTAINER(contents), 0); + gtk_widget_show_all(GTK_WIDGET(contents)); + return GTK_WIDGET(contents); +} + + +static void +connect_now_settings_connection_changed(HildonPickerButton* button, + gpointer data) +{ + gtk_entry_set_text(GTK_ENTRY(data), hildon_button_get_value(HILDON_BUTTON(button))); +} + +void +init_connection_list(ConnectNowHomePlugin* desktop_plugin, + GtkListStore* connection_list, + GtkWidget* selector, + GtkWidget* button) +{ + GSList* iap_list; + GSList* iap_entry; + + + iap_list = con_ic_connection_get_all_iaps(desktop_plugin->con); + for (iap_entry = iap_list; iap_entry!=NULL ; iap_entry=g_slist_next(iap_entry)) + { + ConIcIap* item = iap_entry->data; + const gchar* iap = con_ic_iap_get_id(item); + const gchar* name = con_ic_iap_get_name(item); + GtkTreeIter iter; + gtk_list_store_append (connection_list, &iter); + gtk_list_store_set(connection_list, &iter, 0, name, 1, iap, -1); + if(g_strcmp0(iap, desktop_plugin->connection_id)==0) + { + hildon_touch_selector_select_iter(HILDON_TOUCH_SELECTOR(selector), + 0, + &iter, + FALSE); + hildon_button_set_value(HILDON_BUTTON(button), name); + } + g_object_unref(item); + } + g_slist_free(iap_list); +} + + +static void +toggle_display_name_entry(GtkWidget* toggle_button, GtkWidget* entry) +{ + if(hildon_check_button_get_active(HILDON_CHECK_BUTTON(toggle_button))) + { + gtk_widget_set_sensitive(entry, TRUE); + } + else + { + gtk_widget_set_sensitive(entry, FALSE); + } +} + +static icon_data_t* +connect_now_create_icon_data(ConnectNowHomePlugin* desktop_plugin) +{ + icon_data_t* icon_data = g_new0(icon_data_t, 1); + icon_data->connect_name = g_strdup(desktop_plugin->connectedImageName); + icon_data->disconnect_name = g_strdup(desktop_plugin->disconnectedImageName); + icon_data->connect_icon = gtk_image_new_from_pixbuf(desktop_plugin->connectedImage); + icon_data->disconnect_icon = gtk_image_new_from_pixbuf(desktop_plugin->disconnectedImage); + return icon_data; +} + +static void +connect_now_show_settings_dialog(GtkWidget* widget, gpointer data) +{ + ConnectNowHomePlugin *desktop_plugin = CONNECT_NOW_HOME_PLUGIN(widget); + + GtkWidget *dialog; + GtkCellRenderer *renderer; + GtkWidget* selector; + GtkListStore *connection_list; + GtkWidget* icon_size_scale; + HildonTouchSelectorColumn* column; + GtkWidget* connection_button; + GtkWidget* display_name_entry; + GtkWidget* display_name_check_button; + GtkWidget* icon_button; + GtkWidget* icon_box; + GtkWidget* display_name_box; + GtkWidget* connection_name_box; + GtkWidget* connection_name_label; + + // Connection Setting + connection_button = hildon_picker_button_new(HILDON_SIZE_THUMB_HEIGHT, + HILDON_BUTTON_ARRANGEMENT_VERTICAL); + + selector = hildon_touch_selector_new(); + connection_list = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_STRING); + + renderer = gtk_cell_renderer_text_new(); + column = hildon_touch_selector_append_column(HILDON_TOUCH_SELECTOR(selector), + GTK_TREE_MODEL(connection_list), + renderer, "text", 0, NULL); + + hildon_touch_selector_column_set_text_column(column, 0); + hildon_touch_selector_set_column_selection_mode (HILDON_TOUCH_SELECTOR (selector), + HILDON_TOUCH_SELECTOR_SELECTION_MODE_SINGLE); + + hildon_picker_button_set_selector(HILDON_PICKER_BUTTON(connection_button), + HILDON_TOUCH_SELECTOR(selector)); + + init_connection_list(desktop_plugin, connection_list, selector, connection_button); + + connection_name_box = gtk_hbox_new(TRUE, 3); + connection_name_label = gtk_label_new("Connection:"); + + gtk_box_pack_start(GTK_BOX(connection_name_box), connection_name_label, TRUE, TRUE, 3); + gtk_box_pack_end(GTK_BOX(connection_name_box), connection_button, TRUE, TRUE, 3); + + + // Display name + display_name_entry = hildon_entry_new(HILDON_SIZE_FINGER_HEIGHT | HILDON_SIZE_AUTO_WIDTH); + if(desktop_plugin->connection_name!=NULL) + gtk_entry_set_text(GTK_ENTRY(display_name_entry), + desktop_plugin->connection_name); + + display_name_check_button = hildon_check_button_new(HILDON_SIZE_AUTO); + hildon_check_button_set_active(HILDON_CHECK_BUTTON(display_name_check_button), + !desktop_plugin->hide_connection_name); + + gtk_button_set_label(GTK_BUTTON(display_name_check_button), + "Display name"); + g_signal_connect(display_name_check_button, "toggled", G_CALLBACK(toggle_display_name_entry), + display_name_entry); + + + display_name_box = gtk_hbox_new(TRUE, 3); + gtk_box_pack_start(GTK_BOX(display_name_box), display_name_check_button, TRUE, TRUE, 3); + gtk_box_pack_end(GTK_BOX(display_name_box), display_name_entry, TRUE, TRUE, 3); + + g_signal_connect(G_OBJECT(connection_button),"value-changed", + G_CALLBACK(connect_now_settings_connection_changed), + display_name_entry); + + // icon settings + icon_button = hildon_button_new_with_text(HILDON_SIZE_THUMB_HEIGHT, + HILDON_BUTTON_ARRANGEMENT_VERTICAL, + "Icon", + NULL); + + icon_data_t* icon_data = connect_now_create_icon_data(desktop_plugin); + + icon_box = gtk_hbox_new(FALSE, 3); + GtkWidget* icon_box2 = gtk_hbox_new(TRUE, 3); + gtk_box_pack_start(GTK_BOX(icon_box2), icon_data->connect_icon, TRUE, TRUE, 0); + gtk_box_pack_start(GTK_BOX(icon_box2), icon_data->disconnect_icon, TRUE, TRUE, 0); + gtk_box_pack_start(GTK_BOX(icon_box), icon_box2, TRUE, FALSE, 0); + gtk_box_pack_start(GTK_BOX(icon_box), icon_button, TRUE, TRUE, 0); + + g_signal_connect(G_OBJECT(icon_button), "clicked", + G_CALLBACK(connect_now_show_icon_selector), icon_data); + + + // icon size + icon_size_scale = gtk_hscale_new_with_range(50, 200, 10); + gtk_scale_set_digits(GTK_SCALE(icon_size_scale), 0); + gtk_range_set_value(GTK_RANGE(icon_size_scale), desktop_plugin->widget_size); + + // dialog + dialog = gtk_dialog_new_with_buttons("Settings", + NULL, + 0, + dgettext("hildon-libs", "wdgt_bd_done"), + GTK_RESPONSE_ACCEPT, + NULL); + + gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))), icon_box, FALSE, FALSE, 3); + gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))), display_name_box, FALSE, FALSE, 3); + gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))), connection_name_box, FALSE, FALSE, 3); + gtk_box_pack_end(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))), icon_size_scale, FALSE, FALSE, 3); + + gtk_widget_show_all(dialog); + + if(gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) + { + const gchar* displayName = hildon_entry_get_text(HILDON_ENTRY(display_name_entry)); + const gchar* connection_name = hildon_button_get_value(HILDON_BUTTON(connection_button)); + g_free(desktop_plugin->connection_name); + + if(g_strcmp0(desktop_plugin->connectedImageName, icon_data->connect_name)!=0) + { + g_free(desktop_plugin->connectedImageName); + desktop_plugin->connectedImageName = g_strdup(icon_data->connect_name); + g_object_unref(desktop_plugin->connectedImage); + desktop_plugin->connectedImage = load_image(icon_data->connect_name); + } + + if(g_strcmp0(desktop_plugin->disconnectedImageName, icon_data->disconnect_name)!=0) + { + g_free(desktop_plugin->disconnectedImageName); + desktop_plugin->disconnectedImageName = g_strdup(icon_data->disconnect_name); + g_object_unref(desktop_plugin->disconnectedImage); + desktop_plugin->disconnectedImage = load_image(icon_data->disconnect_name); + } + + if(displayName!=NULL && displayName[0]!='\0') + { + desktop_plugin->connection_name = g_strdup(displayName); + } + else + { + desktop_plugin->connection_name = g_strdup(connection_name); + } + GtkTreeIter iter; + gboolean selected = hildon_touch_selector_get_selected(HILDON_TOUCH_SELECTOR(selector), + 0, &iter); + if(selected) + { + gchar* iap; + gtk_tree_model_get(GTK_TREE_MODEL(connection_list), + &iter, + 1, &iap, + -1); + g_free(desktop_plugin->connection_id); + desktop_plugin->connection_id = iap; + } + desktop_plugin->widget_size = gtk_range_get_value(GTK_RANGE(icon_size_scale)); + gtk_window_resize(GTK_WINDOW(desktop_plugin), + (int)(desktop_plugin->widget_size), + (int)(desktop_plugin->widget_size)); + + if(g_strcmp0(desktop_plugin->current_connection_id, + desktop_plugin->connection_id)==0) + { + desktop_plugin->this_connection_state = CON_IC_STATUS_CONNECTED; + } + else + { + desktop_plugin->this_connection_state = CON_IC_STATUS_DISCONNECTED; + } + desktop_plugin->hide_connection_name = + !hildon_check_button_get_active(HILDON_CHECK_BUTTON(display_name_check_button)); + + connect_now_save_settings(desktop_plugin); + gtk_widget_queue_draw(GTK_WIDGET(desktop_plugin)); + } + g_free(icon_data->connect_name); + g_free(icon_data->disconnect_name); + g_free(icon_data); + gtk_widget_destroy (dialog); + g_object_unref(connection_list); +} + +gboolean connect_now_connection_changed(ConIcConnection *connection, ConIcConnectionEvent *event, ConnectNowHomePlugin *desktop_plugin) +{ + const gchar* iap_id = con_ic_event_get_iap_id((ConIcEvent*) event); + + if(con_ic_connection_event_get_status(event) == CON_IC_STATUS_CONNECTED) + { + if(desktop_plugin->connection_id == NULL) + { + desktop_plugin->connection_id = g_strdup(iap_id); + ConIcIap* iap = con_ic_connection_get_iap(desktop_plugin->con, iap_id); + desktop_plugin->connection_name = g_strdup(con_ic_iap_get_name(iap)); + g_object_unref(iap); + } + g_free(desktop_plugin->current_connection_id); + desktop_plugin->current_connection_id = NULL; + desktop_plugin->current_connection_id = g_strdup(iap_id); + } + else + { + g_free(desktop_plugin->current_connection_id); + desktop_plugin->current_connection_id = NULL; + } + if(g_strcmp0(desktop_plugin->connection_id, iap_id)==0) + { + desktop_plugin->this_connection_state = con_ic_connection_event_get_status(event); + + if(con_ic_connection_event_get_status(event) == CON_IC_STATUS_CONNECTED && + desktop_plugin->connect_now) + { + desktop_plugin->connect_now = FALSE; + } + gtk_widget_queue_draw(GTK_WIDGET(desktop_plugin)); + } + + if(con_ic_connection_event_get_status(event) == CON_IC_STATUS_DISCONNECTED) + { + g_free(desktop_plugin->current_connection_id); + desktop_plugin->current_connection_id = NULL; + if(desktop_plugin->connect_now) + { + con_ic_connection_connect_by_id(desktop_plugin->con, + desktop_plugin->connection_id, + CON_IC_CONNECT_FLAG_NONE); + + desktop_plugin->connect_now = FALSE; + } + } + return TRUE; +} + +void +connect_now_disconnect_current_connection(ConnectNowHomePlugin* desktop_plugin) +{ + DBusGConnection* dbus_conn = hd_home_plugin_item_get_dbus_g_connection(&desktop_plugin->hitem, + DBUS_BUS_SYSTEM, + NULL); + DBusGProxy *proxy = dbus_g_proxy_new_for_name(dbus_conn, + ICD_DBUS_SERVICE, + ICD_UI_DBUS_PATH, + ICD_UI_DBUS_INTERFACE); + gboolean disconnect = TRUE; + DBusMessage* message = dbus_message_new_signal(ICD_UI_DBUS_PATH, + ICD_UI_DBUS_INTERFACE, + ICD_UI_DISCONNECT_SIG); + dbus_message_append_args(message, + DBUS_TYPE_BOOLEAN, &disconnect, + + DBUS_TYPE_INVALID); + + dbus_g_proxy_send(proxy, + message, + NULL); + + g_object_unref(proxy); + dbus_g_connection_unref(dbus_conn); + dbus_message_unref(message); +} + +static void +connect_now_switch_normal_mode(ConnectNowHomePlugin* desktop_plugin) +{ + DBusGConnection* dbus_conn = hd_home_plugin_item_get_dbus_g_connection(HD_HOME_PLUGIN_ITEM(desktop_plugin), + DBUS_BUS_SYSTEM, + NULL); + DBusGProxy *proxy = dbus_g_proxy_new_for_name(dbus_conn, + MCE_SERVICE, + MCE_REQUEST_PATH, + MCE_REQUEST_IF); + + gchar* dev_mode = NULL; + dbus_g_proxy_call(proxy, + MCE_DEVICE_MODE_GET, + NULL, + G_TYPE_INVALID, + G_TYPE_STRING, + &dev_mode, + G_TYPE_INVALID); + + if(g_str_equal(dev_mode, MCE_FLIGHT_MODE)) + dbus_g_proxy_call_no_reply(proxy, + MCE_DEVICE_MODE_CHANGE_REQ, + G_TYPE_STRING, + MCE_NORMAL_MODE MCE_CONFIRM_SUFFIX, + G_TYPE_INVALID); + + g_free(dev_mode); + g_object_unref(proxy); + dbus_g_connection_unref(dbus_conn); +} + +gint +connect_now_button_press(GtkWidget* widget, GdkEventButton *event, ConnectNowHomePlugin* desktop_plugin) +{ + if(desktop_plugin->connection_name == NULL) + { + con_ic_connection_connect(desktop_plugin->con, + CON_IC_CONNECT_FLAG_NONE); + desktop_plugin->connect_now = FALSE; + return; + } + + if(desktop_plugin->current_connection_id != NULL) + { + if(g_strcmp0(desktop_plugin->current_connection_id, + desktop_plugin->connection_id) != 0) + + { + if(desktop_plugin->this_connection_state == CON_IC_STATUS_DISCONNECTED) + { + desktop_plugin->connect_now = TRUE; + } + else + { + desktop_plugin->connect_now = FALSE; + } + } + connect_now_disconnect_current_connection(desktop_plugin); + } + else + { + connect_now_switch_normal_mode(desktop_plugin); + con_ic_connection_connect_by_id(desktop_plugin->con, + desktop_plugin->connection_id, + CON_IC_CONNECT_FLAG_NONE); + desktop_plugin->connect_now = FALSE; + } + gtk_widget_queue_draw(GTK_WIDGET(desktop_plugin)); + return FALSE; +} + +void +connect_now_home_plugin_init(ConnectNowHomePlugin *desktop_plugin) +{ + desktop_plugin->connection_name = NULL; + desktop_plugin->connection_id = NULL; + desktop_plugin->current_connection_id = NULL; + desktop_plugin->connectedImageName = NULL; + desktop_plugin->disconnectedImageName = NULL; + + desktop_plugin->this_connection_state = CON_IC_STATUS_DISCONNECTED; + desktop_plugin->connect_now = FALSE; + desktop_plugin->con = con_ic_connection_new(); + desktop_plugin->widget_size = CONNECTNOW_DEFAULT_WIDGET_WIDTH; + desktop_plugin->hide_connection_name = FALSE; + g_signal_connect(desktop_plugin->con, "connection-event", G_CALLBACK(connect_now_connection_changed), desktop_plugin); + g_object_set(desktop_plugin->con, "automatic-connection-events", TRUE); + + GtkWidget *contents = build_ui(); + + gtk_widget_set_size_request(contents, desktop_plugin->widget_size, desktop_plugin->widget_size); + gtk_container_add(GTK_CONTAINER(desktop_plugin), contents); + hd_home_plugin_item_set_settings (HD_HOME_PLUGIN_ITEM (desktop_plugin), TRUE); + g_signal_connect(GTK_CONTAINER(contents), "button-press-event", G_CALLBACK(connect_now_button_press), desktop_plugin); + g_signal_connect(desktop_plugin, "show-settings", G_CALLBACK(connect_now_show_settings_dialog), NULL); +} + +static void +connect_now_realize(GtkWidget* widget) +{ + GdkScreen *screen = gtk_widget_get_screen(widget); + gtk_widget_set_colormap(widget, gdk_screen_get_rgba_colormap(screen)); + gtk_widget_set_app_paintable(widget, TRUE); + ConnectNowHomePlugin *desktop_plugin = CONNECT_NOW_HOME_PLUGIN(widget); + desktop_plugin->iD = hd_home_plugin_item_get_applet_id (HD_HOME_PLUGIN_ITEM (widget)); + read_settings(desktop_plugin); + if(desktop_plugin->connectedImage == NULL) + { + desktop_plugin->connectedImageName = g_strdup(GENERAL_CONNECTED); + desktop_plugin->connectedImage = load_image(desktop_plugin->connectedImageName); + } + if(desktop_plugin->disconnectedImage == NULL) + { + desktop_plugin->disconnectedImageName = g_strdup(GENERAL_DISCONNECTED); + desktop_plugin->disconnectedImage = load_image(desktop_plugin->disconnectedImageName); + } + gtk_window_resize(GTK_WINDOW(widget), + desktop_plugin->widget_size, + desktop_plugin->widget_size); + + GTK_WIDGET_CLASS(connect_now_home_plugin_parent_class)->realize(widget); +} + +static gboolean +connect_now_expose(GtkWidget* widget, GdkEventExpose *event) +{ + cairo_t *cr; + PangoLayout *pangoLayout; + PangoFontDescription *fontDescription; + + cr = gdk_cairo_create(GDK_DRAWABLE(widget->window)); + gdk_cairo_region(cr, event->region); + cairo_clip(cr); + cairo_set_operator(cr, CAIRO_OPERATOR_SOURCE); + int width = CONNECT_NOW_HOME_PLUGIN(widget)->widget_size; + cairo_scale(cr, width/100.0, width/100.0); + + + GdkPixbuf* image = NULL; + if(CONNECT_NOW_HOME_PLUGIN(widget)->this_connection_state == CON_IC_STATUS_CONNECTED) + { + image = CONNECT_NOW_HOME_PLUGIN(widget)->connectedImage; + } + else + { + image = CONNECT_NOW_HOME_PLUGIN(widget)->disconnectedImage; + } + gdk_cairo_set_source_pixbuf(cr, image, 0.0, 0.0); + cairo_paint(cr); + + if(!CONNECT_NOW_HOME_PLUGIN(widget)->hide_connection_name) + { + + pangoLayout = pango_cairo_create_layout(cr); + if(CONNECT_NOW_HOME_PLUGIN(widget)->connection_name) + pango_layout_set_text(pangoLayout, CONNECT_NOW_HOME_PLUGIN(widget)->connection_name, -1); + const char* font = "Sans 12"; + fontDescription = pango_font_description_from_string(font); + pango_layout_set_font_description(pangoLayout, fontDescription); + pango_font_description_free(fontDescription); + int width = 0; + int height = 0; + pango_layout_get_pixel_size(pangoLayout, &width, &height); + + cairo_set_operator(cr, CAIRO_OPERATOR_OVER); + cairo_pattern_t* linear_pattern = cairo_pattern_create_linear(0.0, 0.0, CONNECTNOW_DEFAULT_WIDGET_WIDTH, 0); + cairo_pattern_add_color_stop_rgba(linear_pattern, 0.0, 0.0, 0.0, 0.0, 0.0); + cairo_pattern_add_color_stop_rgba(linear_pattern, 0.25, 0.0, 0.0, 0.0, 0.35); + cairo_pattern_add_color_stop_rgba(linear_pattern, 0.75, 0.0, 0.0, 0.0, 0.35); + cairo_pattern_add_color_stop_rgba(linear_pattern, 1.0, 0.0, 0.0, 0.0, 0.0); + + cairo_set_source(cr, linear_pattern); + cairo_rectangle(cr, 0, CONNECTNOW_DEFAULT_WIDGET_WIDTH - (1.25 * height), CONNECTNOW_DEFAULT_WIDGET_WIDTH, 1.25*height); + cairo_fill(cr); + cairo_pattern_destroy(linear_pattern); + if(width>CONNECTNOW_DEFAULT_WIDGET_WIDTH) + { + double factor = (double)CONNECTNOW_DEFAULT_WIDGET_WIDTH/width; + cairo_scale(cr, factor, factor); + cairo_move_to(cr, 0, (CONNECTNOW_DEFAULT_WIDGET_WIDTH/factor)-(1.25*height)); + } + else + { + cairo_move_to(cr, (CONNECTNOW_DEFAULT_WIDGET_WIDTH - width)/2.0, CONNECTNOW_DEFAULT_WIDGET_WIDTH-(1.25*height)); + } + cairo_set_source_rgba(cr, 1.0, 1.0, 1.0, 1.0); + pango_cairo_show_layout(cr, pangoLayout); + } + cairo_destroy(cr); + return GTK_WIDGET_CLASS(connect_now_home_plugin_parent_class)->expose_event(widget, event); +} + + +static void +connect_now_plugin_finalize(GObject *object) +{ + ConnectNowHomePlugin *desktop_plugin = CONNECT_NOW_HOME_PLUGIN(object); + g_object_unref (desktop_plugin->con); + g_free(desktop_plugin->connection_id); + g_free(desktop_plugin->current_connection_id); + g_free(desktop_plugin->connection_name); + g_free(desktop_plugin->connectedImageName); + g_free(desktop_plugin->disconnectedImageName); + g_free(desktop_plugin->iD); + if(desktop_plugin->connectedImage) + g_object_unref(desktop_plugin->connectedImage); + if(desktop_plugin->disconnectedImage) + g_object_unref(desktop_plugin->disconnectedImage); + G_OBJECT_CLASS (connect_now_home_plugin_parent_class)->finalize (object); +} + +static void +connect_now_home_plugin_class_init(ConnectNowHomePluginClass *klass) +{ + GtkWidgetClass *widget_class = GTK_WIDGET_CLASS(klass); + widget_class->realize = connect_now_realize; + widget_class->expose_event = connect_now_expose; + + G_OBJECT_CLASS(klass)->finalize = connect_now_plugin_finalize; +} + +static void +connect_now_home_plugin_class_finalize(ConnectNowHomePluginClass *class) +{ +} + + diff --git a/src/connectnow-home-widget.h b/src/connectnow-home-widget.h new file mode 100644 index 0000000..8842268 --- /dev/null +++ b/src/connectnow-home-widget.h @@ -0,0 +1,75 @@ +/* + * connectnow home widget for the maemo desktop. + * Copyright (C) 2010 Nicolai Hess + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ +#ifndef CONNECTNOW_HOME_PLUGIN_H +#define CONNECTNOW_HOME_PLUGIN_H + +#include +#include +#include +#include + +static const gchar* GENERAL_CONNECTED = "connectnow_general_connected"; +static const gchar* GENERAL_DISCONNECTED = "connectnow_general_disconnected"; + + +G_BEGIN_DECLS + +typedef struct _ConnectNowHomePlugin ConnectNowHomePlugin; +typedef struct _ConnectNowHomePluginClass ConnectNowHomePluginClass; + +#define CONNECT_NOW_HOME_PLUGIN_TYPE (connect_now_home_plugin_get_type()) + +#define CONNECT_NOW_HOME_PLUGIN(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), \ + CONNECT_NOW_HOME_PLUGIN_TYPE, ConnectNowHomePlugin)) + +#define CONNECT_NOW_IS_PLUGIN(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), \ + CONNECT_NOW_HOME_PLUGIN_TYPE)) + +#define CONNECT_NOW_HOME_PLUGIN_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), \ + CONNECT_NOW_HOME_PLUGIN_TYPE, ConnectNowHomePluginClass)) + +struct _ConnectNowHomePlugin +{ + HDHomePluginItem hitem; + gchar* connection_id; + gchar* connection_name; + gchar* current_connection_id; + ConIcConnection* con; + gint this_connection_state; + gboolean connect_now; + + gchar* iD; + gchar* connectedImageName; + gchar* disconnectedImageName; + GdkPixbuf* connectedImage; + GdkPixbuf* disconnectedImage; + guint widget_size; + gboolean hide_connection_name; + +}; + +struct _ConnectNowHomePluginClass +{ + HDHomePluginItemClass parent_class; + +}; + +GType connect_now_home_plugin_get_type(void); + +#endif diff --git a/src/connectnow-load-and-store.c b/src/connectnow-load-and-store.c new file mode 100644 index 0000000..6bd1945 --- /dev/null +++ b/src/connectnow-load-and-store.c @@ -0,0 +1,143 @@ +/* + * connectnow home widget for the maemo desktop. + * Copyright (C) 2010 Nicolai Hess + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include "connectnow-load-and-store.h" +#define CONNECTNOW_HOME_PLUGIN_SETTINGS_FILE "/.connectnow_home_widget" + + +void +read_settings(ConnectNowHomePlugin *desktop_plugin) +{ + GKeyFile *keyFile; + gchar* fileName; + gboolean fileExists; + + keyFile = g_key_file_new(); + fileName = g_strconcat(g_get_home_dir(), CONNECTNOW_HOME_PLUGIN_SETTINGS_FILE, NULL); + fileExists = g_key_file_load_from_file (keyFile, fileName, G_KEY_FILE_KEEP_COMMENTS, NULL); + if(fileExists) + { + GError *error = NULL; + if(g_key_file_has_key(keyFile, desktop_plugin->iD, "widget_size", NULL)) + { + desktop_plugin->widget_size = g_key_file_get_integer(keyFile, desktop_plugin->iD, "widget_size", NULL); + } + if(g_key_file_has_key(keyFile, desktop_plugin->iD, "hide_connection_name", NULL)) + { + desktop_plugin->hide_connection_name = g_key_file_get_boolean(keyFile, desktop_plugin->iD, "hide_connection_name", NULL); + } + if(g_key_file_has_key(keyFile, desktop_plugin->iD, "connectedIcon", NULL)) + { + desktop_plugin->connectedImageName = g_key_file_get_string(keyFile, desktop_plugin->iD, "connectedIcon", NULL); + } + else + { + desktop_plugin->connectedImageName = g_strdup(GENERAL_CONNECTED); + } + if(g_key_file_has_key(keyFile, desktop_plugin->iD, "disconnectedIcon", NULL)) + { + desktop_plugin->disconnectedImageName = g_key_file_get_string(keyFile, desktop_plugin->iD, "disconnectedIcon", NULL); + } + else + { + desktop_plugin->disconnectedImageName = g_strdup(GENERAL_DISCONNECTED); + } + desktop_plugin->connectedImage = load_image(desktop_plugin->connectedImageName); + desktop_plugin->disconnectedImage = load_image(desktop_plugin->disconnectedImageName); + desktop_plugin->connection_name = g_key_file_get_string(keyFile, desktop_plugin->iD, "connection_name", &error); + if(!error) + { + desktop_plugin->connection_id = g_key_file_get_string(keyFile, desktop_plugin->iD, "connection_id", &error); + + if(!error) + { + g_key_file_free(keyFile); + g_free(fileName); + return; + } + } + g_error_free(error); + error = NULL; + } + desktop_plugin->connection_name = NULL; + desktop_plugin->connection_id = NULL; + g_key_file_free(keyFile); + g_free(fileName); +} + +void +connect_now_save_settings(ConnectNowHomePlugin* desktop_plugin) +{ + GKeyFile *keyFile; + gchar *fileData; + FILE *iniFile; + gsize size; + gchar *filename; + + keyFile = g_key_file_new(); + filename = g_strconcat (g_get_home_dir(), CONNECTNOW_HOME_PLUGIN_SETTINGS_FILE, NULL); + g_key_file_load_from_file (keyFile, filename, G_KEY_FILE_KEEP_COMMENTS, NULL); + if(desktop_plugin->connection_id) + g_key_file_set_string(keyFile, desktop_plugin->iD, "connection_id", desktop_plugin->connection_id); + if(desktop_plugin->connection_name) + g_key_file_set_string(keyFile, desktop_plugin->iD, "connection_name", desktop_plugin->connection_name); + + g_key_file_set_integer(keyFile, desktop_plugin->iD, "widget_size", desktop_plugin->widget_size); + g_key_file_set_boolean(keyFile, desktop_plugin->iD, "hide_connection_name", desktop_plugin->hide_connection_name); + if(desktop_plugin->connectedImageName) + { + g_key_file_set_string(keyFile, desktop_plugin->iD, "connectedIcon", desktop_plugin->connectedImageName); + } + else + { + g_key_file_remove_key(keyFile, desktop_plugin->iD, "connectedIcon", NULL); + } + if(desktop_plugin->disconnectedImageName) + { + g_key_file_set_string(keyFile, desktop_plugin->iD, "disconnectedIcon", desktop_plugin->disconnectedImageName); + } + else + { + g_key_file_remove_key(keyFile, desktop_plugin->iD, "disconnectedIcon", NULL); + } + fileData = g_key_file_to_data (keyFile, &size, NULL); + g_file_set_contents(filename, fileData, size, NULL); + + g_key_file_free (keyFile); + g_free (fileData); + g_free (filename); +} + +GdkPixbuf* +load_image(const gchar* image_name) +{ + GdkPixbuf* image = gtk_icon_theme_load_icon(gtk_icon_theme_get_default(), + image_name, + CONNECTNOW_DEFAULT_WIDGET_WIDTH, + 0, + NULL); + if(!image) + { + image = gdk_pixbuf_new_from_file_at_size(image_name, + CONNECTNOW_DEFAULT_WIDGET_WIDTH, + CONNECTNOW_DEFAULT_WIDGET_WIDTH, + NULL); + } + return image; +} diff --git a/src/connectnow-load-and-store.h b/src/connectnow-load-and-store.h new file mode 100644 index 0000000..fcda5d8 --- /dev/null +++ b/src/connectnow-load-and-store.h @@ -0,0 +1,35 @@ +/* + * connectnow home widget for the maemo desktop. + * Copyright (C) 2010 Nicolai Hess + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ +#ifndef CONNECTNOW_LOAD_AND_STORE_H +#define CONNECTNOW_LOAD_AND_STORE_H + +#include +#include "connectnow-home-widget.h" + +static const int CONNECTNOW_DEFAULT_WIDGET_WIDTH = 96; + +void +read_settings(ConnectNowHomePlugin *desktop_plugin); + +void +connect_now_save_settings(ConnectNowHomePlugin *desktop_plugin); + +GdkPixbuf* +load_image(const gchar* image_name); +#endif diff --git a/src/connectnow-settings-dialog.c b/src/connectnow-settings-dialog.c new file mode 100644 index 0000000..1ca381d --- /dev/null +++ b/src/connectnow-settings-dialog.c @@ -0,0 +1,192 @@ +/* + * connectnow home widget for the maemo desktop. + * Copyright (C) 2010 Nicolai Hess + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include +#include +#include +#include +#include "connectnow-settings-dialog.h" +#include "connectnow-load-and-store.h" + +void +select_and_set_icon(GtkButton* button, custom_icon_data* data) +{ + GtkWidget* dialog; + GtkWidget* parent = gtk_widget_get_toplevel(GTK_WIDGET(button)); + dialog = hildon_file_chooser_dialog_new(GTK_WINDOW(parent), + GTK_FILE_CHOOSER_ACTION_OPEN); + GtkFileFilter* fileFilter = gtk_file_filter_new(); + gtk_file_filter_add_pixbuf_formats(fileFilter); + gtk_file_chooser_set_filter(GTK_FILE_CHOOSER(dialog), fileFilter); + + gtk_widget_show_all(GTK_WIDGET(dialog)); + int ret = gtk_dialog_run(GTK_DIALOG(dialog)); + if(ret == GTK_RESPONSE_OK) + { + + gchar* filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)); + GdkPixbuf* pixbuf; + pixbuf = load_image(filename); + g_free(data->icon_name); + data->icon_name = filename; + gtk_button_set_image(GTK_BUTTON(data->icon_button), gtk_image_new_from_pixbuf(pixbuf)); + g_object_unref(pixbuf); + } + gtk_widget_destroy(dialog); +} + +void +connect_now_show_icon_selector(GtkButton* button, icon_data_t* icon_data) +{ + GtkWidget* dialog; + GtkWidget* icon_box_1 = gtk_vbox_new(TRUE,0); + GtkWidget* icon_box_2 = gtk_vbox_new(TRUE,0); + GtkWidget* label_box = gtk_vbox_new(TRUE,0); + GtkWidget* pan = hildon_pannable_area_new(); + GtkWidget* buttons[NUM_PREDEFINED_ICONS+1]; + GtkWidget* last_button = NULL; + GtkWidget* hBox = gtk_hbox_new(FALSE, 3); + gboolean predefined_is_selected = FALSE; + int i; + for(i = 0;iconnect_name, _predefined_icons[i][CONNECT])==0) + { + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(buttons[i]), + TRUE); + predefined_is_selected = TRUE; + } + GdkPixbuf* pixbuf; + pixbuf = load_image(_predefined_icons[i][CONNECT]); + connect_image = gtk_image_new_from_pixbuf(pixbuf); + g_object_unref(pixbuf); + pixbuf = load_image(_predefined_icons[i][DISCONNECT]); + disconnect_image = gtk_image_new_from_pixbuf(pixbuf); + g_object_unref(pixbuf); + + gtk_box_pack_start(GTK_BOX(icon_box_1), + connect_image, TRUE, TRUE, 0); + gtk_box_pack_start(GTK_BOX(icon_box_2), + disconnect_image, TRUE, TRUE, 0); + gtk_box_pack_start(GTK_BOX(label_box), + buttons[i], TRUE, TRUE, 0); + last_button = buttons[i]; + } + buttons[NUM_PREDEFINED_ICONS] = hildon_gtk_radio_button_new_from_widget(HILDON_SIZE_AUTO, + GTK_RADIO_BUTTON(last_button)); + + gtk_button_set_label(GTK_BUTTON(buttons[NUM_PREDEFINED_ICONS]), + "Custom"); + gtk_toggle_button_set_mode(GTK_TOGGLE_BUTTON(buttons[NUM_PREDEFINED_ICONS]), + FALSE); + + custom_icon_data* connect_icon_data = g_new0(custom_icon_data, 1); + custom_icon_data* disconnect_icon_data = g_new0(custom_icon_data, 1); + connect_icon_data->icon_name = NULL; + disconnect_icon_data->icon_name = NULL; + connect_icon_data->icon_button = hildon_button_new(HILDON_SIZE_AUTO, + HILDON_BUTTON_ARRANGEMENT_VERTICAL); + disconnect_icon_data->icon_button = hildon_button_new(HILDON_SIZE_AUTO, + HILDON_BUTTON_ARRANGEMENT_VERTICAL); + + gtk_box_pack_start(GTK_BOX(icon_box_1), + connect_icon_data->icon_button, TRUE, TRUE, 0); + gtk_box_pack_start(GTK_BOX(icon_box_2), + disconnect_icon_data->icon_button, TRUE, TRUE, 0); + gtk_box_pack_start(GTK_BOX(label_box), + buttons[NUM_PREDEFINED_ICONS], TRUE, TRUE, 0); + if(!predefined_is_selected && + icon_data->connect_name!=NULL) + { + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(buttons[NUM_PREDEFINED_ICONS]), + TRUE); + + GdkPixbuf* pixbuf; + pixbuf = load_image(icon_data->connect_name); + gtk_button_set_image(GTK_BUTTON(connect_icon_data->icon_button), gtk_image_new_from_pixbuf(pixbuf)); + g_object_unref(pixbuf); + pixbuf = load_image(icon_data->disconnect_name); + gtk_button_set_image(GTK_BUTTON(disconnect_icon_data->icon_button), gtk_image_new_from_pixbuf(pixbuf)); + g_object_unref(pixbuf); + } + + g_signal_connect(connect_icon_data->icon_button, "clicked", G_CALLBACK(select_and_set_icon), connect_icon_data); + g_signal_connect(disconnect_icon_data->icon_button, "clicked", G_CALLBACK(select_and_set_icon), disconnect_icon_data); + gtk_box_pack_start(GTK_BOX(hBox), icon_box_1, FALSE, FALSE, 3); + gtk_box_pack_start(GTK_BOX(hBox), icon_box_2, FALSE, FALSE, 3); + gtk_box_pack_start(GTK_BOX(hBox), label_box, TRUE, TRUE, 3); + hildon_pannable_area_add_with_viewport(HILDON_PANNABLE_AREA(pan), + hBox); + + dialog = gtk_dialog_new_with_buttons("Icon", + NULL, + 0, + dgettext("hildon-libs", "wdgt_bd_done"), + GTK_RESPONSE_ACCEPT, + NULL); + gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), pan); + + gtk_window_set_default_size(GTK_WINDOW(dialog), -1, 300); + gtk_widget_show_all(dialog); + if(gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) + { + if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(buttons[NUM_PREDEFINED_ICONS]))) + { + if(connect_icon_data->icon_name && + disconnect_icon_data->icon_name) + { + icon_data->connect_name = g_strdup(connect_icon_data->icon_name); + icon_data->disconnect_name = g_strdup(disconnect_icon_data->icon_name); + } + } + else + { + for(i = 0;iconnect_name = g_strdup(_predefined_icons[i][CONNECT]); + icon_data->disconnect_name= g_strdup(_predefined_icons[i][DISCONNECT]); + break; + } + } + } + GdkPixbuf* pixbuf = load_image(icon_data->connect_name); + gtk_image_set_from_pixbuf(GTK_IMAGE(icon_data->connect_icon), + pixbuf); + g_object_unref(pixbuf); + pixbuf = load_image(icon_data->disconnect_name); + gtk_image_set_from_pixbuf(GTK_IMAGE(icon_data->disconnect_icon), + pixbuf); + g_object_unref(pixbuf); + } + g_free(connect_icon_data->icon_name); + g_free(disconnect_icon_data->icon_name); + g_free(connect_icon_data); + g_free(disconnect_icon_data); + gtk_widget_destroy (dialog); +} diff --git a/src/connectnow-settings-dialog.h b/src/connectnow-settings-dialog.h new file mode 100644 index 0000000..3a3f4b5 --- /dev/null +++ b/src/connectnow-settings-dialog.h @@ -0,0 +1,61 @@ +/* + * connectnow home widget for the maemo desktop. + * Copyright (C) 2010 Nicolai Hess + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ +#ifndef CONNECTNOW_SETTINGS_DIALOG_H +#define CONNECTNOW_SETTINGS_DIALOG_H +#include + +static const int NUM_PREDEFINED_ICONS = 8; +static const int CONNECT = 0; +static const int DISCONNECT = 1; +static const int LABEL = 2; + +static const gchar* _predefined_icons[][3] = +{ + {"connectnow_general_connected", "connectnow_general_disconnected", "General"}, + {"connectnow_gprs_connected_net", "connectnow_gprs_disconnected_net", "Net"}, + {"connectnow_gprs_connected_mms", "connectnow_gprs_disconnected_mms", "MMS"}, + {"connectnow_wifi_connected_home", "connectnow_wifi_disconnected_home", "Home"}, + {"connectnow_wifi_connected_work", "connectnow_wifi_disconnected_work", "Work"}, + {"connectnow_usb_connected", "connectnow_usb_disconnected", "USB"}, + {"connectnow_bt_connected", "connectnow_bt_disconnected", "Bluetooth"} +}; + +typedef struct _icon_data icon_data_t; + +struct _icon_data +{ + GtkWidget* connect_icon; + GtkWidget* disconnect_icon; + gchar* connect_name; + gchar* disconnect_name; +}; + +typedef struct _custom_icon custom_icon_data; + +struct _custom_icon +{ + GtkWidget* icon_button; + gchar* icon_name; +}; + +void +select_and_set_icon(GtkButton* button, custom_icon_data* data); +void +connect_now_show_icon_selector(GtkButton* button, icon_data_t* icon_data); +#endif diff --git a/src/data/connectnow-home-widget.desktop b/src/data/connectnow-home-widget.desktop new file mode 100644 index 0000000..c47325b --- /dev/null +++ b/src/data/connectnow-home-widget.desktop @@ -0,0 +1,6 @@ +[Desktop Entry] +Name=ConnectNow +Comment=Connect to switch between internet connections +Type=default +X-Multiple=true +X-Path=connectnow-home-widget.so diff --git a/src/data/connectnow_bt_connected.png b/src/data/connectnow_bt_connected.png new file mode 100644 index 0000000..80afc3b Binary files /dev/null and b/src/data/connectnow_bt_connected.png differ diff --git a/src/data/connectnow_bt_disconnected.png b/src/data/connectnow_bt_disconnected.png new file mode 100644 index 0000000..4b93f8a Binary files /dev/null and b/src/data/connectnow_bt_disconnected.png differ diff --git a/src/data/connectnow_general_connected.png b/src/data/connectnow_general_connected.png new file mode 100644 index 0000000..60662eb Binary files /dev/null and b/src/data/connectnow_general_connected.png differ diff --git a/src/data/connectnow_general_disconnected.png b/src/data/connectnow_general_disconnected.png new file mode 100644 index 0000000..87e5438 Binary files /dev/null and b/src/data/connectnow_general_disconnected.png differ diff --git a/src/data/connectnow_general_preview.png b/src/data/connectnow_general_preview.png new file mode 100644 index 0000000..6d8a82b Binary files /dev/null and b/src/data/connectnow_general_preview.png differ diff --git a/src/data/connectnow_gprs_connected_mms.png b/src/data/connectnow_gprs_connected_mms.png new file mode 100644 index 0000000..3f9b0b1 Binary files /dev/null and b/src/data/connectnow_gprs_connected_mms.png differ diff --git a/src/data/connectnow_gprs_connected_net.png b/src/data/connectnow_gprs_connected_net.png new file mode 100644 index 0000000..d63c2ba Binary files /dev/null and b/src/data/connectnow_gprs_connected_net.png differ diff --git a/src/data/connectnow_gprs_disconnected_mms.png b/src/data/connectnow_gprs_disconnected_mms.png new file mode 100644 index 0000000..e0ce6ec Binary files /dev/null and b/src/data/connectnow_gprs_disconnected_mms.png differ diff --git a/src/data/connectnow_gprs_disconnected_net.png b/src/data/connectnow_gprs_disconnected_net.png new file mode 100644 index 0000000..81bc5fa Binary files /dev/null and b/src/data/connectnow_gprs_disconnected_net.png differ diff --git a/src/data/connectnow_usb_connected.png b/src/data/connectnow_usb_connected.png new file mode 100644 index 0000000..980fe45 Binary files /dev/null and b/src/data/connectnow_usb_connected.png differ diff --git a/src/data/connectnow_usb_disconnected.png b/src/data/connectnow_usb_disconnected.png new file mode 100644 index 0000000..287011b Binary files /dev/null and b/src/data/connectnow_usb_disconnected.png differ diff --git a/src/data/connectnow_wifi_connected_home.png b/src/data/connectnow_wifi_connected_home.png new file mode 100644 index 0000000..ae620da Binary files /dev/null and b/src/data/connectnow_wifi_connected_home.png differ diff --git a/src/data/connectnow_wifi_connected_work.png b/src/data/connectnow_wifi_connected_work.png new file mode 100644 index 0000000..2583dc4 Binary files /dev/null and b/src/data/connectnow_wifi_connected_work.png differ diff --git a/src/data/connectnow_wifi_disconnected_home.png b/src/data/connectnow_wifi_disconnected_home.png new file mode 100644 index 0000000..ff0ac90 Binary files /dev/null and b/src/data/connectnow_wifi_disconnected_home.png differ diff --git a/src/data/connectnow_wifi_disconnected_work.png b/src/data/connectnow_wifi_disconnected_work.png new file mode 100644 index 0000000..a7dc70f Binary files /dev/null and b/src/data/connectnow_wifi_disconnected_work.png differ diff --git a/src/debian/changelog b/src/debian/changelog new file mode 100644 index 0000000..bdf8a67 --- /dev/null +++ b/src/debian/changelog @@ -0,0 +1,53 @@ +connectnow-home-widget (0.8) unstable; urgency=low + + * Fixed bug: Empty settings file or older settings file without + icon names crashed this widget - and hildon-desktop as well. + + -- Nicolai Hess Fri, 7 May 2010 00:24:56 +0200 + +connectnow-home-widget (0.7) unstable; urgency=low + + * Add icon selector to settingsmenu + * included predefined icons + + -- Nicolai Hess Tue, 4 May 2010 23:48:40 +0200 + +connectnow-home-widget (0.6) unstable; urgency=low + + * Fixed bug in settings dialog + + -- Nicolai Hess Mon, 19 Apr 2010 22:17:56 +0200 + +connectnow-home-widget (0.5) unstable; urgency=low + + * widget size is configurable. + * arbitrary display name. + + -- Nicolai Hess Mon, 29 Mar 2010 22:52:48 +0200 + +connectnow-home-widget (0.4) unstable; urgency=low + + * add patch from qwerty12 to switch to normal-mode before + trying to connenct while in offline-mode. + + -- Nicolai Hess Sun, 28 Mar 2010 13:15:52 +0200 + +connectnow-home-widget (0.3) unstable; urgency=low + + * change the widget size (bigger) + + * load icon from configfile (no settings dialog support to select an icon) + + -- Nicolai Hess Fri, 26 Mar 2010 20:09:46 +0100 + +connectnow-home-widget (0.2) unstable; urgency=low + + * changed section entry in debian/control + + -- Nicolai Hess Wed, 17 Mar 2010 18:20:47 +0100 + +connectnow-home-widget (0.1) unstable; urgency=low + + * Initial Release. + + -- Nicolai Hess Tue, 16 Mar 2010 20:32:42 +0100 diff --git a/src/debian/compat b/src/debian/compat new file mode 100644 index 0000000..7ed6ff8 --- /dev/null +++ b/src/debian/compat @@ -0,0 +1 @@ +5 diff --git a/src/debian/connectnow-home-widget-dev.dirs b/src/debian/connectnow-home-widget-dev.dirs new file mode 100644 index 0000000..4418816 --- /dev/null +++ b/src/debian/connectnow-home-widget-dev.dirs @@ -0,0 +1,2 @@ +usr/lib +usr/include diff --git a/src/debian/connectnow-home-widget-dev.install b/src/debian/connectnow-home-widget-dev.install new file mode 100644 index 0000000..3c996c8 --- /dev/null +++ b/src/debian/connectnow-home-widget-dev.install @@ -0,0 +1,6 @@ +usr/include/* +usr/lib/lib*.a +usr/lib/lib*.so +usr/lib/pkgconfig/* +usr/lib/*.la +usr/share/pkgconfig/* diff --git a/src/debian/connectnow-home-widget1.dirs b/src/debian/connectnow-home-widget1.dirs new file mode 100644 index 0000000..6845771 --- /dev/null +++ b/src/debian/connectnow-home-widget1.dirs @@ -0,0 +1 @@ +usr/lib diff --git a/src/debian/connectnow-home-widget1.install b/src/debian/connectnow-home-widget1.install new file mode 100644 index 0000000..d0dbfd1 --- /dev/null +++ b/src/debian/connectnow-home-widget1.install @@ -0,0 +1 @@ +usr/lib/lib*.so.* diff --git a/src/debian/control b/src/debian/control new file mode 100644 index 0000000..77f6ca1 --- /dev/null +++ b/src/debian/control @@ -0,0 +1,347 @@ +Source: connectnow-home-widget +Priority: extra +Maintainer: Nicolai Hess +Build-Depends: debhelper (>= 5), libgtk2.0-dev, libhildon1-dev, libhildondesktop1-dev, libconic0-dev, icd2-osso-ic-dev, mce-dev, libhildonfm2-dev +Standards-Version: 3.7.2 +Section: user/desktop + +Package: connectnow-home-widget +Architecture: any +Depends: ${shlibs:Depends}, +Description: A desktop widget to switch internet connections. + This desktop widget can be used to connect to a specific + internet connection. +XB-Maemo-Display-Name:ConnectNow internet connection switch +XSBC-Bugtracker: mailto:nicolaihess@web.de +XB-Maemo-Icon-26: + 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 + rrXMt7o8dgl12aBtrzxThiqvaLqnm2e+p7119cpj/Cf5p1uZf+0cWxpvLLTN + apBZkH3Y+JhSEAo3tMNqXkSJ8DKmqU/V4XhMTpQHIzVBReziJro3uW455tm3 + HzUs3FP0uOhjVta/IUi5BD91DsDO3EHWBNQFMCohMMcTWKjt4W/cT4kiDlAM + sgZ0eGtR3eqR+TCxYGTA6I3DG1Z0q3al+l/B350U4Ff3sG6qbpfujjrwdv/b + LncWJ3sc+XDw4NGePxZkVEpvmvrQkEQPlOdKPTqCNmKmSEMnOUSdLUdiL7vj + A23FKvsL9pbWy5WbHi6e9zzztIl+/X13+zW16u1q5Zbves2Cra5av7GOU06i + EW5QIQqKGxenFJ9UW2dcT1+evlhXGO8WfzThZKku2ZAc+MNZ1yZ/XH6LgmS1 + L+ajrgBCMFQYlRk4Y8pSW5hGcsaTJ49vPObcrTHzY+fFdChWR30cKYc7eB1v + r7a/0f64x2rtMO0w7Tjl7+qoNix4nBNG2I+MHjbJe9yK+ku8litfThSn6obp + ysk7OEMqrUctyoYqF6IypsOLzsBcLpUrRSuAr3JVEQEAWA4A/2kDstkNHQAs + l214FyDvi9qmR4DYh0Y0HOCr7MJtANWWp0sbFGjOigPmH+mHTa6VnfUTs9oY + BQBIL/5eHFXSzNT29JbTZ85+Sco9dv9oq6MrUvINWaWfDe9kX1qlfCETLTR2 + 5F2yLt6JqTyUzGDmecnzvbuvRcfWUW0SWr92tgoxhdQL2V5uivcy750VN9g4 + Wp63mm11QtPBLFPzSdNVlKMg8qROCAIAdAI4kZM5G0tNgcYKpgtyfIlNiSjp + bbL6tum717fpRb89T3px4MXirJb3P93rfn9jdkCq9kfX5Kf6u3ydVivtwWQn + uige5J1umT4qrYVx+fYqWzZuy0gql70k63nWIUNCv0/9W/eP9dFYX7S+bl1F + Y7KeZt3bqqMmhXYqXUUsFak/5VipQb6mRPQUbQHaB4OsBchQ9EI6oPrAGjmA + DKGecjyAlgCm/ZcAppWspR6Aas7veRIgrsAJaYCq5bnyKUB1uaHsCPAVFIiT + aJxfq2BAQTf1zQGbAy8OPkt63UomXWw5p9g9+tTnr5/1Bd/vpt75fnd9drKh + haGFMZ13i3m0GnFoZ/I21eLFmOIw0bnAKVkzrOetHmu7bXQN7ti1Q3aHZPeR + nqFe6z3zrMcptZXlCtNxhP5XDjkD//l2938UciEPcsZMs2xzmF0RsIc57GGO + GnC4VwNOCJ4S/FdwnOPsjqM65HXQV+hyK/Lm+FuNU79f7Xpl9pUpGd+zH+RE + 5jY3TRUTlEhlEjYVnSudW/pT3j086FDbozeTV/y4+KNGaoQusFqHagVBnWyv + PXj58PijxVkf82wL8goy1QviG11HFTRWQ9UdAgBvx1u4ALBATZMAUEWGYAyA + rqyyw3/V+59G2G2wa45bSFCgj7/PK59li7bRDBFu3sNhDhdyQ7mBsymfeshF + AMAJJAEOpOGYCpVPq+5yMJZzE2yFBhoahVR+jBhRKlppGmAlP8Qs3gQPriHf + qZ+xqKpataQqrDaOGzg+e1zPSuPrvqn7sc4l56eay5oczSNh829a3FO2k134 + S0G5gu8Frsb6yaU/NyTnFw9LTUiNTP1calEYUBhR1N64Boxl3A5sm2ZLtrfN + DlYY6b7b/Y2lhUeBR7B7X+vVdrft7tk9MLshzotr4jL5/fvAaUzlTUIWvX78 + etDr+dm1dnfctXdPjcTZ0U+iY2KGlWymSuIB+mM7tKiEZKSoVnI3l2KyuEhX + OBj+qAUnMoONsBTeYh4Wogh/ogMU1OHGIhjACJxQgwA+i9pUhZwxWf6tVstb + mxT3bVHS+GWT0//OCE5/8TnmXw/ABWqJaoC8xowbgBKjjjddAtgGbjgG4B0W + oAFAVakeFwIYyZ64D4WOYSFdwGJEi0k8G6WUwyViNCzkGC6RuwF84yFyHc7X + WVvHUMfZNnfGj5nq9Jf+mysPrjyvch27d7CDBtMA+UAelkdhkXQh0SppYiE9 + 8HoQ/WBP+rTnJU9dn5fm9vgZn3wuebb+flFMMRc1UmsaN+n3Go/LNFgKL54O + mHXTfDLfKCJtTLanbZ4rnzyLPQ94frYYEdI65GDIHsfrrZu0qd5qv9shn3U+ + e3yq2n7TmDRpGimyG6Y0/Nkw2SXKZbJLtstJrfeOZdt4x4S4ec/Es9XPmuXv + oqEKK5MxQVODhpIdLnBXGkm3oJcSFxAKLWz5Fi8FyXnIRDYAS7YwmQHiEbeg + GwCy2JYHATgr/0QEgOZ8Ef/VCf6fLGiNdT3rKy7l7OvY1Xfo2eIleeA+ndA2 + pb6w5q8oFRHoJrcC2MnfoAHUbTyTfwCURd3QGURjeaz0gpmU3IcCIdTfZCCf + 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 + AElFTkSuQmCC + ==== diff --git a/src/debian/copyright b/src/debian/copyright new file mode 100644 index 0000000..a52c8a7 --- /dev/null +++ b/src/debian/copyright @@ -0,0 +1,26 @@ +This is connectnow-home-widget, written and maintained by Nicolai Hess +on Tue, 16 Mar 2010 20:32:42 +0100. + +The original source can always be found at: + ftp://ftp.debian.org/dists/unstable/main/source/ + +Copyright Holder: Nicolai Hess + +License: + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this package; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +On Debian systems, the complete text of the GNU General +Public License can be found in `/usr/share/common-licenses/GPL'. diff --git a/src/debian/dirs b/src/debian/dirs new file mode 100644 index 0000000..ca882bb --- /dev/null +++ b/src/debian/dirs @@ -0,0 +1,2 @@ +usr/bin +usr/sbin diff --git a/src/debian/rules b/src/debian/rules new file mode 100755 index 0000000..f256356 --- /dev/null +++ b/src/debian/rules @@ -0,0 +1,105 @@ +#!/usr/bin/make -f +# -*- makefile -*- +# Sample debian/rules that uses debhelper. +# This file was originally written by Joey Hess and Craig Small. +# As a special exception, when this file is copied by dh-make into a +# dh-make output file, you may use that output file without restriction. +# This special exception was added by Craig Small in version 0.37 of dh-make. + +# Uncomment this to turn on verbose mode. +#export DH_VERBOSE=1 + + + + +CFLAGS = -Wall -g + +ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS))) + CFLAGS += -O0 +else + CFLAGS += -O2 +endif + +# shared library versions, option 1 +version=2.0.5 +major=2 +# option 2, assuming the library is created as src/.libs/libfoo.so.2.0.5 or so +#version=`ls src/.libs/lib*.so.* | \ +# awk '{if (match($$0,/[0-9]+\.[0-9]+\.[0-9]+$$/)) print substr($$0,RSTART)}'` +#major=`ls src/.libs/lib*.so.* | \ +# awk '{if (match($$0,/\.so\.[0-9]+$$/)) print substr($$0,RSTART+4)}'` + +configure: configure-stamp +configure-stamp: + dh_testdir + # Add here commands to configure the package. + + touch configure-stamp + + +build: build-stamp +build-stamp: configure-stamp + dh_testdir + + # Add here commands to compile the package. + $(MAKE) + + touch $@ + +clean: + dh_testdir + dh_testroot + rm -f build-stamp configure-stamp + + # Add here commands to clean up after the build process. + -$(MAKE) clean + + dh_clean + +install: build + dh_testdir + dh_testroot + dh_clean -k + dh_installdirs + + # Add here commands to install the package into debian/tmp + $(MAKE) DESTDIR=$(CURDIR)/debian/connectnow-home-widget install + + +# Build architecture-independent files here. +binary-indep: build install +# We have nothing to do by default. + +# Build architecture-dependent files here. +binary-arch: build install + dh_testdir + dh_testroot + dh_installchangelogs + dh_installdocs + dh_installexamples +# dh_install +# dh_installmenu +# dh_installdebconf +# dh_installlogrotate +# dh_installemacsen +# dh_installpam +# dh_installmime +# dh_installinit +# dh_installcron +# dh_installinfo + dh_installman + dh_link + dh_strip + dh_compress + dh_fixperms +# dh_perl +# dh_python +# dh_makeshlibs + dh_installdeb + dh_shlibdeps + dh_gencontrol + dh_md5sums + dh_builddeb + +binary: binary-indep binary-arch +.PHONY: build clean binary-indep binary-arch binary install configure