From 707eb409e7dfeec276f6dfa3e667a0140b3300aa Mon Sep 17 00:00:00 2001 From: osch Date: Fri, 24 May 2019 20:34:16 +0200 Subject: alt+tab popup: bugfix mouse click handling for scale factor > 1 --- src/core/display.c | 30 +++++++++++++++++++++--------- src/include/tabpopup.h | 3 ++- src/ui/tabpopup.c | 10 +++++----- 3 files changed, 28 insertions(+), 15 deletions(-) diff --git a/src/core/display.c b/src/core/display.c index 65ae1885..216688ec 100644 --- a/src/core/display.c +++ b/src/core/display.c @@ -1611,18 +1611,30 @@ mouse_event_is_in_tab_popup (MetaDisplay *display, event_window, event_window, event_x, event_y, &x, &y, &child1); + + GtkWidget *popup_widget = meta_ui_tab_popup_get_widget (screen->tab_popup); + if (ok1 && popup_widget != NULL) + { + Window popup_xid = gdk_x11_window_get_xid (gtk_widget_get_window (popup_widget)); - Window popup_xid = meta_ui_tab_popup_get_xid(screen->tab_popup); - - gboolean ok2 = XTranslateCoordinates (display->xdisplay, - event_window, popup_xid, - event_x, event_y, - popup_x, popup_y, &child2); + gboolean ok2 = XTranslateCoordinates (display->xdisplay, + event_window, popup_xid, + event_x, event_y, + popup_x, popup_y, &child2); - return (ok1 && ok2 && child1 == popup_xid); + if (ok2 && child1 == popup_xid) + { + int scale = gtk_widget_get_scale_factor (popup_widget); + if (scale != 0) + { + *popup_x /= scale; + *popup_y /= scale; + } + return TRUE; + } + } } - else - return FALSE; + return FALSE; } /** diff --git a/src/include/tabpopup.h b/src/include/tabpopup.h index 077ec909..a93d1b2d 100644 --- a/src/include/tabpopup.h +++ b/src/include/tabpopup.h @@ -31,6 +31,7 @@ #include #include #include +#include typedef struct _MetaTabEntry MetaTabEntry; typedef struct _MetaTabPopup MetaTabPopup; @@ -69,7 +70,7 @@ void meta_ui_tab_popup_up (MetaTabPopup *popup); MetaTabEntryKey meta_ui_tab_popup_get_selected (MetaTabPopup *popup); void meta_ui_tab_popup_select (MetaTabPopup *popup, MetaTabEntryKey key); -Window meta_ui_tab_popup_get_xid (MetaTabPopup *popup); +GtkWidget* meta_ui_tab_popup_get_widget (MetaTabPopup *popup); void meta_ui_tab_popup_mouse_press (MetaTabPopup *popup, gint x, gint y); diff --git a/src/ui/tabpopup.c b/src/ui/tabpopup.c index b896b0e3..d7887ca8 100644 --- a/src/ui/tabpopup.c +++ b/src/ui/tabpopup.c @@ -640,13 +640,13 @@ meta_ui_tab_popup_select (MetaTabPopup *popup, } } -Window -meta_ui_tab_popup_get_xid (MetaTabPopup *popup) +GtkWidget* +meta_ui_tab_popup_get_widget (MetaTabPopup *popup) { - if (popup != NULL && popup->window != NULL) - return gdk_x11_window_get_xid(gtk_widget_get_window(popup->window)); + if (popup != NULL) + return popup->window; else - return 0; + return NULL; } void -- cgit v1.2.1