Changing the picture on a Gnome2 applet
- From: Cosmin Humeniuc <cosmin hume gmail com>
- To: gnome-devel-list gnome org
- Subject: Changing the picture on a Gnome2 applet
- Date: Sat, 26 Feb 2005 11:28:50 -0500
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]