Pop-up dialog of embedded applets

Dmitry dmitry.ashkadov at rosalab.ru
Thu Jul 5 07:40:33 UTC 2012


03.07.2012 16:44, Dmitry ?????:
> Hello, Marco!
>
> I'm implementing system tray in QML. I've found a solution how to 
> place embedded applet into pop-up window of tray. But there is one 
> difference between my system tray [in QML] and your current system 
> tray [in pure C++]. If some embedded applet is placed in pop-up window 
> of system tray (pop-up part of the tray) and user clicks on it 
> [embedded applet] then the pop-up dialog of embedded applet will arise 
> at the cursor coordinates and either it looks like separated window or 
> it overlaps the panel. It looks weird. If user clicks on an applet 
> embedded in pop-up window of current C++ system tray then pop-up 
> window of the embedded applet arises docked to the panel and never 
> overlap it. Do You know what is a reason of such strange behaviour?
>
> Thank you!
>

Hello!

It seems that PopupApplet uses global coordinates to place popup dialog. 
If applet is located outside of a panel then its popup dialog won't be 
docked to the panel (will be shown like a separate window). I think the 
current system tray in C++ doesn't have such problem because an order of 
actions is next:

 1. User clicks on embedded applet
 2. Embedded applet changes its status
 3. Previous action causes system tray in C++ to move embedded applet
    from popup dialog to panel part
 4. Embedded applet shows its pop-up window docked to panel because it
    is located in panel.

So, I've found next solution to described problem:

  * First of all, I handle mouse click event.  If user clicks on
    embedded applet then I check if this applet is a pop-up applet like
    this:

    Plasma::PopupApplet *popup = qobject_cast<Plasma::PopupApplet*>(applet)
    if (popup) { /* Applet is a pop-up applet */}

  * Next I hide applet to disable its redrawing:

    popup->hide();

  * Reparent popup. It becomes located in panel:

    popup->setParentItem(panel); // panel is a panel part of system tray

  * Show pop-up of embedded applet:

    popup->showPopup();

I think that this way isn't good, but it is only one way I have found to 
solve the problem. What do you think about solution? Maybe do you have 
another ideas?

Thank you.

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.kde.org/pipermail/plasma-devel/attachments/20120705/3b06b46b/attachment.html>


More information about the Plasma-devel mailing list