; Module/File: Editor_SysPopupAttachment2.pb ; Function: Extends EditorGadget-System-Popup on Rightclick with own MenuItems or removes again - Linux ; Author: Omi ; Date: Nov. 03, 2015 ; 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 ImportC "" gtk_menu_item_new_with_label(label.p-utf8) 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$ + " A Separator And 2 MenuItems should be attached." + #LF$ + "Button OFF:" + #LF$ + " The Popup extension is disconnected." ProcedureC Callback_EditorPopupCall(*menuitem, user_data) Debug "Called attached PureBasic item " + Str(user_data) EndProcedure ProcedureC Callback_EditorAddPopupAppend(*text_view, *popup, user_data) Protected *MenuItem1= gtk_menu_item_new_with_label("Attached PureBasic item 1") Protected *MenuItem2= gtk_menu_item_new_with_label("Attached PureBasic item 2") gtk_menu_shell_append_(*popup, gtk_separator_menu_item_new_()); MenuBar @ last Pos. gtk_menu_shell_append_(*popup, *MenuItem1); MenuItem @ last Pos. gtk_menu_shell_append_(*popup, *MenuItem2) ; link signals for every new item ... g_signal_connect(*MenuItem1, "activate", @Callback_EditorPopupCall(), 1) g_signal_connect(*MenuItem2, "activate", @Callback_EditorPopupCall(), 2) gtk_widget_show_all_(*popup) EndProcedure Procedure Editor_ConnectPopupAppend(Gadget, *Callback) g_signal_connect(GadgetID(Gadget), "populate-popup", *Callback, Gadget, #Null, #Null) EndProcedure Procedure Editor_DisconnectPopupAppend(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-Attachments", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) ButtonGadget(#Bt1, 5, 5, 390, 28, "Expand Editors system popup", #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 Select EventGadget() Case #Bt1 If GetGadgetState(#Bt1) Editor_ConnectPopupAppend(#Edt1, @Callback_EditorAddPopupAppend()); Add popup attachments Else Editor_DisconnectPopupAppend(#Edt1, @Callback_EditorAddPopupAppend()); Remove popup attachments EndIf EndSelect EndSelect Until gQuit EndIf ; IDE Options = PureBasic 5.44 LTS (Linux - x86) ; CursorPosition = 13 ; Folding = - ; EnableUnicode ; EnableXP ; SubSystem = gtk2