[Pkg-wmaker-commits] [wmforecast] 24/63: version 0.4

Doug Torrance dtorrance-guest at moszumanska.debian.org
Mon Aug 17 11:20:34 UTC 2015


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

dtorrance-guest pushed a commit to branch master
in repository wmforecast.

commit b1eab55b1b0e0d55d27bac2ef08bd9b3984b0b4a
Author: Doug Torrance <dtorrance at monmouthcollege.edu>
Date:   Wed May 7 23:09:58 2014 -0500

    version 0.4
---
 ChangeLog    |  14 +-
 INSTALL      |   4 +-
 Makefile.am  |   6 +-
 NEWS         |   9 ++
 README       |   9 +-
 configure.ac |   5 +-
 wmforecast.c | 458 ++++++++++++++++++++++++++++++++++-------------------------
 7 files changed, 296 insertions(+), 209 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index bc3a07f..28b62f9 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,6 +1,16 @@
 2014-05-07  Doug Torrance <dtorrance at monmouthcollege.edu>
-	* wmforecast.c (editPreferences): new function, GUI for editing user
-	  preferences; currently non-functioning
+	* wmforecast.c (Dockapp): combined with old UpdateData struct to better
+	  facilitate new feature:
+	* wmforecast.c (editPreferences): new GUI to edit wmforecastrc
+	* wmforecast.c (setPreferences): removed check to see if both -w and -z
+	  options were used, as it was creating a problem when wmforecastrc
+	  existed; new behavior is to just take the last option given
+	* wmforecast.c (getWeather): "Location not found" error now uses setError
+	  instead of exiting
+	* configure.ac: set version 0.4, added PKG_CHECK_MODULES for x11
+	* Makefile.am: added x11 libs and flags, manually add WINGs libs and flag,
+	  since get-wings-flags returns the deprecated lungif
+	* NEWS, README:  updated with version 0.4 info
 
 2014-04-21  Doug Torrance <dtorrance at monmouthcollege.edu>
 	* wmforecast.c: changed all calls to free to use WINGs's native wfree;
diff --git a/INSTALL b/INSTALL
index 007e939..2099840 100644
--- a/INSTALL
+++ b/INSTALL
@@ -12,8 +12,8 @@ without warranty of any kind.
 Basic Installation
 ==================
 
-   Briefly, the shell commands `./configure; make; make install' should
-configure, build, and install this package.  The following
+   Briefly, the shell command `./configure && make && make install'
+should configure, build, and install this package.  The following
 more-detailed instructions are generic; see the `README' file for
 instructions specific to this package.  Some packages provide this
 `INSTALL' file but do not implement all of the features documented
diff --git a/Makefile.am b/Makefile.am
index 0f96b26..349caad 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -6,8 +6,8 @@ man_MANS = wmforecast.1
 wmforecast.1: wmforecast.c config.h
 	$(HELP2MAN) --output=$@ -N -n "a weather dockapp for Window Maker using the Yahoo Weather API" ./wmforecast
 
-AM_CFLAGS = $(libxml2_CFLAGS) $(libcurl_CFLAGS) `get-wings-flags --cflags`
+AM_CFLAGS = $(libxml2_CFLAGS) $(libcurl_CFLAGS) $(X11_CFLAGS)
 AM_CPPFLAGS =  -DDATADIR=\"$(pkgdatadir)\"
-LIBS += $(libxml2_LIBS) $(libcurl_LIBS) `get-wings-flags --libs`
+LIBS += $(libxml2_LIBS) $(libcurl_LIBS) $(X11_LIBS) -lWINGs -lwraster -lWUtil
 
-EXTRA_DIST = $(man_MANS) 
\ No newline at end of file
+EXTRA_DIST = $(man_MANS) 
diff --git a/NEWS b/NEWS
index f02a7ec..e89429a 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,12 @@
+version 0.4
+-----------
+* New features!
+  - Right click the icon to edit preferences in a GUI
+  - Preferences may also be manually configured in XDG_CONFIG_DIR/wmforecast/
+    wmforecastrc, or HOME/.config/wmforecast/wmforecastrc if XDG_CONFIG_DIR is
+    undefined
+* More bug fixes
+
 version 0.3
 -----------
 * New features!
diff --git a/README b/README
index 0b139da..e5ca4df 100644
--- a/README
+++ b/README
@@ -31,7 +31,7 @@ sudo make install
 
 Usage
 =====
-wmforecast [OPTIONS]
+Usage: wmforecast [OPTIONS]
 
 Options:
     -v, --version        print the version number
@@ -45,10 +45,13 @@ Options:
     -z, --zip <zip>      ZIP code or Location ID (Yahoo has deprecated this
                          option and it is not guaranteed to work)
 Notes:
-* only one of -w or -z may be used, not both
-
 * double click the icon at any time to refresh data
 
+* right click the icon to edit your preferences in a GUI
+
+* preferences may be manually configured in
+  XDG_CONFIG_DIR/wmforecast/wmforecastrc
+
 Copyright
 =========
 wmforecast:
diff --git a/configure.ac b/configure.ac
index 250cb3c..2225e4a 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,4 +1,4 @@
-AC_INIT([wmforecast], [0.3], [dtorrance at monmouthcollege.edu])
+AC_INIT([wmforecast], [0.4], [dtorrance at monmouthcollege.edu])
 AM_INIT_AUTOMAKE([-Wall -Werror])
 AC_CONFIG_SRCDIR([configure.ac])
 AC_CONFIG_HEADER([config.h])   
@@ -6,7 +6,8 @@ AC_SUBST(VERSION)
 AC_PROG_CC                      
 PKG_CHECK_MODULES([libxml2],[libxml-2.0])
 PKG_CHECK_MODULES([libcurl],[libcurl])
+PKG_CHECK_MODULES([X11],[x11])
 AC_CHECK_LIB(WINGs,WMCreateWindow)
 AC_CONFIG_FILES([Makefile icons/Makefile])
 AM_MISSING_PROG(HELP2MAN, help2man, $missing_dir)
-AC_OUTPUT
\ No newline at end of file
+AC_OUTPUT
diff --git a/wmforecast.c b/wmforecast.c
index e0b1b6c..0276315 100755
--- a/wmforecast.c
+++ b/wmforecast.c
@@ -29,8 +29,42 @@
 #define color(c) WMCreateNamedColor(screen,c,True)
 
 typedef struct {
+	char *units;
+	char *woeid;
+	char *zip;
+	char *woeid_or_zip;
+	long int interval;
+} Preferences;
+
+typedef struct {
+	Preferences *prefs;
+	WMButton *celsius;
+	WMButton *close;
+	WMButton *fahrenheit;
+	WMButton *save;
+	WMButton *woeid;
+	WMButton *zip;
+	WMFrame *intervalFrame;
+	WMFrame *locationFrame;
+	WMFrame *units;
+	WMLabel *minutes;
+	WMLabel *woeid_zip;
+	WMScreen *screen;
+	WMTextField *interval;
+	WMTextField *location;
+	WMTextField *woeidField;
+	WMTextField *zipField;
+	WMWindow *window;
+} PreferencesWindow;
+
+typedef struct {
+	int prefsWindowPresent;
+	long int minutesLeft;
+	Preferences *prefs;
+	PreferencesWindow *prefsWindow;
 	WMLabel *icon;
 	WMLabel *text;
+	WMScreen *screen;
 } Dockapp;
 
 typedef struct {
@@ -55,21 +89,6 @@ typedef struct {
 	char *errorText;
 } Weather;
 
-typedef struct {
-	char *units;
-	char *woeid;
-	char *zip;
-	char *woeid_or_zip;
-	long int interval;
-} Preferences;
-
-typedef struct {
-	WMScreen *screen;
-	Dockapp *dockapp;
-	Preferences *prefs;
-	long int minutesLeft;
-} UpdateData;
-
 Forecast *newForecast()
 {
 	Forecast *forecast = wmalloc(sizeof(Forecast));
@@ -221,12 +240,17 @@ WMWindow *WMCreateDockapp(WMScreen *screen, const char *name, int argc, char **a
 	return dockapp;
 }
 
-Dockapp *newDockapp(WMScreen *screen, int argc, char **argv)
+Dockapp *newDockapp(WMScreen *screen, Preferences *prefs, int argc, char **argv)
 {
 	Dockapp *dockapp = wmalloc(sizeof(Dockapp));
 	WMFrame *frame;
 	WMWindow *window;
 
+	dockapp->screen = screen;
+	dockapp->prefs = prefs;
+	dockapp->minutesLeft = prefs->interval;
+	dockapp->prefsWindowPresent = 0;
+
 	window = WMCreateDockapp(screen, "", argc, argv);
 
 	frame = WMCreateFrame(window);
@@ -383,8 +407,7 @@ Weather *getWeather(WMScreen *screen, Preferences *prefs)
 			while (cur != NULL) {
 				if ((!xmlStrcmp(cur->name, (const xmlChar *)"title"))) {
 					if ((!xmlStrcmp(xmlNodeListGetString(doc, cur->children, 1), (const xmlChar *)"City not found"))) {
-						printf("Location not found\n");
-						exit(0);
+						setError(weather, screen, "Location not found\n");
 					}
 					setTitle(
 						weather,
@@ -431,11 +454,10 @@ Weather *getWeather(WMScreen *screen, Preferences *prefs)
 
 static void updateDockapp(void *data)
 {
-	UpdateData *d = (UpdateData *)data;
+	Dockapp *dockapp = (Dockapp *)data;
 
-	WMScreen *screen = d->screen;
-	Dockapp *dockapp = d->dockapp;
-	Preferences *prefs = d->prefs;
+	WMScreen *screen = dockapp->screen;
+	Preferences *prefs = dockapp->prefs;
 	Weather *weather;
 	WMPixmap *icon;
 
@@ -484,25 +506,24 @@ char *WMGetPLStringForKey(WMPropList *propList, char *key)
 		return NULL;
 }
 
-Preferences *setPreferences(int argc, char **argv)
+char *getPreferencesFilename()
 {
 	char *filename;
-	int c;
-	Preferences *prefs = wmalloc(sizeof(Preferences));
-	WMPropList *propList;
-	
-	//set defaults
-	prefs->units = "f";
-	prefs->woeid = "2502265";
-	prefs->zip = NULL;
-	prefs->woeid_or_zip = NULL;
-	prefs->interval = 60;
 
-	//read from wmforecastrc
 	filename = getenv("XDG_CONFIG_DIR");
 	if (!filename)
 		filename = wstrconcat(getenv("HOME"), "/.config");
 	filename = wstrappend(filename, "/wmforecast/wmforecastrc");
+
+	return filename;
+}
+
+void readPreferences(Preferences *prefs) 
+{
+	char *filename;
+	WMPropList *propList;
+
+	filename = getPreferencesFilename();
 	propList = WMReadPropListFromFile(filename); 
 	if (propList) {
 		char *value;
@@ -523,6 +544,23 @@ Preferences *setPreferences(int argc, char **argv)
 			prefs->interval = strtol(value, NULL, 10);
 	}
 
+
+}
+
+Preferences *setPreferences(int argc, char **argv)
+{
+	int c;
+	Preferences *prefs = wmalloc(sizeof(Preferences));
+
+	//set defaults
+	prefs->units = "f";
+	prefs->woeid = "2502265";
+	prefs->zip = NULL;
+	prefs->woeid_or_zip = NULL;
+	prefs->interval = 60;
+
+	readPreferences(prefs);
+
 	//command line
 	while (1)
 	{
@@ -580,8 +618,10 @@ Preferences *setPreferences(int argc, char **argv)
 			       "    -z, --zip <zip>      ZIP code or Location ID (Yahoo has deprecated this\n"
 			       "                         option and it is not guaranteed to work)\n"
 			       "Notes:\n"
-			       "* only one of -w or -z may be used, not both\n\n"
 			       "* double click the icon at any time to refresh data\n\n"
+			       "* right click the icon to edit your preferences in a GUI\n\n"
+			       "* preferences may be manually configured in\n"
+			       "  XDG_CONFIG_DIR/wmforecast/wmforecastrc\n\n"
 			       "Report bugs to %s\n",
 			       PACKAGE_BUGREPORT
 				);
@@ -602,10 +642,6 @@ Preferences *setPreferences(int argc, char **argv)
 			break;
      
 		case 'z':
-			if (prefs->woeid_or_zip) {
-				printf("only one of -w or -z may be used, not both\n");
-				exit(0);
-			}
 			prefs->woeid_or_zip = "z";
 			prefs->zip = optarg;
 			break;
@@ -630,177 +666,207 @@ Preferences *setPreferences(int argc, char **argv)
 	return prefs;
 }
 
-UpdateData *newUpdateData(WMScreen *screen, Dockapp *dockapp, Preferences *prefs)
+static void closePreferences(WMWidget *widget, void *data)
 {
-	UpdateData *data = wmalloc(sizeof(UpdateData));
-	data->screen = screen;
-	data->dockapp = dockapp;
-	data->prefs = prefs;
-	data->minutesLeft = prefs->interval;
-	return data;
+	Dockapp *d = (Dockapp *)data;
+	WMDestroyWidget(d->prefsWindow->window);
+	d->prefsWindowPresent = 0;
 }
 
-typedef struct {
-	Preferences *prefs;
-	WMButton *apply;
-	WMButton *celsius;
-	WMButton *close;
-	WMButton *fahrenheit;
-	WMButton *save;
-	WMButton *woeid;
-	WMButton *zip;
-	WMFrame *intervalFrame;
-	WMFrame *locationFrame;
-	WMFrame *units;
-	WMLabel *minutes;
-	WMLabel *woeid_zip;
-	WMScreen *screen;
-	WMTextField *interval;
-	WMTextField *location;
-	WMTextField *woeidField;
-	WMTextField *zipField;
-	WMWindow *window;
-} PreferencesWindow;
-
-static void closePreferences(WMWidget *widget, void *data)
+static void savePreferences(WMWidget *widget, void *data)
 {
-	PreferencesWindow *pw;
+	char *filename;
+	char *prefsString;
+	Dockapp *d = (Dockapp *)data;
+	FILE *file;
+	WMPropList *prefsPL;
+	WMPropList *key;
+	WMPropList *object;
+
+	prefsPL = WMCreatePLDictionary(NULL,NULL);
+
+	key = WMCreatePLString("units");
+	if (WMGetButtonSelected(d->prefsWindow->celsius)) {
+		object = WMCreatePLString("c");
+		WMPutInPLDictionary(prefsPL, key, object);
+	}
+	if (WMGetButtonSelected(d->prefsWindow->fahrenheit)) {
+		object = WMCreatePLString("f");
+		WMPutInPLDictionary(prefsPL, key, object);
+	}
+
+	key = WMCreatePLString("woeid_or_zip");
+	if (WMGetButtonSelected(d->prefsWindow->woeid)) {
+		object = WMCreatePLString("w");
+		WMPutInPLDictionary(prefsPL, key, object);
+	}
+	if (WMGetButtonSelected(d->prefsWindow->zip)) {
+		object = WMCreatePLString("z");
+		WMPutInPLDictionary(prefsPL, key, object);
+	}
+
+	key = WMCreatePLString("woeid");
+	object = WMCreatePLString(WMGetTextFieldText(d->prefsWindow->woeidField));
+	WMPutInPLDictionary(prefsPL, key, object);
+
+	key = WMCreatePLString("zip");
+	object = WMCreatePLString(WMGetTextFieldText(d->prefsWindow->zipField));
+	WMPutInPLDictionary(prefsPL, key, object);
+
+	key = WMCreatePLString("interval");
+	object = WMCreatePLString(WMGetTextFieldText(d->prefsWindow->interval));
+	WMPutInPLDictionary(prefsPL, key, object);
+	
+	prefsString = WMGetPropListDescription(prefsPL, True);
+
+	filename = getPreferencesFilename();
+
+	// since WMWritePropListToFile only writes to files in 
+	// GNUSTEP_USER_ROOT, we need to write our own version
+	file = fopen(filename, "w");
+	if (file)
+	{
+		fputs(prefsString, file);
+		fclose(file);
+	}
+
+	readPreferences(d->prefs);
+	updateDockapp(d);
 
-	pw = (PreferencesWindow *)data;
-	WMDestroyWidget(pw->window);
 }
 
 static void editPreferences(void *data)
 {
 	char intervalPtr[50];
-	PreferencesWindow *pw;
-
-	pw = wmalloc(sizeof(PreferencesWindow));
-
-	UpdateData *d = (UpdateData *)data;
-	pw->screen = d->screen;
-	pw->prefs = d->prefs;
-
-
-	pw->window = WMCreateWindow(pw->screen, "wmforecast");
-	WMSetWindowTitle(pw->window, "wmforecast");
-	WMSetWindowCloseAction (pw->window, closePreferences, pw);
-	WMResizeWidget(pw->window, 424, 130);
-	WMRealizeWidget(pw->window);
-	WMMapWidget(pw->window);
-
-	pw->units = WMCreateFrame(pw->window);
-	WMSetFrameTitle(pw->units, "Units");
-	WMResizeWidget(pw->units, 112, 80);
-	WMMoveWidget(pw->units, 10, 10);
-	WMRealizeWidget(pw->units);
-	WMMapWidget(pw->units);
-
-	pw->celsius = WMCreateButton(pw->units, WBTRadio);
-	WMSetButtonText(pw->celsius, "Celsius");
-	WMMoveWidget(pw->celsius, 10, 20);
-	if (strcmp(pw->prefs->units,"c") == 0)
-		WMSetButtonSelected(pw->celsius,1);
-	WMRealizeWidget(pw->celsius);
-	WMMapWidget(pw->celsius);
-
-	pw->fahrenheit = WMCreateButton(pw->units, WBTRadio);
-	WMSetButtonText(pw->fahrenheit, "Fahrenheit");
-	WMMoveWidget(pw->fahrenheit, 10, 44);
-	if (strcmp(pw->prefs->units,"f") == 0)
-		WMSetButtonSelected(pw->fahrenheit,1);
-	WMRealizeWidget(pw->fahrenheit);
-	WMMapWidget(pw->fahrenheit);
-
-	pw->locationFrame = WMCreateFrame(pw->window);
-	WMSetFrameTitle(pw->locationFrame, "Location");
-	WMResizeWidget(pw->locationFrame, 160, 80);
-	WMMoveWidget(pw->locationFrame, 132, 10);
-	WMRealizeWidget(pw->locationFrame);
-	WMMapWidget(pw->locationFrame);
-
-	pw->woeid = WMCreateButton(pw->locationFrame, WBTRadio);
-	WMSetButtonText(pw->woeid, "WOEID");
-	WMMoveWidget(pw->woeid, 10, 20);
-	if (strcmp(pw->prefs->woeid_or_zip,"w") == 0)
-		WMSetButtonSelected(pw->woeid,1);
-	WMRealizeWidget(pw->woeid);
-	WMMapWidget(pw->woeid);
-
-	pw->woeidField = WMCreateTextField(pw->locationFrame);
-	WMSetTextFieldText(pw->woeidField, pw->prefs->woeid);
-	WMResizeWidget(pw->woeidField, 60, 20);
-	WMMoveWidget(pw->woeidField, 90, 20);
-	WMRealizeWidget(pw->woeidField);
-	WMMapWidget(pw->woeidField);
-
-	pw->zip = WMCreateButton(pw->locationFrame, WBTRadio);
-	WMSetButtonText(pw->zip, "ZIP code");
-	WMMoveWidget(pw->zip, 10, 44);
-	if (strcmp(pw->prefs->woeid_or_zip,"z") == 0)
-		WMSetButtonSelected(pw->zip,1);
-	WMRealizeWidget(pw->zip);
-	WMMapWidget(pw->zip);
-
-	pw->zipField = WMCreateTextField(pw->locationFrame);
-	WMSetTextFieldText(pw->zipField, pw->prefs->zip);
-	WMResizeWidget(pw->zipField, 60, 20);
-	WMMoveWidget(pw->zipField, 90, 44);
-	WMRealizeWidget(pw->zipField);
-	WMMapWidget(pw->zipField);
-
-	pw->intervalFrame = WMCreateFrame(pw->window);
-	WMSetFrameTitle(pw->intervalFrame, "Refresh interval");
-	WMResizeWidget(pw->intervalFrame, 112, 80);
-	WMMoveWidget(pw->intervalFrame, 302, 10);
-	WMRealizeWidget(pw->intervalFrame);
-	WMMapWidget(pw->intervalFrame);
-
-	pw->interval = WMCreateTextField(pw->intervalFrame);
-	sprintf(intervalPtr, "%lu", pw->prefs->interval);
-	WMSetTextFieldText(pw->interval, intervalPtr);
-	WMResizeWidget(pw->interval, 30, 20);
-	WMMoveWidget(pw->interval, 15, 33);
-	WMRealizeWidget(pw->interval);
-	WMMapWidget(pw->interval);
-
-	pw->minutes = WMCreateLabel(pw->intervalFrame);
-	WMSetLabelText(pw->minutes, "minutes");
-	WMMoveWidget(pw->minutes, 45, 35);
-	WMRealizeWidget(pw->minutes);
-	WMMapWidget(pw->minutes);
-
-	pw->close = WMCreateButton(pw->window, WBTMomentaryPush);
-	WMSetButtonText(pw->close, "Close");
-	WMSetButtonAction(pw->close, closePreferences, pw);
-	WMMoveWidget(pw->close, 10, 100);
-	WMRealizeWidget(pw->close);
-	WMMapWidget(pw->close);
-
-	pw->apply = WMCreateButton(pw->window, WBTMomentaryPush);
-	WMSetButtonText(pw->apply, "Apply");
-	WMMoveWidget(pw->apply, 285, 100);
-	WMRealizeWidget(pw->apply);
-	WMMapWidget(pw->apply);
-
-	pw->save = WMCreateButton(pw->window, WBTMomentaryPush);
-	WMSetButtonText(pw->save, "Save");
-	WMMoveWidget(pw->save, 353, 100);
-	WMRealizeWidget(pw->save);
-	WMMapWidget(pw->save);
+	Dockapp *d = (Dockapp *)data;
+
+	d->prefsWindowPresent = 1;
+
+	d->prefsWindow = wmalloc(sizeof(PreferencesWindow));
+
+	d->prefsWindow->screen = d->screen;
+	d->prefsWindow->prefs = d->prefs;
+
+
+	d->prefsWindow->window = WMCreateWindow(d->prefsWindow->screen, "wmforecast");
+	WMSetWindowTitle(d->prefsWindow->window, "wmforecast");
+	WMSetWindowCloseAction (d->prefsWindow->window, closePreferences, d);
+	WMResizeWidget(d->prefsWindow->window, 424, 130);
+	WMRealizeWidget(d->prefsWindow->window);
+	WMMapWidget(d->prefsWindow->window);
+
+	d->prefsWindow->units = WMCreateFrame(d->prefsWindow->window);
+	WMSetFrameTitle(d->prefsWindow->units, "Units");
+	WMResizeWidget(d->prefsWindow->units, 112, 80);
+	WMMoveWidget(d->prefsWindow->units, 10, 10);
+	WMRealizeWidget(d->prefsWindow->units);
+	WMMapWidget(d->prefsWindow->units);
+
+	d->prefsWindow->celsius = WMCreateButton(d->prefsWindow->units, WBTRadio);
+	WMSetButtonText(d->prefsWindow->celsius, "Celsius");
+	WMMoveWidget(d->prefsWindow->celsius, 10, 20);
+	if (strcmp(d->prefsWindow->prefs->units,"c") == 0)
+		WMSetButtonSelected(d->prefsWindow->celsius,1);
+	WMRealizeWidget(d->prefsWindow->celsius);
+	WMMapWidget(d->prefsWindow->celsius);
+
+	d->prefsWindow->fahrenheit = WMCreateButton(d->prefsWindow->units, WBTRadio);
+	WMSetButtonText(d->prefsWindow->fahrenheit, "Fahrenheit");
+	WMMoveWidget(d->prefsWindow->fahrenheit, 10, 44);
+	if (strcmp(d->prefsWindow->prefs->units,"f") == 0)
+		WMSetButtonSelected(d->prefsWindow->fahrenheit,1);
+	WMRealizeWidget(d->prefsWindow->fahrenheit);
+	WMMapWidget(d->prefsWindow->fahrenheit);
+
+	WMGroupButtons(d->prefsWindow->celsius, d->prefsWindow->fahrenheit);
+
+	d->prefsWindow->locationFrame = WMCreateFrame(d->prefsWindow->window);
+	WMSetFrameTitle(d->prefsWindow->locationFrame, "Location");
+	WMResizeWidget(d->prefsWindow->locationFrame, 160, 80);
+	WMMoveWidget(d->prefsWindow->locationFrame, 132, 10);
+	WMRealizeWidget(d->prefsWindow->locationFrame);
+	WMMapWidget(d->prefsWindow->locationFrame);
+
+	d->prefsWindow->woeid = WMCreateButton(d->prefsWindow->locationFrame, WBTRadio);
+	WMSetButtonText(d->prefsWindow->woeid, "WOEID");
+	WMMoveWidget(d->prefsWindow->woeid, 10, 20);
+	if (strcmp(d->prefsWindow->prefs->woeid_or_zip,"w") == 0)
+		WMSetButtonSelected(d->prefsWindow->woeid,1);
+	WMRealizeWidget(d->prefsWindow->woeid);
+	WMMapWidget(d->prefsWindow->woeid);
+
+	d->prefsWindow->woeidField = WMCreateTextField(d->prefsWindow->locationFrame);
+	WMSetTextFieldText(d->prefsWindow->woeidField, d->prefsWindow->prefs->woeid);
+	WMResizeWidget(d->prefsWindow->woeidField, 60, 20);
+	WMMoveWidget(d->prefsWindow->woeidField, 90, 20);
+	WMRealizeWidget(d->prefsWindow->woeidField);
+	WMMapWidget(d->prefsWindow->woeidField);
+
+	d->prefsWindow->zip = WMCreateButton(d->prefsWindow->locationFrame, WBTRadio);
+	WMSetButtonText(d->prefsWindow->zip, "ZIP code");
+	WMMoveWidget(d->prefsWindow->zip, 10, 44);
+	if (strcmp(d->prefsWindow->prefs->woeid_or_zip,"z") == 0)
+		WMSetButtonSelected(d->prefsWindow->zip,1);
+	WMRealizeWidget(d->prefsWindow->zip);
+	WMMapWidget(d->prefsWindow->zip);
+
+	d->prefsWindow->zipField = WMCreateTextField(d->prefsWindow->locationFrame);
+	WMSetTextFieldText(d->prefsWindow->zipField, d->prefsWindow->prefs->zip);
+	WMResizeWidget(d->prefsWindow->zipField, 60, 20);
+	WMMoveWidget(d->prefsWindow->zipField, 90, 44);
+	WMRealizeWidget(d->prefsWindow->zipField);
+	WMMapWidget(d->prefsWindow->zipField);
+
+	d->prefsWindow->intervalFrame = WMCreateFrame(d->prefsWindow->window);
+	WMSetFrameTitle(d->prefsWindow->intervalFrame, "Refresh interval");
+	WMResizeWidget(d->prefsWindow->intervalFrame, 112, 80);
+	WMMoveWidget(d->prefsWindow->intervalFrame, 302, 10);
+	WMRealizeWidget(d->prefsWindow->intervalFrame);
+	WMMapWidget(d->prefsWindow->intervalFrame);
+
+	WMGroupButtons(d->prefsWindow->woeid, d->prefsWindow->zip);
+
+	d->prefsWindow->interval = WMCreateTextField(d->prefsWindow->intervalFrame);
+	sprintf(intervalPtr, "%lu", d->prefsWindow->prefs->interval);
+	WMSetTextFieldText(d->prefsWindow->interval, intervalPtr);
+	WMResizeWidget(d->prefsWindow->interval, 30, 20);
+	WMMoveWidget(d->prefsWindow->interval, 15, 33);
+	WMRealizeWidget(d->prefsWindow->interval);
+	WMMapWidget(d->prefsWindow->interval);
+
+	d->prefsWindow->minutes = WMCreateLabel(d->prefsWindow->intervalFrame);
+	WMSetLabelText(d->prefsWindow->minutes, "minutes");
+	WMMoveWidget(d->prefsWindow->minutes, 45, 35);
+	WMRealizeWidget(d->prefsWindow->minutes);
+	WMMapWidget(d->prefsWindow->minutes);
+
+	d->prefsWindow->save = WMCreateButton(d->prefsWindow->window, WBTMomentaryPush);
+	WMSetButtonText(d->prefsWindow->save, "Save");
+	WMSetButtonAction(d->prefsWindow->save, savePreferences, d);
+	WMMoveWidget(d->prefsWindow->save, 285, 100);
+	WMRealizeWidget(d->prefsWindow->save);
+	WMMapWidget(d->prefsWindow->save);
+
+	d->prefsWindow->close = WMCreateButton(d->prefsWindow->window, WBTMomentaryPush);
+	WMSetButtonText(d->prefsWindow->close, "Close");
+	WMSetButtonAction(d->prefsWindow->close, closePreferences, d);
+	WMMoveWidget(d->prefsWindow->close, 353, 100);
+	WMRealizeWidget(d->prefsWindow->close);
+	WMMapWidget(d->prefsWindow->close);
 }
 
 static void refresh(XEvent *event, void *data)
 {
+	Dockapp *d = (Dockapp *)data;
 	if (WMIsDoubleClick(event) && event->xbutton.button == Button1) 
-		updateDockapp(data);
-	if (event->xbutton.button == Button3)
-		editPreferences(data);
+		updateDockapp(d);
+	if (event->xbutton.button == Button3 && !d->prefsWindowPresent)
+		editPreferences(d);
 }
 
 static void timerHandler(void *data)
 {
-	UpdateData *d = (UpdateData *)data;
+	Dockapp *d = (Dockapp *)data;
 	
 	d->minutesLeft--;
 	if (d->minutesLeft == 0) {
@@ -814,7 +880,6 @@ int main(int argc, char **argv)
 	Display *display;
 	Dockapp *dockapp;
 	Preferences *prefs;
-	UpdateData *data;
 	WMScreen *screen;
 
 	prefs = setPreferences(argc, argv);
@@ -823,15 +888,14 @@ int main(int argc, char **argv)
 	display = XOpenDisplay("");
 
 	screen = WMCreateScreen(display, DefaultScreen(display));
-	dockapp = newDockapp(screen, argc, argv);
-	data = newUpdateData(screen, dockapp, prefs);
+	dockapp = newDockapp(screen, prefs, argc, argv);
 
 	WMCreateEventHandler(WMWidgetView(dockapp->icon), ButtonPressMask,
-			     refresh, data);
+			     refresh, dockapp);
 
-	updateDockapp(data);
+	updateDockapp(dockapp);
 	WMAddPersistentTimerHandler(60*1000, //one minute
-				    timerHandler, data);
+				    timerHandler, dockapp);
 
 	WMScreenMainLoop(screen);
 }

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-wmaker/wmforecast.git



More information about the Pkg-wmaker-commits mailing list