Seite 1 von 1

Linux Bug bei CanvasGadget mit #PB_Canvas_Container

Verfasst: 24.03.2024 18:06
von maddinvonfritz
Hallo,

wenn ich beim CanvasGadget das Flag #PB_Canvas_Container setze und Gadgets hinzufüge, werden keine Events vom Mausrad zurückgeliefert.

Getestet in PB6.03 und PB_6.10 beta mit GTK3, GTK2 und QT.

Zum testen flags = #PB_Canvas_Container auskommentieren.

Code: Alles auswählen

Define flags

flags = #PB_Canvas_Container

OpenWindow(0, #PB_Ignore, #PB_Ignore, 500, 500, "Canvas Test")

CanvasGadget(0, 0, 0, 500, 500, flags)

ButtonGadget(1, 0, 0, 50, 30, "Test")

If flags & #PB_Canvas_Container : CloseGadgetList() : EndIf

Repeat
  Select WindowEvent()
    Case #PB_Event_Gadget
      Select EventGadget()
        Case 0
          If EventType() = #PB_EventType_MouseWheel
            Debug GetGadgetAttribute(0, #PB_Canvas_WheelDelta)
          EndIf
      EndSelect
    Case #PB_Event_CloseWindow
      End
  EndSelect
ForEver

Re: Linux Bug bei CanvasGadget mit #PB_Canvas_Container

Verfasst: 26.03.2024 11:58
von Lord
Hallo!

Füge doch mal dem CanvasGadget das Flag #PB_Canvas_Keyboard hinzu,
dann sollten die Mausradevents kommen.
Also z.B.:

Code: Alles auswählen

flags = #PB_Canvas_Container | #PB_Canvas_Keyboard
Zumindest bei Windows hat es so funktioniert.

Re: Linux Bug bei CanvasGadget mit #PB_Canvas_Container

Verfasst: 26.03.2024 20:40
von maddinvonfritz
Hallo,

Windows funktioniert. Linux nicht auch nicht mit #PB_Canvas_Keyboard.
Getestet habe ich es auf einem Ubuntu 22.04.4 LTS.
Zu MacOS kann ich nichts sagen.

Re: Linux Bug bei CanvasGadget mit #PB_Canvas_Container

Verfasst: 26.03.2024 22:36
von mk-soft
Bei Windows und macOS geht es.

Für Linux ein BugFix bis es repariert ist. Habe ich als Bug gemeldet.

Code: Alles auswählen

;-Top my mk-soft

ImportC ""
  gdk_event_get_scroll_deltas(*Event, *delta_x, *delta_y)
EndImport

Procedure signal_scroll_event_cb(*self, *event.gdkeventscroll, user_data)
  Protected deltaX.d, deltaY.d
  If *event\type = #GDK_SCROLL
    ;Debug "Scroll State " + *event\state
    gdk_event_get_scroll_deltas(*event, @deltaX, @deltaY)
    PostEvent(#PB_Event_Gadget, GetActiveWindow(), user_data, #PB_EventType_MouseWheel, -deltaY)
  EndIf
EndProcedure

Define flags

flags = #PB_Canvas_Container

OpenWindow(0, #PB_Ignore, #PB_Ignore, 500, 500, "Canvas Test")

CanvasGadget(1, 0, 0, 500, 300, #PB_Canvas_Border | flags)

ButtonGadget(2, 0, 0, 50, 30, "Test")

If flags & #PB_Canvas_Container
  CloseGadgetList()
  g_signal_connect_(GadgetID(1), "scroll-event", @signal_scroll_event_cb(), 1)
EndIf

Repeat
  Select WindowEvent()
    Case #PB_Event_Gadget
      Select EventGadget()
        Case 1
          If EventType() = #PB_EventType_MouseWheel
            If flags & #PB_Canvas_Container
              Debug EventData()
            Else
              Debug GetGadgetAttribute(0, #PB_Canvas_WheelDelta)
            EndIf
          EndIf
      EndSelect
    Case #PB_Event_CloseWindow
      End
  EndSelect
ForEver

Re: Linux Bug bei CanvasGadget mit #PB_Canvas_Container

Verfasst: 27.03.2024 21:52
von maddinvonfritz
Vielen Dank.