; Module/File: Editor_SysPopupBlock.pb ; Function: Detect and block / capture a rightclick-syspopup in TextView - Linux ; Author: Omi ; Date: Sep. 03, 2016 ; Version: 0.1 ; Target Compiler: PureBasic 5.22/5.31/5.40 ; Target OS: Linux: (X/K/L)ubuntu, Mint, 32/64, Ascii/Uni ;-------------------------------------------------------------- EnableExplicit Enumeration #PB_Event_FirstCustomValue #EventRightclick EndEnumeration ImportC "" g_signal_connect(*instance, detailed_signal.p-utf8, *c_handler, *data, destroy= 0, flags= 0) As "g_signal_connect_data" g_signal_handler_find(*instance, mask, signal_id, detail, *closure, func, data_) EndImport ; Object constants #Win_Main= 0 #Bt1 = 0 #Edt1 = 1 Global.i gEvent, gQuit Global.s gS= "A RightClick in the Editor calls the System-Editor-Popup." + #LF$ + #LF$ + "Button ON :" + #LF$ + " The original popup is blocked." + #LF$ + "Button OFF:" + #LF$ + " The original popup is shown again." ProcedureC Callback_GtkTextviewRSingleclick(*widget.GtkWidget, *Event.GdkEventButton, user_data) If user_data = #Edt1 If *Event\button = 3 If *Event\type = #GDK_BUTTON_PRESS PostEvent(#EventRightclick, GetActiveWindow(), user_data) ProcedureReturn #True EndIf EndIf EndIf EndProcedure Procedure Editor_ConnectHandler(Gadget, *Callback) g_signal_connect(GadgetID(Gadget), "button-press-event", *Callback, Gadget, #Null, #Null) EndProcedure Procedure Editor_DisconnectHandler(Gadget, *Callback) Protected HandlerId Protected *text_view= GadgetID(Gadget) ; find signalhandler for widget with callback ... HandlerId= g_signal_handler_find(*text_view, #G_SIGNAL_MATCH_FUNC, 0, 0, 0, *Callback, 0) If HandlerId g_signal_handler_disconnect_(*text_view, HandlerId); disconnect handler EndIf EndProcedure If OpenWindow(#Win_Main, 300, 200, 400, 200, "EditorGadget-Popup-blocking", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) ButtonGadget(#Bt1, 5, 5, 390, 28, "Suppresses the RClick-Systempopup in Editor", #PB_Button_Toggle) EditorGadget(#Edt1, 5, 35, 390, 160) AddGadgetItem(#Edt1, -1, gS) gtk_text_view_set_wrap_mode_(GadgetID(#Edt1), #GTK_WRAP_WORD) Repeat gEvent= WaitWindowEvent() Select gEvent Case #PB_Event_CloseWindow gQuit= #True Case #PB_Event_Gadget If EventGadget() = #Bt1 If GetGadgetState(#Bt1) Editor_ConnectHandler(#Edt1, @Callback_GtkTextviewRSingleclick()); Kills editor-sys-popup on rightclick Else Editor_DisconnectHandler(#Edt1, @Callback_GtkTextviewRSingleclick()); reinstalls editor-sys-popup on rightclick EndIf EndIf Case #EventRightclick If EventGadget() = #Edt1 Debug "Right singleclick in Editor " + Str(#Edt1) + " w/o popup" EndIf EndSelect Until gQuit EndIf ; IDE Options = PureBasic 5.45 LTS (Linux - x86) ; CursorPosition = 3 ; Folding = - ; EnableUnicode ; EnableXP