333 Commits

Author SHA1 Message Date
Marco Martin
2b07624173 make sure there is any screen geometry returned
if the heuristic fails (because the topleft of the dialog is offscreen)
use at least our screen()

the screen should be correctly updated now on Qt 5.3+ so should be
more reliable anyways (could be tried to remove the whole Q_FOREACH
at this point)

Change-Id: I29311f4767bde3e02ae7bcb54b400b72a8f190eb
2014-10-24 13:14:27 +02:00
Marco Martin
8d2aa05530 don't mess with cursor pos if mouse outside view
Change-Id: I9dde440b4644c5bddcbe20f6f7458b588d076fdc
2014-10-24 11:51:15 +02:00
Marco Martin
4062a53c9a always have margins in dialogs
always show full margins in dialogs
this is to make things look less cramped with screen and panel edges
since mouse still has to work on screen edges (fitts law)
in that case it forwards mouse events inside the actual content item
so things like menus at the edge of the screen keep working

Change-Id: I4b8a5a5bac92eadbaf7ad5b9b7dc0d5f364888c3
2014-10-21 16:55:38 +02:00
Aleix Pol
7a4998046e Adopt QuickAddons in plasma-framework
Removes the code that was moved to QuickAddons

REVIEW: 120596
2014-10-15 13:22:27 +02:00
Aleix Pol
8df7801d3b Don't crash if the plasmoid wasn't properly loaded
If d->applet->package().isValid(), then d->qmlObject->mainComponent()
is null.
This makes Plasma crash when a faulty plasmoid is loaded.

REVIEW: 120581
2014-10-14 15:45:14 +02:00
Marco Martin
68eadae6c8 never reparent old mainItems
This is not completely correct.
however, when reparenting the mainItem containming window thumbnails
it causes serious graphical artifacts, like the "lost fonts" on
nvidia and fglrx

Change-Id: Id194f5e7863e4ed71792835a9a3cf9c6e4fa70ee
2014-10-08 14:32:52 +02:00
Marco Martin
9796f043b7 Revert "set flags again on QEvent::Expose"
This reverts commit 65ab514a2c34b2ddf3c34a9c8abac92f1e6879d3.
2014-10-08 14:06:10 +02:00
Marco Martin
65ab514a2c set flags again on QEvent::Expose
is the only event we get we know the window will already be visible
to set the flags to have actually any effect

BUG:335572
Change-Id: Id1b69a894295af59a681946df9d14ff7ed316526
2014-10-08 13:57:37 +02:00
Marco Martin
ad03d0bb14 try to restore the original parent if possible
setting a null parent to mainitems seems to screw up with their QQmlContext

the problem can be seen with the taskbar, that after fiddling with tooltips a lot, (like switching between pager and a task) it loses thumbnails and it starts to output on stderr
about ids that aren't accessible anymore.

Change-Id: Ibbb6d270fd2e20b5b6745e228f4010b74d3266c9
2014-10-06 12:33:16 +02:00
Marco Martin
2a582e6b4a make sure the layout timer isn't running
when maintintem changes

Change-Id: I59d1930caf2686e1fa9a1fb0510e15630898d99f
2014-10-03 19:10:31 +02:00
Marco Martin
ab69d1029c guard mainItem of resize
crash--

Change-Id: Ifa08f78573d4eed690c23e93f87d1cf0b3c033ef
2014-10-03 13:51:57 +02:00
Marco Martin
419b344b6d make sure the theme is loaded on item sync
Change-Id: Iea920b208c9e84bc9fb3c6c3c39e4362782f0b5f
2014-10-02 16:17:35 +02:00
Marco Martin
afe0524fa7 queue change of minimum/maximum size
the layout size hints can change all together, in any order possible.
the only way to have a deterministic behavior is to compress them
and do the sync of the size all at once.
also being sure to do a single adjustGeometry (one X call) instead of
separate setWidth/setHeight

a test for the issue is dialog_resizeWithParent.qml

BUG:339478
Change-Id: Ia7c3c55e40ff89971beb734dcd205df05bfba687
2014-09-30 16:34:21 +02:00
David Edmundson
0d209f9d2a Make KWindowSystem a public dependency of plasmaquick
Dialog.h uses netwm_def.h in the header so it should be included by apps
that use plasmaquick implicitly

Change-Id: I55507f552025468dde32e4830a78e34dc35c03af
2014-09-26 16:47:46 +02:00
David Edmundson
62d240b7d6 Only update real visibility when component has finished completion
We only want to toggle our visibility until after all window flags have
been set, as some flags can only be set before the window is shown.

This patch caches and proxies the visibility flag and only update the
real visibility when the component is complete.

Change-Id: I4ce7744dc48afecf35db6679ca0991b7042e45a2
2014-09-26 16:17:33 +02:00
Marco Martin
5b50373b37 if rootObject exists, component is here and ready
Change-Id: I37deb527a04dde9ce458c5aea8e178b3d08b1b46
2014-09-25 18:02:59 +02:00
Marco Martin
a71697e68d the qquickitem con be resized before qml is created
AppletQuickItemPrivate::compactRepresentationCheck() must not be executed before
the qml parse is over and rootObject is here: the creation of the full or compact representation
would go very wrong in that case

Change-Id: Ib72f7d25f570a1ae34ada3330080350384d5c1e8
CCBUG:339329
2014-09-25 17:57:14 +02:00
Marco Martin
18b57ffc29 fix tooltips
use adjustSize in updateMinimumWidth et al.
changing tooltip content updates sizeHints
using setGeometry is immediate, and will kill the animations.
for dialogs other than tooltips there is no change since adjustGeometry
is just setGeometry

Change-Id: I3e6310f12f76e400f2663b8409a2bbc7e7398f39
2014-09-24 14:07:30 +02:00
Marco Martin
e3fd010166 don't update the minimum size when not visible
since when is not visible the dialog doesn't update its size
from the mainItem size, the minimum size should not be
updated as well, or the initial mainitem size will get lost
and the dialog will be initialized to a wrong size

Patch by: Vishesh Handa <vhanda@kde.org>

Change-Id: I272727fb4732474b102de64c9bfdddb7fc3906c8
2014-09-23 17:05:09 +02:00
Marco Martin
60a7419746 fix availableScreenGeometryForPosition()
when we check if a position is in a screen, we need
the whole screen geometry, panels included, otherwise if we pass
a coordinate under a panel, it will think no screen is there

Change-Id: I802a2bec4ae44b583eafdc309934e67b620cc463
2014-09-18 17:35:18 +02:00
Marco Martin
dff792a86b Update the size in two ways
A dialog can be resized for two reasons: the mainItem size changes, or the dialog size changes.

the first can happen programmatically, caused by the Layout, or just by assigning the width.

the second can be caused either programmatically, assigning the size of the dialog or externally by the windowmanager, that is the only one theat in the end has the only final control of the window size

Change-Id: Ifc5c7f683039f83d13a5046c10d6dd0227169542
REVIEW:120235
2014-09-18 17:25:48 +02:00
Marco Martin
6993ecf9f7 Revert "fix enabled borders management"
This reverts commit aaa1a6315ed9c6e249797393fe38b7ad3c1ccb0a.
2014-09-16 17:35:22 +02:00
Marco Martin
aaa1a6315e fix enabled borders management
* never enable all the borders just to take margins, there is fixedMargins for that
* redo ResizeOrigin: Dialog needs to sync from both sides: when the mainItem gets resized, *and* when the window gets resized (syncing mainItem)
* don't crash when there is no Layout: not all mainItems export one
* fix availableScreenGeometryForPosition()

Change-Id: I09370e33a3e8d03675b60f14c6c5754f8491d52c
2014-09-16 16:04:35 +02:00
Vishesh Handa
188df2daad Dialog: Correct typo. '+' should be '-' 2014-09-16 15:45:55 +02:00
Vishesh Handa
6f2c46807e Dialog: updateLayoutParameters after calling syncToMainItemSize
updateLayoutParameters's uses the borders in order to set the max and
minimum size, and therefore syncToMainItemSize should always be called
before it is ever called.

Also added code to not do anything if we are not completely initialized.
2014-09-16 15:26:50 +02:00
Vishesh Handa
18a6a7302b Merge branch 'master' into vhanda/dialogRefactor 2014-09-15 14:50:49 +02:00
David Edmundson
26620812a2 Don't include configmodel in doxygen
Change-Id: I7e4db3c81f4e67deec788932225026fc048fd128
2014-09-13 11:47:00 +02:00
David Edmundson
0b92063aff Add link to appletinterface documentation
Change-Id: I3a0bce2ec7ecc18c2efe9d5759eabd2c11a0acba
2014-09-12 13:53:00 +02:00
David Edmundson
13ddfd71e9 Sync documentation from wiki to dialog
Change-Id: I2c3f623ef3dce33025b3e6a6233a6f3da8dd2691
2014-09-12 13:05:23 +02:00
David Edmundson
98faacc5ef Add example to Dialog
Change-Id: I9adc43344ba13eb95038f1d5bffcef73ab93fa9e
2014-09-12 13:05:23 +02:00
David Edmundson
2c38364322 Add documentation on Applet/Containment Interface
Change-Id: I3dddb4d799fef98eb4370503ac8f1d20c6948b2d
2014-09-12 12:21:47 +02:00
Marco Martin
a54da78ce8 check for plugin validity 2014-09-01 18:17:22 +02:00
Vishesh Handa
012e002092 Dialog: Add accidentally removed Q_PRIVATE_SLOT 2014-08-29 14:35:47 +02:00
Sebastian Kügler
d8b2ef147f typo-- in comment 2014-08-28 23:30:29 +02:00
Vishesh Handa
f293888be6 Dialog: Avoid adjusting the geometry twice when with visualparent
We are in a strange cycle when we have a visual parent. In order to
obtain our position, we need to know our size. Our size depends on the
borders visible. The borders visible depend on the size.

When we do not have a visual parent this is not a problem as we do not
have a position where we are supposed to be.

In order to solve this cycle, when we have a visual parent, we typically
assume we have all borders, call popupPosition, move to that position
and then use that new position to figure out the borders, get the new
size (incase any borders have changed) and move again. This double
moving is not good. With that patch, we still do the same but we avoid
moving twice.
2014-08-28 18:25:03 +02:00
Vishesh Handa
e0ea93cb7e Dialog: Use the correct screen for repositioning when overflowing 2014-08-28 17:35:05 +02:00
Vishesh Handa
8a3f38511d Dialog: Set the correct popup position on layout width/height change
We seem to have cases where once the dialog is visible and the visible
event is over, then the width/height updates itself, so we need to
reposition the dialog appropriately.
2014-08-28 16:28:56 +02:00
Vishesh Handa
eb6ea04be7 Dialog: Dot not update layout width/height unlesss completed
The functions are often called a number of times before the
component is actually completed. There is no point of this.

Also added a function updateLayoutParameters which update all 4
of these in a more efficient manner. There is a certain amount
of code duplication between those 4 functions and this one, but
that can be fixed in another patch.
2014-08-28 16:15:26 +02:00
Vishesh Handa
4f622a5158 Dialog: Fix poisitioning and theme rendering
- updateTheme should always be called the frameSvgItem's size has been
  upated. It uses the geometry of the frameSvgItem. Also updated the
  documentation.

- When a dialog has a visualParent, setting the position of the dialog
  is slightly compilcated. In order to set the position we have to give
  the function popupPosition the size of the dialog so that it can
  determine where to place it, however the size of the dialog depends on
  the position as some of the borders are drawn depending on the
  position. We have a circular problem.

  For now we're solving this by tempoarily giving the full size with all
  the borders in the case when there is a visual parent.
2014-08-28 15:49:16 +02:00
Vishesh Handa
30174dd367 Dialog: Mark componentComplete as false on creation 2014-08-28 13:17:17 +02:00
Vishesh Handa
e3c1095d92 Dialog: Remove syncTimer
Remove the timer and call syncToMainItemSize directly whenever it used
to be called. We avoid the extra event loop this way. This probably
breaks somethings, but we can figure that out and add tests for that.
2014-08-27 18:16:24 +02:00
Vishesh Handa
9ddbd93855 Dialog: Remove syncMainItemToSize
The only place it is now used is when the window x/y position changes.
There is now a dedicated function to handle that.

This brings us one step closer to removing the entire sync timer
2014-08-27 18:16:24 +02:00
Vishesh Handa
67810adbf1 Dialog: Replace QWeakPointer with QPointer
This simplifies the code as we do not have to call .data() everywhere
2014-08-27 18:16:24 +02:00
Vishesh Handa
7fd87741de Dialog: Simplify handling of min/max width/height changed
When the minimumWidth/Height of the attached Layout of the mainItem
would change. The following events would happen -

- updateMinimumWidth is called
--> results in resizeEvent being called
--> results in syncMainItemToSize
--> results in slots connected to mainItem widthChanged
---> syncMainItemToSize + syncToMainItemSize being called a few more
times. It's not entirely apparent why at thist point.

This kind of logic is quite hard to follow and more importantly because
of the timers in the middle, an extra paint event is called. This means
the user can first see the window resize and then the item getting
resized.

This patch introduces a little bit of code duplication (can be fixed in
future commits) to clearly establish what updateMinimumWidth should be
doing -
* disconnect signals to make sure mainItem's widthChange is not triggered
* update window size + item size + borders
* reposition if required

The repositioning is useful as currently if a dialog becomes wider if
will not reposition itself and will overflow. With this patch we always
make sure the entire dialog is shown.

Minor Point: On testing without the patch the dialog does reposition
itself if it is not already overflowing. I suspect this is kwin moving
the window.

A test called dialog_minWidthHeighRepositioning.qml can be used to see
how the change occurs before and after.
2014-08-27 18:16:24 +02:00
Marco Martin
6a190670ba create the Layout attached object in init()
always create it and create it immediately.
this way it's possible for other c++ users to find it
2014-08-27 13:37:56 +02:00
Marco Martin
49bb894a21 use QUrl::fromLocalFile 2014-08-27 13:11:26 +02:00
Marco Martin
2a575c810d noise-- 2014-08-27 12:22:22 +02:00
Marco Martin
20906f6b0d allow the private imports relative to alloewdPath 2014-08-27 12:20:39 +02:00
Marco Martin
ccab23fccb the config view can load files from the applet pkg 2014-08-26 18:11:11 +02:00
Marco Martin
2b7d633687 Merge branch 'mart/DialogBackgroundHints'
REVIEW:119860
2014-08-22 16:56:08 +02:00