[Xfce4-commits] <xfce4-weather-plugin:master> Make the plugin compatible with Xfce 4.8 (bug #6965, bug #7189).

Nick Schermer noreply at xfce.org
Wed Feb 2 19:16:01 CET 2011


Updating branch refs/heads/master
         to 1052702419390daeaeec10cfa924ed8853cb0be0 (commit)
       from 9c0188e12f1451614c2a384521dd525a3dc03e1c (commit)

commit 1052702419390daeaeec10cfa924ed8853cb0be0
Author: Jérôme Guelfucci <jeromeg at xfce.org>
Date:   Thu Jan 27 14:53:15 2011 +0100

    Make the plugin compatible with Xfce 4.8 (bug #6965, bug #7189).
    
    Based on an initial patch by Nick Schermer which did not apply anymore.
    Also added back scrolling and animation option lost with this patch.
    
    Removed encoding key from desktop file..

 panel-plugin/Makefile.am           |   18 +-
 panel-plugin/weather-config.c      |   26 +-
 panel-plugin/weather-data.c        |    2 +-
 panel-plugin/weather-http.c        |   18 +-
 panel-plugin/weather-icon.c        |    3 +
 panel-plugin/weather-parsers.c     |   40 ++--
 panel-plugin/weather-scrollbox.c   |  547 +++++++++---------------------------
 panel-plugin/weather-scrollbox.h   |   24 +-
 panel-plugin/weather-search.c      |   26 +-
 panel-plugin/weather-summary.c     |   20 +-
 panel-plugin/weather-translate.c   |    4 +-
 panel-plugin/weather.c             |   28 +-
 panel-plugin/weather.desktop.in.in |    2 -
 panel-plugin/weather.h             |    2 +-
 14 files changed, 244 insertions(+), 516 deletions(-)

diff --git a/panel-plugin/Makefile.am b/panel-plugin/Makefile.am
index 7b6df26..50fc962 100644
--- a/panel-plugin/Makefile.am
+++ b/panel-plugin/Makefile.am
@@ -1,14 +1,14 @@
 INCLUDES =								\
-        -I$(top_srcdir)                                         	\
+	-I$(top_srcdir)							\
 	-DTHEMESDIR=\"$(datadir)/xfce4/weather/icons\" 			\
 	-DPACKAGE_LOCALE_DIR=\"$(localedir)\"				\
 	-DG_LOG_DOMAIN=\"weather\"
 
-plugindir = $(libexecdir)/xfce4/panel-plugins
-
 plugin_PROGRAMS =							\
 	xfce4-weather-plugin
 
+plugindir = $(libexecdir)/xfce4/panel-plugins
+
 xfce4_weather_plugin_SOURCES =						\
 	weather.c							\
 	weather.h							\
@@ -34,18 +34,18 @@ xfce4_weather_plugin_SOURCES =						\
 xfce4_weather_plugin_CFLAGS =						\
 	$(LIBXFCE4PANEL_CFLAGS)						\
 	$(LIBXFCEGUI4_CFLAGS)						\
-        $(LIBXFCE4UTIL_CFLAGS)                                   	\
-        $(GTK_CFLAGS)                                            	\
+	$(LIBXFCE4UTIL_CFLAGS)						\
+	$(GTK_CFLAGS)							\
 	$(LIBXML_CFLAGS)
 
 xfce4_weather_plugin_LDADD =						\
-        $(LIBXFCE4PANEL_LIBS)						\
-        $(LIBXFCE4UTIL_LIBS)                                     	\
+	$(LIBXFCE4PANEL_LIBS)						\
+	$(LIBXFCE4UTIL_LIBS)						\
 	$(LIBXFCEGUI4_LIBS)						\
-        $(GTK_LIBS)                                              	\
+	$(GTK_LIBS)							\
 	$(LIBXML_LIBS)							\
 	$(LIBRESOLV)
-	
+
 desktopdir = $(datadir)/xfce4/panel-plugins
 desktop_in_in_files = weather.desktop.in.in
 desktop_in_files = $(desktop_in_in_files:.desktop.in.in=.desktop.in)
diff --git a/panel-plugin/weather-config.c b/panel-plugin/weather-config.c
index 74b4745..3023e11 100644
--- a/panel-plugin/weather-config.c
+++ b/panel-plugin/weather-config.c
@@ -1,5 +1,5 @@
 /*  Copyright (c) 2003-2007 Xfce Development Team
- * 
+ *
  *  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
@@ -162,6 +162,7 @@ apply_options (xfceweather_dialog *dialog)
   gchar       *text;
   gint         option;
   GValue       value = { 0, };
+  GtkWidget   *widget;
 
   xfceweather_data *data = (xfceweather_data *) dialog->wd;
 
@@ -214,7 +215,7 @@ apply_options (xfceweather_dialog *dialog)
   	GTK_TOGGLE_BUTTON(dialog->chk_animate_transition));
 
   gtk_scrollbox_set_animate(GTK_SCROLLBOX(data->scrollbox), data->animation_transitions);
-  
+
   if (!gtk_toggle_button_get_active
       (GTK_TOGGLE_BUTTON (dialog->chk_proxy_use)))
     data->proxy_fromenv = FALSE;
@@ -233,7 +234,12 @@ apply_options (xfceweather_dialog *dialog)
 
       if (strlen (text) == 0)
         {
-          xfce_err (_("Please enter proxy settings"));
+          widget = gtk_message_dialog_new (NULL, GTK_DIALOG_NO_SEPARATOR,
+                                           GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE,
+                                           _("Please enter proxy settings"));
+          gtk_dialog_run (GTK_DIALOG (widget));
+          gtk_widget_destroy (widget);
+
           gtk_widget_grab_focus (dialog->txt_proxy_host);
           g_free (text);
 
@@ -276,7 +282,7 @@ option_i (datas opt)
 static void auto_locate_cb(const gchar *loc_name, const gchar *loc_code, gpointer user_data)
 {
   xfceweather_dialog *dialog = (xfceweather_dialog *) user_data;
-  
+
   if (loc_code && loc_name) {
     gtk_entry_set_text (GTK_ENTRY (dialog->txt_loc_code), loc_code);
     gtk_label_set_text (GTK_LABEL (dialog->txt_loc_name), loc_name);
@@ -342,7 +348,7 @@ create_config_dialog (xfceweather_data *data,
   sg = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
   sg_buttons = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
 
-  dialog = panel_slice_new0 (xfceweather_dialog);
+  dialog = g_slice_new0 (xfceweather_dialog);
 
   dialog->wd = (xfceweather_data *) data;
   dialog->dialog = gtk_widget_get_toplevel (vbox);
@@ -376,10 +382,10 @@ create_config_dialog (xfceweather_data *data,
 
   gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
   gtk_misc_set_alignment (GTK_MISC (dialog->txt_loc_name), 0, 0.5);
-  
+
 #if GTK_CHECK_VERSION(2,12,0)
   gtk_label_set_ellipsize (GTK_LABEL(dialog->txt_loc_name), PANGO_ELLIPSIZE_END);
-#endif  
+#endif
   if (dialog->wd->location_code != NULL)
     gtk_entry_set_text (GTK_ENTRY (dialog->txt_loc_code),
                         dialog->wd->location_code);
@@ -387,9 +393,9 @@ create_config_dialog (xfceweather_data *data,
   if (dialog->wd->location_name != NULL)
     gtk_label_set_text (GTK_LABEL (dialog->txt_loc_name),
                         dialog->wd->location_name);
-  else if (dialog->wd->weatherdata && 
+  else if (dialog->wd->weatherdata &&
            get_data (dialog->wd->weatherdata, DNAM) != NULL &&
-	   strlen (get_data (dialog->wd->weatherdata, DNAM)) > 1)  
+	   strlen (get_data (dialog->wd->weatherdata, DNAM)) > 1)
     gtk_label_set_text (GTK_LABEL (dialog->txt_loc_name),
                         get_data (dialog->wd->weatherdata, DNAM));
   else
@@ -543,7 +549,7 @@ create_config_dialog (xfceweather_data *data,
                     G_CALLBACK (cb_deloption), dialog);
 
 
-  
+
   dialog->chk_animate_transition =
     gtk_check_button_new_with_label (_("Animate transitions between labels"));
   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
diff --git a/panel-plugin/weather-data.c b/panel-plugin/weather-data.c
index e72b995..9c36d07 100644
--- a/panel-plugin/weather-data.c
+++ b/panel-plugin/weather-data.c
@@ -30,7 +30,7 @@
 #define DATAS_DAYF  0x0300
 #define DATAS_LNK   0x0400
 
-#define EMPTY_STRING "-"
+#define EMPTY_STRING "99"
 #define CHK_NULL(str) (str ? str : EMPTY_STRING);
 
 static const gchar *
diff --git a/panel-plugin/weather-http.c b/panel-plugin/weather-http.c
index 30917de..96758fa 100644
--- a/panel-plugin/weather-http.c
+++ b/panel-plugin/weather-http.c
@@ -39,7 +39,7 @@
 #include <glib.h>
 #include <gtk/gtk.h>
 #include <libxfce4util/libxfce4util.h>
-#include <libxfce4panel/xfce-panel-macros.h>
+#include <libxfce4panel/libxfce4panel.h>
 
 #include "weather-http.h"
 
@@ -149,7 +149,7 @@ weather_http_receive_data_idle (gpointer user_data)
   gchar              *request;
   fd_set              fds;
   struct timeval      select_timeout;
-  
+
   struct addrinfo     h, *r, *a;
   gchar      	     *port = NULL;
   gint                err;
@@ -183,12 +183,12 @@ weather_http_receive_data_idle (gpointer user_data)
   h.ai_family = AF_UNSPEC;
   h.ai_socktype = SOCK_STREAM;
   h.ai_protocol = IPPROTO_TCP;
-  
+
   if (connection->proxy_port)
   	port = g_strdup_printf("%d", connection->proxy_port);
   else
   	port = g_strdup("80");
-  
+
   err = getaddrinfo(connection->proxy_host ? connection->proxy_host : connection->hostname,
   		port, &h, &r);
 
@@ -214,7 +214,7 @@ weather_http_receive_data_idle (gpointer user_data)
     return FALSE;
 
   /* open the socket */
-  
+
   for (a = r; a != NULL; a = a->ai_next) {
     connection->fd = socket (a->ai_family, a->ai_socktype, a->ai_protocol);
     if (connection->fd < 0) {
@@ -232,7 +232,7 @@ weather_http_receive_data_idle (gpointer user_data)
 #endif
     if (m == 0)
       break;
-    else 
+    else
       err = errno;
 
     if (weather_http_receive_data_check (connection, timeout))
@@ -271,7 +271,7 @@ weather_http_receive_data_idle (gpointer user_data)
     request = g_strdup_printf ("GET %s HTTP/1.1\r\n"
     				"Host: %s\r\n"
 				"Connection: close\r\n"
-				"\r\n", 
+				"\r\n",
 				connection->url, connection->hostname);
 
   /* send the request */
@@ -481,7 +481,7 @@ weather_http_receive_data_destroyed (gpointer user_data)
   g_free (connection->proxy_host);
 
   /* cleanup */
-  panel_slice_free (WeatherConnection, connection);
+  g_slice_free (WeatherConnection, connection);
 }
 
 
@@ -497,7 +497,7 @@ weather_http_receive_data (const gchar  *hostname,
   WeatherConnection *connection;
 
   /* create slice */
-  connection = panel_slice_new0 (WeatherConnection);
+  connection = g_slice_new0 (WeatherConnection);
 
   /* set connection properties */
   connection->hostname = g_strdup (hostname);
diff --git a/panel-plugin/weather-icon.c b/panel-plugin/weather-icon.c
index f403e86..0949bc5 100644
--- a/panel-plugin/weather-icon.c
+++ b/panel-plugin/weather-icon.c
@@ -38,6 +38,9 @@ get_icon (const gchar *number,
   GdkPixbuf *image = NULL;
   gchar     *filename;
 
+  if (number == NULL || strcmp (number, "-") == 0)
+    number = "99";
+
   filename = g_strdup_printf ("%s" G_DIR_SEPARATOR_S "%s" G_DIR_SEPARATOR_S "%s.png",
                               THEMESDIR, DEFAULT_W_THEME, number);
 
diff --git a/panel-plugin/weather-parsers.c b/panel-plugin/weather-parsers.c
index b0cccfd..1493153 100644
--- a/panel-plugin/weather-parsers.c
+++ b/panel-plugin/weather-parsers.c
@@ -1,5 +1,5 @@
 /*  Copyright (c) 2003-2007 Xfce Development Team
- * 
+ *
  *  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
@@ -20,7 +20,7 @@
 #endif
 
 #include "weather-parsers.h"
-#include <libxfce4panel/xfce-panel-macros.h>
+#include <libxfce4panel/libxfce4panel.h>
 
 
 
@@ -36,7 +36,7 @@ parse_weather (xmlNode *cur_node)
       return NULL;
     }
 
-  if ((ret = panel_slice_new0 (xml_weather)) == NULL)
+  if ((ret = g_slice_new0 (xml_weather)) == NULL)
     return NULL;
 
   for (cur_node = cur_node->children; cur_node; cur_node = cur_node->next)
@@ -78,7 +78,7 @@ parse_loc (xmlNode *cur_node)
 {
   xml_loc *ret;
 
-  if ((ret = panel_slice_new0 (xml_loc)) == NULL)
+  if ((ret = g_slice_new0 (xml_loc)) == NULL)
     return NULL;
 
 
@@ -103,7 +103,7 @@ parse_lnk (xmlNode *cur_node)
 {
   xml_lnk *ret;
   int i = 0;
-  if ((ret = panel_slice_new0 (xml_lnk)) == NULL)
+  if ((ret = g_slice_new0 (xml_lnk)) == NULL)
     return NULL;
 
 
@@ -136,7 +136,7 @@ parse_uv (xmlNode *cur_node)
 {
   xml_uv *ret;
 
-  if ((ret = panel_slice_new0 (xml_uv)) == NULL)
+  if ((ret = g_slice_new0 (xml_uv)) == NULL)
     return NULL;
 
   for (cur_node = cur_node->children; cur_node; cur_node = cur_node->next)
@@ -160,7 +160,7 @@ parse_bar (xmlNode *cur_node)
 {
   xml_bar *ret;
 
-  if ((ret = panel_slice_new0 (xml_bar)) == NULL)
+  if ((ret = g_slice_new0 (xml_bar)) == NULL)
     return NULL;
 
   for (cur_node = cur_node->children; cur_node; cur_node = cur_node->next)
@@ -184,7 +184,7 @@ parse_wind (xmlNode *cur_node)
 {
   xml_wind *ret;
 
-  if ((ret = panel_slice_new0 (xml_wind)) == NULL)
+  if ((ret = g_slice_new0 (xml_wind)) == NULL)
     return NULL;
 
   for (cur_node = cur_node->children; cur_node; cur_node = cur_node->next)
@@ -212,7 +212,7 @@ parse_cc (xmlNode *cur_node)
 {
   xml_cc *ret;
 
-  if ((ret = panel_slice_new0 (xml_cc)) == NULL)
+  if ((ret = g_slice_new0 (xml_cc)) == NULL)
     return NULL;
 
   for (cur_node = cur_node->children; cur_node; cur_node = cur_node->next)
@@ -256,7 +256,7 @@ parse_part (xmlNode *cur_node)
 {
   xml_part *ret;
 
-  if ((ret = panel_slice_new0 (xml_part)) == NULL)
+  if ((ret = g_slice_new0 (xml_part)) == NULL)
     return NULL;
 
   for (cur_node = cur_node->children; cur_node; cur_node = cur_node->next)
@@ -287,7 +287,7 @@ parse_dayf (xmlNode *cur_node)
   xml_dayf *ret;
   gchar    *value;
 
-  if ((ret = panel_slice_new0 (xml_dayf)) == NULL)
+  if ((ret = g_slice_new0 (xml_dayf)) == NULL)
     return NULL;
 
   ret->day = (gchar *) xmlGetProp (cur_node, (const xmlChar *) "t");
@@ -332,7 +332,7 @@ xml_uv_free (xml_uv * data)
   g_free (data->i);
   g_free (data->t);
 
-  panel_slice_free (xml_uv, data);
+  g_slice_free (xml_uv, data);
 }
 
 
@@ -345,7 +345,7 @@ xml_wind_free (xml_wind * data)
   g_free (data->d);
   g_free (data->t);
 
-  panel_slice_free (xml_wind, data);
+  g_slice_free (xml_wind, data);
 }
 
 
@@ -356,7 +356,7 @@ xml_bar_free (xml_bar * data)
   g_free (data->r);
   g_free (data->d);
 
-  panel_slice_free (xml_bar, data);
+  g_slice_free (xml_bar, data);
 }
 
 
@@ -383,7 +383,7 @@ xml_cc_free (xml_cc * data)
   if (data->bar)
     xml_bar_free (data->bar);
 
-  panel_slice_free (xml_cc, data);
+  g_slice_free (xml_cc, data);
 }
 
 
@@ -395,7 +395,7 @@ xml_loc_free (xml_loc *data)
   g_free (data->sunr);
   g_free (data->suns);
 
-  panel_slice_free (xml_loc, data);
+  g_slice_free (xml_loc, data);
 }
 
 static void
@@ -406,7 +406,7 @@ xml_lnk_free (xml_lnk *data)
     g_free (data->lnk[i]);
     g_free (data->lnk_txt[i]);
   }
-  panel_slice_free (xml_lnk, data);
+  g_slice_free (xml_lnk, data);
 }
 
 static void
@@ -423,7 +423,7 @@ xml_part_free (xml_part *data)
   if (data->wind)
     xml_wind_free (data->wind);
 
-  panel_slice_free (xml_part, data);
+  g_slice_free (xml_part, data);
 }
 
 
@@ -445,7 +445,7 @@ xml_dayf_free (xml_dayf *data)
   if (data->part[1])
     xml_part_free (data->part[1]);
 
-  panel_slice_free (xml_dayf, data);
+  g_slice_free (xml_dayf, data);
 }
 
 
@@ -475,5 +475,5 @@ xml_weather_free (xml_weather *data)
         }
     }
 
-  panel_slice_free (xml_weather, data);
+  g_slice_free (xml_weather, data);
 }
diff --git a/panel-plugin/weather-scrollbox.c b/panel-plugin/weather-scrollbox.c
index 90862f6..8388fc1 100644
--- a/panel-plugin/weather-scrollbox.c
+++ b/panel-plugin/weather-scrollbox.c
@@ -23,443 +23,227 @@
 
 #include <glib.h>
 #include <gtk/gtk.h>
-#include <libxfce4panel/xfce-panel-macros.h>
+#include <libxfce4panel/libxfce4panel.h>
 
 #include "weather-scrollbox.h"
 #define LABEL_REFRESH 3000
 #define LABEL_SPEED   25
 
+static void gtk_scrollbox_finalize (GObject *object);
+static void gtk_scrollbox_size_request (GtkWidget *widget, GtkRequisition *requisition);
+static gboolean gtk_scrollbox_expose_event (GtkWidget *widget, GdkEventExpose *event);
+static gboolean gtk_scrollbox_fade_out (gpointer user_data);
 
+G_DEFINE_TYPE (GtkScrollbox, gtk_scrollbox, GTK_TYPE_DRAWING_AREA)
 
-typedef struct
-{
-  gchar      *msg;
-  GdkPixmap *pixmap;
-}
-Label;
-
-enum
+static void
+gtk_scrollbox_class_init (GtkScrollboxClass *klass)
 {
-  GTK_SCROLLBOX_ENABLECB = 1
-};
-
+  GObjectClass   *gobject_class;
+  GtkWidgetClass *widget_class;
 
+  gobject_class = G_OBJECT_CLASS (klass);
+  gobject_class->finalize = gtk_scrollbox_finalize;
 
-static GObjectClass *parent_class;
-static gboolean      start_draw_down (GtkScrollbox * self);
-static void          start_draw_up (GtkScrollbox * self);
-static void          stop_callback (GtkScrollbox * self);
-static GdkPixmap    *make_pixmap (GtkScrollbox *, gchar *);
+  widget_class = GTK_WIDGET_CLASS (klass);
+  widget_class->size_request = gtk_scrollbox_size_request;
+  widget_class->expose_event = gtk_scrollbox_expose_event;
+  //widget_class->style_changed = gtk_scrollbox_style_changed;
+}
 
 
 
 static void
-free_label (Label *lbl)
+gtk_scrollbox_init (GtkScrollbox *self)
 {
-  if (lbl->pixmap)
-    g_object_unref (G_OBJECT (lbl->pixmap));
-  if (lbl->msg)
-    g_free (lbl->msg);
+  GTK_WIDGET_SET_FLAGS (self, GTK_NO_WINDOW);
 
-  panel_slice_free (Label, lbl);
+  self->labels = NULL;
+  self->timeout_id = 0;
+  self->offset = 0;
+  self->active = NULL;
 }
 
 
 
-static gboolean
-draw_up (GtkScrollbox *self)
+static void
+gtk_scrollbox_finalize (GObject *object)
 {
-  GdkRectangle update_rect = { 0, 0,
-                               GTK_WIDGET (self)->allocation.width,
-                               GTK_WIDGET (self)->allocation.height
-                             };
+  GtkScrollbox *self = GTK_SCROLLBOX (object);
 
-  if (self->draw_offset == 0)
-    {
-      self->draw_timeout = g_timeout_add (LABEL_REFRESH,
-                                          (GSourceFunc) start_draw_down,
-                                          self);
+  /* stop running timeout */
+  if (self->timeout_id != 0)
+    g_source_remove (self->timeout_id);
 
-      return FALSE;
-    }
-  else
-    self->draw_offset++;
-
-  gtk_widget_draw (GTK_WIDGET (self), &update_rect);
+  /* free all the labels */
+  g_slist_foreach (self->labels, (GFunc) g_object_unref, NULL);
+  g_slist_free (self->labels);
 
-  return TRUE;
+  G_OBJECT_CLASS (gtk_scrollbox_parent_class)->finalize (object);
 }
 
 
 
-static gboolean
-draw_down (GtkScrollbox *self)
+static void
+gtk_scrollbox_size_request (GtkWidget      *widget,
+                            GtkRequisition *requisition)
 {
-  GdkRectangle update_rect = { 0, 0,
-                               GTK_WIDGET (self)->allocation.width,
-                               GTK_WIDGET (self)->allocation.height
-                             };
+  GtkScrollbox   *self = GTK_SCROLLBOX (widget);
+  GSList         *li;
+  PangoLayout    *layout;
+  PangoRectangle  logical_rect;
+  gint            width, height;
 
-  if (self->draw_offset == self->draw_maxoffset)
+  requisition->width = 0;
+  requisition->height = 0;
+
+  for (li = self->labels; li != NULL; li = li->next)
     {
-      self->draw_timeout = 0;
-      start_draw_up (self);
+      layout = PANGO_LAYOUT (li->data);
+      pango_layout_get_extents (layout, NULL, &logical_rect);
+      width = PANGO_PIXELS (logical_rect.width);
+      height = PANGO_PIXELS (logical_rect.height);
 
-      return FALSE;
+      requisition->width = MAX (width, requisition->width);
+      requisition->height = MAX (height, requisition->height);
     }
-  else
-    self->draw_offset--;
-
-  gtk_widget_draw (GTK_WIDGET (self), &update_rect);
-
-  return TRUE;
 }
 
 
-
-static void
-start_draw_up (GtkScrollbox *self)
+static gboolean
+gtk_scrollbox_expose_event (GtkWidget      *widget,
+                            GdkEventExpose *event)
 {
-  gint           width, height;
-  Label         *lbl;
-  static size_t  i = 0;
-  GdkRectangle   update_rect = { 0, 0,
-                                 GTK_WIDGET (self)->allocation.width,
-                                 GTK_WIDGET (self)->allocation.height
-                               };
-
-  if (self->labels->len == 0)
-    return;
-
-  if (i >= self->labels->len)
-    i = 0;
-
-  lbl = (Label *) g_ptr_array_index (self->labels, i);
-  self->pixmap = lbl->pixmap;
-
-  /* If we failed to create a proper pixmap, try again now */
-  if (!lbl->pixmap)
-    {
-      lbl->pixmap = make_pixmap (self, lbl->msg);
-      if (!lbl->pixmap)
-        {
-          /* Still no pixmap. We need to restart the timer */
-          if (self->draw_timeout)
-            stop_callback (self);
-          self->draw_timeout =
-            g_timeout_add (LABEL_SPEED, (GSourceFunc) start_draw_up, self);
-          return;
-        }
-    }
+  GtkScrollbox   *self =  GTK_SCROLLBOX (widget);
+  PangoLayout    *layout;
+  gint            width, height;
+  PangoRectangle  logical_rect;
 
-  if (self->labels->len == 1)
+  if (self->active != NULL)
     {
-      self->pixmap = lbl->pixmap;
-      self->draw_offset = 0;
+      layout = PANGO_LAYOUT (self->active->data);
+      pango_layout_get_extents (layout, NULL, &logical_rect);
+      width = PANGO_PIXELS (logical_rect.width);
+      height = PANGO_PIXELS (logical_rect.height);
+
+      gtk_paint_layout (widget->style,
+                        widget->window,
+                        GTK_WIDGET_STATE (widget),
+                        TRUE, &event->area,
+                        widget, "GtkScrollbox",
+                        widget->allocation.x + (widget->allocation.width - width) / 2,
+                        widget->allocation.y + (widget->allocation.height - height) / 2 + (self->animate ? self->offset : 0),
+                        layout);
 
-      gtk_widget_draw (GTK_WIDGET (self), &update_rect);
-      return;
     }
 
-  gdk_drawable_get_size (GDK_DRAWABLE (self->pixmap), &width, &height);
-  self->draw_middle = self->draw_maxmiddle - width / 2;
-
-  self->draw_timeout =
-    g_timeout_add (LABEL_SPEED, (GSourceFunc) draw_up, self);
-
-  i++;
+  return FALSE;
 }
 
 
 
 static gboolean
-start_draw_down (GtkScrollbox *self)
+gtk_scrollbox_sleep (gpointer user_data)
 {
-  self->draw_timeout =
-    g_timeout_add (LABEL_SPEED, (GSourceFunc) draw_down, self);
+  GtkScrollbox *self = GTK_SCROLLBOX (user_data);
+
+  self->timeout_id = g_timeout_add (LABEL_SPEED, gtk_scrollbox_fade_out, self);
 
   return FALSE;
 }
 
 
 
-static void
-stop_callback (GtkScrollbox *self)
+static gboolean
+gtk_scrollbox_fade_in (gpointer user_data)
 {
-  if (self->draw_timeout == 0)
-    return;
+  GtkScrollbox *self = GTK_SCROLLBOX (user_data);
 
-  g_source_remove (self->draw_timeout);
-  self->draw_timeout = 0;
-}
+  /* decrease counter */
+  self->offset--;
 
+  gtk_widget_queue_draw (GTK_WIDGET (self));
 
+  if (self->offset > 0)
+    return TRUE;
 
-static void
-start_callback (GtkScrollbox *self)
-{
-  if (self->draw_timeout)
-    stop_callback (self);
+  self->timeout_id = g_timeout_add (LABEL_REFRESH, gtk_scrollbox_sleep, self);
 
-  start_draw_up (self);
+  return FALSE;
 }
 
 
 
-static GdkPixmap *
-make_pixmap (GtkScrollbox *self,
-             gchar        *value)
+static gboolean
+gtk_scrollbox_fade_out (gpointer user_data)
 {
-  GdkWindow      *rootwin;
-  PangoLayout    *pl;
-  gint            width, height, middle;
-  GdkPixmap      *pixmap;
-  GtkRequisition  widgsize = { 0, };
-  GtkWidget      *widget = (GtkWidget *) self;
-
-
-  /* If we can't draw yet, don't do anything to avoid screwing things */
-  if (!GDK_IS_GC (widget->style->bg_gc[0]))
-    return NULL;
-
-  rootwin = gtk_widget_get_root_window (widget);
-
-  pl = gtk_widget_create_pango_layout (widget, NULL);
-  pango_layout_set_markup (pl, value, -1);
-
-  pango_layout_get_pixel_size (pl, &width, &height);
-
-  pixmap = gdk_pixmap_new (GDK_DRAWABLE (rootwin), width, height, -1);
-
-  gdk_draw_rectangle (GDK_DRAWABLE (pixmap),
-                      widget->style->bg_gc[0], TRUE, 0, 0, width, height);
-
-  gdk_draw_layout (GDK_DRAWABLE (pixmap), widget->style->fg_gc[0], 0, 0, pl);
-
-  g_object_unref (G_OBJECT (pl));
-
-  gtk_widget_size_request (widget, &widgsize);
-
-  if (width <= widgsize.width)
-    width = widgsize.width;
-
-  if (height <= widgsize.height)
-    height = widgsize.height;
-  else
-    self->draw_maxoffset = -height;
-
-  if (width != widgsize.width || height != widgsize.height)
-    gtk_widget_set_size_request (widget, width, height);
-
-  middle = width / 2;
-  if (self->draw_maxmiddle < middle)
-    self->draw_maxmiddle = middle;
-
-  return pixmap;
-}
-
+  GtkScrollbox *self = GTK_SCROLLBOX (user_data);
 
+  /* increase counter */
+  self->offset++;
 
-void
-gtk_scrollbox_set_label (GtkScrollbox *self,
-                         gint          n,
-                         gchar        *value)
-{
-  gboolean   append = TRUE;
-  GdkPixmap *newpixmap;
-  Label     *newlbl, *lbl;
+  gtk_widget_queue_draw (GTK_WIDGET (self));
 
-  if (n != -1)
-    append = FALSE;
+  if (self->offset < GTK_WIDGET (self)->allocation.height)
+    return TRUE;
 
-  if (!append)
+  if (self->active != NULL)
     {
-      lbl = (Label *) g_ptr_array_index (self->labels, n);
+      if (self->active->next != NULL)
+        self->active = self->active->next;
+      else
+        self->active = self->labels;
 
-      if (lbl)
-        free_label (lbl);
-
-      newlbl = lbl;
-    }
-  else
-    {
-      newlbl = panel_slice_new0 (Label);
-      g_ptr_array_add (self->labels, newlbl);
+      self->timeout_id = g_timeout_add (LABEL_SPEED,
+                                        gtk_scrollbox_fade_in, self);
     }
 
-  newpixmap = make_pixmap (self, value);
-
-  newlbl->pixmap = newpixmap;
-  newlbl->msg = g_strdup (value);
+  return FALSE;
 }
 
 
 
 static void
-gtk_scrollbox_set_property (GObject      *object,
-                            guint         property_id,
-                            const GValue *value,
-                            GParamSpec   *pspec)
+gtk_scrollbox_start_fade (GtkScrollbox *self)
 {
-  GtkScrollbox *self = (GtkScrollbox *) object;
-  gboolean      realvalue;
-
-  switch (property_id)
+  if (self->timeout_id != 0)
     {
-    case GTK_SCROLLBOX_ENABLECB:
-      {
-        realvalue = g_value_get_boolean (value);
-
-        if (!realvalue && self->draw_timeout)
-          stop_callback (self);
-        else if (realvalue && !self->draw_timeout)
-          start_callback (self);
-
-        break;
-      }
-    default:
-      /* We don't have any other property... */
-      g_assert (FALSE);
-
-      break;
+      g_source_remove (self->timeout_id);
+      self->timeout_id = 0;
     }
-}
-
 
+  self->active = self->labels;
 
-static void
-gtk_scrollbox_get_property (GObject    *object,
-                            guint       property_id,
-                            GValue     *value,
-                            GParamSpec *pspec)
-{
-  return;
-}
-
-
-
-static void
-gtk_scrollbox_finalize (GObject *gobject)
-{
-  GtkScrollbox *self = (GtkScrollbox *) gobject;
-  guint         i;
-  Label        *lbl;
-
-  if (self->draw_timeout)
+  if (g_slist_length (self->labels) > 1)
     {
-      g_source_remove (self->draw_timeout);
-      self->draw_timeout = 0;
-    }
-
-  if (self->labels->len > 0)
-    {
-      for (i = 0; i < self->labels->len; i++)
-        {
-          lbl = (Label *) g_ptr_array_index (self->labels, i);
-
-          if (lbl->pixmap)
-            g_object_unref (G_OBJECT (lbl->pixmap));
-
-          g_free (lbl->msg);
-        }
-      g_ptr_array_free (self->labels, TRUE);
+      self->offset = GTK_WIDGET (self)->allocation.height;
+      self->timeout_id = g_timeout_add (25, gtk_scrollbox_fade_in,
+                                        self);
     }
-
-  G_OBJECT_CLASS (parent_class)->finalize (gobject);
-}
-
-
-
-static void
-redraw_labels (GtkWidget *widget,
-               GtkStyle  *previous_style)
-{
-  GtkScrollbox *self = GTK_SCROLLBOX (widget);
-  guint         i;
-  GdkPixmap    *newpixmap;
-  Label        *lbl;
-
-  if (self->labels->len < 1)
-    return;
-
-  stop_callback (self);
-
-  gtk_widget_set_size_request (GTK_WIDGET (self), 0, 0);
-  self->draw_middle = 0;
-  self->draw_maxmiddle = 0;
-
-  for (i = 0; i < self->labels->len; i++)
+  else
     {
-      lbl = (Label *) g_ptr_array_index (self->labels, i);
-
-      if (!lbl->msg)
-        continue;
-
-      newpixmap = make_pixmap (self, lbl->msg);
-
-      if (lbl->pixmap)
-        g_object_unref (G_OBJECT (lbl->pixmap));
-
-      lbl->pixmap = newpixmap;
+      self->offset = 0;
     }
-
-  start_callback (self);
-
-}
-
-
-
-static void
-gtk_scrollbox_instance_init (GTypeInstance *instance,
-                             gpointer       g_class)
-{
-  GtkScrollbox *self = (GtkScrollbox *) instance;
-
-  self->draw_timeout = 0;
-  self->labels = g_ptr_array_new ();
-  self->pixmap = NULL;
-
-  g_signal_connect (G_OBJECT (self), "style-set",
-                    G_CALLBACK (redraw_labels), NULL);
 }
 
 
 
-static gboolean
-gtk_scrollbox_expose (GtkWidget      *widget,
-                      GdkEventExpose *event)
-{
-  GtkScrollbox *self = (GtkScrollbox *) widget;
-
-  if (self->pixmap)
-    gdk_draw_drawable (widget->window,
-                       widget->style->fg_gc[GTK_WIDGET_STATE (widget)],
-                       self->pixmap,
-                       0, (self->animate ? self->draw_offset : 0),
-                       self->draw_middle, 0,
-                       widget->allocation.width, widget->allocation.height);
-
-  return FALSE;
-}
-
-
 void
-gtk_scrollbox_next_label(GtkScrollbox *self)
+gtk_scrollbox_set_label (GtkScrollbox *self,
+                         gint          position,
+                         gchar        *markup)
 {
-  stop_callback (self);
-  start_draw_down (self);
-}
+  PangoLayout *layout;
 
-void
-gtk_scrollbox_enablecb (GtkScrollbox *self,
-                        gboolean      enable)
-{
-  GValue val = { 0, };
 
-  g_value_init (&val, G_TYPE_BOOLEAN);
-  g_value_set_boolean (&val, enable);
+  g_return_if_fail (GTK_IS_SCROLLBOX (self));
 
-  g_object_set_property (G_OBJECT (self), "enablecb", &val);
+  layout = gtk_widget_create_pango_layout (GTK_WIDGET (self), NULL);
+  pango_layout_set_markup (layout, markup, -1);
+  self->labels = g_slist_insert (self->labels, layout, position);
+  gtk_widget_queue_resize (GTK_WIDGET (self));
+
+  gtk_scrollbox_start_fade (self);
 }
 
 
@@ -467,91 +251,38 @@ gtk_scrollbox_enablecb (GtkScrollbox *self,
 GtkWidget *
 gtk_scrollbox_new (void)
 {
-  return GTK_WIDGET (g_object_new (GTK_TYPE_SCROLLBOX, NULL));
+  return g_object_new (GTK_TYPE_SCROLLBOX, NULL);
 }
 
 
 
-static void
-gtk_scrollbox_class_init (gpointer g_class,
-                          gpointer g_class_data)
+void
+gtk_scrollbox_clear (GtkScrollbox *self)
 {
+  g_return_if_fail (GTK_IS_SCROLLBOX (self));
 
-  GObjectClass   *gobject_class = G_OBJECT_CLASS (g_class);
-  GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (g_class);
-  GParamSpec     *scrollbox_param_spec;
-
-  parent_class = g_type_class_peek_parent (g_class);
-
-  gobject_class->set_property = gtk_scrollbox_set_property;
-  gobject_class->get_property = gtk_scrollbox_get_property;
+  g_slist_foreach (self->labels, (GFunc) g_object_unref, NULL);
+  g_slist_free (self->labels);
+  self->labels = NULL;
 
-  scrollbox_param_spec = g_param_spec_boolean ("enablecb",
-                                               "Enable callback",
-                                               "Enable or disable the callback",
-                                               FALSE, G_PARAM_READWRITE);
-  g_object_class_install_property (gobject_class,
-                                   GTK_SCROLLBOX_ENABLECB,
-                                   scrollbox_param_spec);
-
-  widget_class->expose_event = gtk_scrollbox_expose;
-  gobject_class->finalize = gtk_scrollbox_finalize;
+  gtk_widget_queue_resize (GTK_WIDGET (self));
 }
 
 
 
-GType
-gtk_scrollbox_get_type (void)
+void gtk_scrollbox_set_animate(GtkScrollbox *self, gboolean animate)
 {
-  static GType type = 0;
-
-  if (type == 0)
-    {
-
-      static const GTypeInfo info = {
-        sizeof (GtkScrollboxClass),
-        NULL,                        /* base_init      */
-        NULL,                        /* base_finalize  */
-        gtk_scrollbox_class_init,    /* class_init     */
-        NULL,                        /* class_finalize */
-        NULL,                        /* class_data     */
-        sizeof (GtkScrollbox),
-        0,                           /* n_preallocs    */
-        gtk_scrollbox_instance_init, /* instance_init  */
-        NULL
-      };
-
-      type = g_type_register_static (GTK_TYPE_DRAWING_AREA,
-                                     "GtkScrollbox", &info, 0);
-    }
-
-  return type;
+  self->animate = animate;
 }
 
 
 
-void
-gtk_scrollbox_clear (GtkScrollbox *self)
+void gtk_scrollbox_next_label(GtkScrollbox *self)
 {
-  Label *lbl;
-
-  stop_callback (self);
-
-  while (self->labels->len > 0)
+  if (self->active->next != NULL)
     {
-      lbl = (Label *) g_ptr_array_index (self->labels, 0);
-      free_label (lbl);
+      self->active = self->active->next;
 
-      g_ptr_array_remove_index (self->labels, 0);
+      gtk_widget_queue_resize (GTK_WIDGET (self));
     }
-
-  self->pixmap = NULL;
-  gtk_widget_set_size_request (GTK_WIDGET (self), 0, 0);
-  self->draw_middle = 0;
-  self->draw_maxmiddle = 0;
-}
-
-void gtk_scrollbox_set_animate(GtkScrollbox *self, gboolean animate)
-{ 
-  self->animate = animate;
 }
diff --git a/panel-plugin/weather-scrollbox.h b/panel-plugin/weather-scrollbox.h
index 153b5d5..cfacfd1 100644
--- a/panel-plugin/weather-scrollbox.h
+++ b/panel-plugin/weather-scrollbox.h
@@ -1,5 +1,5 @@
 /*  Copyright (c) 2003-2007 Xfce Development Team
- * 
+ *
  *  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
@@ -34,30 +34,24 @@ typedef struct _GtkScrollboxClass GtkScrollboxClass;
 
 struct _GtkScrollbox
 {
-  GtkDrawingArea  parent;
-
-  GPtrArray      *labels;
+  GtkDrawingArea  __parent__;
 
-  gint            draw_offset;
-  gint            draw_maxoffset;
-  gint            draw_middle;
-  gint            draw_maxmiddle;
-  gint            draw_timeout;
-  gboolean        animate;
-  GdkPixmap      *pixmap;
+  GSList *labels;
+  guint timeout_id;
+  gint offset;
+  GSList *active;
+  gboolean animate;
 };
 
 struct _GtkScrollboxClass
 {
-  GtkDrawingAreaClass parent;
+  GtkDrawingAreaClass __parent__;
 };
 
-void gtk_scrollbox_set_label (GtkScrollbox * self, gint n, gchar * value);
+void gtk_scrollbox_set_label (GtkScrollbox * self, gint position, gchar *markup);
 
 GtkWidget *gtk_scrollbox_new (void);
 
-void gtk_scrollbox_enablecb (GtkScrollbox * self, gboolean enable);
-
 void gtk_scrollbox_clear (GtkScrollbox * self);
 
 void gtk_scrollbox_set_animate(GtkScrollbox *self, gboolean animate);
diff --git a/panel-plugin/weather-search.c b/panel-plugin/weather-search.c
index 403dbcb..d764116 100644
--- a/panel-plugin/weather-search.c
+++ b/panel-plugin/weather-search.c
@@ -138,7 +138,7 @@ cb_searchdone (gboolean  succeed,
       gtk_dialog_set_response_sensitive(GTK_DIALOG(dialog->dialog), GTK_RESPONSE_ACCEPT, TRUE);
     }
   }
-  
+
 gtk_tree_view_column_set_title(dialog->column, _("Results"));
   return;
 }
@@ -165,7 +165,7 @@ search_cb (GtkWidget *widget,
       return;
     }
   }
-  
+
   g_free(dialog->last_search);
   dialog->last_search = g_strdup(str);
 
@@ -211,7 +211,7 @@ create_search_dialog (GtkWindow *parent,
   search_dialog     *dialog;
   GtkWidget         *dialog_vbox, *dialog_action;
 
-  dialog = panel_slice_new0 (search_dialog);
+  dialog = g_slice_new0 (search_dialog);
 
   dialog->proxy_host = proxy_host;
   dialog->proxy_port = proxy_port;
@@ -242,7 +242,7 @@ create_search_dialog (GtkWindow *parent,
   gtk_container_set_border_width (GTK_CONTAINER (vbox), 6);
   gtk_box_pack_start (GTK_BOX (dialog_vbox), vbox,
                       TRUE, TRUE, 0);
-  
+
   xfce_titled_dialog_set_subtitle (XFCE_TITLED_DIALOG (dialog->dialog),
 				   _("Enter a city name or zip code"));
 
@@ -251,7 +251,7 @@ create_search_dialog (GtkWindow *parent,
 
   dialog->search_entry = gtk_entry_new ();
   gtk_box_pack_start (GTK_BOX (hbox), dialog->search_entry, TRUE, TRUE, 0);
-  
+
   g_signal_connect (G_OBJECT (dialog->search_entry), "activate",
                     G_CALLBACK (search_cb), dialog);
 
@@ -327,7 +327,7 @@ free_search_dialog (search_dialog * dialog)
 
   gtk_widget_destroy (dialog->dialog);
 
-  panel_slice_free (search_dialog, dialog);
+  g_slice_free (search_dialog, dialog);
 }
 
 typedef struct {
@@ -335,7 +335,7 @@ typedef struct {
   gint proxy_port;
   void (*cb)(const gchar *loc_name, const gchar *loc_code, gpointer user_data);
   gpointer user_data;
-} 
+}
 geolocation_data;
 
 static void
@@ -397,7 +397,7 @@ cb_geo_searchdone (gboolean  succeed,
             }
         }
     }
-  
+
   g_free(data);
   xmlFreeDoc (doc);
 }
@@ -457,7 +457,7 @@ cb_geolocation (gboolean  succeed,
             }
         }
     }
-  
+
   if (country_code && region && !strcmp(country_code, "US")) {
     g_free(country);
     country = region;
@@ -465,7 +465,7 @@ cb_geolocation (gboolean  succeed,
   }
   g_free(country_code);
   g_free(region);
-  
+
   xmlFreeDoc (doc);
 
   if (city && country) {
@@ -473,7 +473,7 @@ cb_geolocation (gboolean  succeed,
      gchar *url, *sane_str;
      g_free(city);
      g_free(country);
-     
+
      if ((sane_str = sanitize_str (full_loc)) == NULL) {
        data->cb(NULL, NULL, data->user_data);
        g_free(data);
@@ -481,7 +481,7 @@ cb_geolocation (gboolean  succeed,
        return;
      }
      g_free(full_loc);
-     
+
      url = g_strdup_printf ("/search/search?where=%s", sane_str);
      g_free (sane_str);
 
@@ -500,7 +500,7 @@ void weather_search_by_ip(
 	gpointer user_data)
 {
   geolocation_data *data;
-  
+
   if (!gui_cb)
     return;
 
diff --git a/panel-plugin/weather-summary.c b/panel-plugin/weather-summary.c
index 8acc819..36eeb14 100644
--- a/panel-plugin/weather-summary.c
+++ b/panel-plugin/weather-summary.c
@@ -55,7 +55,7 @@ static gboolean lnk_clicked (GtkTextTag *tag, GObject *obj,
                                                                 &iter, "\n", -1);\
 					 g_object_set_data_full(G_OBJECT(lnk_tag), "url", g_strdup(url), g_free); \
 					 g_signal_connect(G_OBJECT(lnk_tag), "event", \
-						G_CALLBACK(lnk_clicked), NULL); 
+						G_CALLBACK(lnk_clicked), NULL);
 
 
 
@@ -74,7 +74,7 @@ static gboolean lnk_clicked (GtkTextTag *tag, GObject *obj,
   } else if (event->type == GDK_LEAVE_NOTIFY) {
      gdk_window_set_cursor(gtk_text_view_get_window(GTK_TEXT_VIEW(obj),
 				GTK_TEXT_WINDOW_TEXT), NULL);
-  } 
+  }
   return FALSE;
 }
 
@@ -103,7 +103,7 @@ static gboolean view_motion_notify(GtkWidget *widget,
     GSList *tags;
     GSList *cur;
 
-    gtk_text_view_window_to_buffer_coords(GTK_TEXT_VIEW(view), 
+    gtk_text_view_window_to_buffer_coords(GTK_TEXT_VIEW(view),
     						GTK_TEXT_WINDOW_WIDGET,
     						event->x, event->y, &bx, &by);
     gtk_text_view_get_iter_at_location(GTK_TEXT_VIEW(view),
@@ -154,7 +154,7 @@ static void view_scrolled_cb (GtkAdjustment *adj, GtkWidget *view)
     gtk_text_view_buffer_to_window_coords(
 			GTK_TEXT_VIEW(view),
 			GTK_TEXT_WINDOW_TEXT, x1, y1, &x, &y);
-    gtk_text_view_move_child(GTK_TEXT_VIEW(view), 
+    gtk_text_view_move_child(GTK_TEXT_VIEW(view),
 			weather_channel_evt, x, y);
   }
 }
@@ -211,17 +211,17 @@ static GtkWidget *weather_summary_get_logo(xfceweather_data *data)
 	GtkWidget *image = gtk_image_new();
 	GdkPixbuf *pixbuf = NULL;
 	gchar *path = get_logo_path();
-	
+
 	pixbuf = gdk_pixbuf_new_from_file(path, NULL);
 	g_free(path);
 	if (pixbuf == NULL) {
-		weather_http_receive_data ("xoap.weather.com", "/web/common/twc/logos/web_73x55.jpg", 
+		weather_http_receive_data ("xoap.weather.com", "/web/common/twc/logos/web_73x55.jpg",
 			data->proxy_host, data->proxy_port, logo_fetched, image);
 	} else {
 		gtk_image_set_from_pixbuf(GTK_IMAGE(image), pixbuf);
 		g_object_unref(pixbuf);
 	}
-	
+
 	return image;
 }
 
@@ -355,13 +355,13 @@ create_summary_tab (xfceweather_data *data)
 		   G_CALLBACK(view_motion_notify), view);
   g_signal_connect(G_OBJECT(view), "leave-notify-event",
 		   G_CALLBACK(view_leave_notify), view);
-		   
+
   weather_channel_icon = weather_summary_get_logo(data);
 
   if (weather_channel_icon) {
     weather_channel_evt = gtk_event_box_new();
     gtk_container_add(GTK_CONTAINER(weather_channel_evt), weather_channel_icon);
-    gtk_text_view_add_child_in_window(GTK_TEXT_VIEW(view), weather_channel_evt, 
+    gtk_text_view_add_child_in_window(GTK_TEXT_VIEW(view), weather_channel_evt,
                                       GTK_TEXT_WINDOW_TEXT, 0, 0);
     gtk_widget_show_all(weather_channel_evt);
     adj = gtk_scrolled_window_get_vadjustment(
@@ -611,7 +611,7 @@ create_summary_window (xfceweather_data *data)
   window = xfce_titled_dialog_new_with_buttons (_("Weather Update"),
                                                 NULL,
                                                 GTK_DIALOG_NO_SEPARATOR,
-                                                GTK_STOCK_ABOUT, 
+                                                GTK_STOCK_ABOUT,
 						GTK_RESPONSE_HELP,
                                                 GTK_STOCK_CLOSE,
                                                 GTK_RESPONSE_ACCEPT, NULL);
diff --git a/panel-plugin/weather-translate.c b/panel-plugin/weather-translate.c
index 0a083a2..bcaf63a 100644
--- a/panel-plugin/weather-translate.c
+++ b/panel-plugin/weather-translate.c
@@ -1,5 +1,5 @@
 /*  Copyright (c) 2003-2007 Xfce Development Team
- * 
+ *
  *  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
@@ -309,7 +309,7 @@ translate_lsup (const gchar *lsup)
   gint        size = 0, i = 0;
   gchar      **lsup_split;
   int          len;
-  
+
   if (lsup == NULL || strlen (lsup) == 0)
     return NULL;
 
diff --git a/panel-plugin/weather.c b/panel-plugin/weather.c
index da0534d..7865383 100644
--- a/panel-plugin/weather.c
+++ b/panel-plugin/weather.c
@@ -243,8 +243,6 @@ set_icon_error (xfceweather_data *data)
   gtk_scrollbox_set_label (GTK_SCROLLBOX (data->scrollbox), -1, str);
   g_free (str);
 
-  gtk_scrollbox_enablecb  (GTK_SCROLLBOX (data->scrollbox), TRUE);
-
   gtk_widget_get_size_request (data->scrollbox, NULL, &height);
 
   if (data->orientation == GTK_ORIENTATION_VERTICAL)
@@ -285,8 +283,6 @@ set_icon_current (xfceweather_data *data)
       g_free (str);
     }
 
-  gtk_scrollbox_enablecb (GTK_SCROLLBOX (data->scrollbox), TRUE);
-
   if (i == 0)
     {
       size = data->size;
@@ -299,9 +295,9 @@ set_icon_current (xfceweather_data *data)
       else
         size = data->size;
     }
-
+ 
   icon = get_icon (get_data (data->weatherdata, WICON), size);
-
+ 
   gtk_image_set_from_pixbuf (GTK_IMAGE (data->iconimage), icon);
 
   if (G_LIKELY (icon))
@@ -504,7 +500,7 @@ xfceweather_read_config (XfcePanelPlugin  *plugin,
       data->proxy_port = data->saved_proxy_port;
     }
 
-  data->animation_transitions = xfce_rc_read_bool_entry (rc, 
+  data->animation_transitions = xfce_rc_read_bool_entry (rc,
   		"animation_transitions", TRUE);
 
   gtk_scrollbox_set_animate(GTK_SCROLLBOX(data->scrollbox), data->animation_transitions);
@@ -702,7 +698,7 @@ xfceweather_dialog_response (GtkWidget          *dlg,
 
       gtk_widget_destroy (dlg);
       gtk_list_store_clear (dialog->mdl_xmloption);
-      panel_slice_free (xfceweather_dialog, dialog);
+      g_slice_free (xfceweather_dialog, dialog);
 
       xfce_panel_plugin_unblock_menu (data->plugin);
       xfceweather_write_config (data->plugin, data);
@@ -755,17 +751,17 @@ static gboolean weather_get_tooltip_cb (GtkWidget        *widget,
 					gint              y,
 					gboolean          keyboard_mode,
 					GtkTooltip       *tooltip,
-					xfceweather_data *data) 
+					xfceweather_data *data)
 {
   GdkPixbuf *icon;
   gchar *markup_text;
-  
+
   if (data->weatherdata == NULL) {
     gtk_tooltip_set_text (tooltip, _("Cannot update weather data"));
   } else {
     markup_text = g_markup_printf_escaped(
   	  "<b>%s</b>\n"
-	  "%s", 
+	  "%s",
 	  get_data (data->weatherdata, DNAM),
 	  translate_desc (get_data (data->weatherdata, TRANS))
 	  );
@@ -775,7 +771,7 @@ static gboolean weather_get_tooltip_cb (GtkWidget        *widget,
   icon = get_icon (get_data (data->weatherdata, WICON), 32);
   gtk_tooltip_set_icon (tooltip, icon);
   g_object_unref (G_OBJECT(icon));
-  
+
   return TRUE;
 }
 
@@ -783,7 +779,7 @@ static gboolean weather_get_tooltip_cb (GtkWidget        *widget,
 static xfceweather_data *
 xfceweather_create_control (XfcePanelPlugin *plugin)
 {
-  xfceweather_data *data = panel_slice_new0 (xfceweather_data);
+  xfceweather_data *data = g_slice_new0 (xfceweather_data);
   GtkWidget        *refresh, *mi;
   datas             lbl;
   GdkPixbuf        *icon = NULL;
@@ -822,7 +818,7 @@ xfceweather_create_control (XfcePanelPlugin *plugin)
 
 #if GTK_CHECK_VERSION(2,12,0)
   g_object_set (G_OBJECT(data->tooltipbox), "has-tooltip", TRUE, NULL);
-  g_signal_connect(G_OBJECT(data->tooltipbox), "query-tooltip", 
+  g_signal_connect(G_OBJECT(data->tooltipbox), "query-tooltip",
 		   G_CALLBACK(weather_get_tooltip_cb),
 		  data);
 #endif
@@ -909,7 +905,7 @@ xfceweather_free (XfcePanelPlugin  *plugin,
   /* Free Array */
   g_array_free (data->labels, TRUE);
 
-  panel_slice_free (xfceweather_data, data);
+  g_slice_free (xfceweather_data, data);
 }
 
 
@@ -952,7 +948,7 @@ xfceweather_set_orientation (XfcePanelPlugin  *panel,
   g_object_unref(G_OBJECT(data->vbox_center_scrollbox));
 
   gtk_scrollbox_clear (GTK_SCROLLBOX (data->scrollbox));
-  
+
   if (data->weatherdata)
     set_icon_current (data);
   else
diff --git a/panel-plugin/weather.desktop.in.in b/panel-plugin/weather.desktop.in.in
index c4c7b23..6c39f68 100644
--- a/panel-plugin/weather.desktop.in.in
+++ b/panel-plugin/weather.desktop.in.in
@@ -1,8 +1,6 @@
 [Xfce Panel]
 Type=X-XFCE-PanelPlugin
-Encoding=UTF-8
 _Name=Weather Update
 _Comment=Show current weather conditions
 Icon=xfce4-weather
 X-XFCE-Exec=@libexecdir@/xfce4/panel-plugins/xfce4-weather-plugin
-
diff --git a/panel-plugin/weather.h b/panel-plugin/weather.h
index 579e5a2..4837208 100644
--- a/panel-plugin/weather.h
+++ b/panel-plugin/weather.h
@@ -18,7 +18,7 @@
 #ifndef __WEATHER_H__
 #define __WEATHER_H__
 
-#include <libxfce4panel/xfce-panel-plugin.h>
+#include <libxfce4panel/libxfce4panel.h>
 #include <libxfce4util/libxfce4util.h>
 #define PLUGIN_WEBSITE   "http://goodies.xfce.org/projects/panel-plugins/xfce4-weather-plugin"
 #define PARTNER_ID       "1121946239"



More information about the Xfce4-commits mailing list