mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2025-01-14 22:30:22 +00:00
x11: Avoid setting has_pointer_focus if a EWMH compliant WM is present
This is mostly useful to have focus behave sanely on lack of WM, so avoid any check there if we're positive there is a WM handling focus. https://bugzilla.gnome.org/show_bug.cgi?id=677329
This commit is contained in:
parent
48d7219296
commit
d55b8151f2
@ -820,6 +820,7 @@ _gdk_device_manager_core_handle_focus (GdkWindow *window,
|
|||||||
int mode)
|
int mode)
|
||||||
{
|
{
|
||||||
GdkToplevelX11 *toplevel;
|
GdkToplevelX11 *toplevel;
|
||||||
|
GdkX11Screen *x11_screen;
|
||||||
gboolean had_focus;
|
gboolean had_focus;
|
||||||
|
|
||||||
g_return_if_fail (GDK_IS_WINDOW (window));
|
g_return_if_fail (GDK_IS_WINDOW (window));
|
||||||
@ -841,6 +842,7 @@ _gdk_device_manager_core_handle_focus (GdkWindow *window,
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
had_focus = HAS_FOCUS (toplevel);
|
had_focus = HAS_FOCUS (toplevel);
|
||||||
|
x11_screen = GDK_X11_SCREEN (gdk_window_get_screen (window));
|
||||||
|
|
||||||
switch (detail)
|
switch (detail)
|
||||||
{
|
{
|
||||||
@ -854,6 +856,7 @@ _gdk_device_manager_core_handle_focus (GdkWindow *window,
|
|||||||
* has_focus_window case.
|
* has_focus_window case.
|
||||||
*/
|
*/
|
||||||
if (toplevel->has_pointer &&
|
if (toplevel->has_pointer &&
|
||||||
|
!x11_screen->wmspec_check_window &&
|
||||||
mode != NotifyGrab &&
|
mode != NotifyGrab &&
|
||||||
#ifdef XINPUT_2
|
#ifdef XINPUT_2
|
||||||
mode != XINotifyPassiveGrab &&
|
mode != XINotifyPassiveGrab &&
|
||||||
@ -884,7 +887,8 @@ _gdk_device_manager_core_handle_focus (GdkWindow *window,
|
|||||||
* but the pointer focus is ignored while a
|
* but the pointer focus is ignored while a
|
||||||
* grab is in effect
|
* grab is in effect
|
||||||
*/
|
*/
|
||||||
if (mode != NotifyGrab &&
|
if (!x11_screen->wmspec_check_window &&
|
||||||
|
mode != NotifyGrab &&
|
||||||
#ifdef XINPUT_2
|
#ifdef XINPUT_2
|
||||||
mode != XINotifyPassiveGrab &&
|
mode != XINotifyPassiveGrab &&
|
||||||
mode != XINotifyPassiveUngrab &&
|
mode != XINotifyPassiveUngrab &&
|
||||||
|
@ -132,11 +132,16 @@ static void
|
|||||||
handle_focus_change (GdkEventCrossing *event)
|
handle_focus_change (GdkEventCrossing *event)
|
||||||
{
|
{
|
||||||
GdkToplevelX11 *toplevel;
|
GdkToplevelX11 *toplevel;
|
||||||
|
GdkX11Screen *x11_screen;
|
||||||
gboolean focus_in, had_focus;
|
gboolean focus_in, had_focus;
|
||||||
|
|
||||||
toplevel = _gdk_x11_window_get_toplevel (event->window);
|
toplevel = _gdk_x11_window_get_toplevel (event->window);
|
||||||
|
x11_screen = GDK_X11_SCREEN (gdk_window_get_screen (event->window));
|
||||||
focus_in = (event->type == GDK_ENTER_NOTIFY);
|
focus_in = (event->type == GDK_ENTER_NOTIFY);
|
||||||
|
|
||||||
|
if (x11_screen->wmspec_check_window)
|
||||||
|
return;
|
||||||
|
|
||||||
if (!toplevel || event->detail == GDK_NOTIFY_INFERIOR)
|
if (!toplevel || event->detail == GDK_NOTIFY_INFERIOR)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user