Hi. Sorry it's taken so long to get back to you on this.
On Wed, Sep 24, 17:21:33 +0200, Carlos MartÃn Nieto wrote: > The tooltip of the tray icon shows the battery charge and disk space > usage of the PDA. This tooltip is however not updated (at least the > battery charge) and so it always displays the charge at plug-in time. > > The tooltip should be updated so as to show the actual charge. I attach a patch that I think will fix this bug. Unfortunately I can't test it now, but it appears to build fine. It removes the old deprecated GtkTooltips code and replaced it with the sane GTK+ 2.12 GtkTooltip API. I've CC'd the maintainer for his comments; what do you think Mark? Many thanks, -- Jonny Lamb, UK [email protected]
diff -Nruad -Nruad synce-trayicon-0.11.old/src/synce-trayicon.c
synce-trayicon-0.11/src/synce-trayicon.c
--- synce-trayicon-0.11.old/src/synce-trayicon.c 2008-04-15
20:17:47.000000000 +0100
+++ synce-trayicon-0.11/src/synce-trayicon.c 2009-01-10 03:07:06.000000000
+0000
@@ -61,7 +61,6 @@
GConfClient *conf_client;
DccmClient *comms_client;
WmDeviceManager *device_list;
- GtkTooltips* tooltips;
GtkWidget *icon;
GtkWidget *menu;
@@ -95,12 +94,14 @@
static void device_disconnected_cb(DccmClient *comms_client, gchar *pdaname,
gpointer user_data);
static void service_stopping_cb(DccmClient *comms_client, gpointer user_data);
static gboolean is_connected(SynceTrayIcon *self);
-static void set_status_tooltips(SynceTrayIcon *self);
+static void set_status_tooltip(SynceTrayIcon *self);
static void set_icon(SynceTrayIcon *self);
static gboolean update(gpointer data);
static void device_added_cb(GObject *obj, gpointer user_data);
static void device_removed_cb(GObject *obj, gpointer user_data);
static void trayicon_clicked(GtkWidget *button, GdkEventButton *event,
gpointer user_data);
+static gboolean query_tooltip_cb(GtkWidget *widget, gint x, gint y,
+ gboolean keyboard_mode, GtkTooltip *tooltip, gpointer user_data);
#ifdef ENABLE_NOTIFY
static void event_notification(SynceTrayIcon *self, const gchar *summary,
const gchar *body);
@@ -122,7 +123,7 @@
}
static void
-set_status_tooltips(SynceTrayIcon *self)
+set_status_tooltip(SynceTrayIcon *self)
{
SynceTrayIconPrivate *priv = SYNCE_TRAYICON_GET_PRIVATE (self);
@@ -135,7 +136,7 @@
WmDevice *device;
if (!(is_connected(self))) {
- gtk_tooltips_set_tip(priv->tooltips, GTK_WIDGET(self), _("Not connected"),
NULL);
+ gtk_widget_set_tooltip_text(GTK_WIDGET(self), _("Not connected"));
return;
}
@@ -161,7 +162,7 @@
tooltip_str = tmpstr;
}
- gtk_tooltips_set_tip(priv->tooltips, GTK_WIDGET(self), tooltip_str, NULL);
+ gtk_widget_set_tooltip_text(GTK_WIDGET(self), tooltip_str);
g_free(tooltip_str);
return;
}
@@ -186,7 +187,7 @@
SynceTrayIcon *self = SYNCE_TRAYICON(data);
set_icon(self);
- set_status_tooltips(self);
+ set_status_tooltip(self);
/* prevent function from running again when
set with g_idle_add */
@@ -827,9 +828,6 @@
g_signal_connect (G_OBJECT (priv->device_list), "device-removed",
(GCallback)device_removed_cb, self);
- /* tooltip */
- priv->tooltips = gtk_tooltips_new();
-
/* visible icon */
priv->icon = gtk_image_new();
GtkWidget *box = gtk_event_box_new();
@@ -838,6 +836,9 @@
gtk_widget_show_all(GTK_WIDGET(self));
g_signal_connect(G_OBJECT(box), "button-press-event",
G_CALLBACK(trayicon_clicked), self);
+ /* tooltip */
+ g_signal_connect(G_OBJECT (self), "query-tooltip",
+ (GCallback)query_tooltip_cb, self);
/* dccm comms */
priv->comms_client = init_client_comms(self);
@@ -849,6 +850,16 @@
update(self);
}
+static gboolean
+query_tooltip_cb(GtkWidget *widget, gint x, gint y,
+ gboolean keyboard_mode, GtkTooltip *tooltip, gpointer user_data)
+{
+ set_status_tooltip(user_data);
+
+ /* show the tooltip */
+ return TRUE;
+}
+
static void
synce_trayicon_dispose (GObject *obj)
{
@@ -885,7 +896,6 @@
notify_uninit();
#endif /* ENABLE_NOTIFY */
- g_object_unref(priv->tooltips);
g_object_unref(priv->icon);
module_unload_all();
signature.asc
Description: Digital signature

