Hinweis: Das Forum wird geschlossen! Neue Registrierungen sind nicht mehr möglich!

 Zurück zu Pro-Linux   Foren-Übersicht   FAQ     Suchen    Mitgliederliste
Intrensics

 
Neuen Beitrag schreiben   Auf Beitrag antworten    Pro-Linux Foren-Übersicht -> Programmieren - C
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
grisu1972



Anmeldungsdatum: 22.07.2008
Beiträge: 16

BeitragVerfasst am: 04. Aug 2008 14:21   Titel: Intrensics

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?
 
Benutzer-Profile anzeigen Private Nachricht senden

Janka



Anmeldungsdatum: 11.02.2006
Beiträge: 3569

BeitragVerfasst am: 04. Aug 2008 20:10   Titel:

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.
 
Benutzer-Profile anzeigen Private Nachricht senden

grisu1972



Anmeldungsdatum: 22.07.2008
Beiträge: 16

BeitragVerfasst am: 05. Aug 2008 8:26   Titel:

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?
 
Benutzer-Profile anzeigen Private Nachricht senden

Janka



Anmeldungsdatum: 11.02.2006
Beiträge: 3569

BeitragVerfasst am: 05. Aug 2008 17:12   Titel:

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.
 
Benutzer-Profile anzeigen Private Nachricht senden

grisu1972



Anmeldungsdatum: 22.07.2008
Beiträge: 16

BeitragVerfasst am: 06. Aug 2008 10:34   Titel:

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!
 
Benutzer-Profile anzeigen Private Nachricht senden

Janka



Anmeldungsdatum: 11.02.2006
Beiträge: 3569

BeitragVerfasst am: 06. Aug 2008 11:46   Titel:

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.
 
Benutzer-Profile anzeigen Private Nachricht senden

grisu1972



Anmeldungsdatum: 22.07.2008
Beiträge: 16

BeitragVerfasst am: 06. Aug 2008 12:39   Titel:

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"?
 
Benutzer-Profile anzeigen Private Nachricht senden

grisu1972



Anmeldungsdatum: 22.07.2008
Beiträge: 16

BeitragVerfasst am: 07. Aug 2008 10:41   Titel:

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!
 
Benutzer-Profile anzeigen Private Nachricht senden

Beiträge vom vorherigen Thema anzeigen:   
     Pro-Linux Foren-Übersicht -> Programmieren - C Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehen Sie zu:  

Powered by phpBB © phpBB Group
pro_linux Theme © 2004 by Mandaxy