; Module/File: Splitter_DetectDoubleLclick.pb ; Function: Detect a double leftclick on the handle of SplitterGadget - Linux gtk2/gtk3 ; Author: Omi ; Date: Jul. 10, 2017 ; Version: 0.1 ; Target Compiler: PureBasic 5.22/5.31/5.4/5.5/5.6 ; Target OS: Linux: (X/K/L)ubuntu, Mint, 32/64, Ascii/Uni ;-------------------------------------------------------------- EnableExplicit ImportC "" g_signal_connect(*instance, detailed_signal.p-utf8, *c_handler, *data, destroy= 0, flags= 0) As "g_signal_connect_data" EndImport ; Object constants #Win_Main = 0 #Button1 = 0 #Button2 = 1 #Splitter = 2 Enumeration #PB_Event_FirstCustomValue #Event_SplitterCenter EndEnumeration Global.i gEvent, gEventWin, gQuit Global.i gEventDelayed= 998 Structure EVENTPARAMETER Event.i Window.i Object.i Type.i Data_.i EndStructure Global gDelayEvent.EVENTPARAMETER Procedure EventWithDelay(Event, Window, Gadget, Type= 0, Data_= 0) If Event = #Event_SplitterCenter Protected.i Width, Height gtk_widget_get_size_request_(GadgetID(Gadget), @Width, @Height) gtk_paned_set_position_(GadgetID(Gadget), Height / 2) EndIf RemoveWindowTimer(Window, gEventDelayed) EndProcedure ProcedureC Callback_SplitterHandleClicked(*widget.GtkWidget, *event.GdkEventButton, user_data) If user_data = #Splitter If *Event\button = 1 If *Event\type = #GDK_2BUTTON_PRESS; Left doubleclick gDelayEvent\Event = #Event_SplitterCenter; Do something like center the splitter ... gDelayEvent\Window= GetActiveWindow() gDelayEvent\Object= user_data gDelayEvent\Type = 0 gDelayEvent\Data_ = 0 AddWindowTimer(gDelayEvent\Window, gEventDelayed, 200); Requires a delay when you double-click on an object to be self-modified, esp. w. gtk2. ProcedureReturn #True EndIf EndIf EndIf EndProcedure Procedure Create_WinMain() If OpenWindow(#Win_Main, 300, 200, 500, 200, "Doubleclick on SplitterGadget handle", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) TextGadget(#PB_Any, 5, 5, 490, 22, "Move Splitter and make a doubleclick") ButtonGadget(#Button1, 0, 0, 0, 0, "Button 1") ButtonGadget(#Button2, 0, 0, 0, 0, "Button 2") SplitterGadget(#Splitter, 5, 35, 490, 160, #Button1, #Button2, #PB_Splitter_Separator) g_signal_connect(GadgetID(#Splitter), "button-press-event", @Callback_SplitterHandleClicked(), #Splitter) EndIf EndProcedure Create_WinMain() Repeat gEvent= WaitWindowEvent() Select gEvent Case #PB_Event_CloseWindow gQuit= #True Case #PB_Event_Timer If EventTimer() = gEventDelayed EventWithDelay(gDelayEvent\Event, gDelayEvent\Window, gDelayEvent\Object, gDelayEvent\Type, gDelayEvent\Data_) EndIf EndSelect Until gQuit ; IDE Options = PureBasic 5.44 LTS (Linux - x86) ; CursorPosition = 46 ; Folding = - ; EnableUnicode ; EnableXP