[epiphany/mcatanzaro/context-menu] embed-event: Fix invalid cast to GdkEventButton



commit 60c9bb76f8ca9999c50fc517f49c4daee0506a81
Author: Michael Catanzaro <mcatanzaro igalia com>
Date:   Mon Mar 18 10:20:54 2019 -0500

    embed-event: Fix invalid cast to GdkEventButton
    
    The context-menu is not guaranteed to be a GdkEventButton. It could also
    be a GdkEventKey, or a generic GdkEvent of no type.
    
    https://bugzilla.redhat.com/show_bug.cgi?id=1687185

 embed/ephy-embed-event.c | 21 ++++++++++++++++-----
 embed/ephy-embed-event.h |  2 +-
 src/ephy-window.c        |  2 +-
 3 files changed, 18 insertions(+), 7 deletions(-)
---
diff --git a/embed/ephy-embed-event.c b/embed/ephy-embed-event.c
index ec202ec90..ebd5f967a 100644
--- a/embed/ephy-embed-event.c
+++ b/embed/ephy-embed-event.c
@@ -58,17 +58,28 @@ ephy_embed_event_init (EphyEmbedEvent *embed_event)
 }
 
 EphyEmbedEvent *
-ephy_embed_event_new (GdkEventButton *event, WebKitHitTestResult *hit_test_result)
+ephy_embed_event_new (GdkEvent            *event,
+                      WebKitHitTestResult *hit_test_result)
 {
   EphyEmbedEvent *embed_event;
 
   embed_event = g_object_new (EPHY_TYPE_EMBED_EVENT, NULL);
 
   embed_event->hit_test_result = g_object_ref (hit_test_result);
-  embed_event->button = event->button;
-  embed_event->modifier = event->state;
-  embed_event->x = event->x;
-  embed_event->y = event->y;
+
+  switch (event->type) {
+  case GDK_BUTTON_PRESS:
+    embed_event->button = ((GdkEventButton *)event)->button;
+    embed_event->modifier = ((GdkEventButton *)event)->state;
+    embed_event->x = ((GdkEventButton *)event)->x;
+    embed_event->y = ((GdkEventButton *)event)->y;
+    break;
+  case GDK_KEY_PRESS:
+    embed_event->modifier = ((GdkEventKey *)event)->state;
+    break;
+  default:
+    break;
+  }
 
   return embed_event;
 }
diff --git a/embed/ephy-embed-event.h b/embed/ephy-embed-event.h
index e8843d844..a43360ce1 100644
--- a/embed/ephy-embed-event.h
+++ b/embed/ephy-embed-event.h
@@ -30,7 +30,7 @@ G_BEGIN_DECLS
 
 G_DECLARE_FINAL_TYPE (EphyEmbedEvent, ephy_embed_event, EPHY, EMBED_EVENT, GObject)
 
-EphyEmbedEvent *     ephy_embed_event_new                 (GdkEventButton      *event,
+EphyEmbedEvent *     ephy_embed_event_new                 (GdkEvent            *event,
                                                            WebKitHitTestResult *hit_test_result);
 guint                ephy_embed_event_get_context         (EphyEmbedEvent      *event);
 guint                ephy_embed_event_get_button          (EphyEmbedEvent      *event);
diff --git a/src/ephy-window.c b/src/ephy-window.c
index dafa41bd1..cc081ea9f 100644
--- a/src/ephy-window.c
+++ b/src/ephy-window.c
@@ -1539,7 +1539,7 @@ populate_context_menu (WebKitWebView       *web_view,
 
   webkit_context_menu_remove_all (context_menu);
 
-  embed_event = ephy_embed_event_new ((GdkEventButton *)event, hit_test_result);
+  embed_event = ephy_embed_event_new (event, hit_test_result);
   _ephy_window_set_context_event (window, embed_event);
   g_object_unref (embed_event);
 


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