PB-Bug unter Linux? Gadgets werden unsichtbar

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Sicro
Beiträge: 968
Registriert: 11.08.2005 19:08
Kontaktdaten:

PB-Bug unter Linux? Gadgets werden unsichtbar

Beitrag von Sicro »

Da ich hier auch unsicher bin, ob das ein Linux-Bug oder PB-Bug ist, erstelle ich diesen Thread ebenfalls in "Allgemein".

Code: Alles auswählen

OpenWindow(0, 0, 0, 200, 150, "Test", #PB_Window_SystemMenu|#PB_Window_ScreenCentered) ; <<<<<< Fügt man hier noch #PB_Window_BorderLess an, bleibt der Button auch sichtbar
ButtonGadget(0, 50, 50, 100, 30, "ResizeWindow")
Repeat
  Event = WaitWindowEvent()
  If Event = #PB_Event_Gadget
    ResizeWindow(0, #PB_Ignore, #PB_Ignore, #PB_Ignore, 149) ; Anstatt 149 kann auch was anderes stehen
    While WindowEvent() : Wend ; <<<<< Verschiebt man diese Zeile hinter den zwei HideWindow(), bleibt der Button sichtbar
    HideWindow(0, #True)
    HideWindow(0, #False)
    ;While WindowEvent() : Wend
  EndIf
Until Event = #PB_Event_CloseWindow
Lustig finde ich, dass der Button wirklich nur unsichtbar ist, da er immer noch bedient werden kann. :lol:

Wird als Subsystem "gtk3" angegeben, bleibt der Button ebenfalls sichtbar.
Bild
Warum OpenSource eine Lizenz haben sollte :: PB-CodeArchiv-Rebirth :: Pleasant-Dark (Syntax-Farbschema) :: RegEx-Engine (kompiliert RegExes zu NFA/DFA)
Manjaro Xfce x64 (Hauptsystem) :: Windows 10 Home (VirtualBox) :: Neueste PureBasic-Version
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: PB-Bug unter Linux? Gadgets werden unsichtbar

Beitrag von ts-soft »

Scheint ein GTK2, x64 Problem zu sein, alle anderen Versionen zeigen den Button normal an. Kannst Du also beruhigt melden den Bug.
Aber drauf hinweisen, das nur 64-Bit betroffen ist!

Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Omi
Beiträge: 143
Registriert: 25.03.2013 09:59

Re: PB-Bug unter Linux? Gadgets werden unsichtbar

Beitrag von Omi »

Hi sicro,

der Button erscheint auch unter 32-Bit-Xubuntu nicht wieder.
Ich denke das
HideWindow(0, #True)
HideWindow(0, #False)

ist fürs gtk2 zu schnell.
Beim While WindowEvent() : Wend zwischen beiden HideWindow() bleibt der Button bei mir auch erhalten.
Ähm, kann man das überhaupt irgendwo sinnvoll einsetzen? :wink:

Gruß Charly
PureBasic Linux-API-Library: http://www.chabba.de
Benutzeravatar
Sicro
Beiträge: 968
Registriert: 11.08.2005 19:08
Kontaktdaten:

Re: PB-Bug unter Linux? Gadgets werden unsichtbar

Beitrag von Sicro »

ts-soft hat geschrieben:Aber drauf hinweisen, das nur 64-Bit betroffen ist!
Omi hat geschrieben:der Button erscheint auch unter 32-Bit-Xubuntu nicht wieder.
Ich habe gerade auch nochmal unter Xubuntu (x86, virtuelles) getestet und kann Omis Aussage bestätigen.
ts-soft, jetzt wäre es interessant, welche 32-Bit-Linux-Distribution du getestet hast.
Omi hat geschrieben:Ähm, kann man das überhaupt irgendwo sinnvoll einsetzen? :wink:
Der Code ist eine auf den Fehler komprimierte Version von diesem Code:

Code: Alles auswählen

EnableExplicit

#WindowHeight = 100 ; Sollte durch 10 teilbar sein

Procedure Ticker(*Stop.Integer)
  Repeat
    Delay(500)
    PostEvent(#PB_Event_Timer, 0, 0)
  Until *Stop\i
EndProcedure

If ExamineDesktops()
  OpenWindow(0, 0, 0, DesktopWidth(0), 0, "Test", #PB_Window_BorderLess|#PB_Window_Tool|#PB_Window_Invisible)
  StickyWindow(0, #True)
  ButtonGadget(0, WindowWidth(0)-25, 5, 20, 20, "X")
Else
  Debug "Fehler!"
  End
EndIf

Define.i Thread, Stop, Event, Window_Visible, i
Thread = CreateThread(@Ticker(), @Stop)
Repeat
  Event = WaitWindowEvent()
  Select Event
    Case #PB_Event_Timer
      If ExamineDesktops()
        If DesktopMouseY() < 5 And Not Window_Visible
          HideWindow(0, #False)
          Window_Visible = #True
          For i = 10 To #WindowHeight Step 10
            ResizeWindow(0, #PB_Ignore, #PB_Ignore, #PB_Ignore, i)
            While WindowEvent() : Wend
            Delay(10)
          Next
        ElseIf DesktopMouseY() > WindowHeight(0, #PB_Window_FrameCoordinate) And Window_Visible
          For i = #WindowHeight-10 To 0 Step -10
            ResizeWindow(0, #PB_Ignore, #PB_Ignore, #PB_Ignore, i)
            While WindowEvent() : Wend
            Delay(10)
          Next
          HideWindow(0, #True)
          Window_Visible = #False
        EndIf
      EndIf
    Case #PB_Event_Gadget
      If EventGadget() = 0
        Stop = #True
        WaitThread(Thread)
        CloseWindow(0)
        Break
      EndIf
  EndSelect
Until Event = #PB_Event_CloseWindow
Nehme ich das Verstecken des Fensters raus, bleibt der Button sichtbar; aber im zusammengeklapptem Zustand ist das Fenster immer noch ein Pixel hoch (kleinste mögliche Fensterhöhe) und deshalb sieht man oben noch ein Streifen vom Fenster.
Wird bei ResizeWindow(..., 0) angegeben, ändert ResizeWindow die "0" automatisch zu einer "1".
Bild
Warum OpenSource eine Lizenz haben sollte :: PB-CodeArchiv-Rebirth :: Pleasant-Dark (Syntax-Farbschema) :: RegEx-Engine (kompiliert RegExes zu NFA/DFA)
Manjaro Xfce x64 (Hauptsystem) :: Windows 10 Home (VirtualBox) :: Neueste PureBasic-Version
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: PB-Bug unter Linux? Gadgets werden unsichtbar

Beitrag von ts-soft »

>> ts-soft, jetzt wäre es interessant, welche 32-Bit-Linux-Distribution du getestet hast.
Ich habe XUbuntu 14.04 32-Bit unter Virtualbox genutzt. Bei 64-Bit habe ich meine
Original Ubuntu Gnome Shell 14.04 genutzt. Könnte also sein, das die 32-Bit Version etwas
langsamer ist und somit der Button sichtbar?

Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Omi
Beiträge: 143
Registriert: 25.03.2013 09:59

Re: PB-Bug unter Linux? Gadgets werden unsichtbar

Beitrag von Omi »

Hi sicro,

der eigentliche Code macht natürlich mehr Sinn. Das Button-Problem tritt auch auf all meinen installierten Ubuntu-Derivaten unter 32 und 64-Bit auf.

Generell hab ich, was 'Fenstereffekte' mit schnellem Neuzeichnen außerhalb der eigentlichen Eventschleife betrifft, auch bemerkt, dass Windows das häufig noch 'mitnimmt' oder mit Hausmitteln zur gewünschten Darstellung bringen läßt aber auf einigen Linux-Distris oder Windowmanagern etwas verschluckt wird, das mit 'While WindowEvent() : Wend' nicht ausgebügelt wird.

Hab mal meinen Linux-'Workaround', der mir noch keine Probleme machte, auf Deinen Code angewendet. Er funktioniert auf all meinen installierten Linuxen...

Code: Alles auswählen

EnableExplicit

#WindowHeight = 100 ; Sollte durch 10 teilbar sein

Procedure Ticker(*Stop.Integer)
  Repeat
    Delay(500)
    PostEvent(#PB_Event_Timer, 0, 0)
  Until *Stop\i
EndProcedure

Procedure.i GetGdkWindow(Window);                Linux-API-Ergänzung
	Protected *Widget.GtkWidget= WindowID(Window)
	ProcedureReturn *Widget\window
EndProcedure

If ExamineDesktops()
  OpenWindow(0, 0, 0, DesktopWidth(0), 0, "Test", #PB_Window_BorderLess|#PB_Window_Tool|#PB_Window_Invisible)
  StickyWindow(0, #True)
  ButtonGadget(0, WindowWidth(0)-25, 5, 20, 20, "X")
Else
  Debug "Fehler!"
  End
EndIf

Define.i Thread, Stop, Event, Window_Visible, i
Define GdkWindow= GetGdkWindow(0);               Linux-API-Ergänzung
Thread = CreateThread(@Ticker(), @Stop)
Repeat
  Event = WaitWindowEvent()
  Select Event
    Case #PB_Event_Timer
      If ExamineDesktops()
        If DesktopMouseY() < 5 And Not Window_Visible
          HideWindow(0, #False)
          Window_Visible = #True
          For i = 10 To #WindowHeight Step 10
            ResizeWindow(0, #PB_Ignore, #PB_Ignore, #PB_Ignore, i)
            ;While WindowEvent() : Wend
            gdk_window_process_updates_(GdkWindow, #True); Linux-API-Ergänzung
            Delay(10)
          Next
        ElseIf DesktopMouseY() > WindowHeight(0, #PB_Window_FrameCoordinate) And Window_Visible
          For i = #WindowHeight-10 To 0 Step -10
            ResizeWindow(0, #PB_Ignore, #PB_Ignore, #PB_Ignore, i)
            ;While WindowEvent() : Wend
            gdk_window_process_updates_(GdkWindow, #True); Linux-API-Ergänzung
            Delay(10)
          Next
          HideWindow(0, #True)
          Window_Visible = #False
        EndIf
      EndIf
    Case #PB_Event_Gadget
      If EventGadget() = 0
        Stop = #True
        WaitThread(Thread)
        CloseWindow(0)
        Break
      EndIf
  EndSelect
Until Event = #PB_Event_CloseWindow
Gruß, Charly
PureBasic Linux-API-Library: http://www.chabba.de
Benutzeravatar
Sicro
Beiträge: 968
Registriert: 11.08.2005 19:08
Kontaktdaten:

Re: PB-Bug unter Linux? Gadgets werden unsichtbar

Beitrag von Sicro »

ts-soft hat geschrieben:Ich habe XUbuntu 14.04 32-Bit unter Virtualbox genutzt.
Könnte also sein, das die 32-Bit Version etwas langsamer ist und somit der Button sichtbar?
Anders kann ich mir das auch nicht erklären.
Bei Lubuntu (32-Bit) - nutzt standardmäßig OpenBox als Window-Manager - bleibt bei mir der Button erhalten. Es ist also auch vom Window-Manager abhängig.

Vielen Dank, Omi, der läuft auch bei mir fehlerfrei :allright:

Ich lasse die Bug-Meldung dann mal sein, da es eher schlechte Programmierung war.
Bild
Warum OpenSource eine Lizenz haben sollte :: PB-CodeArchiv-Rebirth :: Pleasant-Dark (Syntax-Farbschema) :: RegEx-Engine (kompiliert RegExes zu NFA/DFA)
Manjaro Xfce x64 (Hauptsystem) :: Windows 10 Home (VirtualBox) :: Neueste PureBasic-Version
Antworten