Gadget under mouse

Linux specific forum
User avatar
mk-soft
Always Here
Always Here
Posts: 5335
Joined: Fri May 12, 2006 6:51 pm
Location: Germany

Gadget under mouse

Post by mk-soft »

How to get gadget under mouse

Thanks

I needed for this
http://www.purebasic.fr/german/viewtopi ... 16#p331316
My Projects ThreadToGUI / OOP-BaseClass / EventDesigner V3
PB v3.30 / v5.75 - OS Mac Mini OSX 10.xx - VM Window Pro / Linux Ubuntu
Downloads on my Webspace / OneDrive
User avatar
Shardik
Addict
Addict
Posts: 1989
Joined: Thu Apr 21, 2005 2:38 pm
Location: Germany

Re: Gadget under mouse

Post by Shardik »

The following example code demonstrates how to detect the current gadget under the mouse cursor. But you have to take care of some special gadgets which aren't selectable by default like the TextGadget! In order to detect the cursor above a TextGadget you have therefore to enable selectability:

Code: Select all

gtk_label_set_selectable_(GadgetID(TextGadgetID), #True)
This is the complete example:

Code: Select all

EnableExplicit

ImportC ""
  PB_Object_EnumerateStart(PB_Objects.I)
  PB_Object_EnumerateNext(PB_Objects.I, *GadgetID)
  PB_Object_EnumerateAbort(PB_Objects.I)
  PB_Gadget_Objects.I
EndImport

Define GadgetFound.I
Define GadgetHandle.I
Define GadgetID.I
Define *GdkWindow.GdkWindowObject
Define x.I
Define y.I

OpenWindow(0, 100, 100, 350, 220, "Detect gadget below cursor")
CreateStatusBar(0, WindowID(0))
AddStatusBarField(#PB_Ignore)

CheckBoxGadget(0, 30, 30, 130, 30, "CheckBox")
TextGadget(1, 30, 80, 130, 30, "TextGadget", #PB_Text_Border | #PB_Text_Center)
gtk_label_set_selectable_(GadgetID(1), #True)
ButtonGadget(2, 30, 140, 130, 30, "Button")
OptionGadget(3, 190, 30, 120, 30, "OptionBox")
StringGadget(4, 190, 80, 130, 30, "StringGadget")
HyperLinkGadget(5, 190, 140, 140, 30, "HyperLinkGadget", 0)

AddWindowTimer(0, 0, 200)

Repeat
  Select WaitWindowEvent()
    Case #PB_Event_CloseWindow
      RemoveWindowTimer(0, 0)
      Break
    Case #PB_Event_Timer
      *GdkWindow = gdk_window_at_pointer_(@x,@y)

      If *GdkWindow
        GadgetHandle = *GdkWindow\user_data
        PB_Object_EnumerateStart(PB_Gadget_Objects)
        GadgetFound = #False

        While PB_Object_EnumerateNext(PB_Gadget_Objects, @GadgetID)
          If GadgetHandle = GadgetID(GadgetID)
            StatusBarText(0, 0, "Cursor above Gadget " + Str(GadgetID), #PB_StatusBar_Center)
            PB_Object_EnumerateAbort(PB_Gadget_Objects)
            GadgetFound = #True
            Break
          EndIf
        Wend

        If GadgetFound = #False
          StatusBarText(0, 0, "")
        EndIf
      EndIf
   EndSelect
ForEver
User avatar
mk-soft
Always Here
Always Here
Posts: 5335
Joined: Fri May 12, 2006 6:51 pm
Location: Germany

Re: Gadget under mouse

Post by mk-soft »

Many thanks to Shardik for help :wink:
My Projects ThreadToGUI / OOP-BaseClass / EventDesigner V3
PB v3.30 / v5.75 - OS Mac Mini OSX 10.xx - VM Window Pro / Linux Ubuntu
Downloads on my Webspace / OneDrive
Post Reply