[gtk+/gtk-2-24] statusicon: fix crash storing pointer in UINT
- From: Ignacio Casal Quinteiro <icq src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+/gtk-2-24] statusicon: fix crash storing pointer in UINT
- Date: Sat, 21 Feb 2015 14:58:53 +0000 (UTC)
commit e01cc5bf5f2d1e9c0b0d1878aa6bf2cf6ad4f8ce
Author: Arnav Singh <arnavion gmail com>
Date: Sat Feb 21 15:57:25 2015 +0100
statusicon: fix crash storing pointer in UINT
https://bugzilla.gnome.org/show_bug.cgi?id=696505
gtk/gtkstatusicon.c | 26 ++++++++++++++++++++++----
1 files changed, 22 insertions(+), 4 deletions(-)
---
diff --git a/gtk/gtkstatusicon.c b/gtk/gtkstatusicon.c
index 77d93da..ec89752 100644
--- a/gtk/gtkstatusicon.c
+++ b/gtk/gtkstatusicon.c
@@ -687,6 +687,24 @@ button_callback (gpointer data)
static UINT taskbar_created_msg = 0;
static GSList *status_icons = NULL;
+static UINT status_icon_id = 0;
+
+static GtkStatusIcon *
+find_status_icon (UINT id)
+{
+ GSList *rover;
+
+ for (rover = status_icons; rover != NULL; rover = rover->next)
+ {
+ GtkStatusIcon *status_icon = GTK_STATUS_ICON (rover->data);
+ GtkStatusIconPrivate *priv = status_icon->priv;
+
+ if (priv->nid.uID == id)
+ return status_icon;
+ }
+
+ return NULL;
+}
static LRESULT CALLBACK
wndproc (HWND hwnd,
@@ -704,7 +722,7 @@ wndproc (HWND hwnd,
GtkStatusIconPrivate *priv = status_icon->priv;
priv->nid.hWnd = hwnd;
- priv->nid.uID = GPOINTER_TO_UINT (status_icon);
+ priv->nid.uID = status_icon_id++;
priv->nid.uCallbackMessage = WM_GTK_TRAY_NOTIFICATION;
priv->nid.uFlags = NIF_MESSAGE;
@@ -748,7 +766,7 @@ wndproc (HWND hwnd,
buttondown0:
bc = g_new (ButtonCallbackData, 1);
bc->event = (GdkEventButton *) gdk_event_new (GDK_BUTTON_PRESS);
- bc->status_icon = GTK_STATUS_ICON (wparam);
+ bc->status_icon = find_status_icon (wparam);
build_button_event (bc->status_icon->priv, bc->event, button);
g_idle_add (button_callback, bc);
break;
@@ -774,7 +792,7 @@ wndproc (HWND hwnd,
buttonup0:
bc = g_new (ButtonCallbackData, 1);
bc->event = (GdkEventButton *) gdk_event_new (GDK_BUTTON_RELEASE);
- bc->status_icon = GTK_STATUS_ICON (wparam);
+ bc->status_icon = find_status_icon (wparam);
build_button_event (bc->status_icon->priv, bc->event, button);
g_idle_add (button_callback, bc);
break;
@@ -906,7 +924,7 @@ gtk_status_icon_init (GtkStatusIcon *status_icon)
memset (&priv->nid, 0, sizeof (priv->nid));
priv->nid.hWnd = create_tray_observer ();
- priv->nid.uID = GPOINTER_TO_UINT (status_icon);
+ priv->nid.uID = status_icon_id++;
priv->nid.uCallbackMessage = WM_GTK_TRAY_NOTIFICATION;
priv->nid.uFlags = NIF_MESSAGE;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]