; Module/File: Clipboard_OwnerChange.pb ; Function: Get Callback when the clipboard owner changes - Linux ; Author: Omi ; Date: May. 28, 2016 ; Version: 0.1 ; Target Compiler: PureBasic 5.22/5.31/5.4x ; Target OS: Linux: (X/K/L)ubuntu, Mint, 32/64, Ascii/Uni ;-------------------------------------------------------------- EnableExplicit ImportC "" gdk_atom_intern(atom_name.p-utf8, only_if_exists) gtk_widget_get_window(*widget.GtkWidget) g_signal_connect(*instance, detailed_signal.p-utf8, *c_handler, *pdata, destroy= 0, flags= 0) As "g_signal_connect_data" EndImport Enumeration GdkEventType ; #GDK_NOTHING = -1 ; #GDK_DELETE ; #GDK_DESTROY ; #GDK_EXPOSE ; #GDK_MOTION_NOTIFY ; #GDK_BUTTON_PRESS ; #GDK_2BUTTON_PRESS ; #GDK_DOUBLE_BUTTON_PRESS= #GDK_2BUTTON_PRESS ; #GDK_3BUTTON_PRESS ; #GDK_TRIPLE_BUTTON_PRESS=#GDK_3BUTTON_PRESS ; #GDK_BUTTON_RELEASE ; #GDK_KEY_PRESS ; #GDK_KEY_RELEASE ; #GDK_ENTER_NOTIFY ; #GDK_LEAVE_NOTIFY ; #GDK_FOCUS_CHANGE ; #GDK_CONFIGURE ; #GDK_MAP ; #GDK_UNMAP ; #GDK_PROPERTY_NOTIFY ; #GDK_SELECTION_CLEAR ; #GDK_SELECTION_REQUEST ; #GDK_SELECTION_NOTIFY ; #GDK_PROXIMITY_IN ; #GDK_PROXIMITY_OUT ; #GDK_DRAG_ENTER ; #GDK_DRAG_LEAVE ; #GDK_DRAG_MOTION ; #GDK_DRAG_STATUS ; #GDK_DROP_START ; #GDK_DROP_FINISHED ; #GDK_CLIENT_EVENT ; #GDK_VISIBILITY_NOTIFY ; #GDK_SCROLL = 31 ; #GDK_WINDOW_STATE ; #GDK_SETTING #GDK_OWNER_CHANGE = 34; 2.6+ #GDK_GRAB_BROKEN = 35; 2.8+ #GDK_DAMAGE = 36; 2.14+ #GDK_TOUCH_BEGIN = 37; 3.4+ #GDK_TOUCH_UPDATE = 38; 3.4+ #GDK_TOUCH_END = 39; 3.4+ #GDK_TOUCH_CANCEL = 40; 3.4+ #GDK_TOUCHPAD_SWIPE= 41; 3.18+ #GDK_TOUCHPAD_PINCH= 42; 3.18+ #GDK_EVENT_LAST = 43; 2.18+ EndEnumeration Enumeration GdkOwnerChange #GDK_OWNER_CHANGE_NEW_OWNER #GDK_OWNER_CHANGE_DESTROY #GDK_OWNER_CHANGE_CLOSE EndEnumeration Structure GdkEventOwnerChange type.i;l *window.GdkWindow send_event.b CompilerIf #PB_Compiler_Processor = #PB_Processor_x86 PB_Alignment1.b[3] CompilerElseIf #PB_Compiler_Processor = #PB_Processor_x64 PB_Alignment1.b[7] CompilerEndIf *owner.GdkWindow reason.i selection.i time.l selection_time.l EndStructure ; Object constants #Win_Main = 0 ; #ClipboardTimer= 999 Global.i gEvent, gQuit ; Global.i gTime= 1000 Global gClipboard= gtk_clipboard_get_(gdk_atom_intern("CLIPBOARD", #True)) ProcedureC Callback_Clipboard_OwnerChange(*clipboard, *event.GdkEventAny, user_data) Protected *eventownerchange.GdkEventOwnerChange If *event\type = #GDK_OWNER_CHANGE *eventownerchange= *event Debug "Clipboard owner change ..." Debug "GdkEvent " + *eventownerchange\type Debug "GdkWindow receiver " + *eventownerchange\window Debug "Owner Window " + *eventownerchange\owner Debug "Send event explicit " + *eventownerchange\send_event Debug "Change reason " + *eventownerchange\reason Debug "Atom name " + PeekS(gdk_atom_name_(*eventownerchange\selection), -1, #PB_UTF8) Debug "@ time " + *eventownerchange\selection_time Debug " ---" EndIf EndProcedure Procedure Create_WinMain() If OpenWindow(#Win_Main, 300, 200, 500, 200, "Clipboard content?", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) TextGadget (#PB_Any, 5, 5, 490, 26, "Take parts to clipboard with other programs, too") ButtonGadget(0, 5, 40, 300, 26, "Set own clipboard text") g_signal_connect(gClipboard, "owner-change", @Callback_Clipboard_OwnerChange(), 0) EndIf EndProcedure Create_WinMain() Repeat gEvent= WaitWindowEvent() Select gEvent Case #PB_Event_CloseWindow gQuit= #True Case #PB_Event_Gadget Select EventGadget() Case 0 SetClipboardText("Ein PureBasic Test-Text!") EndSelect EndSelect Until gQuit ; IDE Options = PureBasic 5.45 LTS (Linux - x86) ; CursorPosition = 64 ; FirstLine = 49 ; Folding = - ; EnableUnicode ; EnableXP