This introduces new property on MonthView - "today". This property is
updated by dataengine (or can be a timer too, but we already get signals
from dataengine every 30 seconds to update the clock) and is never
updated by the code itself.
Furthermore, the DayDelegate is now bound to it, so when "today"
changes, the selection rectangle in the calendar should also change.
And finally, the selected item in the grid is cleared if MonthView's
date property is cleared (which is second part of this patch, to the
applet itself).
REVIEW: 118277
Removing eliding in Toolbutton, this causes a binding loop as the
sizeHint is dependent on the paintedSize, which will change if you
elide.
In all cases we are trying to make toolbuttons fit the contents, so this
actually got in the way of that.
Otherwise the label can get out of the button boundaries. Tested with
RTL text too, it's elided properly as the elipsis switches to Left on
its own.
Reviewed-by: Marco Martin
BUG: 334867
ToolTipAreas are often the critical path for mouse handling, since
hover events are not filterable from below in the item hierarchy.
When disabling tooltips also stops updating containsMouse code has
no way to adapt, since there's no API to read the pref from within
QML. This changes the implementation of the pref to only prevent
tooltips from being shown, but still continue to handle hover events.
We need to use a GLXFBConfig which matches the depth of the window
pixmap's depth. So far it used the GLXFBConfig of the GL context.
This worked fine for RGBA windows, but failed for RGB windows on e.g.
some NVIDIA drivers.
After this change the FBConfig of the context is completely ignored,
instead it tries to find a good FBConfig for a given depth.
Whenever a FBConfig for a given depth is found it's inserted in a
cache shared between all WindowThumbnails so that we don't have the
X roundtrips all the time.
BUG: 334241
REVIEW: 118110
The WindowThumbnail needs XCB_EVENT_MASK_STRUCTURE_NOTIFY on the window.
For this it needs to change the window attributes. But it needs to keep
the existing event mask to not break other code. Also it cannot remove
the event mask again, as there is no chance to know whether another
component requires STRUCTURE_NOTIFY.
This fixes the not updating items in the tasks applet as the event mask
needed for KWindowSystem got overwritten.
BUG: 331956
REVIEW: 118137
Port IconItem to native QSGTexture including the animation.
This will save constantly uploading a new texture to OpenGL throughout the animation.
REVIEW: 116024
If the window holding the WindowThumbnail item goes away the texture hold
by the node is destroyed but our bound window pixmap is not yet freed.
This results in incorrect state the next time the WindowThumbnail is
shown.
To get back into a clean state discardPixmap() is called if there is no
texture but a bound low level pixmap.
BUG: 333482
REVIEW: 117824
viewTextColor is wrong here, we have to use buttonTextColor. This
follows Plasma 1, and makes texts in fields and areas in white-on-black
themes work.
BUG:333837
At the moment, we could say that plasma is co-installable by chance,
it's only working because KF5 dropped the apps relative directory.
This change introduces a PLASMA_RELATIVE_DATA_INSTALL_DIR that will
be available to know where in share the components are and
PLASMA_DATA_INSTALL_DIR to know where data has to be installed to.
Reviewed by David Edmundson
CCMAIL: plasma-devel@kde.org
The documentation was copy-pasted and was wrong.
The property name started with m_, which is odd and I don't see a reason
for it. Also I didn't find any code that uses it.
REVIEW: 117760
Drop dependency to QtWidgets from this file. We can start assuming that it
might not be that functional in some platforms.
Use QGuiApplication counterparts, based mostly on QScreen, which could make
it more powerful in the future.
REVIEW: 117161
This messes up the fontmetrics needed to size the tab button. Before,
the labels would be elided no matter what.
This is more a band-aid than a real fix, we'll need to investigate how
we can make the sizing work correctly, but at least it "unscrews" the
layout of all of our tabbars.
Introduces a new optional dependency to EGL. If EGL is found the
WindowThumbnail gets compiled with EGL support. The EGL support is
unlike Qt's XCB plugin not mutual exclusive to the GLX backend, thus
it's possible to compile with EGL and GLX at the same time.
By that this implementation is prepared for the case that Qt supports
EGL or GLX through runtime selection.
In practice EGL support is only useful if Qt is compiled with GLESv2.
In that case the corebindingsplugin gets linked against Qt5::Gui_GLESv2
to get the dependency to GLES.
The implementation makes use of the EGL_KHR_image extension
(or EGL_KHR_image_base and EGL_KHR_Image_pixmap) and
the GL_OES_EGL_image extension to bind the X pixmap to an EGLImageKHR.
REVIEW: 116627
Qt's xcb plugin updates _NET_WM_STATE and ignores anything we set,
thus we need to ensure that our additional states are set after Qt
set the state. Luckily KWindowSystem does not remove the state which
is already set.
Reviewed-By: Marco Martin
it makes the tabbar eventually vertical and appearing oriented differently towards the content
possible values:
Qt.TopEdge (default)
Qt.LeftEdge
Qt.RightEdge
Qt.BottomEdge
ToolTipDialog is not a Q_GLOBAL_STATIC because QQuickwindows as global static
are deleted too later after some stuff in the qml runtime has already been deleted,
causing a crash on exit
Only link against OpenGL if Qt links against OpenGL. This ensures
that we don't run into issues if Qt links GLES and plasma links
GL because that's found.
REVIEW: 115990
if more than one dialog is shown in a loop, causes requestActivate called to different windows too fast, this causes 100% cpu usage both in the application and in the windowmanager (not kwin specific)
This way we only call the expensive syncToMainItemSize once we have all
the information to accurately position the window.
Using the timer to limit the calls doesn't work entirely (according to
qDebug) especially with the multiple threads to compile things.
Seems to prevent the dialog ever jumping around on load.
REVIEW: 115709
* X11 is optional dependency
* XCB is optional dependency
* Qt::X11Extras is only found if both X11 and XCB are found
* switch to HAVE_X11 instead of X11_FOUND in CMakeLists
* remove/fix custom added definitions
* use #if HAVE_X11 instead of #ifdef HAVE_X11 (that is always true)
REVIEW: 115698
This is useful to be able to disable tooltips when a dialog exists.
We don't use the QQuickItem::enabled property as this propagates onto
children and has side effects.
REVIEW: 115623
The minimumWidth of a plasma button is based on the paintedWidth
of the text item. There is no way to work out the correct width it
should be if we set the text to elide.
(except for the hack of using a hidden fake text item)
We should always fit contents. This won't cause any problems unless a
developer has a broken layout, at which point that should be fixed
REVIEW: 115500
This patch makes two changes:
1) don't rely on window()->screen() it's rubbish.
2) if the dialog is parented to a desktop, we want to position
inside the parent, not outside the parent object
REVIEW: 115448
BUG: 330546
This reads the global animation duration value from plasmarc, and gets
notified of changes: change the file, all animations are updated
automatically.
Put this into your plasmarc to disable animations globally:
[Units]
longDuration=0
As you might guess, other values will work as well.
shortDuration will always be 1/5 of this. (For now.)
This may sound a bit weird, but we can't just switch off everything, as
in some cases, the animation is not just eye-candy, but carries
important semantics of the UI -- examples are BusyIndicator and
ProgressBar. Behaviour for those is restored.
These centralize the duration of animations, currently set to 250 and 50
milliseconds. They're notifiable since we want to be able to switch off
animations at runtime.
CCMAIL:plasma-devel@kde.org
For the WidgetExplorer we want to show the tooltips to the right of the
scrollbar in the view, not to the right of the delegate the tooltip is
for.
This patch checks if the visualParent is in a dock. If so the popup is
positioned outside
I have also introduced a manual test for Dialog Positioning, and
includied some fixes in the original logic.
REVIEW: 115393
QWindow::screen() never ever changes if the window is moved across
virtual screens (normal two screens with X), this seems to be
intentional as it's explicitly mentioned in the docs.
Until that's changed or some more proper way of howto get the current
QScreen for given QWindow is found, we simply iterate over the virtual
screens and pick the one our QWindow says it's at.
This also fixes the OSD having proper shadows in multiscreen environment
This is used nowhere, so better get rid of it before someone gets the
idea.
Leaves us with only one non-scaled icon size. Maybe worth considering to
get rid of this as well, and let Folderview decide?
This is still pretty rough. It seems to work fine for larger icons, but
smaller ones get misaligned. This will need some corrections, such as
locking the smaller sizes to 16, 22, 32, 48, 64, which should take care
of this issue.
With this change, parts of Plasma scale depending on the DPI. This is
noticeable in Kickoff.
It was an int already anyway, so let's be true about this and also
return an int. This reflects pixel-alignment in the API, not just in the
implementation.
QWindow::setFlags is manipulating the same X property as
KWindowSystem::setType. Thus our setType never succeeded as the
setFlags overwrote the window type again. In the same way we
have to call setFlags when reverting to the default Normal type.
REVIEW: 115258
The last bits have moved out of ThemeProxy, units is used for iconSizes,
which means we can finally directly use Plasma::Theme, and don't need a
ThemeProxy class anymore.
This is means two things:
- icon sizes have moved from theme.iconSizes.* to units.iconSizes.*,
will provide porting script and update docs
- we can kill PlasmaCore's ThemeProxy now. Icon sizing and dpi handling
is kept outside of Plasma::Theme for now, as it pulls in too many
deps.
This change does two things:
- it increases the gridUnit to 11 pixel on 102DPI, 18 on 170DPI. This
means on the one hand larger sizing, but aligns gridUnit and
theme.largeSpacing consistently, and thus makes these types work
together better.
- it scales the gridUnit with the DPI. The width of the font's bounding
box doesn't change on the displays I've tried, the height does.
As a result, gridUnit now scales linearly with the DPI setting.
The outputOnly property allows to specify that the dialog should not
accept any input. Thus it's an output only window which supports click
through. This is obviously platform specific and so far it is only
implemented for the X11 platform using the shape extension.
The input shape needs to be set once the window is visible and thus
the functionality is bound to the visible changed signal. The code
ensures that the required shape extension version is present and only
fetches it once.
REVIEW: 115139
The QQmlPropertyMap isn't moved with this commit, this needs a bit more
changing, so we do a separate one for that, once the more trivial stuff
is moved out.
ToolTipArea.containsMouse allows the use to update the tooltip way
before it's shown, or when the contents of the tooltip should change
within an open dialog.
dismiss() and keepalive() allow handing over the tooltip dialog to
another item, in order to allow for a smoother handover when a new item
recycles the tooltipdialog. This avoids flickering when the tooltip
moves from one item to another.
- Derive from MouseEventListener as to let input through
- react to target changes: reparent the MEL accordingly
- kill a bunch of warnings
This "helps" a bit, but still filters out input events since the MEL
only passes events down to children, but the tooltip's target becomes
its parent.
Reparenting the target crashes, and it seems a pretty ugly thing to do,
anyway, since we don't want to mess with the scenegraph structure just
to filter events out for tooltips. Grmblz.
Delete KDeclarativeMouseEvent when emitted
Do not leak KDeclarativeMouseEvent press and hold events when the mouse
moves.
Do not create KDeclarativeMouseEvent when the mouse is hovered. It's
pointless.
The larger headings are a bit softened, to make their stick out less,
the font is meant to take care of this. Result: visually more consistent
colouring, strangely. Human eyes are beautifully complex things.
Since we are checking if the width() is out of bounds we should also use
width() to correct the position.
Other cases might need change as well, but I think we better go in a case
by case bases to fix all possible issues.
- We would only check for the available screen, but not for the location
when applying borders. Fix that.
- Cache dialog geometry when going fullscreen, so we can restore it when
we're not fullscreen anymore.
- Remove temporary var l, we have m_location for that.
This is a needless duplication of the property, and it causes bugs.
Removing it, and porting all users to the flags property from QWindow
magically makes layering and resizability bugs vanish.
One problem is left: the dialog dismisses too easily, it should not
dismiss when being resized, moved or when a child dialog or QMenu opens
from it.
Interestingly, this hack yields the correct behaviour in my system. We
quickly set the always on top hint once we're supposed to hide, so the
window stays on top for the duration of the animation -- without
apparent side effects on the positioning and resizability.
CCMAIL:mgraesslin@kde.org
This property is meant to bring back the functionality provided by
PopupApplet. If the property is set to true the dialog gets hidden
when it loses focus.
REVIEW: 114378
Reason for this change: a QIcon might not contain the disabled pixmaps.
Using the icon effect allows to get also the disabled state for such
icons.
REVIEW: 114334
KLocale is now kde4support and we have QLocale QML bindings. This patch
removes the KLocale bindings from plasma-framework (they are not used
anywhere anyway).
If we miss something from KLocale in QLocale, we should upstream it.
REVIEW: 114150
These methods are in the middle of other together-related methods, for
no reason. Looks like corn flakes in the middle of beer. Sure, you can
do that, but why would you. Actually I should try that.
Some CLDR (locale) data used by Qt have standalone month names
starting with lower-case letters. So if we want to provide consistent
look across locales, we need to capitalize it ourselves
See https://bugreports.qt-project.org/browse/QTBUG-35100
Also rename startDay property to firstDayOfWeek property so it's more
clear what it does. Handling the first day of week is changed a bit too
as QML uses 0 for Sunday while QDate uses 7 for Sunday, so the
getter/setter is accomodated to that fact and converts from 0 to 7 on
setting and vice-versa in the getter.
REVIEW: 114099
Stop using classes from kde4support:
- KComponentData is deprecated, it will be using QCoreApplication::
applicationName() and QCoreApplication::applicationVersion(). Of course,
this means that the existing shells will have to be ported. I have no
problem with doing that port myself, if I'm told where to look into.
- Drop usage of KLocale, ported to QLocale
- Drop usage of KStandardDirs, ported to QStandardPaths
- Drop usage of KIcon, ported to QIcon
Furthermore, there's a module in src/declarativeimports/locale that IIUC
exposes KLocale bindings to QML. A specific plan to port it should happen
as well.
REVIEW: 113920
This allows us to keep minimal API, since the calendar view and import
really belong together. Also makes it a lot easier to provide a separate
Calendar Plasmoid.
Accessors to allow centralized control of spacing in a DPI-friendly way.
Will be used to unify spacing across default widget to make them look
more consistent.
Currently, smallSpacing is font height / 10, large is font height / 2.
Calling DialogShadows::self()->addWindow(...) will create the low level window.
If this is called before the property windowFlags is evaluated the window flag
X11BypassWindowManagerHint has no effect as that one must be present when the
window is created through the low level xcb call.
This was breaking declarative KWin scripts as KWin's windows need to have the
X11BypassWindowManagerHint.
REVIEW: 113700
Removes the find_package(Qt5Transitional) and does the proper
find_package(Qt5) with the list of modules.
Most of the porting is about using the Qt5:: targets.
REVIEW: 113345
This is in line with the frameworks naming policy, camelcasing. Up until
now, libplasma was the only library being KF5::plasma, that is now
KF5::Plasma.
Recursive window thumbnails would look awesome on the screen, but reality
is that X/OpenGL or $DEITY doesn't like it at all and decided to just
freeze the view.
So let's delay all the redirecting till the WindowThumbnail has been
added to its QQuickWindow and if the window id is the one of the own
window we just render the icon instead.
New qquick item in PlasmaCore to render a live updating window
thumbnail. The implementation uses XCB to redirect the specified
window using the composite extension. This means a running compositor
is not required. Through the damage extension the item tracks changes
to the window and triggers updates of the texture. Furthermore the
item tracks geometry changes of the window to recreate the window
pixmap.
If the pixmap of the window is valid, a texture is generated from it
using the glx texture from pixmap extension. For this a new optional
dependency for glx is added. On platform where glx is not available
(e.g. Windows, Linux with OpenGL ES) this will not get compiled and
the window's icon is used instead as a fallback.
REVIEW: 112142
Uses the new components syntax of FindXCB. So far plasma frameworks
only need the XCB component and that one is optional just like XLib.
The find xcb is moved to the toplevel CMakeLists.txt together with
the find x11 and HAVE_X11 gets set only if both X11 and XCB are found.
REVIEW: 112499
This commit fixes the button label overlapping over the button borders
when the button height is manually set to a value bigger than the
icon's smallsize.
Review done by notmart on IRC.
MouseEventListener listens to both child events and events passing
through itself; child events are recorded so the handler for the
latter can perform a comparison and avoid emitting signals for the
same event again. However, this comparison could fail because the
member used to record the last child event would also be updated
for events we were not actually interested in.
A real-world example of this is opening a popup menu in repsonse to
a Press event. This causes an Ungrab event on the child, which would
cause the comparison to fail and mousePressEvent to announce the same
press yet again.
CCBUG:323067
Property windowId was according to the comments only provided because
KWin needed it. KWin's usecase was to know the window Id of the window
where a given item is rendered to. In QtQuick a QQuickItem provides a
pointer to the QQuickWindow holding the item. This means this hack is no
longer needed.
REVIEW: 112033
The implementation now specifically tries to support byte arrays
being passed in, which is what the base class speaks. To try and
retain the previous behavior anything else is attempted to be
converted to a string and failing that, silently dropped.
REVIEW:111748
CCBUG:322567
both the applet and its compact representation can now export minimumWidth,implicitWidth etc and those are exported to the root graphics item.
the minimum width of the applet is used to collapse in popup
emit click if the cursor is still in the area regardless of the
distance travelled
this because MouseEventListener doesn't start drags
BUG:320893
FIXED-IN:4.11
cherry-picked from ac9592832893cd6562dc0747f8afc1d7f89442c8 in
kde-runtime
This way, we can cover string and QIcon assignments transparently,
another backwards compatibility fix, and easier thing in Plasma2: Now
the user doesn't have to worry about creating QIcons, but can just
assign the icon name, and it will get loaded from the theme. Models that
provide QIcons (such as QStandardItems) now work correctly with
PlasmaCore.MenuItems.
The mainItem is now a Component, which gets created on demand and passed
to the tooltip dialog.
Positioning is a bit off now, but it basically seems to work as we'd
like it to.
Let's try to share more code with dialog -- especially sizing, frame
painting and positioning with dialog. This means a bit of rewiring, but
should result in more lazy-loaded, shared objects.
The idea is to have at most one window, which is recycled for all
tooltips, making it possible to animate transitions.
This implementation deviates a bit from the Plasma 1 tooltips:
- image is now a string
- tooltips align to the parent by default, or the visualParent set
Otherwise, the changes should be fairly transparant.
A crude basic featureset works.
ToolTipProxy is now a QQuickWindow and renamed to ToolTipWindow.
This is done in C++.
ToolTip itself is a QML file, which internally uses tooltipwindow to
display the attached item.
Basic showing / hiding and embedding an Item works, positioning,
margins, etc are not implemented yet. Neither are special windowmanager
hints and flags.
In MenuItem, we can't inherit QAction anymore (our MenuItem has to be a
QQuickItem), so we need to aggregate, which means adding glue API.
Positioning code is disabled, icons broken, but a QMenu with our items
inside shows up and is works.
This patch changes the version numbers of the plugins to 2.0. This
includes the previously 0.1 plasmacomponents, extras and
qtextracomponents. DragandDrop, which was at 1.0 is now also at 2.0.
Also, all the QML code has been changed to import the 2.0 plugins.
As a side-effect, we now share a version number with QtQuick 2.0 now.
- events need to be accepted, otherwise they don't have effect on the
drag, and it doesn't get released
- slightly more intelligent starting of drag, saves quite some cycles
and is way more correct this way
The "attach pixmap of dragged item" is still disabled. This probably
needs to be rethought entirely. One option would be to ditch this class
in favour of QtQuick 2's Drag, DragEvent and DropArea. Food for API
discussion.
- default top TopEdge
- Swap edges if specified
- shift on non-specified edges
- all borders, edge-cases (ha!) are confirmed working
- cleaned up some cruft
Not taken care of yet:
- framesvg border disabling
- sliding effect w/ kwin
- smarter resolution of visualParent