Pro-Linux

Pro-Linux Diskussions- und Hilfeforum
Aktuelle Zeit: 12. Nov 2018 23:43

Alle Zeiten sind UTC+01:00




Ein neues Thema erstellen  Auf das Thema antworten  [ 8 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Intrensics
BeitragVerfasst: 04. Aug 2008 14:21 
Offline

Registriert: 22. Jul 2008 11:03
Beiträge: 16
Hallo Leute,

ich möchte eine X Anwendung die auf Intrinsics aufbaut wemm sie das Signal SIGUSR2 bekommt in den Vordergrund bekommen.
Das Signal habe ich abgefangen, aber ich bin absoluter Anfänger bzg. intrinsics!

Wenn ich es richtig verstanden habe muß ich mittels eines Xevent an den XServer eine Botschaft schicken, der XServer schickt dann eine Nachricht an alle Applikationen unter anderen meine die das Signal Expose bekommt und in den Vordergrund kommt!

Ist das vom Konzept richtig?
Und wenn ja, wie realsiere ich das?

Kann mir jemand helfen?


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 04. Aug 2008 20:10 
Offline
Benutzeravatar

Registriert: 11. Feb 2006 19:10
Beiträge: 3569
Das hast du falsch verstanden.

"Expose" ist ein Event, den eine Anwendung zugestellt bekommt, wenn ihr Fenster aus der kompletten Verdeckung heraustritt, also zumindest 1 Pixel des Fensters sichtbar ist. Normalerweise schickt der Windowmanager dieses Event.

Die Anwendung kann das Expose-Event nutzen, um erst in diesem Moment den Fensterinhalt neu zu zeichnen. Das zu tun, wenn er eh nicht sichtbar ist, wäre ja Unsinn.

Wenn du ein Fenster ganz nach oben schieben willst, musst du dem Windowmanager eine Nachricht schicken. *Der* ändert dann die Stacking order, wenn der Benutzer das so möchte. Es gibt auch Windowmanager, die nur Tiles benutzen, also nie irgendein Fenster verdecken.

Janka

_________________
Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie.


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 05. Aug 2008 8:26 
Offline

Registriert: 22. Jul 2008 11:03
Beiträge: 16
Hallo Janka,

das Problem ergibt sich daraus, das diese Applikation beim Start überprüft ob es schon eine Instanz gibt. Ist dies der Fall wir an die ältere Applikation ein SIGUSR2 geschickt und die neue Applikation beendet sich!
Wenn die Applikation ein SIGUSR2 bekommt soll sie in den Vordergrund popen!
Dazu möchte ich das Expose Signal verwenden.
Die Vorgehensweise wäre wiefolgt:
1. DIe Applikation erhält ein SIGUSR2
2. Die Appl. sendet ein Expose Signal an den XServer
3. Der XServer organisiert die Fenster neu und meine Appl. ist in den Vordergrund gepopt

Dazu meine Fragen:
Ist das Vorgehen so richtig, du schreibts das dies über den Window Manager gehn muss, wo ist mein Denkfehler?
Zu meiner Vorgehnsweise:Muss das Expose Signal muss mittels xevent geschickt werden, und wenn wie?


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 05. Aug 2008 17:12 
Offline
Benutzeravatar

Registriert: 11. Feb 2006 19:10
Beiträge: 3569
Du hast meinen Kommentar nicht richtig gelesen. Der Expose-Event ist ein Event, den deine Applikation
*bekommt*, wenn sie eins ihrer Fenster neu zeichnen soll.
"Expose" heißt nur "Expose", nicht "Raise".
Es gibt weiterhin kein "Expose-Signal". Richtige Termini beachten!

Die Reihenfolge der Fenster im Fensterstapel kannst du mit XCirculateSubwindows() und XRaiseWindow() vorschlagen.
Der Windowmanager muss sich nicht daran halten. Es gibt keine Möglichkeit, die Reihenfolge zu erzwingen (außer mit OverrideRedirect, aber dann werden dich deine Benutzer *hassen*). Die meisten Windowmanager werden sich aber an Vorschläge halten.

Janka

_________________
Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie.


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 06. Aug 2008 10:34 
Offline

Registriert: 22. Jul 2008 11:03
Beiträge: 16
Hallo Janka,

Danke für die Hilfe und den letztendlich zielführenden Tip:

Benutzt habe ich folgendes:

void receiveSIGUSR2(int sig)
{
XMapRaised(g_display, g_window);
XFlush(display);
}


Wichtig ist das XFlush(), ohne das es nicht funktioniert (hat mich 1 Stunde gekostet)!

Danke und Gruß



Neinnnnn
es kappt noch nicht ganz, es wir angezeigt wenn es minimiert wurde aber nicht wenn es im Hintergrund ist, muss noch malk forschen!


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 06. Aug 2008 11:46 
Offline
Benutzeravatar

Registriert: 11. Feb 2006 19:10
Beiträge: 3569
XMapRaised() ändert Fenster, die bereits gemappt sind nicht. Logisch, oder?

Janka

_________________
Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie.


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 06. Aug 2008 12:39 
Offline

Registriert: 22. Jul 2008 11:03
Beiträge: 16
Das Fenster popt auf wenn es minimiert ist. Es popt aber nicht in den Vordergrund. Das möchte ich aber haben. Mit XCirculateSubwindows() kann man die Fenster einer Applikation organisieren.
Was ich such ist ein "raiseToTop"?


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 07. Aug 2008 10:41 
Offline

Registriert: 22. Jul 2008 11:03
Beiträge: 16
Ahhh ich bin wissend (naja, ein bisschen zumindest!)!

Es sind zwei Schritte notwendig:
1. dafür sorgen das die Appl. nicht minimiert ist
2. die Appl. in der stacking order nach vorne bringen

void receiveSIGUSR2(int sig)
{
Window tmpWin = XtWindowOfObject(widgetParent);

XMapWindow(display, tmpWin);
XMapRaised(display, tmpWin);
XFlush(display);

XWindowChanges werte;
werte.stack_mode = Above;
XReconfigureWMWindow(display, tmpWin, DefaultScreen(display), CWStackMode, &werte);
}


Anmerkung:
Unter KDE wird die Applikation nicht in den Vordergrund gebracht sondern in der Taskleiste blinkt sie. Das Zielsystem benutz den mwm und dort funktioniert es!

Danke an Janka!


Nach oben
   
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen  Auf das Thema antworten  [ 8 Beiträge ] 

Alle Zeiten sind UTC+01:00


Wer ist online?

Mitglieder in diesem Forum: Bing [Bot] und 0 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.
Sie dürfen keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
Powered by phpBB® Forum Software © phpBB Limited
Deutsche Übersetzung durch phpBB.de