Wierd Panel Applet Problem
- From: Alex Murray <alexmurray tpg com au>
- To: gnome-devel-list gnome org
- Subject: Wierd Panel Applet Problem
- Date: Wed, 22 Dec 2004 10:43:57 +1030
Howdy folks,
Am writing a small applet and am having a weird bug crop up where if I
add the applet to my main panel, it runs fine, but if I add it to a
different panel it has a runtime error (which I think I have nailed down
to calling the g_dir_open function for a second time - here I get the
error
"Error opening directory '(null)': Invalid or incomplete multibyte or
wide character
this is called on a gchar * assigned from g_strdup_printf so it would
seem that g_strdup_printf is not creating a properly from string for
g_dir_open to work on..
However if I execute the applet from the command line, THEN add it to
the panel, it works as expected, no matter which panel I add it to...
this problem doesn't occur for root user, just me...
Has anyone had any experience with this kind of thing??
Thanks for any ideas...
Alex
/* this is where we will do the main work */
#include <gtk/gtk.h>
#include <panel-applet.h>
#include <string.h>
#include "sensor.h"
#define I2C_PATH "/sys/bus/i2c/devices/"
gboolean display_error_as_applet(GError *error, PanelApplet *applet);
static gboolean sensors_applet_init(PanelApplet *applet,
const gchar *iid,
gpointer data) {
if (strcmp (iid, "OAFIID:SensorsApplet") != 0)
return FALSE;
GtkLabel *label;
GDir *i2c_base_dir, *sensors_dir;
gchar *string;
const gchar *sensor_file, *i2c_subdir, *sensors_path;
GList *sensors = NULL;
Sensor *s;
GError *error = NULL;
i2c_base_dir = g_dir_open(I2C_PATH, 0, &error);
if (error == NULL) {
i2c_subdir = g_dir_read_name(i2c_base_dir);
g_dir_close(i2c_base_dir);
sensors_path = g_strdup_printf("%s%s/", I2C_PATH, i2c_subdir);
sensors_dir = g_dir_open(sensors_path, 0, &error);
if (error == NULL) {
/* for each entry in sensors_dir, check if it is a sensor input file
and create a Sensor if so */
for (sensor_file = g_dir_read_name(sensors_dir); sensor_file != NULL; sensor_file = g_dir_read_name(sensors_dir)) {
if (g_str_has_suffix(sensor_file, "_input")) {
s = sensor_new(sensor_file, sensors_path);
sensors = g_list_prepend(sensors, s);
}
}
/* CHANGE BELOW!! */
string = g_strdup_printf("%d sensors found.", g_list_length(sensors));
g_list_foreach(sensors, sensor_free, NULL);
g_list_free(sensors);
label = g_object_new(GTK_TYPE_LABEL,
"label", string,
NULL);
gtk_container_add(GTK_CONTAINER(applet), GTK_WIDGET(label));
gtk_widget_show_all(GTK_WIDGET(applet));
g_free(string);
return TRUE;
} else { /* error occurred */
return display_error_as_applet(error, applet);
}
} else { /* error occurred */
return display_error_as_applet(error, applet);
}
}
PANEL_APPLET_BONOBO_FACTORY("OAFIID:SensorsApplet_Factory",
PANEL_TYPE_APPLET,
"Sensors Applet",
"0",
sensors_applet_init,
NULL);
gboolean display_error_as_applet(GError *error, PanelApplet *applet) {
GtkLabel *label;
label = g_object_new(GTK_TYPE_LABEL,
"label", error->message,
NULL);
gtk_container_add(GTK_CONTAINER(applet), GTK_WIDGET(label));
gtk_widget_show_all(GTK_WIDGET(applet));
return TRUE;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]