From f07677c10598f4558b142cc76c524b838be4159e Mon Sep 17 00:00:00 2001 From: Arnav Singh Date: Sat, 21 Feb 2015 15:04:18 +0100 Subject: [PATCH] statusicon: fix crash storing pointer in UINT https://bugzilla.gnome.org/show_bug.cgi?id=696505 --- gtk/deprecated/gtkstatusicon.c | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/gtk/deprecated/gtkstatusicon.c b/gtk/deprecated/gtkstatusicon.c index 5af98aea26..301a739326 100644 --- a/gtk/deprecated/gtkstatusicon.c +++ b/gtk/deprecated/gtkstatusicon.c @@ -693,6 +693,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, @@ -754,7 +772,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; @@ -780,7 +798,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; @@ -927,7 +945,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;