1 /******************************************************************************* 2 * Copyright (c) 2000, 2018 IBM Corporation and others. All rights reserved. 3 * The contents of this file are made available under the terms 4 * of the GNU Lesser General Public License (LGPL) Version 2.1 that 5 * accompanies this distribution (lgpl-v21.txt). The LGPL is also 6 * available at http://www.gnu.org/licenses/lgpl.html. If the version 7 * of the LGPL at http://www.gnu.org is different to the version of 8 * the LGPL accompanying this distribution and there is any conflict 9 * between the two license versions, the terms of the LGPL accompanying 10 * this distribution shall govern. 11 * 12 * Contributors: 13 * IBM Corporation - initial API and implementation 14 *******************************************************************************/ 15 16 #ifndef INC_os_H 17 #define INC_os_H 18 19 #define NDEBUG 20 21 #define G_DISABLE_DEPRECATED 22 #define GTK_DISABLE_SINGLE_INCLUDES 23 /* 24 #define GTK_DISABLE_DEPRECATED 25 #define GDK_DISABLE_DEPRECATED 26 #define GSEAL_ENABLE 27 */ 28 29 #include <stdlib.h> 30 #include <gtk/gtk.h> 31 #include <gdk/gdk.h> 32 #include <pango/pango.h> 33 #include <pango/pango-font.h> 34 #include <string.h> 35 #include <locale.h> 36 #include <unistd.h> 37 38 #ifndef _WIN32 39 #include <dlfcn.h> 40 #include <gtk/gtkunixprint.h> 41 #else 42 #include <windows.h> 43 //#define NO_realpath // TODO [win32] use GetFullPathName instead; 44 45 #define NO_gtk_1enumerate_1printers 46 #define NO_gtk_1printer_1get_1name 47 #define NO_gtk_1printer_1is_1default 48 #define NO_gtk_1print_1job_1get_1surface 49 #define NO_gtk_1print_1unix_1dialog_1get_1current_1page 50 #define NO_gtk_1print_1unix_1dialog_1get_1selected_1printer 51 #define NO_gtk_1print_1unix_1dialog_1get_1settings 52 #define NO_gtk_1print_1unix_1dialog_1set_1settings 53 #define NO_gtk_1print_1unix_1dialog_1get_1page_1setup 54 #define NO_gtk_1print_1unix_1dialog_1set_1page_1setup 55 #define NO_gtk_1printer_1get_1backend 56 #define NO_gtk_1print_1unix_1dialog_1new 57 #define NO_gtk_1print_1job_1new 58 #define NO_gtk_1print_1job_1send 59 #define NO_gtk_1print_1unix_1dialog_1set_1current_1page 60 #define NO_gtk_1print_1unix_1dialog_1set_1embed_1page_1setup 61 #define NO_gtk_1print_1unix_1dialog_1set_1manual_1capabilities 62 63 // map realpath to a similar function in win32 64 #define realpath(N,R) _fullpath((R),(N),_MAX_PATH) 65 #endif 66 67 68 #define OS_LOAD_FUNCTION LOAD_FUNCTION 69 70 // Hard-link code generated from GTK.java to LIB_GTK 71 #define GTK_LOAD_FUNCTION(var, name) LOAD_FUNCTION_LIB(var, LIB_GTK, name) 72 // Hard-link code generated from GDK.java to LIB_GDK 73 #define GDK_LOAD_FUNCTION(var, name) LOAD_FUNCTION_LIB(var, LIB_GDK, name) 74 75 #ifdef _WIN32 76 #define LOAD_FUNCTION_LIB(var, libname, name) \ 77 static int initialized = 0; \ 78 static FARPROC var = NULL; \ 79 if (!initialized) { \ 80 HMODULE hm = LoadLibrary(libname); \ 81 if (hm) var = GetProcAddress(hm, #name); \ 82 initialized = 1; \ 83 } 84 #else 85 #define LOAD_FUNCTION_LIB(var, libname, name) \ 86 static int initialized = 0; \ 87 static void *var = NULL; \ 88 if (!initialized) { \ 89 void* handle = dlopen(libname, LOAD_FLAGS); \ 90 if (handle) var = dlsym(handle, #name); \ 91 initialized = 1; \ 92 CHECK_DLERROR \ 93 } 94 #endif 95 96 97 #if defined(GDK_WINDOWING_X11) 98 #if !GTK_CHECK_VERSION(3,96,0) 99 #include <gtk/gtkx.h> 100 #define NO_gdk_1x11_1surface_1get_1xid 101 #define NO_gdk_1x11_1surface_1lookup_1for_1display 102 #else 103 #define NO_gdk_1x11_1get_1default_1xdisplay 104 #define NO_gdk_1x11_1window_1get_1xid 105 #define NO_gdk_1x11_1window_1lookup_1for_1display 106 #define NO_GTK_1IS_1PLUG 107 #define NO_gtk_1plug_1new 108 #define NO_gtk_1socket_1get_1id 109 #define NO_gtk_1socket_1new 110 #endif 111 #if !GTK_CHECK_VERSION(3,96,0) 112 #include <gdk/gdkx.h> 113 #else 114 #include <gdk/x11/gdkx.h> 115 #endif 116 #else 117 118 #define NO_GDK_1IS_1X11_1DISPLAY 119 120 /* X Structures */ 121 #define NO_XExposeEvent 122 #define NO_XEvent 123 #define NO_XFocusChangeEvent 124 #define NO_X_1EVENT_1TYPE 125 #define NO_X_1EVENT_1WINDOW 126 127 /* X functions */ 128 #define NO_XCheckIfEvent 129 #define NO_XDefaultScreen 130 #define NO_XDefaultRootWindow 131 #define NO_XFree 132 #define NO_XGetWindowProperty 133 #define NO_XQueryPointer 134 #define NO_XKeysymToKeycode 135 #define NO_XSendEvent 136 #define NO_XSetInputFocus 137 #define NO_XSetErrorHandler 138 #define NO_XSetIOErrorHandler 139 #define NO_XSetTransientForHint 140 #define NO_XSynchronize 141 #define NO_XWarpPointer 142 #define NO_GDK_1PIXMAP_1XID 143 #define NO_gdk_1x11_1display_1error_1trap_1pop_1ignored 144 #define NO_gdk_1x11_1display_1error_1trap_1push 145 #define NO_gdk_1x11_1display_1get_1xdisplay 146 #define NO_gdk_1x11_1display_1utf8_1to_1compound_1text 147 #define NO_gdk_1x11_1drawable_1get_1xdisplay 148 #define NO_gdk_1x11_1drawable_1get_1xid 149 #define NO_gdk_1x11_1get_1default_1xdisplay 150 #define NO_gdk_1x11_1screen_1get_1window_1manager_1name 151 #define NO_gdk_1x11_1screen_1lookup_1visual 152 #define NO_gdk_1x11_1visual_1get_1xvisual 153 #define NO_gdk_1x11_1window_1get_1xid 154 #define NO_gdk_1x11_1window_1lookup_1for_1display 155 #define NO_gdk_window_lookup 156 #define NO_gdk_window_add_filter 157 #define NO_GTK_1IS_1PLUG 158 #define NO_gtk_1plug_1new 159 #define NO_gtk_1socket_1get_1id 160 #define NO_gtk_1socket_1new 161 #define NO_memmove__JLorg_eclipse_swt_internal_gtk_XExposeEvent_2J 162 #define NO_memmove__ILorg_eclipse_swt_internal_gtk_XExposeEvent_2I 163 #define NO_memmove__ILorg_eclipse_swt_internal_gtk_XFocusChangeEvent_2I 164 #define NO_memmove__Lorg_eclipse_swt_internal_gtk_XExposeEvent_2JJ 165 #define NO_memmove__Lorg_eclipse_swt_internal_gtk_XExposeEvent_2II 166 #define NO_memmove__Lorg_eclipse_swt_internal_gtk_XFocusChangeEvent_2JJ 167 #define NO_memmove__Lorg_eclipse_swt_internal_gtk_XFocusChangeEvent_2II 168 169 #endif 170 171 #if GTK_CHECK_VERSION(3,96,0) 172 #define GTK4 1 173 174 // Structs which do not exist on GTK4 175 #define NO_GtkTargetEntry 176 #define NO_GdkEventWindowState 177 #define NO_GdkWindowAttr 178 #define NO_GdkEvent 179 #define NO_GdkEventButton 180 #define NO_GdkEventCrossing 181 #define NO_GdkEventFocus 182 #define NO_GdkEventKey 183 #define NO_GdkEventMotion 184 #define NO_GdkEventScroll 185 186 // Memmoves for those structs which were removed in GTK4 187 #define NO_memmove__ILorg_eclipse_swt_internal_gtk_GtkTargetEntry_2I 188 #define NO_memmove__JLorg_eclipse_swt_internal_gtk_GtkTargetEntry_2J 189 #define NO_memmove__LLorg_eclipse_swt_internal_gtk_GtkTargetEntry_2II 190 #define NO_memmove__LLorg_eclipse_swt_internal_gtk_GtkTargetEntry_2JJ 191 #define NO_memmove__Iorg_eclipse_swt_internal_gtk_GdkEvent_2I 192 #define NO_memmove__Jorg_eclipse_swt_internal_gtk_GdkEvent_2J 193 #define NO_memmove__ILorg_eclipse_swt_internal_gtk_GdkEventButton_2I 194 #define NO_memmove__JLorg_eclipse_swt_internal_gtk_GdkEventButton_2J 195 #define NO_memmove__Lorg_eclipse_swt_internal_gtk_GdkEventButton_2II 196 #define NO_memmove__Lorg_eclipse_swt_internal_gtk_GdkEventButton_2JJ 197 #define NO_memmove__Iorg_eclipse_swt_internal_gtk_GdkEventCrossing_2I 198 #define NO_memmove__Jorg_eclipse_swt_internal_gtk_GdkEventCrossing_2J 199 #define NO_memmove__Lorg_eclipse_swt_internal_gtk_GdkEventCrossing_2II 200 #define NO_memmove__Lorg_eclipse_swt_internal_gtk_GdkEventCrossing_2JJ 201 #define NO_memmove__Iorg_eclipse_swt_internal_gtk_GdkEventFocus_2I 202 #define NO_memmove__Jorg_eclipse_swt_internal_gtk_GdkEventFocus_2J 203 #define NO_memmove__Lorg_eclipse_swt_internal_gtk_GdkEventFocus_2II 204 #define NO_memmove__Lorg_eclipse_swt_internal_gtk_GdkEventFocus_2JJ 205 #define NO_memmove__ILorg_eclipse_swt_internal_gtk_GdkEventKey_2I 206 #define NO_memmove__JLorg_eclipse_swt_internal_gtk_GdkEventKey_2J 207 #define NO_memmove__Lorg_eclipse_swt_internal_gtk_GdkEventKey_2II 208 #define NO_memmove__Lorg_eclipse_swt_internal_gtk_GdkEventKey_2JJ 209 #define NO_memmove__Lorg_eclipse_swt_internal_gtk_GdkEventMotion_2II 210 #define NO_memmove__Lorg_eclipse_swt_internal_gtk_GdkEventMotion_2JJ 211 #define NO_memmove__Iorg_eclipse_swt_internal_gtk_GdkEventWindowState_2I 212 #define NO_memmove__Jorg_eclipse_swt_internal_gtk_GdkEventWindowState_2J 213 #define NO_memmove__Lorg_eclipse_swt_internal_gtk_GdkEventWindowState_2II 214 #define NO_memmove__Lorg_eclipse_swt_internal_gtk_GdkEventWindowState_2JJ 215 216 // No GtkClipboard on GTK4 217 #define NO_gtk_1clipboard_1clear 218 #define NO_gtk_1clipboard_1get 219 #define NO_gtk_1clipboard_1set_1can_1store 220 #define NO_gtk_1clipboard_1set_1with_1owner 221 #define NO_gtk_1clipboard_1store 222 #define NO_gtk_1clipboard_1wait_1for_1contents 223 224 // No GtkStatusIcon on GTK4 225 #define NO_gtk_1status_1icon_1get_1geometry 226 #define NO_gtk_1status_1icon_1get_1visible 227 #define NO_gtk_1status_1icon_1new 228 #define NO_gtk_1status_1icon_1position_1menu_1func 229 #define NO_gtk_1status_1icon_1set_1from_1pixbuf 230 #define NO_gtk_1status_1icon_1set_1tooltip_1text 231 #define NO_gtk_1status_1icon_1set_1visible 232 233 // No GtkTargetList on GTK4 234 #define NO_gtk_1target_1list_1new 235 #define NO_gtk_1target_1list_1unref 236 237 // No GdkScreen on GTK4, including parameter casts 238 #define NO_gtk_1widget_1get_1screen 239 #define NO_gtk_1style_1context_1add_1provider_1for_1screen 240 #define NO_gdk_1device_1warp__IIII 241 #define NO_gdk_1device_1warp__JJII 242 #define NO_gdk_1screen_1get_1default 243 #define NO_gdk_1screen_1get_1monitor_1at_1point 244 #define NO_gdk_1screen_1get_1monitor_1at_1window 245 #define NO_gdk_1screen_1get_1monitor_1geometry 246 #define NO_gdk_1screen_1get_1monitor_1scale_1factor 247 #define NO_gdk_1screen_1get_1monitor_1workarea 248 #define NO_gdk_1screen_1get_1n_1monitors 249 #define NO_gdk_1screen_1get_1primary_1monitor 250 #define NO_gdk_1screen_1get_1resolution 251 #define NO_gdk_1screen_1get_1system_1visual 252 #define NO_gdk_1screen_1get_1window_1stack 253 #define NO_gdk_1screen_1is_1composited 254 255 // Miscellaneous functions removed from GTK4 256 #define NO_gtk_1misc_1set_1alignment 257 #define NO_gdk_1test_1simulate_1button 258 #define NO_gdk_1test_1simulate_1key 259 #define NO_gdk_1atom_1name 260 #define NO_gdk_1cairo_1create 261 #define NO_gdk_1threads_1leave 262 #define NO_gdk_1selection_1owner_1set 263 #define NO_gdk_1selection_1owner_1get 264 #define NO_gdk_1visual_1get_1depth 265 #define NO_gtk_1widget_1style_1get__I_3B_3II 266 #define NO_gtk_1widget_1style_1get__J_3B_3IJ 267 #define NO_gtk_1widget_1style_1get__I_3B_3JI 268 #define NO_gtk_1widget_1style_1get__J_3B_3JJ 269 #define NO_gtk_1css_1provider_1load_1from_1data__I_3BI_3I 270 #define NO_gtk_1css_1provider_1load_1from_1data__J_3BJ_3J 271 #define NO_gdk_1pixbuf_1get_1from_1window 272 273 // Some GtkContainer functions don't exist on GTK4 274 #define NO_gtk_1container_1propagate_1draw 275 #define NO_gtk_1container_1set_1border_1width 276 #define NO_gtk_1container_1get_1border_1width 277 278 /** 279 * Some gtk_drag_* functions exist on both versions, 280 * but with different signatures. Define them in both GTK4 281 * and GTK3. 282 */ 283 #define NO_gtk_1drag_1begin_1with_1coordinates__IIIIIII 284 #define NO_gtk_1drag_1begin_1with_1coordinates__JJIIJII 285 #define NO_gtk_1drag_1get_1data__IIII 286 #define NO_gtk_1drag_1get_1data__JJJI 287 288 // Some gtk_drag_* functions were removed in GTK4 289 #define NO_gtk_1drag_1begin 290 #define NO_gtk_1drag_1dest_1set 291 #define NO_gtk_1drag_1dest_1find_1target 292 #define NO_gtk_1drag_1finish 293 #define NO_gtk_1drag_1set_1icon_1surface 294 295 // Some sizing functions are not available on GTK4 296 #define NO_gtk_1window_1set_1geometry_1hints 297 298 // No GdkWindow on GTK4, this includes parameter casting 299 #define NO_gtk_1widget_1set_1has_1window 300 #define NO_gtk_1widget_1get_1has_1window 301 #define NO_gtk_1im_1context_1set_1client_1window 302 #define NO_gtk_1widget_1set_1parent_1window 303 #define NO_gdk_1cairo_1set_1source_1window 304 #define NO_gdk_1device_1grab 305 #define NO_gdk_1display_1get_1monitor_1at_1window 306 #define NO_gdk_1get_1default_1root_1window 307 #define NO_gdk_1property_1get 308 #define NO_gdk_1window_1begin_1draw_1frame 309 #define NO_gdk_1window_1create_1similar_1surface 310 #define NO_gdk_1window_1destroy 311 #define NO_gdk_1window_1end_1draw_1frame 312 #define NO_gdk_1window_1focus 313 #define NO_gdk_1window_1get_1children 314 #define NO_gdk_1window_1get_1device_1position 315 #define NO_gdk_1window_1get_1display 316 #define NO_gdk_1window_1set_1events 317 #define NO_gdk_1window_1get_1events 318 #define NO_gdk_1window_1get_1frame_1extents 319 #define NO_gdk_1window_1get_1height 320 #define NO_gdk_1window_1get_1width 321 #define NO_gdk_1window_1get_1origin 322 #define NO_gdk_1window_1get_1parent 323 #define NO_gdk_1window_1get_1root_1origin 324 #define NO_gdk_1window_1get_1state 325 #define NO_gdk_1window_1get_1user_1data 326 #define NO_gdk_1window_1get_1visible_1region 327 #define NO_gdk_1window_1show 328 #define NO_gdk_1window_1hide 329 #define NO_gdk_1window_1invalidate_1rect 330 #define NO_gdk_1window_1invalidate_1region 331 #define NO_gdk_1window_1raise 332 #define NO_gdk_1window_1lower 333 #define NO_gdk_1window_1move 334 #define NO_gdk_1window_1move_1resize 335 #define NO_gdk_1window_1new 336 #define NO_gdk_1window_1process_1updates 337 #define NO_gdk_1window_1resize 338 #define NO_gdk_1window_1restack 339 #define NO_gdk_1window_1set_1cursor 340 #define NO_gdk_1window_1set_1decorations 341 #define NO_gdk_1window_1set_1functions 342 #define NO_gdk_1window_1set_1override_1redirect 343 #define NO_gdk_1window_1set_1user_1data 344 #define NO_gdk_1window_1show_1unraised 345 #define NO_gdk_1device_1get_1window_1at_1position 346 #define NO_gdk_1window_1set_1background_1pattern 347 #define NO_gdk_1event_1get_1window 348 349 // GdkDragContext removals 350 #define NO_gdk_1drag_1context_1get_1dest_1window 351 #define NO_gdk_1drag_1context_1list_1targets 352 #define NO_gdk_1drag_1status 353 354 // Some widgets have removed access to their GdkWindows in GTK4 355 #define NO_gtk_1text_1view_1get_1window 356 #define NO_gtk_1tree_1view_1get_1bin_1window 357 358 // Event related functions removed in GTK4 359 #define NO_gdk_1event_1free 360 #define NO_gdk_1event_1get 361 #define NO_gdk_1event_1peek 362 #define NO_gdk_1event_1put 363 #define NO_GDK_1EVENT_1TYPE 364 #define NO_GDK_1EVENT_1WINDOW 365 366 // GdkCursor removals 367 #define NO_gdk_1cursor_1new_1for_1display 368 #define NO_gdk_1cursor_1new_1from_1pixbuf 369 #define NO_gdk_1display_1supports_1cursor_1color 370 #define NO_gdk_1cursor_1new_1from_1name__JLjava_lang_String_2 371 372 #else 373 374 /** 375 * Some gtk_drag_* functions exist on both versions, 376 * but with different signatures. Define them in both GTK4 377 * and GTK3. 378 */ 379 #define NO_gtk_1drag_1begin_1with_1coordinates__IIIIII 380 #define NO_gtk_1drag_1begin_1with_1coordinates__JJJIII 381 #define NO_gtk_1drag_1get_1data__III 382 #define NO_gtk_1drag_1get_1data__JJJ 383 384 // No GdkSurface on GTK3 385 #define NO_gtk_1widget_1set_1has_1surface 386 #define NO_gtk_1widget_1get_1has_1surface 387 #define NO_gtk_1widget_1set_1parent_1surface 388 #define NO_gdk_1surface_1create_1similar_1surface 389 #define NO_gdk_1surface_1destroy 390 #define NO_gdk_1surface_1focus 391 #define NO_gdk_1device_1get_1surface_1at_1position 392 #define NO_gdk_1surface_1lower 393 #define NO_gdk_1surface_1raise 394 #define NO_gdk_1surface_1get_1children 395 #define NO_gdk_1surface_1get_1user_1data 396 #define NO_gdk_1surface_1get_1origin 397 #define NO_gdk_1surface_1invalidate_1rect 398 #define NO_gdk_1surface_1get_1display 399 #define NO_gdk_1surface_1set_1cursor 400 #define NO_gdk_1surface_1new_1child 401 #define NO_gdk_1surface_1set_1user_1data 402 #define NO_gdk_1surface_1restack 403 #define NO_gdk_1surface_1show_1unraised 404 #define NO_gdk_1surface_1show 405 #define NO_gdk_1surface_1get_1device_1position 406 #define NO_gdk_1display_1get_1monitor_1at_1surface 407 #define NO_gdk_1surface_1get_1frame_1extents 408 #define NO_gdk_1surface_1get_1width 409 #define NO_gdk_1surface_1get_1height 410 #define NO_gdk_1surface_1get_1state 411 #define NO_gdk_1surface_1resize 412 #define NO_gdk_1surface_1move 413 #define NO_gdk_1surface_1move_1resize 414 #define NO_gdk_1surface_1hide 415 #define NO_gdk_1surface_1set_1decorations 416 #define NO_gdk_1surface_1set_1functions 417 #define NO_gdk_1surface_1get_1root_1origin 418 #define NO_gdk_1surface_1invalidate_1region 419 #define NO_gdk_1event_1get_1surface 420 421 // No GdkClipboard on GTK3 422 #define NO_gdk_1clipboard_1set_1content 423 #define NO_gdk_1display_1get_1clipboard 424 #define NO_gdk_1display_1get_1primary_1clipboard 425 426 // No GtkSnapshot on GTK3 427 #define NO_gtk_1snapshot_1append_1cairo 428 #define NO_gtk_1widget_1snapshot_1child 429 430 // No Graphene library on GTK3 431 #define NO_graphene_1rect_1alloc 432 #define NO_graphene_1rect_1free 433 #define NO_graphene_1rect_1init 434 435 // Miscellaneous functions not present on GTK3 436 #define NO_gdk_1device_1warp__III 437 #define NO_gdk_1device_1warp__JII 438 #define NO_gdk_1display_1get_1keymap 439 #define NO_gtk_1widget_1measure 440 #define NO_gtk_1style_1context_1add_1provider_1for_1display 441 #define NO_gtk_1widget_1get_1first_1child 442 #define NO_gtk_1widget_1get_1next_1sibling 443 #define NO_gtk_1css_1provider_1load_1from_1data__I_3BI 444 #define NO_gtk_1css_1provider_1load_1from_1data__J_3BJ 445 #define NO_gdk_1display_1is_1composited 446 #define NO_gtk_1gesture_1multi_1press_1new 447 #define NO_gtk_1style_1context_1get_1margin 448 449 // GdkCursor API changes from GTK3 -> GTK4 450 #define NO_gdk_1cursor_1new_1from_1name___3BI 451 #define NO_gdk_1cursor_1new_1from_1name___3BJ 452 #define NO_gdk_1cursor_1new_1from_1texture 453 #define NO_gtk_1widget_1set_1cursor 454 455 // No GdkTexture on GTK3 456 #define NO_gdk_1texture_1new_1for_1pixbuf 457 458 // GtkEventController related functions for GTK4 459 #define NO_gtk_1event_1controller_1key_1new 460 #define NO_gtk_1event_1controller_1motion_1new 461 #define NO_gtk_1event_1controller_1scroll_1new 462 #define NO_gtk_1widget_1add_1controller 463 464 // GdkEvent functions which do not exist on GTK3 465 #define NO_gdk_1event_1get_1focus_1in 466 #define NO_gdk_1event_1get_1string 467 #define NO_gdk_1event_1get_1key_1group 468 #define NO_gdk_1event_1get_1crossing_1mode 469 470 // GdkCursor API changes 471 #define NO_gdk_1cursor_1new_1from_1name__Ljava_lang_String_2J 472 473 #endif 474 475 #include "os_custom.h" 476 477 #endif /* INC_os_H */ 478