you can use a workaround for tis type of gadget by placing it into an event-box
the following code is written down from my mind .. could not test it ATM as i have only windows available
The textgadget does not recognize events others than "changed", "delete-text","insert-text" (maybe it works with an event-box too......) EDIT :
here is an full example (modified the one above) which shows how to use events in eventless gadgets
You can see how to manage the different buttons of the mouse too. It was a surprise, that those (eventless) Gadgets are already placed in an Event-box.
@Fred: do you plan this for a future version (implementing events for so far "eventless" gadgets)?
Code: Select all
;************************************************
; Demo to show the use of Events of buttons beside
; the usual "clicked" ;-) behavior
; 2010 walker
; tested on Linux Mint x64 --- PB 4.51 RC2
; ----------------------------
;modified 04/2011
;added events for imagegadget and the textgadget
;lLinux Mint (9) X64 [b]PB 4.60 beta 1[/b]
;************************************************
EnableExplicit
Define hwnd
Define event, quit
Define b1, t1, im, image, t2
Define *w_id.GtkWidget, *event_box.GtkWidget,*event_box2.GtkWidget
ProcedureC button_clicked(*widget, *signal, user_data)
;*widget contains the data given at creation time of this handler
;*signal contains the detailed signal
SetGadgetText(*widget, GetGadgetText(*widget) + "clicked" + #CRLF$)
EndProcedure
ProcedureC button_released(*widget, *signal, user_data)
SetGadgetText(*widget, GetGadgetText(*widget) + "bye bye" + #CRLF$)
EndProcedure
ProcedureC button_pressed(*widget, *signal, user_data)
SetGadgetText(*widget, GetGadgetText(*widget) + "hello there" + #CRLF$)
EndProcedure
ProcedureC button_enter(*widget, *signal, user_data)
SetGadgetText(*widget, "touched" + #CRLF$)
EndProcedure
ProcedureC button_leave(*widget, *signal, user_data)
SetGadgetText(*widget, "away...")
EndProcedure
ProcedureC image_enter(*widget, *signal, user_data)
SetGadgetText(user_data, "entering image.....")
EndProcedure
ProcedureC image_leave(*widget, *signal, user_data)
SetGadgetText(user_data, "image left.....")
EndProcedure
ProcedureC image_clicked(*widget, *signal, user_data)
Protected image = CreateImage(#PB_Any, 50, 50, 32)
Protected *eb.GdkEventButton = *signal
StartDrawing(ImageOutput(image))
DrawingMode(#PB_2DDrawing_AlphaChannel)
Box(0, 0, 50, 50, RGBA(0, 0, 0, 0))
DrawingMode(#PB_2DDrawing_AlphaBlend)
Circle(25, 25, 25, RGBA(Random(255), Random(255), Random(255), 255))
StopDrawing()
SetGadgetState(user_data, ImageID(image))
Select *eb\button
Case 1
Debug "left mousebutton"
If *eb\type = #GDK_2BUTTON_PRESS
Debug "---- doubleclick -----"
EndIf
Case 2
Debug "middle mousebutton"
Case 3
Debug "right mousebutton"
EndSelect
EndProcedure
ProcedureC text_enter(*widget, *signal, user_data)
SetGadgetText(user_data, "mouse over text .....")
EndProcedure
ProcedureC text_leave(*widget, *signal, user_data)
SetGadgetText(user_data, "text left.....")
EndProcedure
ProcedureC text_pressed(*widget, *signal, user_data)
Protected inp.s=InputRequester("enter text","Enter new text","")
SetGadgetText(user_data, inp)
EndProcedure
hwnd = OpenWindow(#PB_Any, 0, 0, 500, 300, "Button Event", #PB_Window_ScreenCentered | #PB_Window_SystemMenu)
If hwnd
*w_id = WindowID(hwnd);use the structure of the widgets to access the gdk window id... which is necessary for setting the event mask; see below
b1 = ButtonGadget(#PB_Any, 10, 10, 100, 30, "button :-)")
t1 = EditorGadget(#PB_Any, 10, 80, 250, 200)
t2= TextGadget(#PB_Any,300,100,150,30,"this is a textgadget")
image = CreateImage(#PB_Any, 50, 50, 32)
StartDrawing(ImageOutput(image))
DrawingMode(#PB_2DDrawing_AlphaChannel)
Box(0, 0, 50, 50, RGBA(0, 0, 0, 00))
DrawingMode(#PB_2DDrawing_AlphaBlend)
Circle(25, 25, 25, RGBA(100, 500, 20, 255))
StopDrawing()
im = ImageGadget(#PB_Any, 200, 10, 50, 50, ImageID(image))
*event_box = gtk_widget_get_parent_(GadgetID(im));surprise surprise .. the imagegadget is already placed in an event-box...
*event_box2=gtk_widget_get_parent_(GadgetID(t2));this too ....
g_signal_connect_(*event_box, "enter-notify-event", @image_enter(), t1)
g_signal_connect_(*event_box, "leave-notify-event", @image_leave(), t1)
g_signal_connect_(*event_box, "button_press_event", @image_clicked(), im)
g_signal_connect_(*event_box2, "enter-notify-event", @text_enter(), t1)
g_signal_connect_(*event_box2, "leave-notify-event", @text_leave(), t1)
g_signal_connect_(*event_box2, "button_press_event", @text_pressed(), t2)
g_signal_connect_data_(GadgetID(b1), "clicked", @button_clicked(), t1, #Null, #G_CONNECT_SWAPPED)
g_signal_connect_data_(GadgetID(b1), "button_release_event", @button_released(), t1, #Null, #G_CONNECT_SWAPPED)
g_signal_connect_data_(GadgetID(b1), "button_press_event", @button_pressed(), t1, #Null, #G_CONNECT_SWAPPED)
g_signal_connect_data_(GadgetID(b1), "enter-notify-event", @button_enter(), t1, #Null, #G_CONNECT_SWAPPED)
g_signal_connect_data_(GadgetID(b1), "leave-notify-event", @button_leave(), t1, #Null, #G_CONNECT_SWAPPED)
gdk_window_set_events_(*w_id\window, #GDK_ALL_EVENTS_MASK);here we are using the gdk window id for setting the event mask necessary for the button press and release event
; NOT for the enter and leave events or the clicked event.... they are enabled by default
EndIf
Repeat
event = WaitWindowEvent(1)
If event = #PB_Event_CloseWindow
quit = 1
EndIf
Until quit = 1
End