Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
Plasma
KWin
Commits
0a7e48f7
Commit
0a7e48f7
authored
Jan 30, 2011
by
Martin Flöser
Browse files
KWin uses kdelibs coding style.
parent
1a5b3b4b
Changes
379
Expand all
Hide whitespace changes
Inline
Side-by-side
activation.cpp
View file @
0a7e48f7
This diff is collapsed.
Click to expand it.
atoms.cpp
View file @
0a7e48f7
...
...
@@ -27,7 +27,7 @@ namespace KWin
{
Atoms
::
Atoms
()
{
{
const
int
max
=
50
;
Atom
*
atoms
[
max
];
...
...
@@ -84,41 +84,41 @@ Atoms::Atoms()
atoms
[
n
]
=
&
kde_system_tray_embedding
;
names
[
n
++
]
=
(
char
*
)
"_KDE_SYSTEM_TRAY_EMBEDDING"
;
atoms
[
n
]
=
&
net_wm_take_activity
;
names
[
n
++
]
=
(
char
*
)
"_NET_WM_TAKE_ACTIVITY"
;
atoms
[
n
]
=
&
net_wm_window_opacity
;
names
[
n
++
]
=
(
char
*
)
"_NET_WM_WINDOW_OPACITY"
;
Atom
fake
;
atoms
[
n
]
=
&
fake
;
names
[
n
++
]
=
(
char
*
)
"_DT_SM_WINDOW_INFO"
;
atoms
[
n
]
=
&
fake
;
names
[
n
++
]
=
(
char
*
)
"_MOTIF_WM_INFO"
;
// #172028
atoms
[
n
]
=
&
xdnd_aware
;
names
[
n
++
]
=
(
char
*
)
"XdndAware"
;
atoms
[
n
]
=
&
xdnd_position
;
names
[
n
++
]
=
(
char
*
)
"XdndPosition"
;
atoms
[
n
]
=
&
net_frame_extents
;
names
[
n
++
]
=
(
char
*
)
"_NET_FRAME_EXTENTS"
;
atoms
[
n
]
=
&
kde_net_wm_frame_strut
;
names
[
n
++
]
=
(
char
*
)
"_KDE_NET_WM_FRAME_STRUT"
;
atoms
[
n
]
=
&
net_wm_sync_request_counter
;
names
[
n
++
]
=
(
char
*
)
"_NET_WM_SYNC_REQUEST_COUNTER"
;
atoms
[
n
]
=
&
net_wm_sync_request
;
names
[
n
++
]
=
(
char
*
)
"_NET_WM_SYNC_REQUEST"
;
assert
(
n
<=
max
);
assert
(
n
<=
max
);
XInternAtoms
(
display
(),
names
,
n
,
false
,
atoms_return
);
for
(
int
i
=
0
;
i
<
n
;
i
++
)
XInternAtoms
(
display
(),
names
,
n
,
false
,
atoms_return
);
for
(
int
i
=
0
;
i
<
n
;
i
++
)
*
atoms
[
i
]
=
atoms_return
[
i
];
}
}
}
// namespace
atoms.h
View file @
0a7e48f7
...
...
@@ -29,38 +29,38 @@ namespace KWin
{
class
Atoms
{
public:
Atoms
();
{
public:
Atoms
();
Atom
kwin_running
;
Atom
activities
;
Atom
kwin_running
;
Atom
activities
;
Atom
wm_protocols
;
Atom
wm_delete_window
;
Atom
wm_take_focus
;
Atom
wm_change_state
;
Atom
wm_client_leader
;
Atom
wm_window_role
;
Atom
wm_state
;
Atom
sm_client_id
;
Atom
wm_protocols
;
Atom
wm_delete_window
;
Atom
wm_take_focus
;
Atom
wm_change_state
;
Atom
wm_client_leader
;
Atom
wm_window_role
;
Atom
wm_state
;
Atom
sm_client_id
;
Atom
motif_wm_hints
;
Atom
net_wm_context_help
;
Atom
net_wm_ping
;
Atom
kde_wm_change_state
;
Atom
net_wm_user_time
;
Atom
kde_net_wm_user_creation_time
;
Atom
kde_system_tray_embedding
;
Atom
net_wm_take_activity
;
Atom
net_wm_window_opacity
;
Atom
xdnd_aware
;
Atom
xdnd_position
;
Atom
net_frame_extents
;
Atom
kde_net_wm_frame_strut
;
Atom
net_wm_sync_request_counter
;
Atom
net_wm_sync_request
;
};
Atom
motif_wm_hints
;
Atom
net_wm_context_help
;
Atom
net_wm_ping
;
Atom
kde_wm_change_state
;
Atom
net_wm_user_time
;
Atom
kde_net_wm_user_creation_time
;
Atom
kde_system_tray_embedding
;
Atom
net_wm_take_activity
;
Atom
net_wm_window_opacity
;
Atom
xdnd_aware
;
Atom
xdnd_position
;
Atom
net_frame_extents
;
Atom
kde_net_wm_frame_strut
;
Atom
net_wm_sync_request_counter
;
Atom
net_wm_sync_request
;
};
extern
Atoms
*
atoms
;
...
...
bridge.cpp
View file @
0a7e48f7
...
...
@@ -29,155 +29,151 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
namespace
KWin
{
Bridge
::
Bridge
(
Client
*
cl
)
:
c
(
cl
)
{
}
Bridge
::
Bridge
(
Client
*
cl
)
:
c
(
cl
)
{
}
#define BRIDGE_HELPER( rettype, prototype, args1, args2, cst ) \
rettype Bridge::prototype ( args1 ) cst \
rettype Bridge::prototype ( args1 ) cst \
{ \
return c->prototype( args2 ); \
}
BRIDGE_HELPER
(
bool
,
isActive
,
,
,
const
)
BRIDGE_HELPER
(
bool
,
isCloseable
,
,
,
const
)
BRIDGE_HELPER
(
bool
,
isMaximizable
,
,
,
const
)
BRIDGE_HELPER
(
Bridge
::
MaximizeMode
,
maximizeMode
,
,
,
const
)
BRIDGE_HELPER
(
bool
,
isMinimizable
,
,
,
const
)
BRIDGE_HELPER
(
bool
,
providesContextHelp
,
,
,
const
)
BRIDGE_HELPER
(
int
,
desktop
,
,
,
const
)
BRIDGE_HELPER
(
bool
,
isModal
,
,
,
const
)
BRIDGE_HELPER
(
bool
,
isShadeable
,
,
,
const
)
BRIDGE_HELPER
(
bool
,
isShade
,
,
,
const
)
BRIDGE_HELPER
(
bool
,
keepAbove
,
,
,
const
)
BRIDGE_HELPER
(
bool
,
keepBelow
,
,
,
const
)
BRIDGE_HELPER
(
bool
,
isMovable
,
,
,
const
)
BRIDGE_HELPER
(
bool
,
isResizable
,
,
,
const
)
BRIDGE_HELPER
(
QString
,
caption
,
,
,
const
)
BRIDGE_HELPER
(
void
,
processMousePressEvent
,
QMouseEvent
*
e
,
e
,
)
BRIDGE_HELPER
(
QRect
,
geometry
,
,
,
const
)
BRIDGE_HELPER
(
void
,
closeWindow
,
,
,
)
BRIDGE_HELPER
(
void
,
maximize
,
MaximizeMode
m
,
m
,
)
BRIDGE_HELPER
(
void
,
minimize
,
,
,
)
BRIDGE_HELPER
(
void
,
showContextHelp
,
,
,
)
BRIDGE_HELPER
(
void
,
setDesktop
,
int
desktop
,
desktop
,
)
void
Bridge
::
setKeepAbove
(
bool
set
)
{
if
(
c
->
keepAbove
()
!=
set
)
c
->
workspace
()
->
performWindowOperation
(
c
,
KeepAboveOp
);
}
return c->prototype( args2 ); \
}
BRIDGE_HELPER
(
bool
,
isActive
,
,
,
const
)
BRIDGE_HELPER
(
bool
,
isCloseable
,
,
,
const
)
BRIDGE_HELPER
(
bool
,
isMaximizable
,
,
,
const
)
BRIDGE_HELPER
(
Bridge
::
MaximizeMode
,
maximizeMode
,
,
,
const
)
BRIDGE_HELPER
(
bool
,
isMinimizable
,
,
,
const
)
BRIDGE_HELPER
(
bool
,
providesContextHelp
,
,
,
const
)
BRIDGE_HELPER
(
int
,
desktop
,
,
,
const
)
BRIDGE_HELPER
(
bool
,
isModal
,
,
,
const
)
BRIDGE_HELPER
(
bool
,
isShadeable
,
,
,
const
)
BRIDGE_HELPER
(
bool
,
isShade
,
,
,
const
)
BRIDGE_HELPER
(
bool
,
keepAbove
,
,
,
const
)
BRIDGE_HELPER
(
bool
,
keepBelow
,
,
,
const
)
BRIDGE_HELPER
(
bool
,
isMovable
,
,
,
const
)
BRIDGE_HELPER
(
bool
,
isResizable
,
,
,
const
)
BRIDGE_HELPER
(
QString
,
caption
,
,
,
const
)
BRIDGE_HELPER
(
void
,
processMousePressEvent
,
QMouseEvent
*
e
,
e
,)
BRIDGE_HELPER
(
QRect
,
geometry
,
,
,
const
)
BRIDGE_HELPER
(
void
,
closeWindow
,
,
,
)
BRIDGE_HELPER
(
void
,
maximize
,
MaximizeMode
m
,
m
,)
BRIDGE_HELPER
(
void
,
minimize
,
,
,
)
BRIDGE_HELPER
(
void
,
showContextHelp
,
,
,
)
BRIDGE_HELPER
(
void
,
setDesktop
,
int
desktop
,
desktop
,)
void
Bridge
::
setKeepAbove
(
bool
set
)
{
if
(
c
->
keepAbove
()
!=
set
)
c
->
workspace
()
->
performWindowOperation
(
c
,
KeepAboveOp
);
}
void
Bridge
::
setKeepBelow
(
bool
set
)
{
if
(
c
->
keepBelow
()
!=
set
)
c
->
workspace
()
->
performWindowOperation
(
c
,
KeepBelowOp
);
}
void
Bridge
::
setKeepBelow
(
bool
set
)
{
if
(
c
->
keepBelow
()
!=
set
)
c
->
workspace
()
->
performWindowOperation
(
c
,
KeepBelowOp
);
}
NET
::
WindowType
Bridge
::
windowType
(
unsigned
long
supported_types
)
const
{
return
c
->
windowType
(
false
,
supported_types
);
}
NET
::
WindowType
Bridge
::
windowType
(
unsigned
long
supported_types
)
const
{
return
c
->
windowType
(
false
,
supported_types
);
}
QIcon
Bridge
::
icon
()
const
{
QIcon
ret
(
c
->
icon
());
ret
.
addPixmap
(
c
->
miniIcon
());
{
QIcon
ret
(
c
->
icon
());
ret
.
addPixmap
(
c
->
miniIcon
());
return
ret
;
}
}
bool
Bridge
::
isSetShade
()
const
{
{
return
c
->
shadeMode
()
!=
ShadeNone
;
}
}
void
Bridge
::
showWindowMenu
(
const
QPoint
&
p
)
{
c
->
workspace
()
->
showWindowMenu
(
p
,
c
);
}
void
Bridge
::
showWindowMenu
(
const
QPoint
&
p
)
{
c
->
workspace
()
->
showWindowMenu
(
p
,
c
);
}
void
Bridge
::
showWindowMenu
(
const
QRect
&
p
)
{
c
->
workspace
()
->
showWindowMenu
(
p
,
c
);
}
void
Bridge
::
showWindowMenu
(
const
QRect
&
p
)
{
c
->
workspace
()
->
showWindowMenu
(
p
,
c
);
}
void
Bridge
::
performWindowOperation
(
WindowOperation
op
)
{
c
->
workspace
()
->
performWindowOperation
(
c
,
op
);
}
void
Bridge
::
performWindowOperation
(
WindowOperation
op
)
{
c
->
workspace
()
->
performWindowOperation
(
c
,
op
);
}
void
Bridge
::
setMask
(
const
QRegion
&
r
,
int
mode
)
{
c
->
setMask
(
r
,
mode
);
}
void
Bridge
::
setMask
(
const
QRegion
&
r
,
int
mode
)
{
c
->
setMask
(
r
,
mode
);
}
bool
Bridge
::
isPreview
()
const
{
{
return
false
;
}
}
QRect
Bridge
::
iconGeometry
()
const
{
{
NETRect
r
=
c
->
info
->
iconGeometry
();
return
QRect
(
r
.
pos
.
x
,
r
.
pos
.
y
,
r
.
size
.
width
,
r
.
size
.
height
);
}
return
QRect
(
r
.
pos
.
x
,
r
.
pos
.
y
,
r
.
size
.
width
,
r
.
size
.
height
);
}
WId
Bridge
::
windowId
()
const
{
{
return
c
->
window
();
}
}
void
Bridge
::
titlebarDblClickOperation
()
{
c
->
workspace
()
->
performWindowOperation
(
c
,
options
->
operationTitlebarDblClick
());
}
{
c
->
workspace
()
->
performWindowOperation
(
c
,
options
->
operationTitlebarDblClick
());
}
void
Bridge
::
titlebarMouseWheelOperation
(
int
delta
)
{
c
->
performMouseCommand
(
options
->
operationTitlebarMouseWheel
(
delta
),
cursorPos
());
}
void
Bridge
::
titlebarMouseWheelOperation
(
int
delta
)
{
c
->
performMouseCommand
(
options
->
operationTitlebarMouseWheel
(
delta
),
cursorPos
());
}
void
Bridge
::
setShade
(
bool
set
)
{
c
->
setShade
(
set
?
ShadeNormal
:
ShadeNone
);
}
void
Bridge
::
setShade
(
bool
set
)
{
c
->
setShade
(
set
?
ShadeNormal
:
ShadeNone
);
}
int
Bridge
::
currentDesktop
()
const
{
{
return
c
->
workspace
()
->
currentDesktop
();
}
}
QWidget
*
Bridge
::
initialParentWidget
()
const
{
{
return
NULL
;
}
}
Qt
::
WFlags
Bridge
::
initialWFlags
()
const
{
{
return
0
;
}
}
QRegion
Bridge
::
unobscuredRegion
(
const
QRegion
&
r
)
const
{
QRegion
reg
(
r
);
QRegion
Bridge
::
unobscuredRegion
(
const
QRegion
&
r
)
const
{
QRegion
reg
(
r
);
const
ClientList
stacking_order
=
c
->
workspace
()
->
stackingOrder
();
int
pos
=
stacking_order
.
indexOf
(
c
);
int
pos
=
stacking_order
.
indexOf
(
c
);
++
pos
;
for
(;
pos
<
stacking_order
.
count
();
++
pos
)
{
if
(
!
stacking_order
[
pos
]
->
isShown
(
true
))
for
(;
pos
<
stacking_order
.
count
();
++
pos
)
{
if
(
!
stacking_order
[
pos
]
->
isShown
(
true
))
continue
;
// these don't obscure the window
if
(
c
->
isOnAllDesktops
())
{
if
(
!
stacking_order
[
pos
]
->
isOnCurrentDesktop
())
if
(
c
->
isOnAllDesktops
())
{
if
(
!
stacking_order
[
pos
]
->
isOnCurrentDesktop
())
continue
;
}
else
{
if
(
!
stacking_order
[
pos
]
->
isOnDesktop
(
c
->
desktop
()))
}
else
{
if
(
!
stacking_order
[
pos
]
->
isOnDesktop
(
c
->
desktop
()))
continue
;
}
}
/* the clients all have their mask-regions in local coords
so we have to translate them to a shared coord system
we choose ours */
...
...
@@ -186,121 +182,119 @@ QRegion Bridge::unobscuredRegion( const QRegion& r ) const
QRegion
creg
=
stacking_order
[
pos
]
->
mask
();
creg
.
translate
(
dx
,
dy
);
reg
-=
creg
;
if
(
reg
.
isEmpty
())
{
if
(
reg
.
isEmpty
())
{
// early out, we are completely obscured
break
;
}
}
return
reg
;
}
return
reg
;
}
void
Bridge
::
grabXServer
(
bool
grab
)
{
if
(
grab
)
void
Bridge
::
grabXServer
(
bool
grab
)
{
if
(
grab
)
KWin
::
grabXServer
();
else
KWin
::
ungrabXServer
();
}
}
bool
Bridge
::
compositingActive
()
const
{
{
return
c
->
workspace
()
->
compositingActive
();
}
}
QRect
Bridge
::
transparentRect
()
const
{
{
return
c
->
transparentRect
().
translated
(
-
c
->
decorationRect
().
topLeft
());
}
}
bool
Bridge
::
isClientGroupActive
()
{
if
(
c
->
clientGroup
()
)
{
if
(
c
->
clientGroup
())
return
c
->
clientGroup
()
->
containsActiveClient
();
return
isActive
();
}
}
QList
<
ClientGroupItem
>
Bridge
::
clientGroupItems
()
const
{
if
(
c
->
clientGroup
()
)
{
if
(
c
->
clientGroup
())
return
c
->
clientGroup
()
->
items
();
QList
<
ClientGroupItem
>
items
;
QIcon
icon
(
c
->
icon
()
);
icon
.
addPixmap
(
c
->
miniIcon
()
);
items
.
append
(
ClientGroupItem
(
c
->
caption
(),
icon
));
QIcon
icon
(
c
->
icon
());
icon
.
addPixmap
(
c
->
miniIcon
());
items
.
append
(
ClientGroupItem
(
c
->
caption
(),
icon
));
return
items
;
}
}
long
Bridge
::
itemId
(
int
index
)
{
if
(
!
c
->
clientGroup
()
)
long
Bridge
::
itemId
(
int
index
)
{
if
(
!
c
->
clientGroup
())
return
0
;
const
ClientList
list
=
c
->
clientGroup
()
->
clients
();
return
reinterpret_cast
<
long
>
(
list
.
at
(
index
));
}
return
reinterpret_cast
<
long
>
(
list
.
at
(
index
));
}
int
Bridge
::
visibleClientGroupItem
()
{
if
(
c
->
clientGroup
()
)
{
if
(
c
->
clientGroup
())
return
c
->
clientGroup
()
->
indexOfVisibleClient
();
return
0
;
}
}
void
Bridge
::
setVisibleClientGroupItem
(
int
index
)
{
if
(
c
->
clientGroup
()
)
c
->
clientGroup
()
->
setVisible
(
index
);
}
void
Bridge
::
setVisibleClientGroupItem
(
int
index
)
{
if
(
c
->
clientGroup
())
c
->
clientGroup
()
->
setVisible
(
index
);
}
void
Bridge
::
moveItemInClientGroup
(
int
index
,
int
before
)
{
if
(
c
->
clientGroup
()
)
c
->
clientGroup
()
->
move
(
index
,
before
);
}
void
Bridge
::
moveItemInClientGroup
(
int
index
,
int
before
)
{
if
(
c
->
clientGroup
())
c
->
clientGroup
()
->
move
(
index
,
before
);
}
void
Bridge
::
moveItemToClientGroup
(
long
itemId
,
int
before
)
{
Client
*
item
=
reinterpret_cast
<
Client
*>
(
itemId
);
if
(
!
c
->
workspace
()
->
hasClient
(
item
))
{
void
Bridge
::
moveItemToClientGroup
(
long
itemId
,
int
before
)
{
Client
*
item
=
reinterpret_cast
<
Client
*>
(
itemId
);
if
(
!
c
->
workspace
()
->
hasClient
(
item
))
{
kWarning
(
1212
)
<<
"****** ARBITRARY CODE EXECUTION ATTEMPT DETECTED ******"
;
return
;
}
if
(
item
->
clientGroup
()
)
c
->
workspace
()
->
moveItemToClientGroup
(
item
->
clientGroup
(),
item
->
clientGroup
()
->
indexOfClient
(
item
),
c
->
clientGroup
(),
before
);
}
if
(
item
->
clientGroup
())
c
->
workspace
()
->
moveItemToClientGroup
(
item
->
clientGroup
(),
item
->
clientGroup
()
->
indexOfClient
(
item
),
c
->
clientGroup
(),
before
);
}
void
Bridge
::
removeFromClientGroup
(
int
index
,
const
QRect
&
newGeom
)
{
if
(
c
->
clientGroup
()
)
c
->
clientGroup
()
->
remove
(
index
,
newGeom
);
}
void
Bridge
::
removeFromClientGroup
(
int
index
,
const
QRect
&
newGeom
)
{
if
(
c
->
clientGroup
())
c
->
clientGroup
()
->
remove
(
index
,
newGeom
);
}
void
Bridge
::
closeClientGroupItem
(
int
index
)
{
if
(
!
c
->
clientGroup
()
)
void
Bridge
::
closeClientGroupItem
(
int
index
)
{
if
(
!
c
->
clientGroup
())
return
;
const
ClientList
list
=
c
->
clientGroup
()
->
clients
();
if
(
index
>=
0
||
index
<=
list
.
count
()
)
list
.
at
(
index
)
->
closeWindow
();
}
if
(
index
>=
0
||
index
<=
list
.
count
())
list
.
at
(
index
)
->
closeWindow
();
}
void
Bridge
::
closeAllInClientGroup
()
{
if
(
c
->
clientGroup
()
)
{
if
(
c
->
clientGroup
())
c
->
clientGroup
()
->
closeAll
();
}
}
void
Bridge
::
displayClientMenu
(
int
index
,
const
QPoint
&
pos
)
{
if
(
c
->
clientGroup
()
)
c
->
clientGroup
()
->
displayClientMenu
(
index
,
pos
);
}
void
Bridge
::
displayClientMenu
(
int
index
,
const
QPoint
&
pos
)
{
if
(
c
->
clientGroup
())
c
->
clientGroup
()
->
displayClientMenu
(
index
,
pos
);
}
KDecoration
::
WindowOperation
Bridge
::
buttonToWindowOperation
(
Qt
::
MouseButtons
button
)
{
return
c
->
mouseButtonToWindowOperation
(
button
);
}
KDecoration
::
WindowOperation
Bridge
::
buttonToWindowOperation
(
Qt
::
MouseButtons
button
)
{
return
c
->
mouseButtonToWindowOperation
(
button
);
}
}
// namespace
bridge.h
View file @
0a7e48f7
...
...
@@ -29,72 +29,72 @@ namespace KWin
class
Client
;
class
Bridge
:
public
KDecorationBridgeUnstable
{
public:
Bridge
(
Client
*
cl
);
virtual
bool
isActive
()
const
;
virtual
bool
isCloseable
()
const
;
virtual
bool
isMaximizable
()
const
;
virtual
MaximizeMode
maximizeMode
()
const
;
virtual
bool
isMinimizable
()
const
;
virtual
bool
providesContextHelp
()
const
;
virtual
int
desktop
()
const
;
virtual
bool
isModal
()
const
;
virtual
bool
isShadeable
()
const
;
virtual
bool
isShade
()
const
;
virtual
bool
isSetShade
()
const
;
virtual
bool
keepAbove
()
const
;
virtual
bool
keepBelow
()
const
;
virtual
bool
isMovable
()
const
;
virtual
bool
isResizable
()
const
;
virtual
NET
::
WindowType
windowType
(
unsigned
long
supported_types
)
const
;
virtual
QIcon
icon
()
const
;
virtual
QString
caption
()
const
;
virtual
void
processMousePressEvent
(
QMouseEvent
*
);
virtual
void
showWindowMenu
(
const
QPoint
&
);
virtual
void
showWindowMenu
(
const
QRect
&
);
virtual
void
performWindowOperation
(
WindowOperation
);
virtual
void
setMask
(
const
QRegion
&
,
int
);
virtual
bool
isPreview
()
const
;
virtual
QRect
geometry
()
const
;
virtual
QRect
iconGeometry
()
const
;