1 #ifndef _UNIX_GUTS_H_ 2 #define _UNIX_GUTS_H_ 3 4 #include "generic/config.h" 5 #if defined(HAS_GLIBC) && !defined(_GNU_SOURCE) 6 # define _GNU_SOURCE 7 #endif 8 #define Drawable XDrawable 9 #define Font XFont 10 #define Window XWindow 11 #undef Bool 12 #include <X11/X.h> 13 #include <X11/Xlib.h> 14 #include <X11/Xutil.h> 15 #include <X11/Xatom.h> 16 #define Box _prima_Box 17 #undef TRUE 18 #undef FALSE 19 #include <X11/Xregion.h> 20 #undef Box 21 #define Box BoxRec 22 #undef Box 23 #include <X11/Xresource.h> 24 #include <X11/cursorfont.h> 25 #ifdef HAVE_X11_EXTENSIONS_XRENDER_H 26 #include <X11/extensions/Xrender.h> 27 #endif 28 #ifdef HAVE_X11_EXTENSIONS_SHAPE_H 29 #include <X11/extensions/shape.h> 30 #endif 31 #if defined( HAVE_X11_EXTENSIONS_XSHM_H) && defined( HAVE_SYS_IPC_H) && defined( HAVE_SYS_SHM_H) 32 #include <sys/ipc.h> 33 #include <sys/shm.h> 34 #include <X11/extensions/XShm.h> 35 #define USE_MITSHM 1 36 #endif 37 #if defined(HAVE_X11_XFT_XFT_H) && defined(HAVE_FONTCONFIG_FONTCONFIG_H) && defined(HAVE_X11_EXTENSIONS_XRENDER_H) && defined(HAVE_FREETYPE_FREETYPE_H) 38 #include <X11/Xft/Xft.h> 39 #include <fontconfig/fontconfig.h> 40 #include FT_OUTLINE_H 41 # if XFT_MAJOR > 1 && FC_MAJOR > 1 42 # define USE_XFT 43 # endif 44 # if XFT_VERSION < 20112 45 # define NEED_X11_EXTENSIONS_XRENDER_H 46 # endif 47 #endif 48 #ifdef HAVE_X11_EXTENSIONS_XRANDR_H 49 #include <X11/extensions/Xrandr.h> 50 #endif 51 #ifdef HAVE_X11_EXTENSIONS_XCOMPOSITE_H 52 #include <X11/extensions/Xcomposite.h> 53 #endif 54 #ifdef HAVE_X11_XCURSOR_XCURSOR_H 55 #include <X11/Xcursor/Xcursor.h> 56 #endif 57 58 #ifdef WITH_FRIBIDI 59 #include <fribidi/fribidi.h> 60 #define ANALYSIS FriBidiLevel 61 #else 62 #define ANALYSIS Byte 63 #endif 64 65 #undef Font 66 #undef Drawable 67 #undef Bool 68 #undef Window 69 #define ComplexShape 0 70 #define XBool int 71 #undef Complex 72 73 #ifndef Button6 74 #define Button6 6 75 #endif 76 #ifndef Button7 77 #define Button7 7 78 #endif 79 #ifndef Button8 80 #define Button8 8 81 #endif 82 #ifndef Button9 83 #define Button9 9 84 #endif 85 #ifndef Button10 86 #define Button10 10 87 #endif 88 #ifndef Button11 89 #define Button11 11 90 #endif 91 #ifndef Button12 92 #define Button12 12 93 #endif 94 #ifndef Button13 95 #define Button13 13 96 #endif 97 #ifndef Button14 98 #define Button14 14 99 #endif 100 #ifndef Button15 101 #define Button15 15 102 #endif 103 #ifndef Button16 104 #define Button16 16 105 #endif 106 #ifndef Button6Mask 107 #define Button6Mask (1<<13) 108 #endif 109 #ifndef Button7Mask 110 #define Button7Mask (1<<14) 111 #endif 112 113 #include <unistd.h> 114 #include <string.h> 115 #include <fcntl.h> 116 #include <sys/time.h> 117 118 #include "../guts.h" 119 #include "queue.h" 120 #include "Widget.h" 121 #include "Image.h" 122 #include "img_conv.h" 123 124 #ifdef USE_MITSHM 125 /* at least some versions of XShm.h do not prototype XShmGetEventBase() */ 126 extern int XShmGetEventBase( Display*); 127 #endif 128 129 typedef struct _PrimaXImage 130 { 131 Bool shm; 132 Bool can_free; 133 int ref_cnt; 134 void *data_alias; 135 int bytes_per_line_alias; 136 XImage *image; 137 #ifdef USE_MITSHM 138 XShmSegmentInfo xmem; 139 #endif 140 } PrimaXImage; 141 142 143 #define CACHE_INVALID 0 144 #define CACHE_BITMAP 1 145 #define CACHE_PIXMAP 2 146 #define CACHE_LOW_RES 3 147 #define CACHE_LAYERED 4 148 #define CACHE_LAYERED_ALPHA 5 149 #define CACHE_A8 6 150 151 typedef struct { 152 int type; 153 PrimaXImage *image; 154 PrimaXImage *icon; 155 } ImageCache; 156 157 typedef struct _RequestInformation 158 { 159 unsigned long request; 160 char *file; 161 int line; 162 } RequestInformation, *PRequestInformation; 163 164 #define REQUEST_RING_SIZE 512 165 166 #define kbModKeyMask 0x00010000 167 #define kbCodeCharMask 0x00020000 168 #define kbVirtualMask 0x00040000 169 #define kbFunctionMask 0x00080000 170 171 typedef struct _FontFlags { 172 unsigned height : 1; 173 unsigned width : 1; 174 unsigned style : 1; 175 unsigned pitch : 1; 176 unsigned direction : 1; 177 unsigned resolution : 1; 178 unsigned name : 1; 179 unsigned encoding : 1; 180 unsigned size : 1; 181 unsigned codepage : 1; 182 unsigned family : 1; 183 unsigned vector : 1; 184 unsigned ascent : 1; 185 unsigned descent : 1; 186 unsigned weight : 1; 187 unsigned maximalWidth : 1; 188 unsigned internalLeading : 1; 189 unsigned externalLeading : 1; 190 unsigned xDeviceRes : 1; 191 unsigned yDeviceRes : 1; 192 unsigned firstChar : 1; 193 unsigned lastChar : 1; 194 unsigned breakChar : 1; 195 unsigned defaultChar : 1; 196 /* extras */ 197 unsigned bad_vector : 1; 198 unsigned sloppy : 1; 199 unsigned disabled : 1; 200 unsigned funky : 1; 201 unsigned heights_cache : 1; 202 unsigned known : 1; 203 } FontFlags; 204 205 typedef struct _FontInfo { 206 FontFlags flags; 207 Font font; 208 char *vecname; 209 char *xname; 210 short int name_offset; 211 short int info_offset; 212 int heights_cache[2]; 213 } FontInfo, *PFontInfo; 214 215 typedef struct _RotatedFont { 216 double direction; 217 int first1; 218 int first2; 219 int height; 220 int width; 221 int length; 222 PrimaXImage**map; 223 Point shift; 224 Point dimension; 225 Point orgBox; 226 Pixmap arena; 227 GC arena_gc; 228 Byte *arena_bits; 229 int lineSize; 230 int defaultChar1; 231 int defaultChar2; 232 Fixed sin, cos, sin2, cos2; 233 struct RotatedFont *next; 234 } RotatedFont, *PRotatedFont; 235 236 typedef struct CachedFont { 237 FontFlags flags; 238 Font font; 239 XFontStruct *fs; 240 XFont id; 241 PRotatedFont rotated; 242 int underlinePos; 243 int underlineThickness; 244 int refCnt; 245 #ifdef USE_XFT 246 XftFont *xft; 247 XftFont *xft_no_aa; 248 XftFont *xft_base; 249 #endif 250 } CachedFont, *PCachedFont; 251 252 typedef struct _FontKey 253 { 254 int height; 255 int width; 256 int style; 257 int pitch; 258 int direction; 259 int vector; 260 char name[ 256]; 261 } FontKey, *PFontKey; 262 263 #define MAX_HGS_SIZE 5 264 265 typedef struct 266 { 267 int sp; 268 int locked; 269 int target; 270 int xlfd[MAX_HGS_SIZE]; 271 int prima[MAX_HGS_SIZE]; 272 } HeightGuessStack; 273 274 union _unix_sys_data; 275 276 #define FIRST_SYS_TIMER ((Handle)11) 277 #define CURSOR_TIMER ((Handle)11) 278 #define MENU_TIMER ((Handle)12) 279 #define MENU_UNFOCUS_TIMER ((Handle)13) 280 #define LAST_SYS_TIMER ((Handle)13) 281 282 #if defined(sgi) && !defined(__GNUC__) 283 /* multiple compilation and runtime errors otherwise. must be some alignment tricks */ 284 #define COMPONENT_SYS_DATA_ALIGN unsigned dummy : 20; 285 #else 286 #define COMPONENT_SYS_DATA_ALIGN 287 #endif 288 289 #define COMPONENT_SYS_DATA \ 290 Handle self; \ 291 struct { \ 292 unsigned application : 1; \ 293 unsigned bitmap : 1; \ 294 unsigned dbm : 1; \ 295 unsigned drawable : 1; \ 296 unsigned icon : 1; \ 297 unsigned image : 1; \ 298 unsigned menu : 1; \ 299 unsigned pixmap : 1; \ 300 unsigned popup : 1; \ 301 unsigned timer : 1; \ 302 unsigned widget : 1; \ 303 unsigned window : 1; \ 304 COMPONENT_SYS_DATA_ALIGN \ 305 } type; \ 306 XrmQuarkList q_class_name; \ 307 XrmQuarkList q_instance_name; \ 308 int n_class_name; \ 309 int n_instance_name 310 311 typedef struct _timer_sys_data 312 { 313 COMPONENT_SYS_DATA; 314 int timeout; 315 Handle who; 316 struct _timer_sys_data *older; 317 struct _timer_sys_data *younger; 318 struct timeval when; 319 } TimerSysData, *PTimerSysData; 320 321 typedef struct 322 { 323 Region region; 324 int aperture; 325 } RegionSysData, *PRegionSysData; 326 327 struct _drawable_sys_data; 328 329 #define VIRGIN_GC_MASK ( GCBackground \ 330 | GCCapStyle \ 331 | GCClipMask \ 332 | GCForeground \ 333 | GCFunction \ 334 | GCJoinStyle \ 335 | GCFillRule \ 336 | GCFillStyle \ 337 | GCTileStipXOrigin \ 338 | GCTileStipYOrigin \ 339 | GCLineStyle \ 340 | GCLineWidth \ 341 | GCSubwindowMode ) 342 343 typedef struct gc_list 344 { 345 GC gc; 346 TAILQ_ENTRY(gc_list) gc_link; 347 } GCList; 348 349 TAILQ_HEAD(gc_head,gc_list); 350 351 typedef struct pending_event 352 { 353 Handle recipient; 354 Event event; 355 TAILQ_ENTRY(pending_event) peventq_link; 356 } PendingEvent; 357 358 typedef struct configure_event_pair 359 { 360 TAILQ_ENTRY(configure_event_pair) link; 361 int w, h, match; 362 } ConfigureEventPair; 363 364 #define COLOR_R(x) (((x)>>16)&0xFF) 365 #define COLOR_G(x) (((x)>>8)&0xFF) 366 #define COLOR_B(x) ((x)&0xFF) 367 #define COLOR_R16(x) (((x)>>8)&0xFF00) 368 #define COLOR_G16(x) ((x)&0xFF00) 369 #define COLOR_B16(x) (((x)<<8)&0xFF00) 370 371 #define LPAL_ADDR(i) (i)>>2 372 #define LPAL_MASK(i) (3<<(((i)&3)*2)) 373 #define LPAL_SET(i,j) (((j)&3)<<(((i)&3)*2)) 374 #define LPAL_GET(i,j) (((j)>>(((i)&3)*2))&3) 375 376 extern int 377 prima_lpal_get( Byte * palette, int index); 378 379 extern void 380 prima_lpal_set( Byte * palette, int index, int rank); 381 382 #define wlpal_get(widget,index) prima_lpal_get(X(widget)->palette,index) 383 #define wlpal_set(widget,index,rank) prima_lpal_set(X(widget)->palette,index,rank) 384 385 /* Every color cell in guts.palette is assigned a rank. Its purpose 386 is to maintain reasonable sharing of available system colors. 387 See prima_palette_replace which preforms sharing. */ 388 #define RANK_IMMUTABLE 4 /* Static color for 'cubic' filtering - or for Static visuals */ 389 #define RANK_LOCKED 3 /* Colors used in Pixmaps - cannot participate in palette managing, therefore 'locked' */ 390 #define RANK_PRIORITY 2 /* Colors explicitly set by Widget::set_palette */ 391 #define RANK_NORMAL 1 /* Automatically allocated colors for drawing routines */ 392 #define RANK_FREE 0 /* Colors not allocated by XAllocColor. Their values are not reliable */ 393 394 #define RGB_COMPOSITE(R,G,B) ((((R)&0xFF)<<16)|(((G)&0xFF)<<8)|((B)&0xFF)) 395 396 typedef struct { 397 Byte r, g, b; 398 Byte rank; 399 Bool touched; 400 long composite; 401 List users; 402 } MainColorEntry; 403 404 typedef struct { 405 unsigned long primary; 406 unsigned long secondary; 407 Color color; 408 Byte balance; /* 0-63 */ 409 } Brush; 410 411 #define AI_FXA_RESOLUTION_X 0 412 #define AI_FXA_RESOLUTION_Y 1 413 #define AI_FXA_PIXEL_SIZE 2 414 #define AI_FXA_SPACING 3 415 #define AI_FXA_RELATIVE_WEIGHT 4 416 #define AI_FXA_FOUNDRY 5 417 #define AI_FXA_AVERAGE_WIDTH 6 418 #define AI_FXA_CHARSET_REGISTRY 7 419 #define AI_FXA_CHARSET_ENCODING 8 420 #define AI_CREATE_EVENT 9 421 #define AI_WM_DELETE_WINDOW 10 422 #define AI_WM_PROTOCOLS 11 423 #define AI_WM_TAKE_FOCUS 12 424 #define AI_NET_WM_STATE 13 425 #define AI_NET_WM_STATE_SKIP_TASKBAR 14 426 #define AI_NET_WM_STATE_MAXIMIZED_VERT 15 427 #define AI_NET_WM_STATE_MAXIMIZED_HORZ 16 428 #define AI_NET_WM_NAME 17 429 #define AI_NET_WM_ICON_NAME 18 430 #define AI_UTF8_STRING 19 431 #define AI_TARGETS 20 432 #define AI_INCR 21 433 #define AI_PIXEL 22 434 #define AI_FOREGROUND 23 435 #define AI_BACKGROUND 24 436 #define AI_MOTIF_WM_HINTS 25 437 #define AI_NET_WM_STATE_MODAL 26 438 #define AI_NET_SUPPORTED 27 439 #define AI_NET_WM_STATE_MAXIMIZED_HORIZ 28 440 #define AI_UTF8_MIME 29 441 #define AI_NET_WM_STATE_STAYS_ON_TOP 30 442 #define AI_NET_CURRENT_DESKTOP 31 443 #define AI_NET_WORKAREA 32 444 #define AI_NET_WM_STATE_ABOVE 33 445 #define AI_XdndEnter 34 446 #define AI_XdndPosition 35 447 #define AI_XdndStatus 36 448 #define AI_XdndTypeList 37 449 #define AI_XdndActionCopy 38 450 #define AI_XdndDrop 39 451 #define AI_XdndLeave 40 452 #define AI_XdndFinished 41 453 #define AI_XdndSelection 42 454 #define AI_XdndProxy 43 455 #define AI_XdndAware 44 456 #define AI_XdndActionMove 45 457 #define AI_XdndActionLink 46 458 #define AI_XdndActionAsk 47 459 #define AI_XdndActionPrivate 48 460 #define AI_XdndActionList 49 461 #define AI_XdndActionDescription 50 462 #define AI_PLAINTEXT_MIME 51 463 #define AI_count 52 464 465 #define FXA_RESOLUTION_X pguts->atoms[AI_FXA_RESOLUTION_X ] 466 #define FXA_RESOLUTION_Y pguts->atoms[AI_FXA_RESOLUTION_Y ] 467 #define FXA_POINT_SIZE XA_POINT_SIZE 468 #define FXA_PIXEL_SIZE pguts->atoms[AI_FXA_PIXEL_SIZE ] 469 #define FXA_SPACING pguts->atoms[AI_FXA_SPACING ] 470 #define FXA_WEIGHT XA_WEIGHT 471 #define FXA_RELATIVE_WEIGHT pguts->atoms[AI_FXA_RELATIVE_WEIGHT ] 472 #define FXA_FOUNDRY pguts->atoms[AI_FXA_FOUNDRY ] 473 #define FXA_FAMILY_NAME XA_FAMILY_NAME 474 #define FXA_AVERAGE_WIDTH pguts->atoms[AI_FXA_AVERAGE_WIDTH ] 475 #define FXA_CHARSET_REGISTRY pguts->atoms[AI_FXA_CHARSET_REGISTRY ] 476 #define FXA_CHARSET_ENCODING pguts->atoms[AI_FXA_CHARSET_ENCODING ] 477 #define FXA_CAP_HEIGHT XA_CAP_HEIGHT 478 #define CREATE_EVENT pguts->atoms[AI_CREATE_EVENT ] 479 #define WM_DELETE_WINDOW pguts->atoms[AI_WM_DELETE_WINDOW ] 480 #define WM_PROTOCOLS pguts->atoms[AI_WM_PROTOCOLS ] 481 #define WM_TAKE_FOCUS pguts->atoms[AI_WM_TAKE_FOCUS ] 482 #define NET_WM_STATE pguts->atoms[ AI_NET_WM_STATE ] 483 #define NET_WM_STATE_SKIP_TASKBAR pguts->atoms[AI_NET_WM_STATE_SKIP_TASKBAR ] 484 #define NET_WM_STATE_MAXIMIZED_VERT pguts->atoms[AI_NET_WM_STATE_MAXIMIZED_VERT] 485 #define NET_WM_STATE_MAXIMIZED_HORZ pguts->atoms[(pguts-> net_wm_maximize_HORZ_vs_HORIZ > 0) ? pguts-> net_wm_maximize_HORZ_vs_HORIZ : AI_NET_WM_STATE_MAXIMIZED_HORZ] 486 #define NET_WM_NAME pguts->atoms[AI_NET_WM_NAME ] 487 #define NET_WM_ICON_NAME pguts->atoms[AI_NET_WM_ICON_NAME ] 488 #define UTF8_STRING pguts->atoms[AI_UTF8_STRING ] 489 #define CF_TARGETS pguts->atoms[AI_TARGETS ] 490 #define XA_INCR pguts->atoms[AI_INCR ] 491 #define CF_PIXEL pguts->atoms[AI_PIXEL ] 492 #define CF_FOREGROUND pguts->atoms[AI_FOREGROUND ] 493 #define CF_BACKGROUND pguts->atoms[AI_BACKGROUND ] 494 #define XA_MOTIF_WM_HINTS pguts->atoms[AI_MOTIF_WM_HINTS ] 495 #define NET_WM_STATE_MODAL pguts->atoms[AI_NET_WM_STATE_MODAL ] 496 #define NET_SUPPORTED pguts->atoms[AI_NET_SUPPORTED ] 497 #define UTF8_MIME pguts->atoms[AI_UTF8_MIME ] 498 #define NET_WM_STATE_STAYS_ON_TOP pguts->atoms[AI_NET_WM_STATE_STAYS_ON_TOP ] 499 #define NET_CURRENT_DESKTOP pguts->atoms[AI_NET_CURRENT_DESKTOP ] 500 #define NET_WORKAREA pguts->atoms[AI_NET_WORKAREA ] 501 #define NET_WM_STATE_ABOVE pguts->atoms[AI_NET_WM_STATE_ABOVE ] 502 #define XdndEnter pguts->atoms[AI_XdndEnter ] 503 #define XdndPosition pguts->atoms[AI_XdndPosition ] 504 #define XdndStatus pguts->atoms[AI_XdndStatus ] 505 #define XdndTypeList pguts->atoms[AI_XdndTypeList ] 506 #define XdndActionCopy pguts->atoms[AI_XdndActionCopy ] 507 #define XdndDrop pguts->atoms[AI_XdndDrop ] 508 #define XdndLeave pguts->atoms[AI_XdndLeave ] 509 #define XdndFinished pguts->atoms[AI_XdndFinished ] 510 #define XdndSelection pguts->atoms[AI_XdndSelection ] 511 #define XdndProxy pguts->atoms[AI_XdndProxy ] 512 #define XdndAware pguts->atoms[AI_XdndAware ] 513 #define XdndActionMove pguts->atoms[AI_XdndActionMove ] 514 #define XdndActionLink pguts->atoms[AI_XdndActionLink ] 515 #define XdndActionAsk pguts->atoms[AI_XdndActionAsk ] 516 #define XdndActionPrivate pguts->atoms[AI_XdndActionPrivate ] 517 #define XdndActionList pguts->atoms[AI_XdndActionList ] 518 #define XdndActionDescription pguts->atoms[AI_XdndActionDescription ] 519 #define PLAINTEXT_MIME pguts->atoms[AI_PLAINTEXT_MIME ] 520 521 #define DEBUG_FONTS 0x01 522 #define DEBUG_CLIP 0x02 523 #define DEBUG_EVENT 0x04 524 #define DEBUG_MISC 0x08 525 #define DEBUG_COLOR 0x10 526 #define DEBUG_XRDB 0x20 527 #define DEBUG_ALL 0x3f 528 #define _debug prima_debug 529 extern int 530 prima_debug( const char *format, ...); 531 #define Fdebug if (pguts->debug & DEBUG_FONTS) _debug 532 #define Cdebug if (pguts->debug & DEBUG_CLIP) _debug 533 #define Edebug if (pguts->debug & DEBUG_EVENT) _debug 534 #define Mdebug if (pguts->debug & DEBUG_MISC) _debug 535 #define Pdebug if (pguts->debug & DEBUG_COLOR) _debug 536 #define Xdebug if (pguts->debug & DEBUG_XRDB) _debug 537 #define _F_DEBUG_PITCH(x) ((x==fpDefault)?"default":(x==fpFixed?"fixed":"variable")) 538 #define _F_DEBUG_STYLE(x) prima_font_debug_style(x) 539 540 typedef struct 541 { 542 unsigned int red_shift, green_shift, blue_shift, alpha_shift; 543 unsigned int red_range, green_range, blue_range, alpha_range; 544 unsigned int red_mask, green_mask, blue_mask, alpha_mask; 545 } RGBABitDescription, *PRGBABitDescription; 546 547 typedef struct 548 { 549 int status; /* -1 not ok to use, 0 not initialized, 1, ok to use */ 550 Point hot_spot; 551 Cursor cursor; 552 Pixmap xor; 553 Pixmap and; 554 #ifdef HAVE_X11_XCURSOR_XCURSOR_H 555 XcursorImage * xcursor; 556 #endif 557 } CustomPointer; 558 559 #define MAX_UNICODE_HEX_LENGTH 6 560 561 typedef struct _UnixGuts 562 { 563 /* Event management */ 564 Time click_time_frame; 565 Time double_click_time_frame; 566 PHash clipboards; 567 PHash clipboard_xfers; 568 Atom * clipboard_formats; 569 int clipboard_formats_count; 570 long clipboard_event_timeout; 571 fd_set excpt_set; 572 PList files; 573 long handled_events; 574 XButtonEvent last_button_event; 575 XButtonEvent last_click; 576 Time last_time; 577 int (* main_error_handler )(Display*,XErrorEvent*); 578 int max_fd; 579 int modal_count; 580 TAILQ_HEAD(,pending_event) peventq; 581 fd_set read_set; 582 long total_events; 583 long skipped_events; 584 long unhandled_events; 585 fd_set write_set; 586 /* Graphics */ 587 struct gc_head bitmap_gc_pool; 588 struct gc_head screen_gc_pool; 589 struct gc_head argb_gc_pool; 590 GC menugc; 591 TAILQ_HEAD(,_drawable_sys_data) paintq; 592 PHash ximages; 593 /* Font management */ 594 PHash font_hash; 595 PFontInfo font_info; 596 char **font_names; 597 int n_fonts; 598 XFontStruct *pointer_font; 599 Bool default_font_ok; 600 Font default_font; 601 Font default_menu_font; 602 Font default_widget_font; 603 Font default_msg_font; 604 Font default_caption_font; 605 int no_scaled_fonts; 606 /* Resource management */ 607 XrmDatabase db; 608 XrmQuark qBlinkinvisibletime; 609 XrmQuark qblinkinvisibletime; 610 XrmQuark qBlinkvisibletime; 611 XrmQuark qblinkvisibletime; 612 XrmQuark qClicktimeframe; 613 XrmQuark qclicktimeframe; 614 XrmQuark qDoubleclicktimeframe; 615 XrmQuark qdoubleclicktimeframe; 616 XrmQuark qString; 617 XrmQuark qWheeldown; 618 XrmQuark qwheeldown; 619 XrmQuark qWheelup; 620 XrmQuark qwheelup; 621 XrmQuark qSubmenudelay; 622 XrmQuark qsubmenudelay; 623 XrmQuark qScrollfirst; 624 XrmQuark qscrollfirst; 625 XrmQuark qScrollnext; 626 XrmQuark qscrollnext; 627 /* Timers & cursors */ 628 unsigned int cursor_height; 629 Point cursor_pixmap_size; 630 Pixmap cursor_save; 631 Bool cursor_shown; 632 unsigned int cursor_width; 633 Pixmap cursor_xor; 634 Bool cursor_layered; 635 Bool insert; 636 int invisible_timeout; 637 struct _timer_sys_data *oldest; 638 int visible_timeout; 639 /* Window management */ 640 Handle focused; 641 PHash menu_windows; 642 PHash windows; 643 /* XServer info */ 644 int bit_order; 645 unsigned char buttons_map[256]; 646 int byte_order; 647 int connection; 648 int depth; 649 Display *display; 650 int machine_byte_order; 651 int idepth; /* image depth; can be 32 if depth == 24 */ 652 int qdepth; /* image depth for querying */ 653 int argb_depth; /* image depth for xrender RGBA */ 654 struct { 655 long XDrawArcs; 656 long XDrawLines; 657 long XDrawRectangles; 658 long XDrawSegments; 659 long XFillArcs; 660 long XFillPolygon; 661 long XFillRectangles; 662 long request_length; 663 } limits; 664 Bool local_connection; 665 Cursor null_pointer; 666 int pointer_invisible_count; /* 0 is visible, > 0 is not, can't be <0 */ 667 int mouse_buttons; 668 int mouse_wheel_down; 669 int mouse_wheel_up; 670 Point resolution; 671 RequestInformation ri[REQUEST_RING_SIZE]; 672 int ri_head; 673 int ri_tail; 674 int screen_number; 675 Bool shape_extension; 676 int shape_event; 677 int shape_error; 678 Bool shared_image_extension; 679 int shared_image_completion_event; 680 Bool xshmattach_failed; 681 int use_xft; 682 Bool xft_priority; 683 Bool xft_disable_large_fonts; 684 int xft_xrender_major_opcode; 685 Bool xft_no_antialias; 686 Bool randr_extension; 687 Bool render_extension; 688 Bool composite_extension; 689 int composite_opcode; 690 Bool composite_error_triggered; 691 struct MsgDlg *message_boxes; 692 XWindow grab_redirect; 693 Handle grab_widget; 694 Point grab_translate_mouse; 695 Handle grab_confine; 696 int scroll_first; 697 int scroll_next; 698 Handle currentMenu; 699 Time currentFocusTime; 700 Handle unfocusedMenu; 701 int menu_timeout; 702 XWindow root; 703 XVisualInfo visual; 704 int visualClass; 705 XVisualInfo argb_visual; 706 #ifdef HAVE_X11_EXTENSIONS_XRENDER_H 707 XRenderPictFormat * xrender_display_format; 708 XRenderPictFormat * xrender_argb32_format; 709 XRenderPictFormat * xrender_a8_format; 710 XRenderPictFormat * xrender_a1_format; 711 #endif 712 Bool xrender_pen_dirty; 713 MainColorEntry * palette; 714 int mappingPlace[256]; 715 unsigned long monochromeMap[2]; 716 int palSize; 717 int localPalSize; 718 int * systemColorMap; 719 int systemColorMapSize; 720 int colorCubeRib; 721 Bool dynamicColors; 722 Bool grayScale; 723 Bool useDithering; 724 Bool privateColormap; 725 Colormap defaultColormap; 726 Colormap argbColormap; 727 FillPattern * ditherPatterns; 728 Point displaySize; 729 long wm_event_timeout; 730 RGBABitDescription screen_bits; 731 RGBABitDescription argb_bits; 732 Point ellipseDivergence; 733 int appLock; 734 XGCValues cursor_gcv; 735 TimerSysData sys_timers[ LAST_SYS_TIMER - FIRST_SYS_TIMER + 1]; 736 Bool applicationClose; 737 char locale[32]; 738 XFontStruct * font_abc_nil_hack; 739 Atom atoms[AI_count]; 740 XTextProperty hostname; 741 unsigned int debug; 742 Bool icccm_only; 743 Bool net_wm_maximization; 744 int net_wm_maximize_HORZ_vs_HORIZ; 745 int use_gtk; 746 int use_quartz; 747 Bool use_harfbuzz; 748 Bool is_xwayland; 749 /* DND: Common */ 750 Handle xdnd_clipboard; 751 int xdnd_disabled; 752 /* DND: Receiver */ 753 Handle xdndr_receiver, xdndr_widget, xdndr_last_target; 754 XWindow xdndr_source; 755 long xdndr_timestamp; 756 int xdndr_version, xdndr_last_action, xdndr_action_list_cache; 757 Bool xdndr_last_drop_response; 758 Box xdndr_suppress_events_within; /* in prima coordinates */ 759 /* DND: Sender */ 760 Handle xdnds_widget; 761 XWindow xdnds_sender, xdnds_target; 762 int xdnds_version, xdnds_last_action, xdnds_last_action_response; 763 Bool xdnds_last_drop_response, xdnds_escape_key, xdnds_finished; 764 Bool xdnds_default_pointers; 765 Box xdnds_suppress_events_within; /* in root coordinates */ 766 767 CustomPointer xdnd_pointers[5]; /* none,copy,link,move,ask */ 768 769 int unicode_hex_input_flags; 770 char unicode_hex_input_buffer[MAX_UNICODE_HEX_LENGTH + 1]; 771 772 Bool application_stop_signal; 773 } UnixGuts; 774 775 extern UnixGuts guts; 776 extern UnixGuts* pguts; 777 778 #define XCHECKPOINT \ 779 STMT_START { \ 780 pguts-> ri[ pguts-> ri_head]. line = __LINE__; \ 781 pguts-> ri[ pguts-> ri_head]. file = __FILE__; \ 782 pguts-> ri[ pguts-> ri_head]. request = NextRequest(DISP); \ 783 pguts-> ri_head++; \ 784 if ( pguts-> ri_head >= REQUEST_RING_SIZE) \ 785 pguts-> ri_head = 0; \ 786 if ( pguts-> ri_tail == pguts-> ri_head) { \ 787 pguts-> ri_tail++; \ 788 if ( pguts-> ri_tail >= REQUEST_RING_SIZE) \ 789 pguts-> ri_tail = 0; \ 790 } \ 791 } STMT_END 792 793 #define APC_BAD_SIZE INT_MAX 794 #define APC_BAD_ORIGIN INT_MAX 795 796 797 #define XT_IS_APPLICATION(x) ((x)->type.application) 798 #define XT_IS_BITMAP(x) ((x)->type.bitmap) 799 #define XT_IS_DBM(x) ((x)->type.dbm) 800 #define XT_IS_DRAWABLE(x) ((x)->type.drawable) 801 #define XT_IS_ICON(x) ((x)->type.icon) 802 #define XT_IS_IMAGE(x) ((x)->type.image) 803 #define XT_IS_MENU(x) ((x)->type.menu) 804 #define XT_IS_PIXMAP(x) ((x)->type.pixmap) 805 #define XT_IS_POPUP(x) ((x)->type.popup) 806 #define XT_IS_TIMER(x) ((x)->type.timer) 807 #define XT_IS_WIDGET(x) ((x)->type.widget) 808 #define XT_IS_WINDOW(x) ((x)->type.window) 809 810 typedef struct _drawable_sys_data 811 { 812 COMPONENT_SYS_DATA; 813 XDrawable udrawable; 814 XDrawable gdrawable; 815 XWindow parent; 816 Point origin, size, bsize; 817 Point transform, gtransform, btransform; 818 Point ackOrigin, ackSize, ackFrameSize; 819 int menuHeight; 820 int menuColorImmunity; 821 Point decorationSize; 822 Handle owner; /* The real one */ 823 XWindow real_parent; /* top levels */ 824 XWindow parentHandle; /* top levels */ 825 XWindow above; 826 Rect zoomRect; 827 XGCValues gcv; 828 GC gc; 829 GCList *gcl; 830 Brush fore, back; 831 Color saved_fore, saved_back; 832 ColorSet colors; 833 Region invalid_region, paint_region, current_region, cached_region; 834 XRectangle clip_rect; 835 FillPattern fill_pattern, saved_fill_pattern; 836 Point fill_pattern_offset, saved_fill_pattern_offset; 837 int fill_mode, saved_fill_mode; 838 Pixmap fp_pixmap; 839 #if defined(sgi) && !defined(__GNUC__) 840 /* multiple compilation and runtime errors otherwise. must be some alignment tricks */ 841 char dummy_b_1[2]; 842 #endif 843 int rop, paint_rop; 844 int rop2, paint_rop2; 845 int alpha, paint_alpha; 846 int line_style; 847 float line_width, paint_line_width, miter_limit; 848 unsigned char *dashes, *paint_dashes; 849 int ndashes, paint_ndashes; 850 Point clip_mask_extent, shape_extent, shape_offset; 851 PCachedFont font; 852 Font saved_font; 853 Point cursor_pos; 854 Point cursor_size; 855 CustomPointer user_pointer; 856 int pointer_id; 857 Cursor actual_pointer; 858 void * recreateData; 859 XWindow client; 860 struct { 861 unsigned antialias : 1; 862 unsigned saved_antialias : 1; 863 unsigned base_line : 1; 864 unsigned brush_fore : 1; 865 unsigned brush_back : 1; 866 unsigned brush_null_hatch : 1; 867 unsigned clip_by_children : 1; 868 unsigned clip_owner : 1; 869 unsigned configured : 1; 870 unsigned cursor_visible : 1; 871 unsigned dnd_aware : 1; 872 unsigned drop_target : 1; 873 unsigned enabled : 1; 874 unsigned exposed : 1; 875 unsigned falsely_hidden : 1; 876 unsigned first_click : 1; 877 unsigned force_flush : 1; 878 unsigned grab : 1; 879 unsigned has_icon : 1; 880 unsigned layered : 1; 881 unsigned layered_requested : 1; 882 unsigned iconic : 1; 883 unsigned mapped : 1; 884 unsigned modal : 1; 885 unsigned kill_current_region : 1; 886 unsigned opaque : 1; 887 unsigned paint : 1; 888 unsigned paint_base_line : 1; 889 unsigned paint_opaque : 1; 890 unsigned paint_pending : 1; 891 unsigned pointer_obscured : 1; 892 unsigned position_determined : 1; 893 unsigned reload_font : 1; 894 unsigned sizeable : 1; 895 unsigned sizemax_set : 1; 896 unsigned sync_paint : 1; 897 unsigned task_listed : 1; 898 unsigned title_utf8 : 1; 899 unsigned transparent : 1; 900 unsigned transparent_busy : 1; 901 unsigned want_visible : 1; 902 unsigned withdrawn : 1; 903 unsigned zoomed : 1; 904 unsigned xft_clip : 1; 905 } flags; 906 ImageCache image_cache; 907 Handle preexec_focus; 908 TAILQ_ENTRY(_drawable_sys_data) paintq_link; 909 TAILQ_HEAD(,configure_event_pair) configure_pairs; 910 Byte * palette; 911 int borderIcons; 912 XVisualInfo * visual; 913 Colormap colormap; 914 #ifdef USE_XFT 915 XftDraw * xft_drawable; 916 uint32_t * xft_map8; 917 double xft_font_cos; 918 double xft_font_sin; 919 XftDraw * xft_shadow_drawable; 920 Point xft_shadow_extentions; 921 Pixmap xft_shadow_pixmap; 922 GC xft_shadow_gc; 923 #endif 924 #ifdef HAVE_X11_EXTENSIONS_XRENDER_H 925 Picture argb_picture; 926 #endif 927 } DrawableSysData, *PDrawableSysData; 928 929 #define XF_ENABLED(x) ((x)->flags.enabled) 930 #define XF_IN_PAINT(x) ((x)->flags.paint) 931 #define XF_LAYERED(x) ((x)->flags.layered) 932 #define XFLUSH if (XX->flags.force_flush) XFlush(DISP) 933 934 #define MenuTimerMessage 1021 935 936 #define MENU_ITEM_GAP 4 937 #define MENU_XOFFSET 5 938 #define MENU_CHECK_XOFFSET 10 939 940 typedef struct 941 { 942 Bool is_mono; 943 Bool use_stippling; 944 Handle xor; 945 Handle and; 946 long fore, back; 947 } MenuBitmap, *PMenuBitmap; 948 949 typedef struct _menu_item 950 { 951 int x; 952 int y; 953 int width; 954 int height; 955 int accel_width; 956 int icon_width; 957 MenuBitmap bitmap, icon; 958 } UnixMenuItem, *PUnixMenuItem; 959 960 typedef struct _menu_window 961 { 962 Handle self; 963 XWindow w; 964 Point sz; 965 Point pos; 966 PMenuItemReg m; 967 int num; 968 PUnixMenuItem um; 969 struct _menu_window *next; 970 struct _menu_window *prev; 971 int selected; 972 int right; 973 int last; 974 int first; 975 Region rgn; 976 #ifdef HAVE_X11_EXTENSIONS_XRENDER_H 977 Picture argb_picture; 978 #endif 979 } MenuWindow, *PMenuWindow; 980 981 #define MENU_PALETTE_SIZE (ciMaxId + 2) 982 typedef struct _menu_sys_data 983 { 984 COMPONENT_SYS_DATA; 985 Bool paint_pending; 986 PMenuWindow w; 987 MenuWindow wstatic; 988 PCachedFont font; 989 int guillemots; 990 Bool layered; 991 unsigned long c[MENU_PALETTE_SIZE]; 992 unsigned long argb_c[MENU_PALETTE_SIZE]; 993 Color rgb[MENU_PALETTE_SIZE]; 994 XWindow focus; 995 PMenuWindow focused; 996 } MenuSysData, *PMenuSysData; 997 998 #define cfTargets (cfCustom + 0) 999 #define cfCOUNT (cfTargets + 1) 1000 /* XXX not implemented 1001 #define cfPalette (cfCustom + 1) 1002 #define cfForeground (cfCustom + 2) 1003 #define cfBackground (cfCustom + 3) 1004 #define cfCOUNT (cfCustom + 4) 1005 */ 1006 1007 #define CF_32 (sizeof(long)*8) /* 32-bit properties are hacky */ 1008 1009 typedef struct { 1010 IV size; 1011 unsigned char * data; 1012 Handle image; 1013 Atom name; 1014 Bool immediate; 1015 } ClipboardDataItem, *PClipboardDataItem; 1016 1017 typedef struct _clipboard_sys_data 1018 { 1019 COMPONENT_SYS_DATA; 1020 Atom selection; 1021 Atom target; 1022 Bool opened; 1023 Bool inside_event; 1024 Bool need_write; 1025 Handle selection_owner; 1026 PClipboardDataItem external; 1027 PClipboardDataItem internal; 1028 PList xfers; 1029 Bool xdnd_sending, xdnd_receiving; 1030 } ClipboardSysData, *PClipboardSysData; 1031 1032 typedef struct 1033 { 1034 Handle self; 1035 unsigned char * data; 1036 unsigned long size; 1037 unsigned int blocks; 1038 unsigned int offset; 1039 Bool data_detached; 1040 Bool data_master; 1041 long id; 1042 XWindow requestor; 1043 Atom property; 1044 Atom target; 1045 int format; 1046 struct timeval time; 1047 unsigned long delay; 1048 } ClipboardXfer; 1049 1050 typedef unsigned char ClipboardXferKey[sizeof(XWindow)+sizeof(Atom)]; 1051 1052 #define CLIPBOARD_XFER_KEY(key,window,property) \ 1053 memcpy(key,&window,sizeof(XWindow));\ 1054 memcpy(((unsigned char*)key) + sizeof(XWindow),&property,sizeof(Atom)) 1055 1056 typedef union _unix_sys_data 1057 { 1058 ClipboardSysData clipboard; 1059 struct { 1060 COMPONENT_SYS_DATA; 1061 } component; 1062 DrawableSysData drawable; 1063 MenuSysData menu; 1064 TimerSysData timer; 1065 RegionSysData region; 1066 } UnixSysData, *PUnixSysData; 1067 1068 #define DISP (pguts-> display) 1069 #define SCREEN (pguts-> screen_number) 1070 #define VISUAL (pguts-> visual. visual) 1071 #define DRIN pguts-> display, pguts-> screen_number 1072 #define X_WINDOW (PComponent(self)-> handle) 1073 #define X(obj) ((PDrawableSysData)(PComponent((obj))-> sysData)) 1074 #define DEFXX PDrawableSysData selfxx = (self == NULL_HANDLE ? NULL : X(self)) 1075 #define M(obj) ((PMenuSysData)(PComponent((obj))-> sysData)) 1076 #define DEFMM PMenuSysData selfxx = ((PMenuSysData)(PComponent((self))-> sysData)) 1077 #define C(obj) ((PClipboardSysData)(PComponent((obj))-> sysData)) 1078 #define DEFCC PClipboardSysData selfxx = C(self) 1079 #define XX selfxx 1080 #define WHEEL_DELTA 120 1081 #define GET_RGBA_DESCRIPTION X(self)->flags.layered ? &guts. argb_bits : &guts. screen_bits 1082 #define GET_REGION(obj) (&((PUnixSysData)(PComponent((obj))-> sysData))->region) 1083 1084 typedef U8 ColorComponent; 1085 1086 extern UnixGuts * 1087 prima_unix_guts(void); 1088 1089 extern Handle 1090 prima_xw2h( XWindow win); 1091 1092 extern void 1093 prima_handle_event( XEvent *ev, XEvent *next_event); 1094 1095 extern void 1096 prima_handle_menu_event( XEvent *ev, XWindow win, Handle self); 1097 1098 extern void 1099 prima_handle_selection_event( XEvent *ev, XWindow win, Handle self); 1100 1101 extern void 1102 prima_save_xerror_event( XErrorEvent *xr); 1103 1104 extern void 1105 prima_restore_xerror_event( XErrorEvent *xr); 1106 1107 extern void 1108 prima_get_gc( PDrawableSysData); 1109 1110 extern void 1111 prima_rebuild_watchers( void); 1112 1113 extern void 1114 prima_release_gc( PDrawableSysData); 1115 1116 extern Bool 1117 prima_init_clipboard_subsystem( char * error_buf); 1118 1119 extern Bool 1120 prima_init_font_subsystem( char * error_buf); 1121 1122 extern Bool 1123 prima_font_subsystem_set_option( char *, char *); 1124 1125 extern Bool 1126 prima_init_color_subsystem( char * error_buf); 1127 1128 extern Bool 1129 prima_init_xrender_subsystem( char * error_buf); 1130 1131 extern Bool 1132 prima_find_color_mask_range( unsigned long mask, unsigned int * shift, unsigned int * range); 1133 1134 extern Bool 1135 prima_color_subsystem_set_option( char *, char *); 1136 1137 extern void 1138 prima_done_color_subsystem( void); 1139 1140 extern void 1141 prima_done_xrender_subsystem( void); 1142 1143 extern int 1144 prima_color_find( Handle self, long color, int maxDiff, int * diff, int maxRank); 1145 1146 extern Bool 1147 prima_palette_replace( Handle self, Bool fast); 1148 1149 #define COLORHINT_NONE 0 1150 #define COLORHINT_BLACK 1 1151 #define COLORHINT_WHITE 2 1152 1153 #define LOGCOLOR_BLACK 0 1154 #define LOGCOLOR_WHITE (pguts->palSize?(pguts->palSize-1):0xffffffff) 1155 1156 extern Color 1157 prima_map_color( Color color, int * hint); 1158 1159 extern unsigned long 1160 prima_allocate_color( Handle self, Color color, Brush * brush); 1161 1162 extern void 1163 prima_palette_free( Handle self, Bool priority); 1164 1165 extern Bool 1166 prima_palette_alloc( Handle self); 1167 1168 extern Bool 1169 prima_color_add_ref( Handle self, int index, int rank); 1170 1171 extern int 1172 prima_color_sync( void); 1173 1174 extern Pixmap 1175 prima_get_hatch( FillPattern * fp); 1176 1177 extern void 1178 prima_copy_xybitmap( unsigned char *data, const unsigned char *idata, int w, int h, int ls, int ils); 1179 1180 extern void 1181 prima_mirror_bytes( unsigned char *data, int dataSize); 1182 1183 extern Bool 1184 prima_create_icon_pixmaps( Handle bw_icon, Pixmap *xor, Pixmap *and); 1185 1186 extern ImageCache* 1187 prima_image_cache( PImage img, int type); 1188 1189 extern Bool 1190 prima_put_ximage( XDrawable win, GC gc, PrimaXImage *i, 1191 int src_x, int src_y, int dst_x, int dst_y, 1192 int width, int height); 1193 1194 extern Bool 1195 prima_query_image( Handle self, XImage * image); 1196 1197 extern Bool 1198 prima_std_query_image( Handle self, Pixmap px); 1199 1200 extern Pixmap 1201 prima_std_pixmap( Handle self, int type); 1202 1203 #ifdef HAVE_X11_EXTENSIONS_XRENDER_H 1204 1205 #define DELETE_ARGB_PICTURE(x) if ((x)) { \ 1206 XRenderFreePicture( DISP, x); \ 1207 x = 0; \ 1208 } 1209 1210 #define CLIP_ARGB_PICTURE(x,region) if ((x)) \ 1211 XRenderSetPictureClipRegion(DISP, x, region); 1212 1213 #define CREATE_ARGB_PICTURE(drawable, depth, target) \ 1214 if ( guts.render_extension) target = prima_render_create_picture(drawable, depth) 1215 1216 extern Picture 1217 prima_render_create_picture(XDrawable drawable, int depth); 1218 1219 #else 1220 1221 #define CREATE_ARGB_PICTURE(drawable, depth, target) 1222 #define DELETE_ARGB_PICTURE(x) 1223 #define CLIP_ARGB_PICTURE(x,region) 1224 1225 #endif 1226 1227 extern void 1228 prima_cleanup_drawable_after_painting( Handle self); 1229 1230 extern void 1231 prima_cleanup_font_subsystem( void); 1232 1233 extern void 1234 prima_cursor_tick( void); 1235 1236 extern void 1237 prima_no_cursor( Handle self); 1238 1239 extern Cursor 1240 prima_null_pointer( void); 1241 1242 #define WAIT_NEVER 0 1243 #define WAIT_ALWAYS 1 1244 #define WAIT_IF_NONE 2 1245 1246 extern Bool 1247 prima_one_loop_round( int wait, Bool careOfApplication); 1248 1249 extern void 1250 prima_prepare_drawable_for_painting( Handle self, Bool inside_on_paint); 1251 1252 extern Bool 1253 prima_simple_message( Handle self, int cmd, Bool is_post); 1254 1255 extern void 1256 prima_update_cursor( Handle self); 1257 1258 extern Bool 1259 prima_update_rotated_fonts( PCachedFont f, const char * text, int len, Bool wide, 1260 double direction, PRotatedFont *result, Bool * ok_to_not_rotate); 1261 1262 extern void 1263 prima_free_rotated_entry( PCachedFont f); 1264 1265 #define frUnix_int 1000 1266 1267 extern int 1268 unix_rm_get_int( Handle self, XrmQuark class_detail, XrmQuark name_detail, int default_value); 1269 1270 extern void 1271 prima_rect_union( XRectangle *t, const XRectangle *s); 1272 1273 extern void 1274 prima_rect_intersect( XRectangle *t, const XRectangle *s); 1275 1276 extern void 1277 prima_send_create_event( XWindow win); 1278 1279 extern void 1280 prima_gc_ximages( void); 1281 1282 extern void 1283 prima_ximage_event( XEvent*); 1284 1285 extern PrimaXImage* 1286 prima_prepare_ximage( int width, int height, int format); 1287 1288 extern Bool 1289 prima_free_ximage( PrimaXImage *i); 1290 1291 extern int 1292 prima_rop_map( int rop); 1293 1294 extern void 1295 prima_gp_get_clip_rect( Handle self, XRectangle *cr, Bool for_internal_paints); 1296 1297 extern XWindow 1298 prima_find_frame_window( XWindow w); 1299 1300 extern Bool 1301 prima_get_frame_info( Handle self, PRect r); 1302 1303 extern void 1304 prima_send_cmSize( Handle self, Point oldSize); 1305 1306 extern Bool 1307 prima_no_input( PDrawableSysData XX, Bool ignore_horizon, Bool beep); 1308 1309 extern void 1310 process_transparents( Handle self); 1311 1312 extern Bool 1313 apc_window_set_visible( Handle self, Bool show); 1314 1315 extern void 1316 apc_SetWMNormalHints( Handle self, XSizeHints * hints); 1317 1318 extern Bool 1319 prima_window_reset_menu( Handle self, int newMenuHeight); 1320 1321 extern void 1322 prima_end_menu(void); 1323 1324 extern int 1325 prima_handle_menu_shortcuts( Handle self, XEvent * ev, KeySym keysym); 1326 1327 extern void 1328 prima_wm_sync( Handle self, int eventType); 1329 1330 extern Bool 1331 prima_wm_net_state_read_maximization( XWindow window, Atom property); 1332 1333 extern unsigned char * 1334 prima_get_window_property( XWindow window, Atom property, Atom req_type, Atom * actual_type, 1335 int * actual_format, unsigned long * nitems); 1336 1337 extern PFontABC 1338 prima_xfont2abc( XFontStruct * fs, int firstChar, int lastChar); 1339 1340 extern PCachedFont 1341 prima_find_known_font( PFont font, Bool refill, Bool bySize); 1342 1343 extern void 1344 prima_font_pp2font( char * ppFontNameSize, PFont font); 1345 1346 extern void 1347 prima_build_font_key( PFontKey key, PFont f, Bool bySize); 1348 1349 extern Bool 1350 prima_core_font_pick( Handle self, Font * source, Font * dest); 1351 1352 extern Bool 1353 prima_core_font_encoding( char * encoding); 1354 1355 extern void 1356 prima_init_try_height( HeightGuessStack * p, int target, int firstMove ); 1357 1358 extern int 1359 prima_try_height( HeightGuessStack * p, int height); 1360 1361 extern void 1362 prima_utf8_to_wchar( const char * utf8, XChar2b * u16, int src_len_bytes, int target_len_xchars); 1363 1364 extern XChar2b * 1365 prima_alloc_utf8_to_wchar( const char * utf8, int length_chars); 1366 1367 extern void 1368 prima_wchar2char( char * dest, XChar2b * src, int lim); 1369 1370 extern void 1371 prima_char2wchar( XChar2b * dest, char * src, int lim); 1372 1373 extern XCharStruct * 1374 prima_char_struct( XFontStruct * xs, void * c, Bool wide); 1375 1376 extern Color** 1377 prima_standard_colors(void); 1378 1379 struct MsgDlg { 1380 struct MsgDlg * next; 1381 Font * font; 1382 Point btnPos; 1383 Point btnSz; 1384 Bool wide; 1385 char ** wrapped; 1386 int count; 1387 int wrappedCount; 1388 int *widths, *lengths; 1389 int OKwidth; 1390 Point textPos; 1391 Bool active; 1392 Bool pressed; 1393 Bool grab; 1394 int fontId; 1395 Point winSz; 1396 GC gc; 1397 unsigned long fg, l3d, d3d; 1398 Brush bg; 1399 XWindow w; 1400 int focus_revertTo; 1401 XWindow focus; 1402 }; 1403 1404 extern void 1405 prima_msgdlg_event( XEvent* ev, struct MsgDlg * md); 1406 1407 typedef void (*RETSIGTYPE)(int); 1408 1409 #undef XDestroyImage 1410 #define XDestroyImage prima_XDestroyImage 1411 extern void 1412 prima_XDestroyImage( XImage * x); 1413 1414 typedef int (*XIfEventProcType)(Display*,XEvent*,XPointer); 1415 1416 #endif 1417 1418 #ifdef USE_XFT 1419 1420 extern void 1421 prima_xft_init( void); 1422 1423 extern void 1424 prima_xft_init_font_substitution( void); 1425 1426 extern void 1427 prima_xft_done( void); 1428 1429 extern void 1430 prima_xft_gp_destroy( Handle self ); 1431 1432 extern Bool 1433 prima_xft_font_pick( Handle self, Font * source, Font * dest, double * size, XftFont ** xft_result); 1434 1435 extern Bool 1436 prima_xft_set_font( Handle self, PFont font); 1437 1438 extern PFont 1439 prima_xft_fonts( PFont array, const char *facename, const char * encoding, int *retCount); 1440 1441 extern void 1442 prima_xft_font_encodings( PHash hash); 1443 1444 extern int 1445 prima_xft_get_text_width( PCachedFont self, const char * text, int len, 1446 int flags, uint32_t * map8, 1447 Point * overhangs); 1448 1449 extern int 1450 prima_xft_get_glyphs_width( PCachedFont self, PGlyphsOutRec glyphs, 1451 Point * overhangs); 1452 1453 extern Point * 1454 prima_xft_get_text_box( Handle self, const char * text, int len, int flags); 1455 1456 extern Point * 1457 prima_xft_get_glyphs_box( Handle self, PGlyphsOutRec glyphs); 1458 1459 extern Bool 1460 prima_xft_text_out( Handle self, const char * text, int x, int y, int len, int flags); 1461 1462 extern Bool 1463 prima_xft_glyphs_out( Handle self, PGlyphsOutRec glyphs, int x, int y); 1464 1465 extern unsigned long * 1466 prima_xft_get_font_ranges( Handle self, int * count); 1467 1468 extern char * 1469 prima_xft_get_font_languages( Handle self); 1470 1471 extern PFontABC 1472 prima_xft_get_font_abc( Handle self, int firstChar, int lastChar, int flags); 1473 1474 extern PFontABC 1475 prima_xft_get_font_def( Handle self, int firstChar, int lastChar, int flags); 1476 1477 extern int 1478 prima_xft_get_glyph_outline( Handle self, int index, int flags, int ** buffer); 1479 1480 extern PCachedFont 1481 prima_xft_get_cache( PFont font); 1482 1483 extern uint32_t * 1484 prima_xft_map8( const char * encoding); 1485 1486 extern Bool 1487 prima_xft_parse( char * ppFontNameSize, Font * font); 1488 1489 extern void 1490 prima_xft_update_region( Handle self); 1491 1492 extern int 1493 prima_xft_load_font( char * fontName ); 1494 1495 extern Bool 1496 prima_xft_text_shaper_ident( Handle self, PTextShapeRec r); 1497 1498 extern Bool 1499 prima_xft_text_shaper_bytes( Handle self, PTextShapeRec r); 1500 1501 #ifdef WITH_HARFBUZZ 1502 extern Bool 1503 prima_xft_text_shaper_harfbuzz( Handle self, PTextShapeRec r); 1504 #endif 1505 1506 extern unsigned long * 1507 prima_xft_mapper_query_ranges(PFont font, int * count, unsigned int * flags); 1508 1509 #endif 1510 1511 #ifdef WITH_GTK 1512 extern Display* 1513 prima_gtk_init( void); 1514 1515 extern Bool 1516 prima_gtk_done( void); 1517 1518 extern char * 1519 prima_gtk_openfile( char * params); 1520 1521 extern Bool 1522 prima_gtk_application_get_bitmap( Handle self, Handle image, int x, int y, int xLen, int yLen); 1523 #endif 1524 1525 #ifdef WITH_COCOA 1526 extern uint32_t* 1527 prima_cocoa_application_get_bitmap( int x, int y, int xLen, int yLen, int yMax); 1528 1529 extern char * 1530 prima_cocoa_system_action( char * params); 1531 1532 extern int 1533 prima_cocoa_is_x11_local(void); 1534 #endif 1535 1536 typedef struct _ViewProfile { 1537 Point pos; 1538 Point size; 1539 Bool visible; 1540 Bool focused; 1541 Handle capture; 1542 char * title; 1543 int shape_count; 1544 int shape_ordering; 1545 XRectangle * shape_rects; 1546 } ViewProfile, *PViewProfile; 1547 1548 extern void 1549 prima_set_view_ex( Handle self, PViewProfile p); 1550 1551 extern void 1552 prima_get_view_ex( Handle self, PViewProfile p); 1553 1554 extern void 1555 prima_notify_sys_handle( Handle self ); 1556 1557 extern int 1558 prima_flush_events( Display * disp, XEvent * ev, Handle self); 1559 1560 extern const char * 1561 prima_font_debug_style(int style); 1562 1563 extern Region 1564 prima_region_create( Handle mask); 1565 1566 extern Handle 1567 prima_find_toplevel_window(Handle self); 1568 1569 extern Byte* 1570 prima_mirror_bits( void); 1571 1572 extern int 1573 prima_copy_region_data(void * region); 1574 1575 #define RPS_OK 0 1576 #define RPS_PARTIAL 1 1577 #define RPS_NODATA 2 1578 #define RPS_ERROR 3 1579 1580 extern Bool 1581 prima_handle_dnd_event( Handle self, XEvent *xev); 1582 1583 extern int 1584 prima_read_property( XWindow window, Atom property, Atom * type, int * format, 1585 unsigned long * size, unsigned char ** data, Bool delete_property); 1586 1587 extern void 1588 prima_clipboard_kill_item( PClipboardDataItem item, Handle id); 1589 1590 extern void 1591 prima_detach_xfers( PClipboardSysData XX, Handle id, Bool clear_original_data); 1592 1593 extern void 1594 prima_clipboard_query_targets( Handle self ); 1595 1596 extern int 1597 prima_clipboard_fill_targets( Handle self); 1598 1599 extern void 1600 prima_update_dnd_aware( Handle self ); 1601 1602 extern Cursor 1603 prima_get_cursor(Handle self); 1604 1605