Changing the picture on a Gnome2 applet



Hi,

I'm trying to make a Gnome applet, and I want it to display a
different picture when the user clicks on it. The (simplified) code is
below. The updateIcon successfully changes the tooltip, but the icon
remains the same. What am I doing wrong?

Thanks,

Cosmin

------------- The Code -------------

/**
 * Inspired from the "Writing Gnome Applets in Gnome2" article, found at
 * http://www.gnome.org/projects/ORBit2/appletstutorial.html
 */

#include <panel-applet.h>
#include <gtk/gtklabel.h>
#include <gtk/gtkimage.h>
#include <gtk/gtktooltips.h>

#include <string.h>

GtkWidget *event_box;	// Here's the picture.
int icon;		// The current icon
GtkWidget *image;		// The icon displayed on the applet.
GtkTooltips* toolTips;	// The tooltip collection

/* Loads an image from a file, according to the specified color. */
static GtkWidget* loadImage(int color) {
	switch (color) {
		case 0:
			return gtk_image_new_from_file ("/usr/share/pixmaps/green.png");
		case 1:
			return gtk_image_new_from_file ("/usr/share/pixmaps/yellow.png");
		default:
			return gtk_image_new_from_file ("/usr/share/pixmaps/red.png");
	}
}

void updateIcon(int color) {
	icon = color;
	image = loadImage(icon);
	gtk_tooltips_set_tip(toolTips, event_box, "New tip", "Further information");
}

/* Called when the user clicks on the applet. */
static gboolean on_button_press (
	GtkWidget *event_box, GdkEventButton *event, gpointer data) {
	/* Don't react to anything other than the left mouse button;
	   return FALSE so the event is passed to the default handler */
	if (event->button != 1)
		return FALSE;
	// Here's where I try to change the icon:
	updateIcon(1);
	return TRUE;
}

static gboolean myapplet_fill (
	PanelApplet *applet, const gchar *iid, gpointer data) {
	if (strcmp (iid, "OAFIID:MyApplet") != 0)
		return FALSE;

	image = loadImage(icon);
	// The GtkImage widget doesn't receive events so won't respond to any
mouseclicks.
	// We need to place the GtkImage into a GtkEventBox
	event_box = gtk_event_box_new();
	gtk_container_add (GTK_CONTAINER (event_box), GTK_WIDGET(image));
	// Now we add the event box into the applet
	gtk_container_add (GTK_CONTAINER (applet), GTK_WIDGET(event_box));
	// Set the tooltip
	toolTips = gtk_tooltips_new();
	gtk_tooltips_set_tip(toolTips, event_box, "Tool tip", "Further information");

	g_signal_connect (G_OBJECT (event_box), 
  	                "button_press_event",
  	                G_CALLBACK (on_button_press),
  	                image);

	// Show the applet
	gtk_widget_show_all (GTK_WIDGET (applet));

	return TRUE;
}

PANEL_APPLET_BONOBO_FACTORY ("OAFIID:MyApplet_Factory",
                             PANEL_TYPE_APPLET,
                             "My_Applet",
                             "0",
                             my_applet_fill,
                             NULL);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]