[Xfce4-commits] <xfce4-weather-plugin:master> Merge branch 'refactor-widget-update'
Harald Judt
noreply at xfce.org
Wed Aug 15 10:00:04 CEST 2012
Updating branch refs/heads/master
to 8bd0e2dac81f0e5ac84e56cbfe08398b540b296f (commit)
from 0af8d2c9a938ac9fc82123f1887280ccb790ff3e (commit)
commit 8bd0e2dac81f0e5ac84e56cbfe08398b540b296f
Merge: 0af8d2c a9a1a4a
Author: Harald Judt <h.judt at gmx.at>
Date: Wed Aug 15 09:56:41 2012 +0200
Merge branch 'refactor-widget-update'
commit a9a1a4a4e4d613aaa8b663c838728a3a244a87cc
Author: Harald Judt <h.judt at gmx.at>
Date: Wed Aug 15 09:47:47 2012 +0200
Refactor icon and scrollbox update code.
set_icon_current() and set_icon_error() do more than just updating
the icon in the panel. set_icon_error() frees weather data, for
example, which is not good and may cause nasty surprises, and both
update the scrollbox, which might not be desired.
This commit splits up the updating code into separate functions
for the icon and the scrollbox. These take care of properly setting
the icon and labels according to the data available, so they are
only responsible for the representation, but will not change
weather data, which should be done elsewhere.
commit 9eff74d85bc60ca0871dbd164653d111a5b4ec07
Author: Harald Judt <h.judt at gmx.at>
Date: Mon Aug 13 22:39:30 2012 +0200
Removing unnecessary code for resizing icons.
It seems this has been made redundant by commit
"Better handling of vertical and deskbar modes".
panel-plugin/weather.c | 140 +++++++++++++++---------------------------------
1 files changed, 44 insertions(+), 96 deletions(-)
diff --git a/panel-plugin/weather.c b/panel-plugin/weather.c
index b4b60a6..4ca90e1 100644
--- a/panel-plugin/weather.c
+++ b/panel-plugin/weather.c
@@ -219,103 +219,65 @@ make_label(const xfceweather_data *data,
static void
-set_icon_error(xfceweather_data *data)
+update_icon(xfceweather_data *data)
{
- GdkPixbuf *icon;
- const gchar *txtsize;
+ GdkPixbuf *icon = NULL;
+ xml_time *conditions;
gchar *str;
- gint height;
-
- if (data->weatherdata) {
- xml_weather_free(data->weatherdata);
- data->weatherdata = NULL;
- }
-
- txtsize = get_label_size(data);
-
- str = g_strdup_printf("<span size=\"%s\">%s</span>", txtsize, _("No Data"));
- gtk_scrollbox_set_label(GTK_SCROLLBOX(data->scrollbox), -1, str);
- g_free(str);
-
- gtk_widget_get_size_request(data->scrollbox, NULL, &height);
+ gint size;
+ size = data->size;
#if LIBXFCE4PANEL_CHECK_VERSION(4,9,0)
/* make icon double-size in deskbar mode */
if (data->panel_orientation == XFCE_PANEL_PLUGIN_MODE_DESKBAR &&
data->size != data->panel_size)
- icon = get_icon(NULL, data->size * 2, FALSE);
- else
- icon = get_icon(NULL, data->size, FALSE);
-#else
- if (data->panel_orientation == GTK_ORIENTATION_VERTICAL)
- icon = get_icon(NULL, data->size - height - 2, FALSE);
- else
- icon = get_icon(NULL, data->size, FALSE);
+ size *= 2;
#endif
+ /* set icon according to current weather conditions */
+ conditions = get_current_conditions(data->weatherdata);
+ str = get_data(conditions, data->unit_system, SYMBOL);
+ icon = get_icon(str, size, data->night_time);
+ g_free(str);
gtk_image_set_from_pixbuf(GTK_IMAGE(data->iconimage), icon);
-
if (G_LIKELY(icon))
g_object_unref(G_OBJECT(icon));
}
static void
-set_icon_current(xfceweather_data *data)
+update_scrollbox(xfceweather_data *data)
{
xml_time *conditions;
guint i;
- GdkPixbuf *icon = NULL;
data_types type;
+ const gchar *txtsize;
gchar *str;
- gint size, height;
+ gint size;
- for (i = 0; i < data->labels->len; i++) {
- type = g_array_index(data->labels, data_types, i);
- str = make_label(data, type);
+ txtsize = get_label_size(data);
+ gtk_scrollbox_clear(GTK_SCROLLBOX(data->scrollbox));
+ if (data->weatherdata)
+ for (i = 0; i < data->labels->len; i++) {
+ type = g_array_index(data->labels, data_types, i);
+ str = make_label(data, type);
+ gtk_scrollbox_set_label(GTK_SCROLLBOX(data->scrollbox), -1, str);
+ g_free(str);
+ }
+ else {
+ str = g_strdup_printf("<span size=\"%s\">%s</span>", txtsize, _("No Data"));
gtk_scrollbox_set_label(GTK_SCROLLBOX(data->scrollbox), -1, str);
g_free(str);
}
-
- if (i == 0)
- size = data->size;
- else {
- gtk_widget_get_size_request(data->scrollbox, NULL, &height);
-#if LIBXFCE4PANEL_CHECK_VERSION(4,9,0)
- /* make icon double-size in deskbar mode */
- if (data->panel_orientation == XFCE_PANEL_PLUGIN_MODE_DESKBAR &&
- data->size != data->panel_size)
- size = data->size * 2;
- else
- size = data->size;
-#else
- if (data->panel_orientation == GTK_ORIENTATION_VERTICAL)
- size = data->size - height - 2;
- else
- size = data->size;
-#endif
- }
-
- /* get current weather conditions */
- conditions = get_current_conditions(data->weatherdata);
-
- str = get_data(conditions, data->unit_system, SYMBOL);
- icon = get_icon(str, size, data->night_time);
- g_free(str);
-
- gtk_image_set_from_pixbuf(GTK_IMAGE(data->iconimage), icon);
-
- if (G_LIKELY(icon))
- g_object_unref(G_OBJECT(icon));
}
static void
update_current_conditions(xfceweather_data *data)
{
- if (G_UNLIKELY(data == NULL) ||
- G_UNLIKELY(data->weatherdata == NULL)) {
- set_icon_error(data);
+ if (G_UNLIKELY(data->weatherdata == NULL)) {
+ update_icon(data);
+ update_scrollbox(data);
return;
}
@@ -328,7 +290,8 @@ update_current_conditions(xfceweather_data *data)
make_current_conditions(data->weatherdata);
data->last_conditions_update = time(NULL);
data->night_time = is_night_time(data->astrodata);
- set_icon_current(data);
+ update_icon(data);
+ update_scrollbox(data);
}
@@ -395,9 +358,9 @@ cb_update(const gboolean succeed,
}
}
- gtk_scrollbox_clear(GTK_SCROLLBOX(data->scrollbox));
-
- if (weather) {
+ if (G_LIKELY(weather)) {
+ if (G_LIKELY(data->weatherdata))
+ xml_weather_free(data->weatherdata);
data->weatherdata = weather;
data->last_data_update = time(NULL);
}
@@ -476,8 +439,8 @@ update_weatherdata(xfceweather_data *data)
if ((!data->lat || !data->lon) ||
strlen(data->lat) == 0 || strlen(data->lon) == 0) {
- gtk_scrollbox_clear(GTK_SCROLLBOX(data->scrollbox));
- set_icon_error(data);
+ update_icon(data);
+ update_scrollbox(data);
return TRUE;
}
@@ -519,19 +482,14 @@ update_weatherdata(xfceweather_data *data)
}
/* update current conditions, icon and labels */
- if (need_conditions_update(data)) {
- gtk_scrollbox_clear(GTK_SCROLLBOX(data->scrollbox));
+ if (need_conditions_update(data))
update_current_conditions(data);
- }
/* update night time status and icon */
night_time = is_night_time(data->astrodata);
if (data->night_time != night_time) {
data->night_time = night_time;
- if (data->weatherdata)
- set_icon_current(data);
- else
- set_icon_error(data);
+ update_icon(data);
}
/* keep timeout running */
@@ -906,7 +864,7 @@ weather_get_tooltip_text(const xfceweather_data *data)
sunset_tm = localtime(&data->astrodata->sunset);
strftime(sunset, 40, "%X", sunset_tm);
sunval = g_strdup_printf(_("The sun rises at %s and sets at %s."),
- sunrise, sunset);
+ sunrise, sunset);
}
else
sunval = g_strdup_printf("");
@@ -1167,12 +1125,8 @@ xfceweather_set_size(XfcePanelPlugin *panel,
#endif
data->size = size;
- gtk_scrollbox_clear(GTK_SCROLLBOX(data->scrollbox));
-
- if (data->weatherdata)
- set_icon_current(data);
- else
- set_icon_error(data);
+ update_icon(data);
+ update_scrollbox(data);
/* we handled the size */
return TRUE;
@@ -1207,14 +1161,11 @@ xfceweather_set_mode(XfcePanelPlugin *panel,
else
xfce_panel_plugin_set_small(XFCE_PANEL_PLUGIN(panel), TRUE);
- gtk_scrollbox_clear(GTK_SCROLLBOX(data->scrollbox));
gtk_scrollbox_set_orientation(GTK_SCROLLBOX(data->scrollbox),
data->orientation);
- if (data->weatherdata)
- set_icon_current(data);
- else
- set_icon_error(data);
+ update_icon(data);
+ update_scrollbox(data);
/* we handled the orientation */
return TRUE;
@@ -1245,14 +1196,11 @@ xfceweather_set_orientation(XfcePanelPlugin *panel,
data->vbox_center_scrollbox, TRUE, FALSE, 0);
g_object_unref(G_OBJECT(data->vbox_center_scrollbox));
- gtk_scrollbox_clear(GTK_SCROLLBOX(data->scrollbox));
gtk_scrollbox_set_orientation(GTK_SCROLLBOX(data->scrollbox),
data->panel_orientation);
- if (data->weatherdata)
- set_icon_current(data);
- else
- set_icon_error(data);
+ update_icon(data);
+ update_scrollbox(data);
/* we handled the orientation */
return TRUE;
More information about the Xfce4-commits
mailing list