Commit graph

10072 commits

Author SHA1 Message Date
Martin Gräßlin
4a0a4bc27e Split out handling of focus chain into an own class
The new class FocusChain manages two different kind of focus chains.
First of all there is a most recently used focus chain which is primarily
used for TabBox.

Then there is one focus chain per virtual desktop. These chains are used
to determine which Client needs to be activated when e.g. switching to a
virtual desktop.

The individual chains are implemented as a simple QList of Client* with
the most recently used Client as the last element. That way one can see
it as a LIFO like structure.

The desktop focus chains are internally represented as a hash with the id
of the virtual desktop as the key and a list as described as the value.

FocusChain is a singleton which provides some methods to manipulate the
chains and to get a specific Client for a task (e.g. TabBox).

While splitting out the code some unused code inside TabBox got removed
as well as some activities related code (windows cannot be moved while
switching activities).

REVIEW: 107494
2013-02-21 09:57:46 +01:00
Martin Gräßlin
840b952096 Merge branch 'KDE/4.10' 2013-02-20 13:03:29 +01:00
Martin Gräßlin
34bb1a790f Fix layout issues of Desktop Change OSD
* no more binding loops - yeah for anchoring
* properly update sizes when switching screens
* properly handle case layout indicator enabled/disabled
* connect to desktop changed and reset desktop model
* set a maximum width/height of 0.8 of screen

Most interesting change is the moving of
visible = true;
to the beginning of the block which updates the layout. Without that
all the changes are ignored resulting in the incorrect size on screen
change.

The disadvantage of that is that the OSD is shown before the layout is
adjusted. But it's considerable minor given that it should be just one
frame.

BUG: 312728
BUG: 312727
BUG: 305737
FIXED-IN: 4.10.1
REVIEW: 108945
2013-02-20 13:01:43 +01:00
Martin Gräßlin
f7de24fbb6 Merge branch 'KDE/4.10' 2013-02-20 08:07:30 +01:00
Martin Gräßlin
b8dcc04373 Do not abort EGL backend creation if EGL_NV_post_sub_buffer isn't supported
In case the extension is not present eglQuerySurface returns EGL_FALSE
when querying for EGL_POST_SUB_BUFFER_SUPPORTED_NV and sets an
EGL_BAD_ATTRIBUTE error state. If this is the case it's not an error we
should abort on, but one we should ignore as it's the same as extension
not supported.

BUG: 315114
FIXED: 4.10.1
2013-02-20 08:03:02 +01:00
Thomas Lübking
40649cd1e0 Merge branch 'KDE/4.10' 2013-02-18 22:46:59 +01:00
Thomas Lübking
7255352e62 fix restacking ... code
- don't cast Window's to pointers for no apparent reason
  bug introduced with ac0f8bfb24403168199027a77bba0107bc6d42e1
- no stupid java style iterators, we've stl everywhere
- postfix in a for loop is a bug. period. ;-)

BUG: 313145
FIXED-IN: 4.10.1
2013-02-18 22:18:02 +01:00
Thomas Lübking
769955dfb8 ignore non current tabbed and on different activities clients
BUG: 313379
REVIEW: 108932
FIXED-IN: 4.11
2013-02-18 21:55:14 +01:00
Thomas Lübking
694d1a83b3 Permit maximization of windows with fixed position
A window can be "maximized" despite it's position is fixed.
Most obvioulsy for a corresponding of "0", but also in other
cases. The window can still be resized, some size is the
maximum one and there's no reason to prevent the shortcut of
this state.

BUG: 314392
REVIEW: 108789
FIXED-IN: 4.11
2013-02-18 21:55:14 +01:00
Thomas Lübking
32efd0f1e0 add stricter heuristics to initial maximization
instead of just checking whether the decorated client will be bigger
than the workarea and take that as reason to maximize it, we will not do
so if it's smaller than the full are and the managed client bigger than
the screen (because it makes sense for the user to move it around and the
requested dimension is out of what the client could have stored when closing
maximized)

REVIEW: 108705
2013-02-18 21:55:14 +01:00
Thomas Lübking
8129451ab3 re-settle slideBack effect to stackingOrderChanged
BUG: 294490
FIXED-IN: 4.11
2013-02-18 21:55:14 +01:00
Thomas Lübking
48128f268c improve multihead situation
prevents the focus being passed to the other head
manages OpenGLIsUnsafe setting per head

CCBUG: 256242
BUG: 282677
REVIEW: 107853
FIXED-IN: 4.11
2013-02-18 21:55:13 +01:00
Martin Gräßlin
6ddcbed314 Fix typo in Plastik QML 2013-02-18 09:47:11 +01:00
Martin Gräßlin
74097e7d29 Port Client's decoration resize extend input window to XCB
Using Xcb::Window to manage the xcb_window_t and simplify the code - no
longer need to check whether the input_window is valid before calling e.g.
map, as that's handled in Xcb::Window.

One XLib usage for setting cursor is still present. This will be ported
once all the QCursor::handle() get removed.

REVIEW: 108771
2013-02-18 09:44:50 +01:00
Martin Gräßlin
3d5f962566 XRender implementation for ScreenEdges Glow Effect
More or less straight forward port from OpenGL to XRender. There is one small difference:
the corners are not upscaled.

REVIEW: 108939
2013-02-18 09:21:43 +01:00
Martin Gräßlin
25bb1482e3 Adding NOTIFY signals to desktopGrid(Size/Width/Height)
Since the introduction of VirtualDesktopManager we do have a signal
emitted when the desktop layout changes which we can use as NOTIFY for
the desktopGrid properties.

REVIEW: 108953
2013-02-18 09:19:46 +01:00
Martin Gräßlin
3389d68c50 Print useful information for a Client in scripting
Reusing the debug information already specified for QDebug.

FEATURE: 314402
FIXED-IN: 4.11
REVIEW: 108959
2013-02-18 09:16:31 +01:00
Luca Beltrame
2209b4851a Merge remote-tracking branch 'origin/KDE/4.10'
Conflicts [scripty translations]:
	plasma/generic/applets/batterymonitor/metadata.desktop
	plasma/generic/applets/lock_logout/metadata.desktop
2013-02-15 00:04:53 +01:00
Weng Xuetian
ae7474a6c4 fix some typo in tabbox qml
REVIEW: 108809
2013-02-14 15:38:50 -05:00
Weng Xuetian
b2ee6769de fix Qt 4.7 warning for KWin tabbox qml
improt Qt 4.7 is depracted by import QtQuick 1.0

REVIEW: 108966
2013-02-14 15:35:32 -05:00
Martin Gräßlin
d0d43046d8 Use XRenderPicture instead of QPixmap in TrackMouse Effect
At the same time porting from XLib to XCB.

REVIEW: 108919
2013-02-14 14:22:57 +01:00
Martin Gräßlin
e72fec3110 Cache the xcb_connection_t* in connection()
This is for two reasons:
1. Fixes crash on tear-down when XGetXCBConnection returns junk
2. In Qt5 getting the connection is not cheap enough for our uses

REVIEW: 108826
2013-02-14 14:21:11 +01:00
Martin Gräßlin
f45ade7785 Port preMultiply of color to xcb_render
Method returns a xcb_render_color_t instead of an XRenderColor.

With this change kwinxrenderutils is XLib free!
2013-02-14 14:20:27 +01:00
Martin Gräßlin
881664b42e Port helper function createPicture to XCB
Uses query_pict_formats to retrieve all formats and iterates over them to
find the one matching the requested depth. Results are now cached in an
QHash with the depth as key instead of an array using the depth as index.
2013-02-14 14:20:27 +01:00
Martin Gräßlin
24c681448a Use XCB types in XRenderPicture API
Usage of xcb_pixmap_t and xcb_render_picture_t
2013-02-14 14:20:27 +01:00
Martin Gräßlin
7faede41c7 Use PutImage to convert QPixmap to XRenderPicture
In case of native graphics system nothing is changed for the moment - the
X11Pixmap-QPixmap bridge is continued to be used.

But in case of graphics system raster (or Qt5) this relationship is no
longer used. Instead the QPixmap is converted to a QImage and the image
bits are put into the created X11Pixmap for this XRenderPicture.

Note: Qt5 uses shm to transfer image data to drawables. This seems
unsuited in this case as it's only a one time transformation.

For Qt5 the native pixmap block needs to be removed and the ctor might be
changed to taking an QImage as argument to make more clear that there is
no mapping from QPixmap to X11Pixmap.
2013-02-14 14:20:27 +01:00
Martin Gräßlin
f20ec15053 Port xRenderOffscreenTarget away from QPixmap
Instead of having a pointer to a QPixmap the offscreen target holds an
xcb_render_picture_t. To make this possible in SceneWindow the tempPixmap
is changed from a QPixmap* to a XRenderPicture*. QPixmap was only used
for convenience.

ScreenShot Effect as only user of the offscreen target is adjusted but
as it needs a QImage, still uses a QPixmap wrapper.
2013-02-14 14:20:27 +01:00
Martin Gräßlin
2dcbbd6a3a Move detection for defaultDepth to xcbutils 2013-02-14 14:20:27 +01:00
Martin Gräßlin
a1ac6df20e Move XRender based rendering of unstyled EffectFrame into scene_xrender
This follows how it is done for OpenGL where the renderRoundBox() got
dropped some time ago.

New implementation implements the box with round corners using xrender
directly instead of using a QPainter on a QPixmap.
2013-02-14 14:20:26 +01:00
Martin Gräßlin
368de6842a Wrapper class to create an xcb_xfixes_region_t from a QRegion
Replaces the previously existing method to convert a QRegion which did
not take care of freeing the region again.

Usages are ported over.
2013-02-14 14:20:26 +01:00
Martin Gräßlin
97ba1ebd1e Use KConfigXT in KWin::Options
For the time being the current design of Options is more or less kept to
not have to adjust KWin code all over the place. Also for some parts the
generated class from KConfigXT cannot be used due to inter-settings
dependencies defined in the setters.

Options now holds a pointer to a Settings object which is generated from
KConfigXT and uses it to read the default values and the individual
settings. This means the static default value methods are dropped and the
variables are initialized with a normal default value (all int 0, all
boolean false and so on) in the initializer list. Afterwards the values
are set to the correct default value through KConfigXT.

So far for the first step only Windows category is using KConfigXT.

REVIEW: 108572
2013-02-14 08:29:03 +01:00
Martin Gräßlin
e8887aa620 Drop TabBoxAlternative group from kconfigxt
Apparently it's not allowed to have two groups with the same entry names.
Parameterized groups are still a "TODO" and a group must have a name.
Looks like we won't be able to use KConfigXT for TabBox.
2013-02-14 08:23:35 +01:00
Martin Gräßlin
45042010e2 Drop the tools directory from KWin
Tried to compile it and at least decobenchmark does not compile due to
missing include to QObject in header file using QObject. I don't know
how long that is a requirement, but it shows that nobody has tried to
use it for quite some time.

REVIEW: 108792
2013-02-14 08:17:52 +01:00
Martin Gräßlin
8205adcac3 Export Toplevel to KWin::Scripts
Without the scripting system is not able to handle signals defined on
Toplevel instead of Client.

REVIEW: 108807
2013-02-14 08:16:19 +01:00
Martin Gräßlin
05541740ac Don't activate screen edge actions when moving a Client
This only results in problems if e.g. Desktop Grid is activated when
trying to quick tile a window.

REVIEW: 108940
2013-02-14 08:14:01 +01:00
Luca Beltrame
f0cdfefd1c Merge remote-tracking branch 'origin/KDE/4.10'
You don't need to cherry-pick if you find a conflict in a .desktop file
made by Scripty.

Just use git checkout --ours <path to .desktop file> and then git add
<path to .desktop file>.

Thomas, I picked the versions from master for these conflicts, please
review that I did not mess up anything.

CCMAIL: thomas.luebking@gmail.com

Conflicts:
	kwin/layers.cpp
	kwin/screenedge.cpp
	kwin/workspace.h
	plasma/generic/applets/batterymonitor/metadata.desktop
	plasma/generic/applets/lock_logout/metadata.desktop
2013-02-13 07:43:32 +01:00
Script Kiddy
0bd6e413b2 SVN_SILENT made messages (.desktop file) 2013-02-13 00:36:34 +01:00
Thomas Lübking
e796399cd4 restore inputfocus after assigning window shortcut
BUG: 314760
FIXED-IN: 4.10.1
REVIEW: 108887
(cherry picked from commit e71774897d092327b6d860353658fdaca79f7d0f)
2013-02-12 22:38:47 +01:00
Thomas Lübking
c395d6e66c fix mouse button order
X counts the middle button as 2 and right as 3, Qt as 4 and 2 resp. the flags
... we shall at least match our GUI ;-)

BUG: 314756
FIXED-IN: 4.10.1
REVIEW: 108883
2013-02-12 21:59:22 +01:00
Thomas Lübking
f5744fa224 catch releases without presses
happens when the polling misses the press when doing more
important things

also shortcut buttons == oldButtons

BUG: 314762
FIXED-IN: 4.10.1
REVIEW: 108883
2013-02-12 21:59:22 +01:00
Thomas Lübking
004bdee7a2 do not try to raise possible panel proxies
but drop screenedges below the supportWindow instead
that's why it exists, that's deterministic, that's faster

includes adaption to new screenedge and xcb invocation (compared to 4.10)

BUG: 314625
FIXED-IN: 4.10.1
REVIEW: 108867
2013-02-12 21:58:46 +01:00
Thomas Lübking
b233288439 fix mouse button order
X counts the middle button as 2 and right as 3, Qt as 4 and 2 resp. the flags
... we shall at least match our GUI ;-)

BUG: 314756
FIXED-IN: 4.10.1
REVIEW: 108883
2013-02-12 21:16:35 +01:00
Thomas Lübking
e36e5efab8 catch releases without presses
happens when the polling misses the press when doing more
important things

also shortcut buttons == oldButtons

BUG: 314762
FIXED-IN: 4.10.1
REVIEW: 108883
2013-02-12 21:16:29 +01:00
Thomas Lübking
199f14d578 do not try to raise possible panel proxies
but drop screenedges below the supportWindow instead
that's why it exists, that's deterministic, that's faster

BUG: 314625
FIXED-IN: 4.10.1
REVIEW: 108867
2013-02-12 21:16:01 +01:00
Thomas Lübking
c016589fcd Try to keep the labels in the expanded geometry
and ensure to repaint labels for very tiny windows
Also move to LayerRepaints

BUG: 278137
FIXED-IN: 4.10.1
REVIEW: 108676
(cherry picked from commit 1365f04435f0bbbc74301988b778f7fdf1ad4fd8)
2013-02-12 21:15:55 +01:00
Thomas Lübking
1cc5c2ff3f react on screenCountChanged to re-validate lists
includes fixing commit 1ac2f407c67c5740fb79cb11b610814a056b3268

BUG: 314409
REVIEW: 108775
FIXED-IN: 4.10.1
(cherry picked from commit e4ef2f072336a59039b1372266e4a5ab05d29cc0)
2013-02-12 21:15:37 +01:00
Thomas Lübking
b71d686a19 fix ElectricBorder[no S] kcfg
REVIEW: 108880
2013-02-12 20:59:47 +01:00
Thomas Lübking
06c725e685 port mouseclick to xcb using a tristrip
REVIEW: 108879
2013-02-12 20:59:47 +01:00
Thomas Lübking
839ac0ddeb fix restacking ... code
- don't cast Window's to pointers for no apparent reason
bug introduced with ac0f8bfb24403168199027a77bba0107bc6d42e1
- no stupid java style iterators, we've stl everywhere
- postfix in a for loop is a bug. period. ;-)

BUG: 313145
REVIEW: 108864
FIXE-IN: 4.10.1
2013-02-12 20:59:46 +01:00
Thomas Lübking
036794e7de restore inputfocus after assigning window shortcut
BUG: 314760
FIXED-IN: 4.10.1
REVIEW: 108887
2013-02-12 20:50:27 +01:00