You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: DOC/Ikony-i-konfiguracja-skrótów-aplikacji-GNOME.md
+21-21Lines changed: 21 additions & 21 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -3,15 +3,15 @@
3
3
4
4
**Aplikacje symulacyjne SymShella teoretycznie mają własną, czarno białą ikonę. Dawniej to działało, ale od którejś wersji gnome przestało. Ta ikona nigdy i nigdzie nie jest widoczna i aplikacja ma jakąś standardową albo w ogóle jakby pustą.**
5
5
6
-
Jest to klasyczny problem w nowoczesnych środowiskach graficznych Linuxa (szczególnie GNOME). Dawniej ikony ustawiane bezpośrednio przez API X11 (tzw. WM\_HINTS) były respektowane przez menedżery okien. Dzisiaj GNOME polega niemal wyłącznie na systemie **Desktop Entry** i standardzie **StartupWMClass**.
6
+
Jest to klasyczny problem w nowoczesnych środowiskach graficznych Linuxa (szczególnie GNOME). Dawniej ikony ustawiane bezpośrednio przez API X11 (tzw. `WM\_HINTS`) były respektowane przez menedżery okien. Dzisiaj GNOME polega niemal wyłącznie na systemie **Desktop Entry** i standardzie **StartupWMClass**.
7
7
8
8
Jeśli stara aplikacja "straciła" ikonę, prawdopodobnie system nie wie, jak powiązać uruchomiony proces z plikiem graficznym na dysku. Oto jak możesz to naprawić, wykorzystując Fluttera jako "zarządcę" lub po prostu naprawiając strukturę aplikacji:
Nawet jeśli Twoja aplikacja w C++ ma wewnątrz zakodowaną ikonę, GNOME jej nie wyświetli, jeśli nie znajdzie pasującego pliku .desktop.
12
+
Nawet jeśli Twoja aplikacja w C++ ma wewnątrz zakodowaną ikonę, GNOME jej nie wyświetli, jeśli nie znajdzie pasującego pliku `.desktop`.
13
13
14
-
Musisz stworzyć plik /usr/share/applications/symulator.desktop (lub w folderze lokalnym):
14
+
Musisz stworzyć plik `/usr/share/applications/symulator.desktop` (lub w folderze lokalnym):
15
15
16
16
```Ini, TOML
17
17
\[Desktop Entry\]
@@ -22,7 +22,7 @@ Type=Application
22
22
StartupWMClass=moja-binarka-cpp
23
23
```
24
24
25
-
**Kluczowy moment:** Musisz upewnić się, że Twoja aplikacja w C++ ustawia klasę okna (WM\_CLASS) na taką samą wartość, jaka jest w StartupWMClass. W czystym X11 robi się to tak:
25
+
**Kluczowy moment:** Musisz upewnić się, że Twoja aplikacja w C++ ustawia klasę okna (`WM\_CLASS`) na taką samą wartość, jaka jest w StartupWMClass. W czystym X11 robi się to tak:
26
26
27
27
```C++
28
28
XClassHint \*class\_hint \= XAllocClassHint();
@@ -41,7 +41,7 @@ Bez tego GNOME widzi "nieznane okno" i przypisuje mu domyślną ikonę (lub pust
41
41
Skoro i tak planujesz użyć Fluttera do menu, możesz sprawić, by to **Flutter był głównym punktem wejścia (entry point)** aplikacji.
42
42
43
43
1. Użytkownik klika ikonę "Symulator" (która w rzeczywistości uruchamia Twoją apkę we Flutterze).
44
-
2. Flutter ma ustawioną ładną ikonę w swoim projekcie (robisz to jednym kliknięciem w narzędziu flutter\_launcher\_icons).
44
+
2. Flutter ma ustawioną ładną ikonę w swoim projekcie (robisz to jednym kliknięciem w narzędziu _flutter\_launcher\_icons_).
45
45
3. Flutter po starcie ukrywa swoje okno, dodaje ikonkę do traya i uruchamia proces C++ w tle (Process.start).
46
46
47
47
W ten sposób w systemie "głównym" procesem z perspektywy UI jest Flutter, który ma poprawną, nowoczesną ikonę, a okno X11 z symulacją jest traktowane jako okno pomocnicze.
@@ -53,28 +53,26 @@ W ten sposób w systemie "głównym" procesem z perspektywy UI jest Flutter, kt
53
53
GNOME i Wayland odchodzą od pobierania ikon z protokołu X11, ponieważ:
54
54
55
55
* **Skalowanie:** Ikony w X11 były często małymi bitmapami (np. 32x32). Na ekranach 4K wyglądają tragicznie.
56
-
* **Bezpieczeństwo i porządek:** System chce mieć centralną bazę ikon w /usr/share/icons, a nie ufać binarkom, że "coś tam sobie narysują" w rogu okna.
56
+
* **Bezpieczeństwo i porządek:** System chce mieć centralną bazę ikon w `/usr/share/icons`, a nie ufać binarkom, że "coś tam sobie narysują" w rogu okna.
57
57
58
58
### **Co możesz więcej zrobić?**
59
59
60
60
Jeśli chcesz, aby Twoje menu we Flutterze "przejęło" reprezentowanie aplikacji:
61
61
62
62
1. Wstaw do folderu assets Fluttera ikonę w formacie PNG (np. 512x512).
63
-
2. Użyj wspomnianego wcześniej tray\_manager, aby ta ikona była zawsze widoczna w zasobniku (tam, gdzie GNOME niczego nie blokuje).
64
-
3. W pliku .desktop, który przygotujesz dla użytkowników, wskaż ikonę Fluttera.
63
+
2. Użyj _tray\_manager_, aby ta ikona była zawsze widoczna w zasobniku (tam, gdzie GNOME niczego nie blokuje).
64
+
3. W pliku `.desktop`, który przygotujesz dla użytkowników, wskaż ikonę Fluttera.
65
65
66
66
Dzięki temu Twoja aplikacja wreszcie przestanie wyglądać jak "puste okno" i zyska profesjonalny wygląd na pasku zadań.
67
67
68
68
69
-
### **4\. Katalog lokalny**
69
+
## **Katalog lokalny**
70
70
71
-
Jeśli chodzi o lokalny katalog dla użytkownika (bez uprawnień roota), to w systemach Linux zgodnych ze standardem **XDG**, pliki .desktop (które w Twoim przypadku pełnią rolę "opisu aplikacji", choć mają składnię INI, a nie TOML) należy umieszczać tutaj:
71
+
Jeśli chodzi o lokalny katalog dla użytkownika (bez uprawnień roota), to w systemach Linux zgodnych ze standardem **XDG**, pliki `.desktop` (które w Twoim przypadku pełnią rolę "opisu aplikacji", choć mają składnię INI, a nie TOML) należy umieszczać tutaj...
72
72
73
-
### ---
73
+
### **Ścieżka lokalna**
74
74
75
-
### **Ścieżka lokalna:**
76
-
77
-
\~/.local/share/applications/
75
+
Definicje aplikacji lokalne dla użytkownika oczekiwane są w katalogu: `\~/.local/share/applications/`
78
76
79
77
Jeśli ten katalog nie istnieje, możesz go utworzyć komendą:
Warto tutaj wyjaśnić pewne nieporozumienie terminologiczne:
88
86
89
-
* **Pliki .desktop**: To standard w Linuxie (GNOME, KDE, XFCE). Mimo że wyglądają podobnie do formatu TOML (mają sekcje w nawiasach kwadratowych jak \[Desktop Entry\]), to technicznie jest to format **Desktop Entry Specification**. Systemy Linux szukają właśnie tych plików, aby wyświetlić ikonę w menu czy na pasku zadań.
87
+
* **Pliki .desktop**: To standard w Linuxie (GNOME, KDE, XFCE). Mimo że wyglądają podobnie do formatu TOML (mają sekcje w nawiasach kwadratowych jak `[Desktop Entry]`), to technicznie jest to format **Desktop Entry Specification**. Systemy Linux szukają właśnie tych plików, aby wyświetlić ikonę w menu czy na pasku zadań.
90
88
* **TOML**: Jest używany przez nowsze narzędzia (np. Rust, niektóre konfiguratory), ale sam menedżer okien (GNOME) go nie odczyta jako definicji skrótu do aplikacji.
91
89
92
-
### ---
90
+
---
93
91
94
-
### **Jak powinien wyglądać ten plik, aby naprawić Twój problem z ikoną?**
92
+
### **Jak powinien wyglądać ten plik, aby naprawić nasz problem z ikoną?**
95
93
96
94
Stwórz plik o nazwie np. symulator.desktop w powyższym katalogu i wypełnij go tak:
1.**Ikona w Menu**: Aplikacja pojawi się w wyszukiwarce systemowej z Twoją grafiką.
115
-
2.**Grupowanie okien**: Gdy uruchomisz program, GNOME "zobaczy" StartupWMClass, dopasuje go do pliku .desktop i podświetli właściwą ikonę na pasku zadań (zamiast pokazywać znak zapytania lub puste okno).
113
+
2.**Grupowanie okien**: Gdy uruchomisz program, GNOME "zobaczy" `StartupWMClass`, dopasuje go do pliku `.desktop` i podświetli właściwą ikonę na pasku zadań (zamiast pokazywać znak zapytania lub puste okno).
116
114
3.**Brak potrzeby roota**: Instalujesz to tylko dla swojego użytkownika, nie psując nic w systemie.
117
115
118
116
### **Jak sprawdzić czy działa?**
119
117
120
-
Po zapisaniu pliku w \~/.local/share/applications/, system powinien go wykryć automatycznie w ciągu kilku sekund. Możesz też wymusić odświeżenie bazy komendą:
Czy chciałbyś, aby Twój program we Flutterze generował taki plik automatycznie przy pierwszym uruchomieniu, żeby użytkownik nie musiał robić tego ręcznie?
118
+
Po zapisaniu pliku w `~/.local/share/applications/`, system powinien go wykryć automatycznie w ciągu kilku sekund. Możesz też wymusić odświeżenie bazy komendą:
0 commit comments