I am running LM 18.3 and LM19.1 on two systems with the Cinnamon desktop. I have been using CrossOver to run an old application I wrote may years ago to run in Windows. I recently rewrote it in python using PyQt for the graphical interface. There is one remaining problem to solve before the new python app can fully replace the old windows app.
When I run the old app in CrossOver (or when I ran it in Windows), there is no text/icon entry that appears on the panel or taskbar. I would ilke to reproduce this feature in the python app.
How can a running app text/icon item be hidden or removed from the panel? I have searched for solutions and the only solution I found is to use compiz. At least, I think compiz offers a solution; however, it does not seem like a very good long-term solution.
If that is not possible, is it possible to move the text/icon item to another panel and then hide that panel?
[SOLVED] Hiding or removing a running application text/icon from the panel
[SOLVED] Hiding or removing a running application text/icon from the panel
Last edited by dnl on Tue May 28, 2019 4:44 pm, edited 1 time in total.
Re: Hiding or removing a running application text/icon from the panel
OK. It appears no one knows how to do this.
My old app does keep its icon/text out of the taskbar (Windows) and panel (Linux). I could not remember how until I did more digging today and rediscovered how. The app is written in Visual Basic 6 and the forms in VB6 have a property that can be set to hide themselves from the taskbar. Apparently WINE and CrossOver successfully implement whatever is needed to support this feature on at least the Cinnamon desktop.
Does anyone have any information on how this works or how this might be applied to other apps?
Programs with icons in the system tray somehow accomplish this. How do they do it?
Alternatively, how can I put an icon in the system tray for my program so that when it runs it does not put anything else in the panel?
Any help or thoughts would be appreciated?
My old app does keep its icon/text out of the taskbar (Windows) and panel (Linux). I could not remember how until I did more digging today and rediscovered how. The app is written in Visual Basic 6 and the forms in VB6 have a property that can be set to hide themselves from the taskbar. Apparently WINE and CrossOver successfully implement whatever is needed to support this feature on at least the Cinnamon desktop.
Does anyone have any information on how this works or how this might be applied to other apps?
Programs with icons in the system tray somehow accomplish this. How do they do it?
Alternatively, how can I put an icon in the system tray for my program so that when it runs it does not put anything else in the panel?
Any help or thoughts would be appreciated?
Re: Hiding or removing a running application text/icon from the panel
In your code you need to give the Window manager some hints about how you want your window to be treated. E.g. to not have a panel entry your applications window may need to have _NET_WM_STATE_SKIP_TASKBAR set - https://standards.freedesktop.org/wm-sp ... 0472615568
No clue however how/if PyQt supports that....
No clue however how/if PyQt supports that....
For custom Nemo actions, useful scripts for the Cinnamon desktop, and Cinnamox themes visit my Github pages.
Re: Hiding or removing a running application text/icon from the panel
Thank you very much for the link. Good stuff.smurphos wrote: ↑Tue May 28, 2019 1:24 amIn your code you need to give the Window manager some hints about how you want your window to be treated. E.g. to not have a panel entry your applications window may need to have _NET_WM_STATE_SKIP_TASKBAR set - https://standards.freedesktop.org/wm-sp ... 0472615568
No clue however how/if PyQt supports that....
I have some understanding of messaging in Windows so it appears I need to gain as much or maybe a greater understanding for PyQt and X11. At least I have something to work on. Thanks.
Re: Hiding or removing a running application text/icon from the panel
While looking through the Extended Window Manager Hints document I noticed the window type _NET_WM_WINDOW_TYPE_UTILITY, which corresponds nicely with what I am trying to do. I then looked through the Qt class reference and discovered that the Qt.Tool window type automatically sets this attribute.
I altered my code to include Qt.Tool in the set of window flags I was already setting and that allowed my program to run without a button in the panel but that created a problem; my program would no longer shutdown when I closed the PyQt widget/window I was displaying.
After a little more digging, I discovered that the Q.Tool attribute causes the quit_on_close flag to be cleared. I corrected this by resetting that flag after showing the widget. So my solution is briefly this ...
Thanks again to smurphos for the link and suggestion.
I altered my code to include Qt.Tool in the set of window flags I was already setting and that allowed my program to run without a button in the panel but that created a problem; my program would no longer shutdown when I closed the PyQt widget/window I was displaying.
After a little more digging, I discovered that the Q.Tool attribute causes the quit_on_close flag to be cleared. I corrected this by resetting that flag after showing the widget. So my solution is briefly this ...
Code: Select all
class myWidget(QtWidgets.QWidget):
def __init__(self, parent=None):
super(myWidget, self).__init__(parent)
self.setWindowFlags(QtCore.Qt.FramelessWindowHint |
QtCore.Qt.WindowStaysOnTopHint |
QtCore.Qt.Tool)
...
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
w = myWidget()
w.show()
w.setAttribute(QtCore.Qt.WA_QuitOnClose)
app.exec_(sys.exit())