17125N/A/jds/bin/diff -uprN gnome-panel-2.27.91.old/applets/clock/clock.c gnome-panel-2.27.91/applets/clock/clock.c
17139N/A--- gnome-panel-2.27.91.old/applets/clock/clock.c 2009-08-27 18:45:22.763599000 +0100
17139N/A+++ gnome-panel-2.27.91/applets/clock/clock.c 2009-08-27 18:57:31.552271000 +0100
17125N/A@@ -146,6 +146,8 @@ struct _ClockData {
15733N/A GtkWidget *minutes_spin;
15733N/A GtkWidget *seconds_spin;
15733N/A GtkWidget *set_time_button;
15733N/A+ GtkWidget *show_weather_toggle;
15733N/A+ GtkWidget *show_temperature_toggle;
15733N/A
15733N/A GtkListStore *cities_store;
15733N/A GtkWidget *cities_section;
17125N/A@@ -234,6 +236,7 @@ static void applet_change_orient (PanelA
15733N/A ClockData *cd);
15733N/A
15733N/A static void edit_hide (GtkWidget *unused, ClockData *cd);
15733N/A+static void update_show_weather_toggles (ClockData *cd);
15733N/A static gboolean edit_delete (GtkWidget *unused, GdkEvent *event, ClockData *cd);
15733N/A static void save_cities_store (ClockData *cd);
15733N/A
17139N/A@@ -1975,11 +1978,38 @@ update_panel_weather (ClockData *cd)
17139N/A gtk_widget_hide (cd->panel_temperature_label);
17139N/A
17139N/A if ((cd->show_weather || cd->show_temperature) &&
17125N/A- g_list_length (cd->locations) > 0)
17125N/A- gtk_widget_show (cd->weather_obox);
17125N/A- else
17125N/A- gtk_widget_hide (cd->weather_obox);
17139N/A+ g_list_length (cd->locations) > 0) {
15733N/A+ ClockLocation *loc = NULL;
15733N/A+ GList *locations, *l;
15733N/A+ gboolean current_found = FALSE;
17139N/A
17139N/A+ /* need to process locations, if there is no current
17139N/A+ location then hide the weather/temperature on panel */
17125N/A+ locations = cd->locations;
15733N/A+ for (l = locations; l; l = l->next) {
15733N/A+ loc = l->data;
15733N/A+ if (clock_location_is_current (loc)) {
15733N/A+ current_found = TRUE;
15733N/A+ break;
15733N/A+ }
15733N/A+ }
15733N/A+ if (current_found == FALSE) {
15733N/A+ /* There is no current location so hide the obox */
15733N/A+ gtk_widget_hide(cd->weather_obox);
15733N/A+ } else {
15733N/A+ gtk_widget_show(cd->weather_obox);
15733N/A+ }
15733N/A+ } else {
17139N/A+ gtk_widget_hide (cd->weather_obox);
15733N/A+ }
17139N/A+
15733N/A+ if (g_list_length (cd->locations) <= 0) {
15733N/A+ if (cd->panel_weather_icon)
15733N/A+ gtk_image_set_from_pixbuf (GTK_IMAGE (cd->panel_weather_icon),
15733N/A+ NULL);
15733N/A+ if (cd->panel_temperature_label)
15733N/A+ gtk_label_set_text (GTK_LABEL (cd->panel_temperature_label), "");
15733N/A+ }
17139N/A gtk_widget_queue_resize (cd->applet);
15733N/A }
15733N/A
17139N/A@@ -2074,19 +2104,7 @@ locations_changed (ClockData *cd)
15733N/A ClockLocation *loc;
15733N/A glong id;
15733N/A
15733N/A- if (!cd->locations) {
15733N/A- if (cd->weather_obox)
15733N/A- gtk_widget_hide (cd->weather_obox);
15733N/A- if (cd->panel_weather_icon)
15733N/A- gtk_image_set_from_pixbuf (GTK_IMAGE (cd->panel_weather_icon),
15733N/A- NULL);
15733N/A- if (cd->panel_temperature_label)
15733N/A- gtk_label_set_text (GTK_LABEL (cd->panel_temperature_label),
15733N/A- "");
15733N/A- } else {
15733N/A- if (cd->weather_obox)
15733N/A- gtk_widget_show (cd->weather_obox);
15733N/A- }
17139N/A+ update_panel_weather (cd);
15733N/A
15733N/A for (l = cd->locations; l; l = l->next) {
15733N/A loc = l->data;
17139N/A@@ -3121,12 +3139,25 @@ edit_clear (ClockData *cd)
15733N/A }
15733N/A
15733N/A static void
15733N/A+update_show_weather_toggles(ClockData *cd)
15733N/A+{
15733N/A+ if (g_list_length (cd->locations) <= 0) {
15733N/A+ gtk_widget_set_sensitive (cd->show_weather_toggle, FALSE);
15733N/A+ gtk_widget_set_sensitive (cd->show_temperature_toggle, FALSE);
15733N/A+ } else {
15733N/A+ gtk_widget_set_sensitive (cd->show_weather_toggle, TRUE);
15733N/A+ gtk_widget_set_sensitive (cd->show_temperature_toggle, TRUE);
15733N/A+ }
15733N/A+}
15733N/A+
15733N/A+static void
15733N/A edit_hide (GtkWidget *unused, ClockData *cd)
15733N/A {
17125N/A GtkWidget *edit_window = _clock_get_widget (cd, "edit-location-window");
15733N/A
15733N/A gtk_widget_hide (edit_window);
15733N/A edit_clear (cd);
15733N/A+ update_show_weather_toggles (cd);
15733N/A }
15733N/A
15733N/A static gboolean
17139N/A@@ -3197,6 +3228,8 @@ run_prefs_locations_remove (GtkButton *b
15733N/A GtkTreeSelection *sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (cd->prefs_locations));
15733N/A
15733N/A gtk_tree_selection_selected_foreach (sel, remove_tree_row, cd);
15733N/A+ update_panel_weather (cd);
15733N/A+ update_show_weather_toggles (cd);
15733N/A }
15733N/A
15733N/A static void
17139N/A@@ -3413,17 +3446,22 @@ fill_prefs_window (ClockData *cd)
15733N/A G_CALLBACK (set_show_seconds_cb), cd);
15733N/A
15733N/A /* Set the "Show weather" checkbox */
17125N/A- widget = _clock_get_widget (cd, "weather_check");
15733N/A- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), cd->show_weather);
15733N/A- g_signal_connect (widget, "toggled",
17139N/A+ cd->show_weather_toggle = _clock_get_widget (cd, "weather_check");
15733N/A+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (cd->show_weather_toggle),
15733N/A+ cd->show_weather);
15733N/A+ g_signal_connect (cd->show_weather_toggle, "toggled",
17139N/A G_CALLBACK (set_show_weather_cb), cd);
15733N/A
15733N/A /* Set the "Show temperature" checkbox */
17125N/A- widget = _clock_get_widget (cd, "temperature_check");
15733N/A- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), cd->show_temperature);
15733N/A- g_signal_connect (widget, "toggled",
17139N/A+ cd->show_temperature_toggle = _clock_get_widget (cd, "temperature_check");
15733N/A+ gtk_toggle_button_set_active (
17139N/A+ GTK_TOGGLE_BUTTON (cd->show_temperature_toggle), cd->show_temperature);
15733N/A+ g_signal_connect (cd->show_temperature_toggle, "toggled",
17139N/A G_CALLBACK (set_show_temperature_cb), cd);
17139N/A
17139N/A+ /* If no Locations then cannot show/hide weather/temperature */
17139N/A+ update_show_weather_toggles (cd);
15733N/A+
15733N/A /* Fill the Cities list */
17125N/A widget = _clock_get_widget (cd, "cities_list");
17139N/A
17139N/A@@ -3490,8 +3528,10 @@ ensure_prefs_window_is_created (ClockDat
15733N/A GtkTreeSelection *selection;
15733N/A GWeatherLocation *world;
15733N/A
15733N/A- if (cd->prefs_window)
15733N/A+ if (cd->prefs_window) {
15733N/A+ update_show_weather_toggles (cd);
15733N/A return;
15733N/A+ }
15733N/A
17125N/A cd->prefs_window = _clock_get_widget (cd, "prefs-window");
15733N/A