mirror of
https://git.freebsd.org/ports.git
synced 2025-07-18 01:39:16 -04:00
Fix KDE Bug 135250 (window-flickering in 'focus strictly under mouse' mode).
Submitted by: Daniel O'Connor <doconnor@gsoft.com.au>
This commit is contained in:
parent
7d1ca07567
commit
4aaa506f03
Notes:
svn2git
2021-03-31 03:12:20 +00:00
svn path=/head/; revision=181758
14 changed files with 280 additions and 7 deletions
|
@ -8,7 +8,7 @@
|
||||||
|
|
||||||
PORTNAME= kdebase
|
PORTNAME= kdebase
|
||||||
PORTVERSION= ${KDE_VERSION}
|
PORTVERSION= ${KDE_VERSION}
|
||||||
PORTREVISION= 2
|
PORTREVISION= 3
|
||||||
CATEGORIES= x11 kde
|
CATEGORIES= x11 kde
|
||||||
MASTER_SITES= ${MASTER_SITE_KDE}
|
MASTER_SITES= ${MASTER_SITE_KDE}
|
||||||
MASTER_SITE_SUBDIR= stable/${PORTVERSION:S/.0//}/src
|
MASTER_SITE_SUBDIR= stable/${PORTVERSION:S/.0//}/src
|
||||||
|
|
39
x11/kde4-baseapps/files/patch-kwin-client.cpp
Normal file
39
x11/kde4-baseapps/files/patch-kwin-client.cpp
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
--- kwin/client.cpp.orig Mon Oct 2 03:02:07 2006
|
||||||
|
+++ kwin/client.cpp Mon Jan 8 10:54:19 2007
|
||||||
|
@@ -477,17 +477,30 @@
|
||||||
|
// calls it or when the decoration is created/destroyed
|
||||||
|
|
||||||
|
if( Shape::version() >= 0x11 ) // 1.1, has input shape support
|
||||||
|
- { // there appears to be no way to find out if a window has input
|
||||||
|
- // shape set or not, so always set propagate the input shape
|
||||||
|
- // (it's the same like the bounding shape by default)
|
||||||
|
- XShapeCombineShape( qt_xdisplay(), frameId(), ShapeInput, 0, 0,
|
||||||
|
+ { // There appears to be no way to find out if a window has input
|
||||||
|
+ // shape set or not, so always propagate the input shape
|
||||||
|
+ // (it's the same like the bounding shape by default).
|
||||||
|
+ // Also, build the shape using a helper window, not directly
|
||||||
|
+ // in the frame window, because the sequence set-shape-to-frame,
|
||||||
|
+ // remove-shape-of-client, add-input-shape-of-client has the problem
|
||||||
|
+ // that after the second step there's a hole in the input shape
|
||||||
|
+ // until the real shape of the client is added and that can make
|
||||||
|
+ // the window lose focus (which is a problem with mouse focus policies)
|
||||||
|
+ static Window helper_window = None;
|
||||||
|
+ if( helper_window == None )
|
||||||
|
+ helper_window = XCreateSimpleWindow( qt_xdisplay(), qt_xrootwin(),
|
||||||
|
+ 0, 0, 1, 1, 0, 0, 0 );
|
||||||
|
+ XResizeWindow( qt_xdisplay(), helper_window, width(), height());
|
||||||
|
+ XShapeCombineShape( qt_xdisplay(), helper_window, ShapeInput, 0, 0,
|
||||||
|
frameId(), ShapeBounding, ShapeSet );
|
||||||
|
- XShapeCombineShape( qt_xdisplay(), frameId(), ShapeInput,
|
||||||
|
+ XShapeCombineShape( qt_xdisplay(), helper_window, ShapeInput,
|
||||||
|
clientPos().x(), clientPos().y(),
|
||||||
|
window(), ShapeBounding, ShapeSubtract );
|
||||||
|
- XShapeCombineShape( qt_xdisplay(), frameId(), ShapeInput,
|
||||||
|
+ XShapeCombineShape( qt_xdisplay(), helper_window, ShapeInput,
|
||||||
|
clientPos().x(), clientPos().y(),
|
||||||
|
window(), ShapeInput, ShapeUnion );
|
||||||
|
+ XShapeCombineShape( qt_xdisplay(), frameId(), ShapeInput, 0, 0,
|
||||||
|
+ helper_window, ShapeInput, ShapeSet );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
|
|
||||||
PORTNAME= kdebase
|
PORTNAME= kdebase
|
||||||
PORTVERSION= ${KDE_VERSION}
|
PORTVERSION= ${KDE_VERSION}
|
||||||
PORTREVISION= 2
|
PORTREVISION= 3
|
||||||
CATEGORIES= x11 kde
|
CATEGORIES= x11 kde
|
||||||
MASTER_SITES= ${MASTER_SITE_KDE}
|
MASTER_SITES= ${MASTER_SITE_KDE}
|
||||||
MASTER_SITE_SUBDIR= stable/${PORTVERSION:S/.0//}/src
|
MASTER_SITE_SUBDIR= stable/${PORTVERSION:S/.0//}/src
|
||||||
|
|
39
x11/kde4-runtime/files/patch-kwin-client.cpp
Normal file
39
x11/kde4-runtime/files/patch-kwin-client.cpp
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
--- kwin/client.cpp.orig Mon Oct 2 03:02:07 2006
|
||||||
|
+++ kwin/client.cpp Mon Jan 8 10:54:19 2007
|
||||||
|
@@ -477,17 +477,30 @@
|
||||||
|
// calls it or when the decoration is created/destroyed
|
||||||
|
|
||||||
|
if( Shape::version() >= 0x11 ) // 1.1, has input shape support
|
||||||
|
- { // there appears to be no way to find out if a window has input
|
||||||
|
- // shape set or not, so always set propagate the input shape
|
||||||
|
- // (it's the same like the bounding shape by default)
|
||||||
|
- XShapeCombineShape( qt_xdisplay(), frameId(), ShapeInput, 0, 0,
|
||||||
|
+ { // There appears to be no way to find out if a window has input
|
||||||
|
+ // shape set or not, so always propagate the input shape
|
||||||
|
+ // (it's the same like the bounding shape by default).
|
||||||
|
+ // Also, build the shape using a helper window, not directly
|
||||||
|
+ // in the frame window, because the sequence set-shape-to-frame,
|
||||||
|
+ // remove-shape-of-client, add-input-shape-of-client has the problem
|
||||||
|
+ // that after the second step there's a hole in the input shape
|
||||||
|
+ // until the real shape of the client is added and that can make
|
||||||
|
+ // the window lose focus (which is a problem with mouse focus policies)
|
||||||
|
+ static Window helper_window = None;
|
||||||
|
+ if( helper_window == None )
|
||||||
|
+ helper_window = XCreateSimpleWindow( qt_xdisplay(), qt_xrootwin(),
|
||||||
|
+ 0, 0, 1, 1, 0, 0, 0 );
|
||||||
|
+ XResizeWindow( qt_xdisplay(), helper_window, width(), height());
|
||||||
|
+ XShapeCombineShape( qt_xdisplay(), helper_window, ShapeInput, 0, 0,
|
||||||
|
frameId(), ShapeBounding, ShapeSet );
|
||||||
|
- XShapeCombineShape( qt_xdisplay(), frameId(), ShapeInput,
|
||||||
|
+ XShapeCombineShape( qt_xdisplay(), helper_window, ShapeInput,
|
||||||
|
clientPos().x(), clientPos().y(),
|
||||||
|
window(), ShapeBounding, ShapeSubtract );
|
||||||
|
- XShapeCombineShape( qt_xdisplay(), frameId(), ShapeInput,
|
||||||
|
+ XShapeCombineShape( qt_xdisplay(), helper_window, ShapeInput,
|
||||||
|
clientPos().x(), clientPos().y(),
|
||||||
|
window(), ShapeInput, ShapeUnion );
|
||||||
|
+ XShapeCombineShape( qt_xdisplay(), frameId(), ShapeInput, 0, 0,
|
||||||
|
+ helper_window, ShapeInput, ShapeSet );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
|
|
||||||
PORTNAME= kdebase
|
PORTNAME= kdebase
|
||||||
PORTVERSION= ${KDE_VERSION}
|
PORTVERSION= ${KDE_VERSION}
|
||||||
PORTREVISION= 2
|
PORTREVISION= 3
|
||||||
CATEGORIES= x11 kde
|
CATEGORIES= x11 kde
|
||||||
MASTER_SITES= ${MASTER_SITE_KDE}
|
MASTER_SITES= ${MASTER_SITE_KDE}
|
||||||
MASTER_SITE_SUBDIR= stable/${PORTVERSION:S/.0//}/src
|
MASTER_SITE_SUBDIR= stable/${PORTVERSION:S/.0//}/src
|
||||||
|
|
39
x11/kde4-workspace/files/patch-kwin-client.cpp
Normal file
39
x11/kde4-workspace/files/patch-kwin-client.cpp
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
--- kwin/client.cpp.orig Mon Oct 2 03:02:07 2006
|
||||||
|
+++ kwin/client.cpp Mon Jan 8 10:54:19 2007
|
||||||
|
@@ -477,17 +477,30 @@
|
||||||
|
// calls it or when the decoration is created/destroyed
|
||||||
|
|
||||||
|
if( Shape::version() >= 0x11 ) // 1.1, has input shape support
|
||||||
|
- { // there appears to be no way to find out if a window has input
|
||||||
|
- // shape set or not, so always set propagate the input shape
|
||||||
|
- // (it's the same like the bounding shape by default)
|
||||||
|
- XShapeCombineShape( qt_xdisplay(), frameId(), ShapeInput, 0, 0,
|
||||||
|
+ { // There appears to be no way to find out if a window has input
|
||||||
|
+ // shape set or not, so always propagate the input shape
|
||||||
|
+ // (it's the same like the bounding shape by default).
|
||||||
|
+ // Also, build the shape using a helper window, not directly
|
||||||
|
+ // in the frame window, because the sequence set-shape-to-frame,
|
||||||
|
+ // remove-shape-of-client, add-input-shape-of-client has the problem
|
||||||
|
+ // that after the second step there's a hole in the input shape
|
||||||
|
+ // until the real shape of the client is added and that can make
|
||||||
|
+ // the window lose focus (which is a problem with mouse focus policies)
|
||||||
|
+ static Window helper_window = None;
|
||||||
|
+ if( helper_window == None )
|
||||||
|
+ helper_window = XCreateSimpleWindow( qt_xdisplay(), qt_xrootwin(),
|
||||||
|
+ 0, 0, 1, 1, 0, 0, 0 );
|
||||||
|
+ XResizeWindow( qt_xdisplay(), helper_window, width(), height());
|
||||||
|
+ XShapeCombineShape( qt_xdisplay(), helper_window, ShapeInput, 0, 0,
|
||||||
|
frameId(), ShapeBounding, ShapeSet );
|
||||||
|
- XShapeCombineShape( qt_xdisplay(), frameId(), ShapeInput,
|
||||||
|
+ XShapeCombineShape( qt_xdisplay(), helper_window, ShapeInput,
|
||||||
|
clientPos().x(), clientPos().y(),
|
||||||
|
window(), ShapeBounding, ShapeSubtract );
|
||||||
|
- XShapeCombineShape( qt_xdisplay(), frameId(), ShapeInput,
|
||||||
|
+ XShapeCombineShape( qt_xdisplay(), helper_window, ShapeInput,
|
||||||
|
clientPos().x(), clientPos().y(),
|
||||||
|
window(), ShapeInput, ShapeUnion );
|
||||||
|
+ XShapeCombineShape( qt_xdisplay(), frameId(), ShapeInput, 0, 0,
|
||||||
|
+ helper_window, ShapeInput, ShapeSet );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
|
|
||||||
PORTNAME= kdebase
|
PORTNAME= kdebase
|
||||||
PORTVERSION= ${KDE_VERSION}
|
PORTVERSION= ${KDE_VERSION}
|
||||||
PORTREVISION= 2
|
PORTREVISION= 3
|
||||||
CATEGORIES= x11 kde
|
CATEGORIES= x11 kde
|
||||||
MASTER_SITES= ${MASTER_SITE_KDE}
|
MASTER_SITES= ${MASTER_SITE_KDE}
|
||||||
MASTER_SITE_SUBDIR= stable/${PORTVERSION:S/.0//}/src
|
MASTER_SITE_SUBDIR= stable/${PORTVERSION:S/.0//}/src
|
||||||
|
|
39
x11/kdebase3/files/patch-kwin-client.cpp
Normal file
39
x11/kdebase3/files/patch-kwin-client.cpp
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
--- kwin/client.cpp.orig Mon Oct 2 03:02:07 2006
|
||||||
|
+++ kwin/client.cpp Mon Jan 8 10:54:19 2007
|
||||||
|
@@ -477,17 +477,30 @@
|
||||||
|
// calls it or when the decoration is created/destroyed
|
||||||
|
|
||||||
|
if( Shape::version() >= 0x11 ) // 1.1, has input shape support
|
||||||
|
- { // there appears to be no way to find out if a window has input
|
||||||
|
- // shape set or not, so always set propagate the input shape
|
||||||
|
- // (it's the same like the bounding shape by default)
|
||||||
|
- XShapeCombineShape( qt_xdisplay(), frameId(), ShapeInput, 0, 0,
|
||||||
|
+ { // There appears to be no way to find out if a window has input
|
||||||
|
+ // shape set or not, so always propagate the input shape
|
||||||
|
+ // (it's the same like the bounding shape by default).
|
||||||
|
+ // Also, build the shape using a helper window, not directly
|
||||||
|
+ // in the frame window, because the sequence set-shape-to-frame,
|
||||||
|
+ // remove-shape-of-client, add-input-shape-of-client has the problem
|
||||||
|
+ // that after the second step there's a hole in the input shape
|
||||||
|
+ // until the real shape of the client is added and that can make
|
||||||
|
+ // the window lose focus (which is a problem with mouse focus policies)
|
||||||
|
+ static Window helper_window = None;
|
||||||
|
+ if( helper_window == None )
|
||||||
|
+ helper_window = XCreateSimpleWindow( qt_xdisplay(), qt_xrootwin(),
|
||||||
|
+ 0, 0, 1, 1, 0, 0, 0 );
|
||||||
|
+ XResizeWindow( qt_xdisplay(), helper_window, width(), height());
|
||||||
|
+ XShapeCombineShape( qt_xdisplay(), helper_window, ShapeInput, 0, 0,
|
||||||
|
frameId(), ShapeBounding, ShapeSet );
|
||||||
|
- XShapeCombineShape( qt_xdisplay(), frameId(), ShapeInput,
|
||||||
|
+ XShapeCombineShape( qt_xdisplay(), helper_window, ShapeInput,
|
||||||
|
clientPos().x(), clientPos().y(),
|
||||||
|
window(), ShapeBounding, ShapeSubtract );
|
||||||
|
- XShapeCombineShape( qt_xdisplay(), frameId(), ShapeInput,
|
||||||
|
+ XShapeCombineShape( qt_xdisplay(), helper_window, ShapeInput,
|
||||||
|
clientPos().x(), clientPos().y(),
|
||||||
|
window(), ShapeInput, ShapeUnion );
|
||||||
|
+ XShapeCombineShape( qt_xdisplay(), frameId(), ShapeInput, 0, 0,
|
||||||
|
+ helper_window, ShapeInput, ShapeSet );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
|
|
||||||
PORTNAME= kdebase
|
PORTNAME= kdebase
|
||||||
PORTVERSION= ${KDE_VERSION}
|
PORTVERSION= ${KDE_VERSION}
|
||||||
PORTREVISION= 2
|
PORTREVISION= 3
|
||||||
CATEGORIES= x11 kde
|
CATEGORIES= x11 kde
|
||||||
MASTER_SITES= ${MASTER_SITE_KDE}
|
MASTER_SITES= ${MASTER_SITE_KDE}
|
||||||
MASTER_SITE_SUBDIR= stable/${PORTVERSION:S/.0//}/src
|
MASTER_SITE_SUBDIR= stable/${PORTVERSION:S/.0//}/src
|
||||||
|
|
39
x11/kdebase4-runtime/files/patch-kwin-client.cpp
Normal file
39
x11/kdebase4-runtime/files/patch-kwin-client.cpp
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
--- kwin/client.cpp.orig Mon Oct 2 03:02:07 2006
|
||||||
|
+++ kwin/client.cpp Mon Jan 8 10:54:19 2007
|
||||||
|
@@ -477,17 +477,30 @@
|
||||||
|
// calls it or when the decoration is created/destroyed
|
||||||
|
|
||||||
|
if( Shape::version() >= 0x11 ) // 1.1, has input shape support
|
||||||
|
- { // there appears to be no way to find out if a window has input
|
||||||
|
- // shape set or not, so always set propagate the input shape
|
||||||
|
- // (it's the same like the bounding shape by default)
|
||||||
|
- XShapeCombineShape( qt_xdisplay(), frameId(), ShapeInput, 0, 0,
|
||||||
|
+ { // There appears to be no way to find out if a window has input
|
||||||
|
+ // shape set or not, so always propagate the input shape
|
||||||
|
+ // (it's the same like the bounding shape by default).
|
||||||
|
+ // Also, build the shape using a helper window, not directly
|
||||||
|
+ // in the frame window, because the sequence set-shape-to-frame,
|
||||||
|
+ // remove-shape-of-client, add-input-shape-of-client has the problem
|
||||||
|
+ // that after the second step there's a hole in the input shape
|
||||||
|
+ // until the real shape of the client is added and that can make
|
||||||
|
+ // the window lose focus (which is a problem with mouse focus policies)
|
||||||
|
+ static Window helper_window = None;
|
||||||
|
+ if( helper_window == None )
|
||||||
|
+ helper_window = XCreateSimpleWindow( qt_xdisplay(), qt_xrootwin(),
|
||||||
|
+ 0, 0, 1, 1, 0, 0, 0 );
|
||||||
|
+ XResizeWindow( qt_xdisplay(), helper_window, width(), height());
|
||||||
|
+ XShapeCombineShape( qt_xdisplay(), helper_window, ShapeInput, 0, 0,
|
||||||
|
frameId(), ShapeBounding, ShapeSet );
|
||||||
|
- XShapeCombineShape( qt_xdisplay(), frameId(), ShapeInput,
|
||||||
|
+ XShapeCombineShape( qt_xdisplay(), helper_window, ShapeInput,
|
||||||
|
clientPos().x(), clientPos().y(),
|
||||||
|
window(), ShapeBounding, ShapeSubtract );
|
||||||
|
- XShapeCombineShape( qt_xdisplay(), frameId(), ShapeInput,
|
||||||
|
+ XShapeCombineShape( qt_xdisplay(), helper_window, ShapeInput,
|
||||||
|
clientPos().x(), clientPos().y(),
|
||||||
|
window(), ShapeInput, ShapeUnion );
|
||||||
|
+ XShapeCombineShape( qt_xdisplay(), frameId(), ShapeInput, 0, 0,
|
||||||
|
+ helper_window, ShapeInput, ShapeSet );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
|
|
||||||
PORTNAME= kdebase
|
PORTNAME= kdebase
|
||||||
PORTVERSION= ${KDE_VERSION}
|
PORTVERSION= ${KDE_VERSION}
|
||||||
PORTREVISION= 2
|
PORTREVISION= 3
|
||||||
CATEGORIES= x11 kde
|
CATEGORIES= x11 kde
|
||||||
MASTER_SITES= ${MASTER_SITE_KDE}
|
MASTER_SITES= ${MASTER_SITE_KDE}
|
||||||
MASTER_SITE_SUBDIR= stable/${PORTVERSION:S/.0//}/src
|
MASTER_SITE_SUBDIR= stable/${PORTVERSION:S/.0//}/src
|
||||||
|
|
39
x11/kdebase4-workspace/files/patch-kwin-client.cpp
Normal file
39
x11/kdebase4-workspace/files/patch-kwin-client.cpp
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
--- kwin/client.cpp.orig Mon Oct 2 03:02:07 2006
|
||||||
|
+++ kwin/client.cpp Mon Jan 8 10:54:19 2007
|
||||||
|
@@ -477,17 +477,30 @@
|
||||||
|
// calls it or when the decoration is created/destroyed
|
||||||
|
|
||||||
|
if( Shape::version() >= 0x11 ) // 1.1, has input shape support
|
||||||
|
- { // there appears to be no way to find out if a window has input
|
||||||
|
- // shape set or not, so always set propagate the input shape
|
||||||
|
- // (it's the same like the bounding shape by default)
|
||||||
|
- XShapeCombineShape( qt_xdisplay(), frameId(), ShapeInput, 0, 0,
|
||||||
|
+ { // There appears to be no way to find out if a window has input
|
||||||
|
+ // shape set or not, so always propagate the input shape
|
||||||
|
+ // (it's the same like the bounding shape by default).
|
||||||
|
+ // Also, build the shape using a helper window, not directly
|
||||||
|
+ // in the frame window, because the sequence set-shape-to-frame,
|
||||||
|
+ // remove-shape-of-client, add-input-shape-of-client has the problem
|
||||||
|
+ // that after the second step there's a hole in the input shape
|
||||||
|
+ // until the real shape of the client is added and that can make
|
||||||
|
+ // the window lose focus (which is a problem with mouse focus policies)
|
||||||
|
+ static Window helper_window = None;
|
||||||
|
+ if( helper_window == None )
|
||||||
|
+ helper_window = XCreateSimpleWindow( qt_xdisplay(), qt_xrootwin(),
|
||||||
|
+ 0, 0, 1, 1, 0, 0, 0 );
|
||||||
|
+ XResizeWindow( qt_xdisplay(), helper_window, width(), height());
|
||||||
|
+ XShapeCombineShape( qt_xdisplay(), helper_window, ShapeInput, 0, 0,
|
||||||
|
frameId(), ShapeBounding, ShapeSet );
|
||||||
|
- XShapeCombineShape( qt_xdisplay(), frameId(), ShapeInput,
|
||||||
|
+ XShapeCombineShape( qt_xdisplay(), helper_window, ShapeInput,
|
||||||
|
clientPos().x(), clientPos().y(),
|
||||||
|
window(), ShapeBounding, ShapeSubtract );
|
||||||
|
- XShapeCombineShape( qt_xdisplay(), frameId(), ShapeInput,
|
||||||
|
+ XShapeCombineShape( qt_xdisplay(), helper_window, ShapeInput,
|
||||||
|
clientPos().x(), clientPos().y(),
|
||||||
|
window(), ShapeInput, ShapeUnion );
|
||||||
|
+ XShapeCombineShape( qt_xdisplay(), frameId(), ShapeInput, 0, 0,
|
||||||
|
+ helper_window, ShapeInput, ShapeSet );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
|
|
||||||
PORTNAME= kdebase
|
PORTNAME= kdebase
|
||||||
PORTVERSION= ${KDE_VERSION}
|
PORTVERSION= ${KDE_VERSION}
|
||||||
PORTREVISION= 2
|
PORTREVISION= 3
|
||||||
CATEGORIES= x11 kde
|
CATEGORIES= x11 kde
|
||||||
MASTER_SITES= ${MASTER_SITE_KDE}
|
MASTER_SITES= ${MASTER_SITE_KDE}
|
||||||
MASTER_SITE_SUBDIR= stable/${PORTVERSION:S/.0//}/src
|
MASTER_SITE_SUBDIR= stable/${PORTVERSION:S/.0//}/src
|
||||||
|
|
39
x11/kdebase4/files/patch-kwin-client.cpp
Normal file
39
x11/kdebase4/files/patch-kwin-client.cpp
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
--- kwin/client.cpp.orig Mon Oct 2 03:02:07 2006
|
||||||
|
+++ kwin/client.cpp Mon Jan 8 10:54:19 2007
|
||||||
|
@@ -477,17 +477,30 @@
|
||||||
|
// calls it or when the decoration is created/destroyed
|
||||||
|
|
||||||
|
if( Shape::version() >= 0x11 ) // 1.1, has input shape support
|
||||||
|
- { // there appears to be no way to find out if a window has input
|
||||||
|
- // shape set or not, so always set propagate the input shape
|
||||||
|
- // (it's the same like the bounding shape by default)
|
||||||
|
- XShapeCombineShape( qt_xdisplay(), frameId(), ShapeInput, 0, 0,
|
||||||
|
+ { // There appears to be no way to find out if a window has input
|
||||||
|
+ // shape set or not, so always propagate the input shape
|
||||||
|
+ // (it's the same like the bounding shape by default).
|
||||||
|
+ // Also, build the shape using a helper window, not directly
|
||||||
|
+ // in the frame window, because the sequence set-shape-to-frame,
|
||||||
|
+ // remove-shape-of-client, add-input-shape-of-client has the problem
|
||||||
|
+ // that after the second step there's a hole in the input shape
|
||||||
|
+ // until the real shape of the client is added and that can make
|
||||||
|
+ // the window lose focus (which is a problem with mouse focus policies)
|
||||||
|
+ static Window helper_window = None;
|
||||||
|
+ if( helper_window == None )
|
||||||
|
+ helper_window = XCreateSimpleWindow( qt_xdisplay(), qt_xrootwin(),
|
||||||
|
+ 0, 0, 1, 1, 0, 0, 0 );
|
||||||
|
+ XResizeWindow( qt_xdisplay(), helper_window, width(), height());
|
||||||
|
+ XShapeCombineShape( qt_xdisplay(), helper_window, ShapeInput, 0, 0,
|
||||||
|
frameId(), ShapeBounding, ShapeSet );
|
||||||
|
- XShapeCombineShape( qt_xdisplay(), frameId(), ShapeInput,
|
||||||
|
+ XShapeCombineShape( qt_xdisplay(), helper_window, ShapeInput,
|
||||||
|
clientPos().x(), clientPos().y(),
|
||||||
|
window(), ShapeBounding, ShapeSubtract );
|
||||||
|
- XShapeCombineShape( qt_xdisplay(), frameId(), ShapeInput,
|
||||||
|
+ XShapeCombineShape( qt_xdisplay(), helper_window, ShapeInput,
|
||||||
|
clientPos().x(), clientPos().y(),
|
||||||
|
window(), ShapeInput, ShapeUnion );
|
||||||
|
+ XShapeCombineShape( qt_xdisplay(), frameId(), ShapeInput, 0, 0,
|
||||||
|
+ helper_window, ShapeInput, ShapeSet );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue