Linux - Fehlermeldung `gtk_widget_get_can_focus (focus)'

Rund um die LCL und andere Komponenten
Antworten
MmVisual
Beiträge: 1127
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winux (L 1.6 FPC 3)
CPU-Target: 32/64Bit

Linux - Fehlermeldung `gtk_widget_get_can_focus (focus)'

Beitrag von MmVisual »

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.

Benutzeravatar
theo
Beiträge: 8462
Registriert: Mo 11. Sep 2006, 19:01

Re: Linux - Fehlermeldung `gtk_widget_get_can_focus (focus)'

Beitrag von theo »

Was hast du denn schon alles versucht? Schon nach der Fehlermeldung gegoogelt?

MmVisual
Beiträge: 1127
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winux (L 1.6 FPC 3)
CPU-Target: 32/64Bit

Re: Linux - Fehlermeldung `gtk_widget_get_can_focus (focus)'

Beitrag von MmVisual »

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:

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;


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.

Benutzeravatar
theo
Beiträge: 8462
Registriert: Mo 11. Sep 2006, 19:01

Re: Linux - Fehlermeldung `gtk_widget_get_can_focus (focus)'

Beitrag von theo »

Hast du den nicht gefunden?
https://bugs.launchpad.net/ubuntu/+sour ... bug/805303

Schon mal mit einem anderen Theme versucht?

MmVisual
Beiträge: 1127
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winux (L 1.6 FPC 3)
CPU-Target: 32/64Bit

Re: Linux - Fehlermeldung `gtk_widget_get_can_focus (focus)'

Beitrag von MmVisual »

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?

Bora4d
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)'

Beitrag von Bora4d »

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.

MmVisual
Beiträge: 1127
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winux (L 1.6 FPC 3)
CPU-Target: 32/64Bit

Re: Linux - Fehlermeldung `gtk_widget_get_can_focus (focus)'

Beitrag von MmVisual »

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.

Bora4d
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)'

Beitrag von Bora4d »

Na dann viel Spaß mit Bugfix in GTK 2.xxx C-Quelltexten :D
Wenn ein GTK-Standardbild fehlt und auch wenn du gar nicht benutzt gibt es solche Meldungen.

MmVisual
Beiträge: 1127
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winux (L 1.6 FPC 3)
CPU-Target: 32/64Bit

Re: Linux - Fehlermeldung `gtk_widget_get_can_focus (focus)'

Beitrag von MmVisual »

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.

Antworten