Changeset 260508 in webkit
- Timestamp:
- Apr 22, 2020 6:26:20 AM (4 years ago)
- Location:
- trunk/Source
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WTF/ChangeLog
r260486 r260508 1 2020-04-22 Claudio Saavedra <csaavedra@igalia.com> 2 3 [GTK4] Several fixes to GdkEvent APIs for GTK4 4 https://bugs.webkit.org/show_bug.cgi?id=210856 5 6 Reviewed by Carlos Garcia Campos. 7 8 * wtf/glib/GTypedefs.h: In GTK4 GdkEvent is a struct. 9 1 10 2020-04-21 Peng Liu <peng.liu6@apple.com> 2 11 -
trunk/Source/WTF/wtf/glib/GTypedefs.h
r260425 r260508 64 64 typedef struct _GVariantIter GVariantIter; 65 65 typedef struct _GVariantType GVariantType; 66 #if USE(GTK4) 67 typedef struct _GdkEvent GdkEvent; 68 #else 66 69 typedef union _GdkEvent GdkEvent; 70 #endif 67 71 typedef struct _GTimer GTimer; 68 72 typedef struct _GKeyFile GKeyFile; -
trunk/Source/WebCore/ChangeLog
r260507 r260508 1 2020-04-22 Claudio Saavedra <csaavedra@igalia.com> 2 3 [GTK4] Several fixes to GdkEvent APIs for GTK4 4 https://bugs.webkit.org/show_bug.cgi?id=210856 5 6 Reviewed by Carlos Garcia Campos. 7 8 No tests needed. 9 10 Several fixes to GdkEvent API changes for GTK4. This is far from 11 complete but it allows the GTK4 build to move forward. When 12 possible, add GTK3-API replacements to GtkVersioning.h to avoid 13 #ifdef blocks, where the API changes are too complex, just #ifdef. 14 15 * platform/gtk/GtkUtilities.cpp: 16 (WebCore::wallTimeForEvent): 17 * platform/gtk/GtkVersioning.h: 18 (gdk_event_get_state): 19 (gdk_event_get_coords): 20 (gdk_event_get_root_coords): 21 (gdk_event_is_scroll_stop_event): 22 (gdk_event_get_scroll_direction): 23 (gdk_event_get_scroll_deltas): 24 (gdk_event_get_button): 25 (gdk_keymap_get_for_display): Deleted as it was wrong and 26 it's not needed. 27 * platform/gtk/PlatformKeyboardEventGtk.cpp: 28 (WebCore::PlatformKeyboardEvent::currentCapsLockState): 29 (WebCore::PlatformKeyboardEvent::getCurrentModifierState): 30 (WebCore::PlatformKeyboardEvent::modifiersContainCapsLock): 31 * platform/gtk/PlatformWheelEventGtk.cpp: 32 (WebCore::PlatformWheelEvent::PlatformWheelEvent): 33 1 34 2020-04-22 Youenn Fablet <youenn@apple.com> 2 35 -
trunk/Source/WebCore/platform/gtk/GtkUtilities.cpp
r260125 r260508 77 77 // g_get_monotonic_time() continues to do so as well, and so long as 78 78 // WTF::MonotonicTime continues to use g_get_monotonic_time(). 79 #if USE(GTK4) 80 auto time = gdk_event_get_time(const_cast<GdkEvent*>(event)); 81 #else 79 82 auto time = gdk_event_get_time(event); 83 #endif 80 84 if (time == GDK_CURRENT_TIME) 81 85 return WallTime::now(); -
trunk/Source/WebCore/platform/gtk/GtkVersioning.h
r260255 r260508 58 58 } 59 59 60 static inline GdkKeymap* 61 gdk_keymap_get_for_display(GdkDisplay *display) 60 #define GDK_MOD1_MASK GDK_ALT_MASK 61 62 static inline gboolean 63 gdk_event_get_state(GdkEvent *event, GdkModifierType *state) 62 64 { 63 return gdk_display_get_keymap(display); 65 *state = gdk_event_get_modifier_state(event); 66 // The GTK3 method returns TRUE if there is a state, otherwise 67 // FALSE. 68 return !!*state; 64 69 } 65 70 71 static inline gboolean 72 gdk_event_get_coords(GdkEvent *event, double *x, double *y) 73 { 74 return gdk_event_get_position(event, x, y); 75 } 76 77 static inline gboolean 78 gdk_event_get_root_coords(GdkEvent *event, double *x, double *y) 79 { 80 // GTK4 does not provide a way of obtaining screen-relative event coordinates, and even 81 // on Wayland GTK3 cannot know where a surface is and will return the surface-relative 82 // coordinates anyway, so do the same here. 83 return gdk_event_get_position(event, x, y); 84 } 85 86 static inline gboolean 87 gdk_event_is_scroll_stop_event(GdkEvent* event) 88 { 89 return gdk_scroll_event_is_stop(event); 90 } 91 92 static inline gboolean 93 gdk_event_get_scroll_direction(GdkEvent* event, GdkScrollDirection* direction) 94 { 95 *direction = gdk_scroll_event_get_direction(event); 96 // The GTK3 method returns TRUE if the scroll direction is not 97 // GDK_SCROLL_SMOOTH, so do the same here. 98 return *direction != GDK_SCROLL_SMOOTH; 99 } 100 101 static inline gboolean 102 gdk_event_get_scroll_deltas(GdkEvent* event, gdouble *x, gdouble *y) 103 { 104 gdk_scroll_event_get_deltas(event, x, y); 105 // The GTK3 method returns TRUE if the event is a smooth scroll 106 // event, so do the same here. 107 return gdk_scroll_event_get_direction(event) == GDK_SCROLL_SMOOTH; 108 } 109 110 static inline gboolean 111 gdk_event_get_button(GdkEvent* event) 112 { 113 return gdk_button_event_get_button(event); 114 } 66 115 #endif // USE(GTK4) -
trunk/Source/WebCore/platform/gtk/PlatformKeyboardEventGtk.cpp
r260255 r260508 1343 1343 bool PlatformKeyboardEvent::currentCapsLockState() 1344 1344 { 1345 #if USE(GTK4) 1346 return gdk_device_get_caps_lock_state(gdk_seat_get_keyboard(gdk_display_get_default_seat(gdk_display_get_default()))); 1347 #else 1345 1348 return gdk_keymap_get_caps_lock_state(gdk_keymap_get_for_display(gdk_display_get_default())); 1349 #endif 1346 1350 } 1347 1351 … … 1349 1353 { 1350 1354 GdkModifierType state; 1355 #if USE(GTK4) 1356 state = static_cast<GdkModifierType>(0); 1357 #else 1351 1358 gtk_get_current_event_state(&state); 1359 #endif 1352 1360 1353 1361 shiftKey = state & GDK_SHIFT_MASK; … … 1371 1379 GUniqueOutPtr<GdkKeymapKey> keys; 1372 1380 int entriesCount; 1381 #if USE(GTK4) 1382 lockMaskIsCapsLock = gdk_display_map_keyval(gdk_display_get_default(), GDK_KEY_Caps_Lock, &keys.outPtr(), &entriesCount) && entriesCount; 1383 #else 1373 1384 lockMaskIsCapsLock = gdk_keymap_get_entries_for_keyval(gdk_keymap_get_for_display(gdk_display_get_default()), GDK_KEY_Caps_Lock, &keys.outPtr(), &entriesCount) && entriesCount; 1385 #endif 1374 1386 } 1375 1387 return lockMaskIsCapsLock; -
trunk/Source/WebCore/platform/gtk/PlatformWheelEventGtk.cpp
r260008 r260508 31 31 #include "FloatPoint.h" 32 32 #include "GtkUtilities.h" 33 #include "GtkVersioning.h" 33 34 #include "PlatformKeyboardEvent.h" 34 35 #include "Scrollbar.h" … … 48 49 m_timestamp = wallTimeForEvent(event); 49 50 50 #if USE(GTK4)51 state = gdk_event_get_modifier_state(reinterpret_cast<GdkEvent*>(event));52 #else53 51 gdk_event_get_state(reinterpret_cast<GdkEvent*>(event), &state); 54 #endif55 52 56 53 if (state & GDK_SHIFT_MASK) … … 69 66 GdkScrollDirection direction; 70 67 71 #if USE(GTK4)72 direction = gdk_scroll_event_get_direction(reinterpret_cast<GdkEvent*>(event));73 if (direction == GDK_SCROLL_SMOOTH) {74 double deltaX, deltaY;75 gdk_scroll_event_get_deltas(reinterpret_cast<GdkEvent*>(event), &deltaX, &deltaY);76 m_deltaX = -deltaX;77 m_deltaY = -deltaY;78 }79 #else80 68 if (!gdk_event_get_scroll_direction(reinterpret_cast<GdkEvent*>(event), &direction)) { 81 69 direction = GDK_SCROLL_SMOOTH; … … 86 74 } 87 75 } 88 #endif89 76 90 77 // Docs say an upwards scroll (away from the user) has a positive delta … … 113 100 114 101 #if ENABLE(KINETIC_SCROLLING) 115 #if USE(GTK4)116 const auto isStopEvent = gdk_scroll_event_is_stop(reinterpret_cast<GdkEvent*>(event));117 #else118 102 const auto isStopEvent = gdk_event_is_scroll_stop_event(reinterpret_cast<GdkEvent*>(event)); 119 #endif120 103 m_phase = isStopEvent ? PlatformWheelEventPhaseEnded : PlatformWheelEventPhaseChanged; 121 104 #endif // ENABLE(KINETIC_SCROLLING) 122 105 123 106 gdouble x, y, rootX, rootY; 124 #if USE(GTK4)125 gdk_event_get_position(reinterpret_cast<GdkEvent*>(event), &x, &y);126 // GTK4 does not provide a way of obtaining screen-relative event coordinates, and even127 // on Wayland GTK3 cannot know where a surface is and will return the surface-relative128 // coordinates anyway, so do the same here.129 rootX = x;130 rootY = y;131 #else132 107 gdk_event_get_coords(reinterpret_cast<GdkEvent*>(event), &x, &y); 133 108 gdk_event_get_root_coords(reinterpret_cast<GdkEvent*>(event), &rootX, &rootY); 134 #endif135 109 136 110 m_position = IntPoint(static_cast<int>(x), static_cast<int>(y));
Note: See TracChangeset
for help on using the changeset viewer.