333 Commits

Author SHA1 Message Date
Eike Hein
433b6794fe Add Qt::Dialog to default flags to make QXcbWindow::isTransient() happy.
Panel popup dialogs along with other applications of Plasma::Dialog
(e.g. Kicker's submenus) currently don't correctly set WM_TRANSIENT_FOR
to the id of their parent window on X11. This causes them to interact
badly with auto-hide panels which do not set struts, e.g. Kicker's
submenus open behind the panel.

Internally, Dialog makes calls to QWindow::setFlags when its window
type is "Normal" (the default) and otherwise uses KWindowSystem's
setType. (Kicker's subclass, SubMenu, does an additional
KWindowSystem::setType call for NET::Menu). Neither CompactApplet
nor Kicker change their Dialog's 'type' property to anything else,
so their dialogs are "Normal", thus going the setFlags route with
no setType calls.

Dialog also sets its transient parent to the window the visualParent
item is inside of.

Now here is where things break down: QXcbWindow will update
WM_TRANSIENT_PARENT for in show(), but only when an inline function
called isTransient returns true. isTransient decides this based on
window type, which is determined from the flags set with
QWindow::setFlags. Calls to KWindowSystem::setType would have no
bearing on this; there seems to be no mapping back from external
state. This is why setting Dialog.type to e.g. "DialogWindow" does
nothing.

This patch takes the route of adding Qt::Dialog to the starting
flags - after all Dialog is a dialog. That means isTransient()
will consider the window to be a transient and those
setTransientParent calls Dialog does will not be ignored. In the
case of CompactApplet, no further calls to KWS::setType are done;
Kicker continues to call it with NET::Menu to get desired window
manager behavior.

In light testing everything still seems too work, with the added
benefit of fixing:
BUG:366278

That said, the weird mess of setFlags and setType and state in the
windowing system vs. Qt is horrible and sad.

REVIEW:128571
2016-08-02 19:20:33 +09:00
Eike Hein
2c6dacea38 Fix the infamous 'dialogs show up on the Task Manager' bug once more.
- Initially set state (and type, and flags) in response to PlatformSurfaceCreated.
  We know reliably this will run before the window is mapped.

- Drop the comment about removing setState() form showEvent handler, as
  we need it to avoid state loss in this scenario:
  <mgraesslin> the window gets mapped first time: everything is fine
  <mgraesslin> window gets unmapped: kwin removes the state as per spec
  <mgraesslin> qt gets change event and removes the states it doesn't care about
  <mgraesslin> qt maps window again and sets states
  <mgraesslin> we lost the state
  <mgraesslin> which means we need to set the state again from our side before(!) Qt sets it
  <mgraesslin> and before Qt maps the window
2016-07-15 19:40:37 +09:00
David Edmundson
fb3e8d5fc5 Make use of QQuickItem::setSize
Even though QQuickItem only has a width and height accessor there is a
usable public setSize method.

This gets rid of a lot of potential re-evaluation as internal geometry
is updated before widthChanged is emitted.

REVIEW: 128316
2016-07-04 11:06:44 +01:00
Marco Martin
746f57713c guard against invalid applets
an applet can be present but being one that failed to load
therefore with an invalid kplugininfo, which can cause asserts around

BUG:364281
2016-06-15 12:44:04 +02:00
Kai Uwe Broulik
e159643ec4 [DialogShadows] Cache access to QX11Info::display()
It's called several times and even in a loop.

REVIEW: 127893
2016-05-11 19:58:55 +02:00
David Rosca
f336f80039 ConfigModel: Don't try to resolve empty source path from package
ConfigModel may contain ConfigCategory for both QML pages and KCM pages.
The source property will be empty for KCM pages.  This fixes correctly
returning empty source for KCM pages.
Also return the same value from get().

REVIEW: 127702
2016-05-04 17:34:02 +02:00
Ivan Čukić
8d3ec9589c Properly guarding against a null applet
- The code used applet and d->applet which pointed to the same thing
- Some places checked dereferening of applet, while the last one did not
2016-04-05 09:49:56 +02:00
David Rosca
28b4400da8 Dialog: Set SkipTaskbar/Pager states before showing window
This sets the states before showing the window and is a proper fix
for the linked bug.

Needs e4cea305ed2ba3c9f580bf9d16c59a1048af0e8a from qtbase - Qt 5.6.1

CCBUG: 332024
REVIEW: 127422
2016-03-19 09:02:43 +01:00
Aleix Pol
0e9976afb1 Make sure PlasmaQuick export file is properly found
Uses the subdirectories structure as exported by the project.

REVIEW: 127405
2016-03-17 13:33:19 +01:00
Aleix Pol
c23f2415bb Make it possible for an applet to offer a test object
Makes it possible for plasmoids to test themselves in the different shells
by providing API to extract the object that will test the plasmoid
instance.

REVIEW: 127345
2016-03-16 12:32:25 +01:00
David Edmundson
23d020c797 Redo workaround for plasma dialogs flickering
Reviewed-by: David Rosca
2016-03-15 16:48:39 +00:00
David Edmundson
a9c1427eb1 Revert "Fix taskbar flicking when opening Plasma popups"
Causes a problem I missed.
2016-03-15 16:16:14 +00:00
David Edmundson
42e924e7f6 Fix taskbar flicking when opening Plasma popups
When we show a Qt window it resets all wm_states, including the
SKIP_TASKBAR state that Qt doesn't support see
QXcbWindow::setNetWmStates

In order to set the flag we need to do it after Qt has mapped the
window.

This was previously done using ExposeEvent which will happen after show,
but by it being a separate event the task manager will get notified in
the meantime.

By merging into the same event we can make sure the flag is set before
the task manager processes it.

BUG: 332024
REVIEW: 127374
2016-03-15 14:34:20 +00:00
Marco Martin
12ea79b341 Merge branch 'mart/customShell'
Conflicts:
	examples/CMakeLists.txt
	src/plasma/pluginloader.cpp
2016-03-08 15:38:31 +01:00
Eike Hein
ce4f7c1b79 Fix logic. 2016-03-01 17:41:03 +09:00
Eike Hein
3358c9eb9a Don't wipe window mask on every geometry change when compositing is active and no mask has been set.
Avoids an extra full repaint.
2016-03-01 17:27:33 +09:00
Aleix Pol
9f62532674 Fix most of Clazy warnings in plasma-framework
REVIEW: 126672
2016-02-29 00:13:41 +01:00
David Rosca
82e172cc9e AppletQuickItem: Fix finding own attached layout
Regression from 344dbeb938

BUG: 358849
REVIEW: 127073
2016-02-19 13:23:26 +01:00
Marco Martin
3ee612c2c7 remove the legacy applets filter
this list was done because some applets broke with
the new shared engine stuff.

since it's many workspace releases ago, unconditionally
use the single engine now.

REVIEW:126918
2016-02-09 11:06:30 +01:00
Marco Martin
1b2c1caf39 don't assume we find a corona
BUG:359026
Change-Id: Idfb18a02f6e1ae35b0b1722c24a784345438003d
2016-02-08 11:59:58 +01:00
David Rosca
f688c904a8 AppletQuickItem: Don't try to set initial size bigger than parent size
Trying to set initial size bigger than parent size only results
to item being resized down to fit in parent later.

REVIEW: 126822
BUG: 358200
2016-01-21 15:35:19 +01:00
David Rosca
11937533e8 Ignore check if just one part of size is zero in compactRepresentationCheck
When debugging the linked bug, it looks like when item's geometry change
eg. from 0x0 to 100x100, geometryChanged may be called twice, first with 100x0
and then finally with 100x100.
This was not issue before, because we used timer to call compactRepresentationCheck.
This changes compactRepresentationCheck so that it early returns also when just
one part of item's size is zero.

Fixes regression from 344dbeb938

REVIEW: 126778
BUG: 358039
2016-01-17 18:02:36 +01:00
Martin Klapetek
311cde3ba5 [plasmaquick/dialog] Don't use KWindowEffects for Notification window type
REVIEW: 126727
2016-01-13 14:36:16 -05:00
Kevin Ottens
46c555838c Deal properly with symlinks in path to packages
We receive the URL with all symlinks resolved, but internally the
pkgRoot kept unresolved symlinks preventing matches if there was a
symlink somewhere to get to the package.

REVIEW: 126562
2015-12-29 17:31:16 +01:00
David Rosca
344dbeb938 AppletQuickItem: Drop timer to create full representation
The timer only added 250ms delay before creating the full representation,
sometimes resulting in showing empty popup for a moment.

REVIEW: 126468
2015-12-22 15:46:00 +01:00
Michael Pyne
5c1d2ed01c plasmaquick: Fix memory leak in PackageUrlInterceptor.
Noted by Coverity, CID #1332370.

REVIEW:126443
2015-12-21 14:38:59 -05:00
Patrick Spendrin
54736e262f don't rely on char* to QString implicit conversion
my Qt won't cast char* to QString, so explicitly use QStringLiteral here.

REVIEW: 126417
2015-12-19 00:29:23 +01:00
Marco Martin
5f92df4799 Let containments override CompactApplet.qml
the CompactApplet file from the shell package
defines the behavior of the poopup applets in
the panel (it implements an internal dialog
and all that jazz)
implementing a simplified systray(both the one
for the phone and a separate one for the desktop),
i noticed that a containment may have different
ideas on how to expand an applet: the systray would
have for instance a single popup dialog and put all
of its applet full representtions in the same Dialog,
this lets containment representation to override
that file (*if* won't get abused, that's the only
thing makes me a bit on the fence about this)
It would make possible also fairly different designs
that have been proposed in the past, such as the bug
sidebar similar to the "charm bar"

Have to keep an eye opened if having the file list
changing with the path may be an issue, but
shouldn't as ChangeableMainScript already does
something similar.

Change-Id: I1c7fda55d6829d3a67f511c91822b131dea85ac1
REVIEW:126244
2015-12-10 23:10:02 +01:00
Olivier CHURLAUD
088210363c Header of plasmaquick_export.h is in plasmaquick folder.
Maybe the same should be done to other files that refer to it.
2015-11-27 22:52:52 +01:00
Nick Shaforostoff
c7c2980f14 qstring optimizations
REVIEW: 126148
2015-11-27 20:03:48 +00:00
Eike Hein
8ce47c5f1e Don't reposition while hiding.
BUG:354352
2015-11-26 22:29:58 +01:00
Marco Martin
ff83c3ac99 install some plasmaquick headers 2015-11-24 10:58:05 +01:00
Martin Klapetek
8349a786af Allow adding config categories dynamically
This allows to add custom config categories from JS
dynamically. This is needed for the calendar event
plugins, which are known only at runtime and this enables
to load their QML config files (which are supplied
as absolute paths) and show them in the applet config
dialog.

REVIEW: 125966
2015-11-16 11:50:18 -05:00
Martin Gräßlin
9030405089 [plasmaquick] Don't link OpenGL explicitly
Not needed and anyway pulled in from Qt.

REVIEW: 125975
2015-11-09 11:11:06 +01:00
Martin Gräßlin
de0f7d93a8 [plasmaquick] Drop XCB::COMPOSITE and DAMAGE dependency
Not used
2015-11-09 11:11:06 +01:00
Martin Gräßlin
286300ad35 Use newer cmake syntax for XCB dependencies 2015-11-09 11:11:06 +01:00
Marco Martin
829c8479ec apply SkipTaskbar on ExposeEvent
applying the flag on exposeEvent correctly hides the dialog
from the taskbar, while is still present if only applied
in ShowEvent

Change-Id: I289c36aff251e5cc6e41a493cbc0b2b5b1432a8d
2015-10-08 20:13:05 +02:00
Christoph Cullmann
3f9109a265 Check for nullptr screen to avoid crash
BUG: 345173
REVIEW: 125528
2015-10-05 16:59:22 +02:00
Marco Martin
2f9aadcb43 don't set SkipTaskbar on every event
the only event we're interested in is QEvent::Show
2015-10-05 11:41:42 +02:00
Marco Martin
94c67c37ee Add a dynamic __plasma_frameSvg dynamic property
will be needed by the KWayland integration in order to
obtain the proper shadow
2015-09-07 21:48:54 +02:00
David Rosca
0ffd7681dd Set notifications and osd to show on all desktops
Notification and OnScreenDisplay window types are now shown on all
desktops, same as Dock.

REVIEW: 124355
2015-07-16 17:35:48 +02:00
Kai Uwe Broulik
5cf9c04ff5 Also check for SharedEngineView
With the move to a shared QML engine infrastructure, the check for whether the
focus item is a View no longer held and thus Plasma dialogs stayed opened when
clicking the Desktop to dismiss them.

CHANGELOG: Dialogs like Kickoff now properly close when clicking the Desktop
BUG: 349172
REVIEW: 124260
FIXED-IN: 5.13
2015-07-05 15:23:34 +02:00
Marco Martin
b2b1c93fac give fullrepresentation a parent immediately
like compactRepresentationItem, initialize it
with the appletInterface as parent at creation
not having any moment without parents
2015-06-18 18:29:14 -07:00
Vishesh Handa
c77377221b ContainmentView: Do not crash on an invalid corona metadata
On launching `plasmashell -wap notExistingName`, it's better to give a
warning instead of crashing.
2015-06-19 00:03:20 +02:00
Vishesh Handa
9976edcbc9 AppletQuickItem: Do not access KPluginInfo if not valid
When loading an applet which does not exist, we create a dummy applet
which just contains the error message. This dummy does not have a valid
KPluginInfo, and using an invalid KPluginInfo causes as assert to be
hit.

Reviewed-By: Marco and Sebas
2015-06-18 23:36:28 +02:00
Kai Uwe Broulik
ac04b5570a Ignore invalid X-Plasma-ConfigPlugins
CHANGELOG: Fix occasional empty applet config pages

CCBUG: 349250
REVIEW: 124113
2015-06-17 18:28:12 +02:00
Marco Martin
f9d4f3d836 don't destroy the window 2015-06-14 12:30:57 -07:00
Marco Martin
6b633de572 destroy native window on hide 2015-06-11 21:29:10 -07:00
Marco Martin
c60ca1b6a0 immediately parent objects
don't let representations without parents, avoid
possible leaks and fix cases in which the applet relies
on ht eparent hyerarchy, such as ColorContext
2015-06-10 22:39:22 -07:00
Marco Martin
13bd6703c0 Merge branch 'mart/singleQmlEngineExperiment'
REVIEW:123736
2015-06-10 09:05:46 -07:00