PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Kylix und KDE-"Systray"



Zeeke
16-05-2003, 09:53
Hi,

ist es mit Kylix möglich ein Icon für die erstellte Anwendung in das "Systray" (heißt es bei KDE so?) von KDE zu bringen (und natürlich auch Events wie Doppel-, Links- und Rechtsklick abfangen)? Oder muss man eine richtige KDE-Anwendung erstellen? Weil das wäre ja glaub ich mit Kylix leider nicht möglich :-/

Danke für hilfreiche Antworten!

Ciao
~Zeeke

peschmae
16-05-2003, 10:24
das muss schon eine richtige kde-app sein

afair bietet KDevelop dafür sogar ein grundgerüst

MfG Peschmä

anda_skoa
16-05-2003, 10:29
Hmm, geht wahrscheinlich zumindest nicht out-of-the-box, aber warte besser noch auf eine Antwort der Kylix/Delphi Leute.

Könnte sich aber möglicherweise realisieren lassen, wenn das Programm mit dem Window Manager oder dem Panel kommunizieren könnte.

Auf www.freedesktop.org gibt es einen Entwurf für eine Spezifikation, die das Desktopunabhängig gestalten soll http://www.freedesktop.org/standards/systemtray.html

Was mich in dieser Richtung interessieren würde ist, ob man im C++ Mode von Kylix eine Komponente für CLX machen könnte und die dann im Delphi Mode benutzen kann.
Ist aber wahrscheinlich nicht so einfach.

Ciao,
_

Zeeke
16-05-2003, 11:03
Hi,

vielen Dank erstmal, das hat mir schon sehr geholfen. Ich habe den Code von freedesktop.org versucht nach Kylix (Delphi) zu portieren. Bisher schaut das so aus...

procedure send_message(
dpy: PDisplay; // Display
w : Window; // Sender (tray icon window)
_message, // Message opcode
data1, // message data 1
data2, // " 2
data3: Cardinal // " 3
);
var
ev: XEvent;
begin
// memset(&ev, 0, sizeof(ev));
ev.xclient.xtype := ClientMessage;
ev.xclient.xwindow := w;
ev.xclient.message_type := XInternAtom(dpy, '_NET_SYSTEM_TRAY_OPCODE', 0);
ev.xclient.format := 32;
ev.xclient.data.l[0] := 0; // x_time;
ev.xclient.data.l[1] := _message;
ev.xclient.data.l[2] := data1;
ev.xclient.data.l[3] := data2;
ev.xclient.data.l[4] := data3;

// trap_errors();
XSendEvent(dpy, w, 0, NoEventMask, @ev);
XSync(dpy, 0);

{if untrap_errors() then
begin
// Handle failure
end;}
end;
In die Uses-Klausel muss die xlib eingetragen werden. Habe ein paar Sachen weggelassen (auskommentiert), weil ich nicht wusste, wie ich sie portieren sollte. Der Code lässt sich soweit so gut auch ohne Fehlermeldungen kompilieren, jedoch weiß ich nicht so ganz, wie ich ihn anwenden soll.. *g*

Vielleicht kann mir ja jemand weiter helfen oder hat z.B. ein kleines Mini-Beispiel (also kleines funktionsfähiges Programm) dafür in C/C++ parat... das würde mir gewiss auch sehr helfen.

Danke!
Ciao
~Zeeke

anda_skoa
17-05-2003, 16:47
Original geschrieben von Zeeke
Hi,

vielen Dank erstmal, das hat mir schon sehr geholfen. Ich habe den Code von freedesktop.org versucht nach Kylix (Delphi) zu portieren. Bisher schaut das so aus...


Wow, ich bin beeindruckt!



Vielleicht kann mir ja jemand weiter helfen oder hat z.B. ein kleines Mini-Beispiel (also kleines funktionsfähiges Programm) dafür in C/C++ parat... das würde mir gewiss auch sehr helfen.


Ich hab mal versucht, nachzuvollziehen, wie das in KDE gemacht wird, bzw. wie das die entsprechenden Klassen in KDE machen.

Die entsprechende Klasse ist da KWin, die Methode setSystemTrayWindowFor, die zwei Window IDs als Parameter nimmt: die Window ID des Tray windows und die ID des Applikations Hauptfensters.

Damit wird dann eine Klasse NETWinInfo gefüllt und eine Methode davon aufgerufen (NETWinInfo::setKDESystemTrayWinFor)

Die beiden .cpp Dateien sind in kdelibs/kdecore und heißen kwin.cpp und netwm.cpp
http://webcvs.kde.org/cgi-bin/cvsweb.cgi/kdelibs/kdecore/

Vielleicht kannst du damit was anfangen.

Ciao,
_

woodghost
25-05-2003, 12:32
Hi,
würde mich auch mal interressieren wie man das in die Systray bekommt.
Hab damit auch schon mal rummprobiert, bin aber kläglich gescheitert. Also falls das jemand hinbekommen hat würde es mich freuen wenn er hier ein kleines Beispiel posten würde.

woodghost
25-05-2003, 22:43
Ich hab zu dem Thema bei kylixforum.de was gefunden.

Systray (http://www.kylixforum.de/forum/viewtopic.php?t=153)

anda_skoa
25-05-2003, 22:48
erstklassig, danke!

Ciao,
_