Linux - Fehlermeldung `gtk_widget_get_can_focus (focus)'
-
- Beiträge: 1579
- Registriert: Fr 10. Okt 2008, 23:54
- OS, Lazarus, FPC: Winuxarm (L 4 FPC 3.2.2)
- CPU-Target: 32/64Bit
Linux - Fehlermeldung `gtk_widget_get_can_focus (focus)'
Hallo,
Ich bin gerade dabei alle Meldungen zu beseitigen, die Linux auf der Konsole aus gibt während meine EXE läuft.
Jetzt erscheinen noch diese Warnungen immer wieder:
(EleLa:5092): Gtk-CRITICAL **: IA__gtk_window_set_focus: assertion `gtk_widget_get_can_focus (focus)' failed
Im Quellcode steht immer
If xxxx.CanFocus Then xxxx.SetFocus;
Ich prüfe jedes mal ob ich den Focus setzen kann. Aber diese Warnung erscheint schon bei der Prüfung von CanFocus.
Wie kann ich das beheben?
Grüße Markus.
Ich bin gerade dabei alle Meldungen zu beseitigen, die Linux auf der Konsole aus gibt während meine EXE läuft.
Jetzt erscheinen noch diese Warnungen immer wieder:
(EleLa:5092): Gtk-CRITICAL **: IA__gtk_window_set_focus: assertion `gtk_widget_get_can_focus (focus)' failed
Im Quellcode steht immer
If xxxx.CanFocus Then xxxx.SetFocus;
Ich prüfe jedes mal ob ich den Focus setzen kann. Aber diese Warnung erscheint schon bei der Prüfung von CanFocus.
Wie kann ich das beheben?
Grüße Markus.
EleLa - Elektronik Lagerverwaltung - www.elela.de
Re: Linux - Fehlermeldung `gtk_widget_get_can_focus (focus)'
Was hast du denn schon alles versucht? Schon nach der Fehlermeldung gegoogelt?
-
- Beiträge: 1579
- Registriert: Fr 10. Okt 2008, 23:54
- OS, Lazarus, FPC: Winuxarm (L 4 FPC 3.2.2)
- CPU-Target: 32/64Bit
Re: Linux - Fehlermeldung `gtk_widget_get_can_focus (focus)'
Ja, google liefert genau einen Eintrag. Und da ich mich mit Linux nicht sooo gut auskenne, daher frage ich mal hier.
Ich habe einen ziemlich dicken Quellcode, über 40000 Zeilen.
Darin habe ich jetzt alle
If xxxx.CanFocus Then xxxx.SetFocus
mal ersetzt:
Diese Timer-Lösung ist auch mehr eine Krücke.
Ich habe festgestellt, ich Klicke auf einen Reiter, dann erscheint im Terminal Fenster diese Warnung und dann erst wird der Inhalt des Reiters gezeigt. Es geht zwar ziemlich schnell, aber dennoch ist das so zu sehen. Darauf hin habe ich das mit dem Timer eingebaut und die Warnungen kommen deutlich weniger.
Ich habe einen ziemlich dicken Quellcode, über 40000 Zeilen.
Darin habe ich jetzt alle
If xxxx.CanFocus Then xxxx.SetFocus
mal ersetzt:
Code: Alles auswählen
Procedure TfrmMain.tmrSetFocus(ctrl: TWinControl);
Begin
ErrMessagesAdd('tmrSetFocus.' + ctrl.Name);
If Not Assigned(tmrFocus) Then
Begin
tmrFocus := TTimer.Create(Self);
tmrFocus.Name := 'tmrFocus';
tmrFocus.Enabled := False;
tmrFocus.OnTimer := @tmrFocusOnTimer;
tmrFocus.Interval := {$ifdef LINUX}800{$else}50{$endif};
end Else
tmrFocus.Enabled := False;
tmrFocus.Tag := PtrInt(ctrl);
tmrFocus.Enabled := True;
ErrMessagesRemove();
end;
procedure TfrmMain.tmrFocusOnTimer(Sender: TObject);
Var ctrl: TWinControl;
Begin
ErrMessagesAdd('tmrFocusOnTimer');
TTimer(Sender).Enabled := False;
If tmrFocus.Tag > 0 Then
Begin
ctrl := TWinControl(TTimer(Sender).Tag);
TTimer(Sender).Tag := 0;
If ErrMessagesDebugMode >= 2 Then
ErrMessagesChange('tmrFocusOnTimer: ' + ctrl.Name);
If ctrl Is TComboBox Then
Begin
If TComboBox(ctrl).CanFocus Then
TComboBox(ctrl).SetFocus
Else If ErrMessagesDebugMode >= 2 Then
ErrMessagesChange('tmrFocusOnTimer Fail: ' + ctrl.Name);
end Else
If ctrl Is TTreeView Then
Begin
If TTreeView(ctrl).CanFocus Then
TTreeView(ctrl).SetFocus
Else If ErrMessagesDebugMode >= 2 Then
ErrMessagesChange('tmrFocusOnTimer Fail: ' + ctrl.Name);
end Else Begin
If TEdit(ctrl).CanFocus Then
TEdit(ctrl).SetFocus
Else If ErrMessagesDebugMode >= 2 Then
ErrMessagesChange('tmrFocusOnTimer Fail: ' + ctrl.Name);
end;
end;
ErrMessagesRemove();
end;
Ich habe festgestellt, ich Klicke auf einen Reiter, dann erscheint im Terminal Fenster diese Warnung und dann erst wird der Inhalt des Reiters gezeigt. Es geht zwar ziemlich schnell, aber dennoch ist das so zu sehen. Darauf hin habe ich das mit dem Timer eingebaut und die Warnungen kommen deutlich weniger.
EleLa - Elektronik Lagerverwaltung - www.elela.de
Re: Linux - Fehlermeldung `gtk_widget_get_can_focus (focus)'
Hast du den nicht gefunden?
https://bugs.launchpad.net/ubuntu/+sour ... bug/805303" onclick="window.open(this.href);return false;
Schon mal mit einem anderen Theme versucht?
https://bugs.launchpad.net/ubuntu/+sour ... bug/805303" onclick="window.open(this.href);return false;
Schon mal mit einem anderen Theme versucht?
-
- Beiträge: 1579
- Registriert: Fr 10. Okt 2008, 23:54
- OS, Lazarus, FPC: Winuxarm (L 4 FPC 3.2.2)
- CPU-Target: 32/64Bit
Re: Linux - Fehlermeldung `gtk_widget_get_can_focus (focus)'
Nein, nicht gefunden und auch nicht versucht. Ich habe nur SUSE 12.1 installiert (ohne Updates), das Lazarus RPM drauf und noch Krusader, mehr nicht.
Das ganze solle als Referenz-System dienen. Dann kann ich immer schreiben, ganz einfach so installieren und es tut.
Das Linux läuft bei mir in einer Virtual-Box.
Welches Theme solle ich nehmen?
Das ganze solle als Referenz-System dienen. Dann kann ich immer schreiben, ganz einfach so installieren und es tut.
Das Linux läuft bei mir in einer Virtual-Box.
Welches Theme solle ich nehmen?
EleLa - Elektronik Lagerverwaltung - www.elela.de
-
- Beiträge: 290
- Registriert: Mo 24. Dez 2007, 13:14
- OS, Lazarus, FPC: WinXP-Pro-Sp3, Xubuntu 12.04, (Laz 1.1-SVN Mai2012, FPC 2.6.1 / 2.6.0-Linux)
- CPU-Target: AMD64X2
Re: Linux - Fehlermeldung `gtk_widget_get_can_focus (focus)'
Wenn dein Programm fehlerfrei läuft würde ich solche Meldungen ignorieren. Hast du schon mal irgendein standard GTK-Programm von der Konsole gestartet?
Die geben haufenweise solche Meldungen.
Die geben haufenweise solche Meldungen.
-
- Beiträge: 1579
- Registriert: Fr 10. Okt 2008, 23:54
- OS, Lazarus, FPC: Winuxarm (L 4 FPC 3.2.2)
- CPU-Target: 32/64Bit
Re: Linux - Fehlermeldung `gtk_widget_get_can_focus (focus)'
Das ist eben die Preisfrage:
Wenn solch eine Meldung kommt, bricht da die Verarbeitung ab, wie bei einer Exception?
In meiner Exe gibt es ein Event das ich bei "Application.OnException" ausführe und das loggt alles. Somit kann ich nachvollziehen in welcher Routine samt Aufrufhierarchie die Exception auf trat. Nur klappt das bei Lazarus nicht zu 100%, viele Exceptions werden einfach nicht geloggt, aber unter Linux in der Konsole sind die dennoch sichtbar (Stack-Trace mit 16-Stelligen HEX-Zahlen).
Somit, alles was da steht und nicht ich selbst schreibe ist ein Bug.
Wenn andere das einfach ignorieren, dann ist das noch lange kein Maßstab für meine Programmiertätigkeit, denn da läuft intern was schief. Aus Erfahrung weiß ich, dass auch jede noch so kleine Warnung zu 50% ein Fehler sein kann, dem man nachgehen muss.
Wenn solch eine Meldung kommt, bricht da die Verarbeitung ab, wie bei einer Exception?
In meiner Exe gibt es ein Event das ich bei "Application.OnException" ausführe und das loggt alles. Somit kann ich nachvollziehen in welcher Routine samt Aufrufhierarchie die Exception auf trat. Nur klappt das bei Lazarus nicht zu 100%, viele Exceptions werden einfach nicht geloggt, aber unter Linux in der Konsole sind die dennoch sichtbar (Stack-Trace mit 16-Stelligen HEX-Zahlen).
Somit, alles was da steht und nicht ich selbst schreibe ist ein Bug.
Wenn andere das einfach ignorieren, dann ist das noch lange kein Maßstab für meine Programmiertätigkeit, denn da läuft intern was schief. Aus Erfahrung weiß ich, dass auch jede noch so kleine Warnung zu 50% ein Fehler sein kann, dem man nachgehen muss.
EleLa - Elektronik Lagerverwaltung - www.elela.de
-
- Beiträge: 290
- Registriert: Mo 24. Dez 2007, 13:14
- OS, Lazarus, FPC: WinXP-Pro-Sp3, Xubuntu 12.04, (Laz 1.1-SVN Mai2012, FPC 2.6.1 / 2.6.0-Linux)
- CPU-Target: AMD64X2
Re: Linux - Fehlermeldung `gtk_widget_get_can_focus (focus)'
Na dann viel Spaß mit Bugfix in GTK 2.xxx C-Quelltexten
Wenn ein GTK-Standardbild fehlt und auch wenn du gar nicht benutzt gibt es solche Meldungen.

Wenn ein GTK-Standardbild fehlt und auch wenn du gar nicht benutzt gibt es solche Meldungen.
-
- Beiträge: 1579
- Registriert: Fr 10. Okt 2008, 23:54
- OS, Lazarus, FPC: Winuxarm (L 4 FPC 3.2.2)
- CPU-Target: 32/64Bit
Re: Linux - Fehlermeldung `gtk_widget_get_can_focus (focus)'
Ich denke mal, dass die Linux-Bugs irgend wer mal behebt, ich jedenfalls nicht. Ich habe schon genügend mit meiner EXE zu tun dort alle Bugs raus zu bekommen.
EleLa - Elektronik Lagerverwaltung - www.elela.de