Commit graph

13371 commits

Author SHA1 Message Date
Martin Gräßlin
f2bcccedf4 [wayland] Fix typo in 2ff903e 2015-05-20 08:57:51 +02:00
Martin Gräßlin
2ff903e8b3 [wayland] Sync ShellClient's geometry with internal QWindow's geometry
Update geometry when the referenced internal QWindow changes position.
This makes the close button in PresentWindows work.
2015-05-20 08:27:48 +02:00
Thomas Lübking
75bd798ad9 Merge branch 'Plasma/5.3' 2015-05-19 22:52:52 +02:00
Thomas Lübking
eb789e43e3 Show Desktop: activateNextClient prefers desktop
othrwise closing a keepabove or desktop group
window would activate some random window and break
the state as a side-effect

REVIEW: 123783
CCBUG: 346837
CCBUG: 346933
CCBUG: 347212
2015-05-19 22:09:26 +02:00
Thomas Lübking
43e3b7db28 Show Desktop: break state with activation (only)
... not them becoming visible.
Latter doesn't work for most cases (unminimizing)
for obvious reasons (they're not minimized) and
when a new window is mapped, the focus stealing
prevention seems a good filter
(if it's not good enough to gain the focus,
it's not good enough to break the state either)

REVIEW: 123783
CCBUG: 346837
CCBUG: 346933
CCBUG: 347212
2015-05-19 22:07:58 +02:00
Thomas Lübking
a16a489a43 Show Desktop: keep desktop group visible
Windows that "belong" to the desktop are
kept visible and do no break the state on
activation/mapping

REVIEW: 123783
CCBUG: 346837
CCBUG: 346933
CCBUG: 347212
2015-05-19 22:06:48 +02:00
Thomas Lübking
f3b69b0ed0 Showing Desktop: keep docks visible
REVIEW: 123783
BUG: 346933
BUG: 347212
CCBUG: 346837
FIXED-IN: 5.3.1
2015-05-19 22:01:02 +02:00
Martin Gräßlin
6581bc62a3 [drm] Fix KConfigGroup resolution for edid overwrite
If one of the edid group identifiers cannot be used as it's empty,
replace it by "unknown".

REVIEW: 123848
2015-05-19 15:55:53 +02:00
Martin Gräßlin
9d580a628f Use screen name as additional information in UseractionsMenu
New format: Screen 1 (HDMI1)

REVIEW: 123849
2015-05-19 09:53:14 +02:00
Martin Gräßlin
f30eb50756 [drm] Implement Screens::refreshRate 2015-05-19 09:49:37 +02:00
Martin Gräßlin
f5d123d61e [drm] Implement Screens::name
As name of screen we use the information passed to the OutputInterface:
a combination of manufacturer and model name.
2015-05-19 09:35:57 +02:00
Martin Gräßlin
3129f7d698 Add more information about Screens to supportInformation
Now that we have also a name and the refresh rate it makes sense to
add a grouping by screen and print out that information.
2015-05-19 09:19:45 +02:00
Martin Gräßlin
e904e4fd32 Silence unused variable warnings in Screens 2015-05-19 08:15:30 +02:00
Martin Gräßlin
7d152991c7 [wayland] ShellClient can reference an internal QWindow
If the ShellClient got created for a Qt internal window, we try to
find the QWindow and if we get one, we use the geometry directly as
it got set by KWin in the first place.

Also a windowId() is added to ShellClient which can be used by the
effect system to find an EffectWindow. If it's an internal QWindow
we just use that window id. For other clients we still need some
smart solution.
2015-05-18 15:31:41 +02:00
Martin Gräßlin
31cc2628cc [wayland] Reuse position when size of a ShellClient changes
Means the window is not always reset to (0,0) when the size changes.
2015-05-18 15:31:40 +02:00
Martin Gräßlin
74ae2f503e [wayland] Flush QtWaylands wl_display and KWin's wayland server when processing events
QtWayland and mesa might dead lock KWin if we start rendering a QWindow
before Qt/Mesa got the last frame callback. They perform blocking wayland
event reading on the main gui thread which makes it impossible for KWin
to do the compositing and send the callback.

To workaround this problem we fake a frameRendered directly after each
damage event for a Qt internal window. Unfortunately this is not yet
completely sufficient, thus we also need to ensure that the wayland
events are processed before any events are processed which would cause
a repaint and block. Thus we first flush QtWayland's wl_display and then
our Server connection. If there were any damage events we can be sure
that the frameRendered is sent before Qt attempts to render.
2015-05-18 15:31:40 +02:00
Martin Gräßlin
29c2ae57e0 [wayland] Use a dummy window for QtWayland's popup window handling
QtWayland only creates popup windows if they have a parent QWindow or
if there is any window which had input. It's not enough to fake an
enter, it needs to be either a pointer button press or key press.

As KWin's useraction menu doesn't have a parent and we most likely
never send a pointer press to any QWindow it doesn't get shown. To
circumvent this we create a dummy window and fake a button press/release
on the window. After that Qt is tricked into believing there's a parent
window and shows the popup.

Faking the input is only done with at least Qt 5.5 as QtWayland crashes
on pointer event without a keymap being installed. As KWin does not yet
send keymaps we better disable the dangerous code path. With Qt 5.5 the
crash condition is fixed.
2015-05-18 15:31:40 +02:00
Martin Gräßlin
3f94a2afc7 [wayland] Ensure QWindowSystemInterface::sendWindowSystemEvents gets called in EventDispatcher
KWin used the wrong event dispatcher: QEventDispatcherUNIX insted of
QUnixEventDispatcherQPA. This caused QWindow related events never to
be send to their destination. Which is one of the reasons why KWin's
own windows are not shown at all.

As we cannot easily use QUnixEventDispatcherQPA we do the same as
that class. Inherit from QEventDispatcherUNIX and call into
QWindowSystemInterface::sendWindowSystemEvents.
2015-05-18 15:31:40 +02:00
Martin Gräßlin
4a671fbf98 [wayland] Don't handle ShellSurface created signals till Workspace is ready
Similar to Surface: we ignore till we are all ready to go.
2015-05-18 15:31:40 +02:00
Martin Gräßlin
a9649885ed [wayland] Disable Qt's client side decoration for KWin
KWin's own windows don't use decorations, so we don't want Qt's
decos either.
2015-05-18 15:31:39 +02:00
Martin Gräßlin
0853445dce Don't pass pointer focus to a Toplevel which is not yet ready for painting 2015-05-18 15:30:10 +02:00
Martin Gräßlin
0dda7b3f94 Drop Client::m_frameWrapper workaround for reparenting deco
No longer used, so we can just drop it.

Thanks to QtWayland for emitting a warning, which made me find this
useless code.
2015-05-18 08:01:33 +02:00
Martin Gräßlin
30e6ae34d7 Delay desktopPresenceChanged in EffectsHandlerImpl instead of Workspace
The signal might be emited by Workspace just before a Client gets
destroyed. In that case the argument carried by the queued event is no
longer valid and causes problems. In EffectsHandlerImpl we can queue
it without problems as the EffectWindow also stays valid if the Client
gets destroyed. The referenced Deleted gets destroyed with a deleteLater,
thus will be after the signal is emitted.

BUG: 347490
REVIEW: 123729
2015-05-18 08:01:33 +02:00
Thomas Lübking
e42c874859 Merge branch 'Plasma/5.3' 2015-05-17 22:23:27 +02:00
Thomas Lübking
e6176ffc02 fix CM reselection
only return early if we cannot create a
selectionwatcher, otherwise the claiming
code turns unreachable after the creation
of cm_selection

BUG: 347813
REVIEW: 123826
2015-05-17 22:13:25 +02:00
Thomas Lübking
0529d0b787 use mode based freq calc on all drivers 2015-05-15 23:55:28 +02:00
Thomas Lübking
f79cdc6b33 fix building w/o EGL better
"!VARIABLE" does not what you think
CMake syntax is weird ;-)

http://www.cmake.org/cmake/help/v3.0/command/if.html#command:if
http://www.cmake.org/pipermail/cmake/2011-November/047239.html
2015-05-15 23:55:28 +02:00
Thomas Lübking
8855f47f34 lazy setting of xbc properties on qApp
just a wild guess - the crashes showed up
somewhen after the early setting of the property/
X11Info access - if this indeed is the cause, they
should disappear or only appear after actually using
the detect button. We'll see.

CCBUG: 346748
REVIEW: 123777
2015-05-15 23:55:28 +02:00
Thomas Lübking
8ba16371e7 stall wobbling while screen is transformed
transformed screens prevent hardware clipping
leading through filtering subquads
This requires to subquad in the painting pass
what is not supported for non rectangular
qauds ands presently aborts (in debug builds)
if any quad is transformed (as by eg. the wobbling)

REVIEW: 123733
BUG: 338972
2015-05-15 23:55:28 +02:00
Thomas Lübking
538ff0c8aa ignore elevation list while screen is locked
elevated windows would appear above the locker
pot. leaking information

BUG: 347466
2015-05-15 23:55:28 +02:00
Thomas Lübking
3158e987fa prefer query Screens::refreshRate()
ScreenInfo::rate is reporting 50Hz (on at least nvidia)
... AGAIN! * sigh*

In addition we check for __GL_SYNC_DISPLAY_DEVICE to pick
the rate of the screen that the driver will actually sync to
(hopefully...)

The patch is limited to nvidia systems for 5.3, applied everywhere
in master (ie. will be in 5.4 unless there's some problem)

BUG: 347360
REVIEW: 123693
2015-05-15 23:55:27 +02:00
Thomas Lübking
3597959c0e add Screens::name(int screen); STUB but for XRandr
required to compare __GL_SYNC_DISPLAY_DEVICE and
later on to assign windows to an output rather than
a screen number
2015-05-15 23:55:27 +02:00
Thomas Lübking
2d6df416b6 add OutputInfo class to obtain output names 2015-05-15 23:55:27 +02:00
Thomas Lübking
c7f13c7266 add refreshRate to Screens. STUB but for XRandr!
the randr refreshrate is calculated from the current mode
2015-05-15 23:55:27 +02:00
Thomas Lübking
0a3155972b forward resource modes next to crtcs
modes will be required for proper refreshrate detection
2015-05-15 23:55:27 +02:00
Thomas Lübking
c56d64b837 desk grid: do not recreate DesktopButtonsViews
Same issue as with present windows closers: qml is slow
Interestingly "hide" means "hide" here and there're also
no visual artifacts.

BUG: 347339
REVIEW: 123668
2015-05-15 23:55:27 +02:00
Thomas Lübking
b3bd9ea144 make switchWindow FROM stickies act on current VD
it's probably the user expectation and few windows
are on all desktops

BUG: 331512
REVIEW: 123640
2015-05-15 23:55:26 +02:00
Thomas Lübking
77047aa555 updateXTime before sending a takeFocus message
old timestamps confuse clients

BUG: 347153
REVIEW: 123639
2015-05-15 23:55:26 +02:00
Thomas Lübking
0da58680fc window aperture always needs to cancel
even if the window is invisible
fade out instead of NOOP or "restorage"

BUG: 347174
REVIEW: 123636
2015-05-15 23:55:26 +02:00
Thomas Lübking
0508528461 # This is a combination of 2 commits.
# The first commit's message is:

do not switch desktop on resizing windows

REVIEW: 123599

# The 2nd commit message will be skipped:

#	fix screenedge flipping merge
2015-05-15 23:55:26 +02:00
Thomas Lübking
7a6ee1c7bb break desktopshowing state from cover & flipswitch
REVIEW: 123550
CCBUG: 346837
2015-05-15 23:55:26 +02:00
Thomas Lübking
cfa1d612fe Prefer singleton transient leader on activateNext
instead of "just" the direct transient.

Reason is that many windows set dialogs transient
for an entire group (eg. all their document windows)

If there's only one window, that is equivalent to choosing
the direct transient leader.

Originally I wanted to allow this for any amount of
leaders and picked the first one, but  that means if
you open 2 kwrite windows (from one PID!) and an
open dialog for kwrite #2 and close the latter,
the focus would be passed to kwrite #1

-> The focus chain is the better choice here.
(One could look up all leaders in the focus chain
OR the stack and use the most recent/top one,
but that's probably voodoo)

REVIEW: 123691
CCBUG: 347437
2015-05-15 23:55:26 +02:00
Thomas Lübking
87a3d01a75 lazy setting of xbc properties on qApp
just a wild guess - the crashes showed up
somewhen after the early setting of the property/
X11Info access - if this indeed is the cause, they
should disappear or only appear after actually using
the detect button. We'll see.

CCBUG: 346748
REVIEW: 123777
2015-05-15 22:02:52 +02:00
Thomas Lübking
82e0601af9 stall wobbling while screen is transformed
transformed screens prevent hardware clipping
leading through filtering subquads
This requires to subquad in the painting pass
what is not supported for non rectangular
qauds ands presently aborts (in debug builds)
if any quad is transformed (as by eg. the wobbling)

REVIEW: 123733
BUG: 338972
2015-05-15 22:02:47 +02:00
Thomas Lübking
89195c7e83 ignore elevation list while screen is locked
elevated windows would appear above the locker
pot. leaking information

BUG: 347466
2015-05-15 22:02:39 +02:00
Thomas Lübking
c08038e0a6 prefer query Screens::refreshRate()
ScreenInfo::rate is reporting 50Hz (on at least nvidia)
... AGAIN! * sigh*

In addition we check for __GL_SYNC_DISPLAY_DEVICE to pick
the rate of the screen that the driver will actually sync to
(hopefully...)

The patch is limited to nvidia systems for 5.3, applied everywhere
in master (ie. will be in 5.4 unless there's some problem)

BUG: 347360
REVIEW: 123693
2015-05-15 22:02:39 +02:00
Thomas Lübking
5779e6844d add Screens::name(int screen); STUB but for XRandr
required to compare __GL_SYNC_DISPLAY_DEVICE and
later on to assign windows to an output rather than
a screen number
2015-05-15 21:59:44 +02:00
Thomas Lübking
b85d5666c1 add OutputInfo class to obtain output names 2015-05-15 21:59:38 +02:00
Thomas Lübking
03ab846da8 add refreshRate to Screens. STUB but for XRandr!
the randr refreshrate is calculated from the current mode
2015-05-15 21:59:36 +02:00
Thomas Lübking
f916cb1aa5 forward resource modes next to crtcs
modes will be required for proper refreshrate detection
2015-05-15 21:59:08 +02:00