Ich werd noch irre. Also das Problem mit den Windowevents bei deaktiviertem Programm habe ich für diesen Fall mit einem MessageRequester gelöst, nachdem das Fremdprogramm beendet wurde, erhalte ich nun eine Nachricht über die importierten Daten. Die nicht gewünschten Knopfdrücke werden so abgefangen.
Jedoch ändere ich programmintern den Inhalt eines ComboBoxGadgets und will das Ereignis aber nur auswerten, wenn der User etwas ändert. Dafür ist die Variable >Aktiv< da.
Ich setze Aktiv auf 0 und ändere programmintern das ComboBoxGadget und nach der Änderung herhält Aktiv wieder den Wert 1.
Unter Windows geht das sogar auch ohne die Aktiv-Variable.
Unter Ubuntu geht das nicht. Es ist als würde der Code irgendwo parallel abgearbeitet oder die Events liegen in einem Puffer bis Aktiv wieder 1 ist.
Ein Beispielcode was ich da meine:
Code: Alles auswählen
OpenWindow(0,0,0,520,130,"Test", #PB_Window_MinimizeGadget)
Global Aktiv = 1
ComboBoxGadget(2,5,5,400,35)
ButtonGadget(3,410,5,100,35,"LÖSCHEN")
StringGadget(4,5,50,400,35,"")
ButtonGadget(5,410,50,100,35,"ANLEGEN")
TextGadget(6,5,100,400,35,"")
For a = 3 To 6
  DisableGadget(a,1)
Next
Procedure MsgBox(Titel.s, Inhalt.s, Aussehen)
  DisableWindow(0,1)
  a = MessageRequester(Titel,Inhalt,Aussehen)
  DisableWindow(0,0)
  ProcedureReturn a
EndProcedure
Procedure Startzustand()
  For a = 3 To 6
     DisableGadget(a,1)
 Next
 SetGadgetText(4,"")
 SetGadgetText(6,"")
EndProcedure
Procedure Eintrag(Name.s)
 
  ClearGadgetItems(2)
  AddGadgetItem(2,-1,"Neueintrag")
    If ExamineDirectory(0,"daten/","*")
      a = 0
      b = 0
    While NextDirectoryEntry(0)
      If DirectoryEntryType(0) = #PB_DirectoryEntry_Directory
        Wert.s = DirectoryEntryName(0)
        If Wert <> "." And Wert <> ".."
          a = a +1
          AddGadgetItem(2,-1,Wert)
          If Wert = Name
            b = a
          EndIf
        EndIf
      EndIf
    Wend
    If b > 0
      SetGadgetState(2,b)
    EndIf
    FinishDirectory(0)
  EndIf
EndProcedure
Eintrag("")
Repeat
  eingabe = WaitWindowEvent()
  VON = EventGadget()
  If Aktiv = 1 And VON
    Select EventType()
      Case #PB_EventType_LeftClick
        Debug "---------------Click" + Str(von)
        If VON = 3
          Aktiv = 0 ;<---------------------------- Inaktiv
         If MsgBox("ACHTUNG!", "Sollen alle Daten von >"+GetGadgetText(2)+"< gelöscht werden?",#PB_MessageRequester_YesNo) = #PB_MessageRequester_Yes
           If DeleteDirectory("daten/"+GetGadgetText(2),"",#PB_FileSystem_Recursive)
            Startzustand()
             Eintrag("")
             MsgBox("Info","Daten gelöscht!",0)
           Else
             MsgBox("Fehler","Konnte Daten nicht löschen!",0)
           EndIf
         EndIf
           Aktiv = 1 ;<------------------------- Aktiv
       ElseIf VON = 5
         If GetGadgetText(4) <> ""
           Wert.s = UCase(GetGadgetText(4))
           If CheckFilename(Wert)
             If ExamineDirectory(0,"daten/"+Wert,"*")
               MsgBox("Fehler","Name bereits vergeben!",0)
               FinishDirectory(0)
             Else
               If CreateDirectory("daten/"+Wert)
                 SetGadgetText(4,"")
                 DisableGadget(4,1)
                 DisableGadget(5,1)
                 Eintrag(Wert)
               Else
                 MsgBox("Fehler","Kann Ordner nicht erstellen!",0)
               EndIf
               
             EndIf
           Else
             MsgBox("Fehler","Ungültige Zeichen im Namen!",0)
           EndIf
         EndIf
       EndIf
     Case #PB_EventType_Change ; combobox
       Debug "------------change" + Str(von) + " " +Str(Aktiv)
       If VON = 2 
           Startzustand()
           If GetGadgetText(2) = "Neueintrag"
             DisableGadget(4,0)
             DisableGadget(5,0)
           ElseIf GetGadgetText(2) = ""
             
             Debug "möp" + Str(Aktiv) ;<------------------------ Das dürfte nicht kommen
             
           Else
             DisableGadget(3,0)
             SetGadgetText(6,GetGadgetText(2))
           EndIf
       EndIf
   EndSelect
 EndIf
 
Until eingabe = #PB_Event_CloseWindow And Aktiv
Mein Ziel ist es durch das Programm das ComboBoxGadget zu ändern, ohne daß der Teil abgearbeitet wird, wenn der User es ändert.