Systray-Icon doppelt ab Mint 19.x

In dieser Linux-Ecke dürfen nur Themen rund um Linux geschrieben werden.
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
jogo
Beiträge: 64
Registriert: 22.11.2020 20:05
Computerausstattung: 'ne Handvoll gebrauchte Laptops & PCs mit Mint Mate

Systray-Icon doppelt ab Mint 19.x

Beitrag von jogo »

moin moin,
meine kleinen Systray-Icons werden komischer Weise ab Mint 19.x Mate/xfce im Systray doppelt nebeneinander dargestellt.
Finde auch keinen Ansatz, in welche Richtung ich da forschen müßte.

Ich baue und compiliere meine Programme aktuell mit PB 5.73 LTS ohne spezielles Subsystem // CPU dynamisch
Hab ich auf verschiedenen Rechnern ausprobiert - immer das gleiche Muster:
Bis Mint 18.3 werden die Icons so dargestellt, wie ich das auch programmiert habe - ab 19.x wirds komisch..

Hier mal ein komplett lauffähiger Beispielcode, der das demonstriert.

Code: Alles auswählen

;demo systray-icon

EnableExplicit      ;deklarierungs-zwang
Global.i ev

Procedure bau_img()
  ;erzeugt ein image für das systrayicon  
  CreateImage(1, 16, 16,32)        ; leeres bild #1 mit schwarzen hintergrund erzeugen  
  StartDrawing(ImageOutput(1))     ; alle folgenden zeichen operationen auf das image #1  
    Circle(8,8,8,$00FF00)          ; großer hellgrüner kreis
  StopDrawing()                    ; ende zeichenmodus in #1
EndProcedure 

Procedure bau_popmenu()
  ;erstellt ein popmenü (aber noch nicht sichtbar) für trayicon,
  If CreatePopupMenu(50)        ; Popup-Menüs beginnen    
    MenuItem(51, "Beenden")
    MenuBar()                   ;trenner
    MenuItem(52, "- - - -")
  EndIf                         ;erstellung popmenü  
EndProcedure

Procedure tray_an()
  ;erzeugt ein systrayicon  
  AddSysTrayIcon(1, WindowID(0),ImageID(1)) ;systrayicon das image #1 zuweisen
  SysTrayIconToolTip(1,"Demo")  ;tooltip für das sysicon zuweisen   
EndProcedure
; ----------------------

 OpenWindow(0, 350, 250 , 225, 95,"Demo-SysIcon",#PB_Window_MinimizeGadget)
 StickyWindow(0,#True)    ;fenster fest im vordergrund
 bau_img()                ;image für trayicon bauen
 bau_popmenu()            ;popmenü bauen
 tray_an()                ;trayicon platzieren

Repeat ;ereignisschleife
  ev = WaitWindowEvent()    ;auf ereignis warten und ggf. ereignis in ev speichern
  Select ev                 ;fensterereignis auswählen  
    Case #PB_Event_CloseWindow      
      Break                 ;aus schleife hüpfen und komplett beenden 
      
    Case  #PB_Event_SysTray       ;wenn systray-ereignis angeklickt wurde / egal links,rechts usw.        
      DisplayPopupMenu(50, WindowID(0))  ; zeigt das Popup-Menü an           

    Case  #PB_Event_Menu       ;wenn menü
        Select EventMenu()       ;auswahl, welches item 
          Case 51                ;wenn Beenden gedrückt
            Break                ;aus schleife hüpfen und komplett beenden
        EndSelect
  EndSelect ;fensterereignis
  
ForEver

End
--
Ideen gibt es viele - man muss sie nur haben...
Mint 18.3/19.3/21.x/LMDE5 // PureBasic 5.73 / 6.02
ccode_new
Beiträge: 1214
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Re: Systray-Icon doppelt ab Mint 19.x

Beitrag von ccode_new »

Bestätigt!

Dieser Bug ist Linux-Distributionsabhängig und hat rein gar nichts mit PureBasic zu tun.

Es ist ein Bug einer Systemkomponente in Linux-Mint 19.
Betriebssysteme: div. Windows, Linux, Unix - Systeme

no Keyboard, press any key
no mouse, you need a cat
jogo
Beiträge: 64
Registriert: 22.11.2020 20:05
Computerausstattung: 'ne Handvoll gebrauchte Laptops & PCs mit Mint Mate

Re: Systray-Icon doppelt ab Mint 19.x

Beitrag von jogo »

Ok, Danke fürs Testen - dachte ich mir schon...
lässt sich dieser LinuxBug vllt. mit PureBasic irgendwie umschiffen/kompensieren?
Also das Icon irgendwie anders erstellen oder auflösen.
Hab verschiedene Größen getestet. Damit allein komme ich nicht weiter.
Aber gibt ja auch Programme, deren Icon normal angezeigt wird.
Die Frage ist, wie machen die das...?
--
Ideen gibt es viele - man muss sie nur haben...
Mint 18.3/19.3/21.x/LMDE5 // PureBasic 5.73 / 6.02
Benutzeravatar
Shardik
Beiträge: 738
Registriert: 25.01.2005 12:19

Re: Systray-Icon doppelt ab Mint 19.x

Beitrag von Shardik »

Das Problem mit den doppelten Systray-Icons hängt wohl mit der Höhe des Systray und der Höhe und Breite des Icon zusammen. Bei meinem Linux Mint 19.3 x64 'Tricia' mit Cinnamon und PB 5.73 x64 kann ich das Problem mit jogos Beispiel bestätigen:

Bild


Wenn ich aber die Maße und die Position des Icon von

Code: Alles auswählen

  CreateImage(1,16,16,32)          ; Leeres Bild #1 mit schwarzem Hintergrund erzeugen  
  StartDrawing(ImageOutput(1))     ; Alle folgenden Zeichen-Operationen auf das Image #1  
    Circle(8,8,8,$00FF00)          ; Großer hellgrüner Kreis
in

Code: Alles auswählen

  CreateImage(1,32,32,32)          ; Leeres Bild #1 mit schwarzem Hintergrund erzeugen  
  StartDrawing(ImageOutput(1))     ; Alle folgenden Zeichen-Operationen auf das Image #1  
    Circle(16,16,8,$00FF00)        ; Großer hellgrüner Kreis
abändere, dann ist das Problem behoben:

Bild
jogo
Beiträge: 64
Registriert: 22.11.2020 20:05
Computerausstattung: 'ne Handvoll gebrauchte Laptops & PCs mit Mint Mate

Re: Systray-Icon doppelt ab Mint 19.x

Beitrag von jogo »

Das ist interessant.
und wie es aussieht, muß nur das Image, auf dem ich letztlich den Kreis zeichne, vergrößert werden.
Das ist auf jeden Fall ein super Ansatz, wo ich jetzt ein wenig kombinieren und rumspielen kann - Danke Shardik :-)

was ich bis jetzt auch noch nicht hingekriegt habe ist, das z.Zt. schwarze Image transparent zu machen (falls mal gewünscht).

Code: Alles auswählen

CreateImage(1, 32, 32,32,#PB_Image_Transparent)
wenn ich das so mache, dann ist das Image zwar wirklich transparent, aber der grüne Kreis auch.
Aber der soll natürlich grün bleiben
--
Ideen gibt es viele - man muss sie nur haben...
Mint 18.3/19.3/21.x/LMDE5 // PureBasic 5.73 / 6.02
Benutzeravatar
Shardik
Beiträge: 738
Registriert: 25.01.2005 12:19

Re: Systray-Icon doppelt ab Mint 19.x

Beitrag von Shardik »

jogo hat geschrieben: 01.02.2022 22:44 was ich bis jetzt auch noch nicht hingekriegt habe ist, das z.Zt. schwarze Image transparent zu machen (falls mal gewünscht).
Wenn Du Deine Prozedur bau_img() wie folgt abänderst, dann ist der Hintergrund im Systray transparent:

Code: Alles auswählen

Procedure bau_img()
  ; Erzeugt ein Image für das Systray-Icon  
  CreateImage(1,32,32,32,#PB_Image_Transparent) ; Leeres Bild #1 mit transparentem Hintergrund erzeugen  
  StartDrawing(ImageOutput(1))     ; Alle folgenden Zeichen-Operationen auf das Image #1  
    DrawingMode(#PB_2DDrawing_AllChannels)
    Circle(16,16,8,RGBA(0,255,0,255)) ; Großer hellgrüner Kreis
  StopDrawing()                    ; Ende Zeichenmodus in #1
EndProcedure 
jogo
Beiträge: 64
Registriert: 22.11.2020 20:05
Computerausstattung: 'ne Handvoll gebrauchte Laptops & PCs mit Mint Mate

Re: Systray-Icon doppelt ab Mint 19.x

Beitrag von jogo »

funktioniert wie verrückt ^^
Das Kapitel 'DrawingMode' hab ich mir schon paar mal durchgelesen.
Ich versteh jedoch den ganzen Zusammenhang nicht & wie man das dann alles kombinieren kann.
Durch dein Beispiel hab ich mal gezielt versucht, den Zusammenhang im diesem Beispiel zu verstehen.

Also bewirkt DrawingMode(#PB_2DDrawing_AllChannels) , das Vorder- & Hintergrund nicht vermischt werden und zusätzlich der Alphakanal berücksichtigt werden soll.
Und RGBA(0,255,0,255) bewirkt durch 255 als Parameter 4 in RGBA(), dass der Kreis NICHT transparent gezeichnet wird. 125 wäre dann halbtransparent..

OK - da öffnet sich für mich bereits einen breite Palette an Möglichkeiten.
Wär ich aber ohne dein Beispiel nicht drauf gekommen - Vielen Dank
--
Ideen gibt es viele - man muss sie nur haben...
Mint 18.3/19.3/21.x/LMDE5 // PureBasic 5.73 / 6.02
Antworten