| @@ -47,15 +47,41 @@ | |||
| #include <unistd.h> | |||
| #endif // ARCH_X64 | |||
| // | |||
| // Regular log entry (low frequency) | |||
| // | |||
| // #define Dlog_verbose if(1);else lglw_log | |||
| #define Dlog if(0);else lglw_log | |||
| // | |||
| // Verbose log entry | |||
| // | |||
| // #define Dlog_v if(1);else lglw_log | |||
| #define Dlog_v if(0);else lglw_log | |||
| // | |||
| // Very-verbose log entry | |||
| // | |||
| // #define Dlog_vv if(1);else lglw_log | |||
| #define Dlog_vv if(0);else lglw_log | |||
| // | |||
| // Very-very-verbose log entry | |||
| // | |||
| #define Dlog_vvv if(1);else lglw_log | |||
| // #define Dlog_vvv if(0);else lglw_log | |||
| // | |||
| // Print to stdout | |||
| // | |||
| // Please use the Dlog* macros instead! | |||
| // | |||
| #define Dprintf if(0);else printf | |||
| // #define Dprintf if(1);else printf | |||
| #define Dprintf_verbose if(1);else printf | |||
| // #define Dprintf_verbose if(0);else printf | |||
| #define Dlog_verbose if(1);else lglw_log | |||
| // #define Dlog_verbose if(0);else lglw_log | |||
| // ---------------------------------------------------------------------------- macros and defines | |||
| #define LGLW(a) lglw_int_t *lglw = ((lglw_int_t*)(a)) | |||
| @@ -212,7 +238,7 @@ void lglw_log(const char *logData, ...) { | |||
| static int xerror_handler(Display *display, XErrorEvent *error) { | |||
| char error_text[1024]; | |||
| XGetErrorText(display, error->error_code, error_text, 1024); | |||
| lglw_log("XERROR (%d): %s, %d, %d\n", error->error_code, error_text, error->request_code, error->minor_code); | |||
| Dlog("XERROR (%d): %s, %d, %d\n", error->error_code, error_text, error->request_code, error->minor_code); | |||
| return 0; | |||
| } | |||
| @@ -221,7 +247,7 @@ static int xerror_handler(Display *display, XErrorEvent *error) { | |||
| lglw_t lglw_init(int32_t _w, int32_t _h) { | |||
| lglw_int_t *lglw = malloc(sizeof(lglw_int_t)); | |||
| printf("xxx lglw_init: sizeof(uint32_t)=%lu sizeof(long)=%lu sizeof(void*)=%lu\n", sizeof(uint32_t), sizeof(long), sizeof(void*)); | |||
| Dprintf("xxx lglw_init: sizeof(uint32_t)=%lu sizeof(long)=%lu sizeof(void*)=%lu\n", sizeof(uint32_t), sizeof(long), sizeof(void*)); | |||
| // TODO: remove/improve | |||
| logfile = fopen("/tmp/lglw_log.txt", "w"); | |||
| @@ -234,23 +260,23 @@ lglw_t lglw_init(int32_t _w, int32_t _h) { | |||
| { | |||
| memset(lglw, 0, sizeof(lglw_int_t)); | |||
| lglw_log("lglw:lglw_init: 1\n"); | |||
| Dlog("lglw:lglw_init: 1\n"); | |||
| if(_w <= 16) | |||
| _w = LGLW_DEFAULT_HIDDEN_W; | |||
| if(_h <= 16) | |||
| _h = LGLW_DEFAULT_HIDDEN_H; | |||
| lglw_log("lglw:lglw_init: 2\n"); | |||
| Dlog("lglw:lglw_init: 2\n"); | |||
| if(!loc_create_hidden_window(lglw, _w, _h)) | |||
| { | |||
| free(lglw); | |||
| lglw = NULL; | |||
| } | |||
| lglw_log("lglw:lglw_init: 3\n"); | |||
| Dlog("lglw:lglw_init: 3\n"); | |||
| } | |||
| lglw_log("lglw:lglw_init: EXIT\n"); | |||
| Dlog("lglw:lglw_init: EXIT\n"); | |||
| return lglw; | |||
| } | |||
| @@ -262,11 +288,11 @@ void lglw_exit(lglw_t _lglw) { | |||
| if(NULL != lglw) | |||
| { | |||
| lglw_log("lglw:lglw_exit: 1\n"); | |||
| Dlog("lglw:lglw_exit: 1\n"); | |||
| loc_destroy_hidden_window(lglw); | |||
| lglw_log("lglw:lglw_exit: 2\n"); | |||
| Dlog("lglw:lglw_exit: 2\n"); | |||
| fclose(logfile); | |||
| free(lglw); | |||
| @@ -280,7 +306,7 @@ void lglw_userdata_set(lglw_t _lglw, void *_userData) { | |||
| if(NULL != lglw) | |||
| { | |||
| // lglw_log("lglw:lglw_userdata_set: 1\n"); | |||
| Dlog_vvv("lglw:lglw_userdata_set: ptr=%p\n", _userData); | |||
| lglw->user_data = _userData; | |||
| } | |||
| } | |||
| @@ -291,7 +317,7 @@ void *lglw_userdata_get(lglw_t _lglw) { | |||
| if(NULL != lglw) | |||
| { | |||
| // lglw_log("lglw:lglw_userdata_get: 1\n"); | |||
| Dlog_vvv("lglw:lglw_userdata_get: return ptr=%p\n", lglw->user_data); | |||
| return lglw->user_data; | |||
| } | |||
| @@ -304,51 +330,51 @@ static lglw_bool_t loc_create_hidden_window(lglw_int_t *lglw, int32_t _w, int32_ | |||
| // TODO: compare to 'WindowClass' from Windows implementation | |||
| lglw_log("lglw:loc_create_hidden_window: 1\n"); | |||
| Dlog_v("lglw:loc_create_hidden_window: 1\n"); | |||
| XSetWindowAttributes swa; | |||
| int attrib[] = { GLX_RGBA, GLX_DOUBLEBUFFER, GLX_DEPTH_SIZE, 24, None }; | |||
| int screen; | |||
| lglw_log("lglw:loc_create_hidden_window: 2\n"); | |||
| Dlog_v("lglw:loc_create_hidden_window: 2\n"); | |||
| lglw->xdsp = XOpenDisplay(NULL); | |||
| screen = DefaultScreen(lglw->xdsp); | |||
| lglw_log("lglw:loc_create_hidden_window: 3\n"); | |||
| Dlog_v("lglw:loc_create_hidden_window: 3\n"); | |||
| lglw->vi = glXChooseVisual(lglw->xdsp, screen, attrib); | |||
| lglw_log("lglw:loc_create_hidden_window: 4\n"); | |||
| Dlog_v("lglw:loc_create_hidden_window: 4\n"); | |||
| if(NULL == lglw->vi) | |||
| { | |||
| lglw_log("[---] lglw: failed to find GLX Visual for hidden window\n"); | |||
| Dlog("[---] lglw: failed to find GLX Visual for hidden window\n"); | |||
| return LGLW_FALSE; | |||
| } | |||
| lglw_log("lglw:loc_create_hidden_window: 5\n"); | |||
| Dlog_v("lglw:loc_create_hidden_window: 5\n"); | |||
| lglw->ctx = glXCreateContext(lglw->xdsp, lglw->vi, None, True); | |||
| lglw_log("lglw:loc_create_hidden_window: 6\n"); | |||
| Dlog_v("lglw:loc_create_hidden_window: 6\n"); | |||
| if(NULL == lglw->ctx) | |||
| { | |||
| lglw_log("[---] lglw: failed to create GLX Context for hidden window\n"); | |||
| Dlog("[---] lglw: failed to create GLX Context for hidden window\n"); | |||
| return LGLW_FALSE; | |||
| } | |||
| lglw_log("lglw:loc_create_hidden_window: 7\n"); | |||
| Dlog_v("lglw:loc_create_hidden_window: 7\n"); | |||
| lglw->cmap = XCreateColormap(lglw->xdsp, RootWindow(lglw->xdsp, lglw->vi->screen), | |||
| lglw->vi->visual, AllocNone); | |||
| lglw_log("lglw:loc_create_hidden_window: 8\n"); | |||
| Dlog_v("lglw:loc_create_hidden_window: 8\n"); | |||
| swa.border_pixel = 0; | |||
| swa.colormap = lglw->cmap; | |||
| lglw->hidden.xwnd = XCreateWindow(lglw->xdsp, DefaultRootWindow(lglw->xdsp), | |||
| 0, 0, LGLW_DEFAULT_HIDDEN_W, LGLW_DEFAULT_HIDDEN_H, 0, CopyFromParent, InputOutput, | |||
| lglw->vi->visual, CWBorderPixel | CWColormap, &swa); | |||
| 0, 0, LGLW_DEFAULT_HIDDEN_W, LGLW_DEFAULT_HIDDEN_H, 0, CopyFromParent, InputOutput, | |||
| lglw->vi->visual, CWBorderPixel | CWColormap, &swa); | |||
| lglw_log("lglw:loc_create_hidden_window: 9\n"); | |||
| Dlog_v("lglw:loc_create_hidden_window: 9\n"); | |||
| XSetStandardProperties(lglw->xdsp, lglw->hidden.xwnd, "LGLW_hidden", "LGLW_hidden", None, NULL, 0, NULL); | |||
| XSync(lglw->xdsp, False); | |||
| lglw_log("lglw:loc_create_hidden_window: EXIT\n"); | |||
| Dlog_v("lglw:loc_create_hidden_window: EXIT\n"); | |||
| lglw->hidden.size.x = _w; | |||
| lglw->hidden.size.y = _h; | |||
| @@ -358,20 +384,20 @@ static lglw_bool_t loc_create_hidden_window(lglw_int_t *lglw, int32_t _w, int32_ | |||
| // ---------------------------------------------------------------------------- loc_destroy_hidden_window | |||
| static void loc_destroy_hidden_window(lglw_int_t *lglw) { | |||
| lglw_log("lglw:loc_destroy_hidden_window: 1\n"); | |||
| Dlog_v("lglw:loc_destroy_hidden_window: 1\n"); | |||
| if(NULL != lglw->xdsp && NULL != lglw->ctx) | |||
| { | |||
| glXMakeCurrent(lglw->xdsp, None, NULL); | |||
| glXDestroyContext(lglw->xdsp, lglw->ctx); | |||
| } | |||
| lglw_log("lglw:loc_destroy_hidden_window: 2\n"); | |||
| Dlog_v("lglw:loc_destroy_hidden_window: 2\n"); | |||
| if(NULL != lglw->xdsp && 0 != lglw->hidden.xwnd) XDestroyWindow(lglw->xdsp, lglw->hidden.xwnd); | |||
| lglw_log("lglw:loc_destroy_hidden_window: 3\n"); | |||
| Dlog_v("lglw:loc_destroy_hidden_window: 3\n"); | |||
| if(NULL != lglw->xdsp && 0 != lglw->cmap) XFreeColormap(lglw->xdsp, lglw->cmap); | |||
| lglw_log("lglw:loc_destroy_hidden_window: 4\n"); | |||
| Dlog_v("lglw:loc_destroy_hidden_window: 4\n"); | |||
| if(NULL != lglw->vi) XFree(lglw->vi); | |||
| lglw_log("lglw:loc_destroy_hidden_window: 5\n"); | |||
| Dlog_v("lglw:loc_destroy_hidden_window: 5\n"); | |||
| XSync(lglw->xdsp, False); | |||
| if(NULL != lglw->xdsp) XCloseDisplay(lglw->xdsp); | |||
| } | |||
| @@ -388,7 +414,7 @@ static void loc_destroy_hidden_window(lglw_int_t *lglw) { | |||
| // Very simple function to test _XEventProc is properly called | |||
| static void loc_eventProc(XEvent *xev, lglw_int_t *lglw) { | |||
| Dlog_verbose("vstgltest<lglw_linux>: eventProc: type=%d serial=%lu send_event=%d lglw=%p\n", xev->xany.type, xev->xany.serial, xev->xany.send_event, lglw); | |||
| Dlog_vvv("lglw:loc_eventProc: type=%d serial=%lu send_event=%d lglw=%p\n", xev->xany.type, xev->xany.serial, xev->xany.send_event, lglw); | |||
| loc_process_timer(lglw); | |||
| @@ -399,12 +425,12 @@ static void loc_eventProc(XEvent *xev, lglw_int_t *lglw) { | |||
| switch(xev->type) | |||
| { | |||
| default: | |||
| printf("vstgltest<lglw_linux>: unhandled X11 event type=%d\n", xev->type); | |||
| Dlog("lglw:loc_eventProc: unhandled X11 event type=%d\n", xev->type); | |||
| eventHandled = LGLW_FALSE; | |||
| break; | |||
| case Expose: | |||
| Dlog_verbose("vstgltest<lglw_linux>: xev Expose\n"); | |||
| Dlog_v("lglw:loc_eventProc: xev Expose\n"); | |||
| loc_handle_queued_mouse_warp(lglw); | |||
| eventHandled = LGLW_FALSE; | |||
| if(NULL != lglw->redraw.cbk) | |||
| @@ -417,20 +443,20 @@ static void loc_eventProc(XEvent *xev, lglw_int_t *lglw) { | |||
| // TODO: Should FocusIn/Out be treated like WM_CAPTURECHANGED and reset the grab state? | |||
| case FocusIn: | |||
| Dlog_verbose("vstgltest<lglw_linux>: xev FocusIn\n"); | |||
| Dlog_v("lglw:loc_eventProc: xev FocusIn\n"); | |||
| eventHandled = LGLW_FALSE; | |||
| break; | |||
| case FocusOut: | |||
| Dlog_verbose("vstgltest<lglw_linux>: xev FocusOut\n"); | |||
| Dlog_v("lglw:loc_eventProc: xev FocusOut\n"); | |||
| eventHandled = LGLW_FALSE; | |||
| break; | |||
| case EnterNotify: | |||
| // printf("vstgltest<lglw_linux>: xev XEnterWindowEvent\n"); | |||
| // Dlog_v("lglw:loc_eventProc: xev XEnterWindowEvent\n"); | |||
| ; // empty statement | |||
| XEnterWindowEvent *wenter = (XEnterWindowEvent*)xev; | |||
| printf("vstgltest<lglw_linux>: xev EnterNotify: mode:%i, detail:%i, state:%d\n", wenter->mode, wenter->detail, wenter->state); | |||
| Dlog_v("lglw:loc_eventProc: xev EnterNotify: mode:%i, detail:%i, state:%d\n", wenter->mode, wenter->detail, wenter->state); | |||
| lglw->mouse.p.x = wenter->x; | |||
| lglw->mouse.p.y = wenter->y; | |||
| loc_handle_mousemotion(lglw); | |||
| @@ -447,10 +473,10 @@ static void loc_eventProc(XEvent *xev, lglw_int_t *lglw) { | |||
| break; | |||
| case LeaveNotify: | |||
| // printf("vstgltest<lglw_linux>: xev XLeaveWindowEvent\n"); | |||
| // Dlog_v("lglw:loc_eventProc: xev XLeaveWindowEvent\n"); | |||
| ; // empty statement | |||
| XLeaveWindowEvent *wexit = (XLeaveWindowEvent*)xev; | |||
| printf("vstgltest<lglw_linux>: xev LeaveNotify: mode:%i, detail:%i, state:%d\n", wexit->mode, wexit->detail, wexit->state); | |||
| Dlog_v("lglw:loc_eventProc: xev LeaveNotify: mode:%i, detail:%i, state:%d\n", wexit->mode, wexit->detail, wexit->state); | |||
| // LeaveNotify messages can be pseudo-motion events (NotifyGrab, NotifyUngrab) | |||
| // when buttons are pressed, which would trigger false focus changes | |||
| @@ -464,7 +490,7 @@ static void loc_eventProc(XEvent *xev, lglw_int_t *lglw) { | |||
| break; | |||
| case MotionNotify: | |||
| // printf("vstgltest<lglw_linux>: xev MotionNotify\n"); | |||
| Dlog_v("lglw:loc_eventProc: xev MotionNotify\n"); | |||
| ; // empty statement | |||
| XMotionEvent *motion = (XMotionEvent*)xev; | |||
| @@ -490,7 +516,7 @@ static void loc_eventProc(XEvent *xev, lglw_int_t *lglw) { | |||
| break; | |||
| case KeyPress: | |||
| printf("vstgltest<lglw_linux>: xev KeyPress\n"); | |||
| Dlog("lglw:loc_eventProc: xev KeyPress\n"); | |||
| XKeyPressedEvent *keyPress = (XKeyPressedEvent*)xev; | |||
| eventHandled = LGLW_FALSE; | |||
| @@ -498,7 +524,7 @@ static void loc_eventProc(XEvent *xev, lglw_int_t *lglw) { | |||
| switch(xkp) | |||
| { | |||
| default: | |||
| printf("vstgltest<lglw_linux>: xev KeyPress: %x or %lu\n", keyPress->keycode, xkp); | |||
| Dlog("lglw:loc_eventProc: xev KeyPress: %x or %lu\n", keyPress->keycode, xkp); | |||
| if(0u != (lglw->keyboard.kmod_state & LGLW_KMOD_SHIFT)) | |||
| { | |||
| KeySym xkpl; | |||
| @@ -513,7 +539,7 @@ static void loc_eventProc(XEvent *xev, lglw_int_t *lglw) { | |||
| break; | |||
| case NoSymbol: | |||
| printf("vstgltest<lglw_linux>: xev UNKNOWN KeyPress: %x\n", keyPress->keycode); | |||
| Dlog("lglw:loc_eventProc: xev UNKNOWN KeyPress: %x\n", keyPress->keycode); | |||
| break; | |||
| case XK_Left: | |||
| @@ -640,7 +666,7 @@ static void loc_eventProc(XEvent *xev, lglw_int_t *lglw) { | |||
| break; | |||
| case KeyRelease: | |||
| printf("vstgltest<lglw_linux>: xev KeyRelease\n"); | |||
| Dlog("lglw:loc_eventProc: xev KeyRelease\n"); | |||
| XKeyReleasedEvent *keyRelease = (XKeyReleasedEvent*)xev; | |||
| eventHandled = LGLW_FALSE; | |||
| @@ -648,7 +674,7 @@ static void loc_eventProc(XEvent *xev, lglw_int_t *lglw) { | |||
| switch(xkr) | |||
| { | |||
| default: | |||
| printf("vstgltest<lglw_linux>: xev KeyRelease: %x or %lu\n", keyRelease->keycode, xkr); | |||
| Dlog("lglw:loc_eventProc: xev KeyRelease: %x or %lu\n", keyRelease->keycode, xkr); | |||
| if(0u != (lglw->keyboard.kmod_state & LGLW_KMOD_SHIFT)) | |||
| { | |||
| KeySym xkrl; | |||
| @@ -663,7 +689,7 @@ static void loc_eventProc(XEvent *xev, lglw_int_t *lglw) { | |||
| break; | |||
| case NoSymbol: | |||
| printf("vstgltest<lglw_linux>: xev UNKNOWN KeyRelease: %x\n", keyRelease->keycode); | |||
| Dlog("lglw:loc_eventProc: xev UNKNOWN KeyRelease: %x\n", keyRelease->keycode); | |||
| break; | |||
| case XK_Left: | |||
| @@ -790,7 +816,7 @@ static void loc_eventProc(XEvent *xev, lglw_int_t *lglw) { | |||
| break; | |||
| case ButtonPress: | |||
| printf("vstgltest<lglw_linux>: xev ButtonPress\n"); | |||
| Dlog("lglw:loc_eventProc: xev ButtonPress\n"); | |||
| XButtonPressedEvent *btnPress = (XButtonPressedEvent*)xev; | |||
| lglw->mouse.p.x = btnPress->x; | |||
| lglw->mouse.p.y = btnPress->y; | |||
| @@ -803,7 +829,7 @@ static void loc_eventProc(XEvent *xev, lglw_int_t *lglw) { | |||
| switch(btnPress->button) | |||
| { | |||
| default: | |||
| printf("vstgltest<lglw_linux>: xev ButtonPress unhandled button: %i\n", btnPress->button); | |||
| Dlog("lglw:loc_eventProc: xev ButtonPress unhandled button: %i\n", btnPress->button); | |||
| eventHandled = LGLW_FALSE; | |||
| break; | |||
| case Button1: | |||
| @@ -830,14 +856,14 @@ static void loc_eventProc(XEvent *xev, lglw_int_t *lglw) { | |||
| break; | |||
| case ButtonRelease: | |||
| printf("vstgltest<lglw_linux>: xev ButtonRelease\n"); | |||
| Dlog("lglw:loc_eventProc: xev ButtonRelease\n"); | |||
| XButtonReleasedEvent *btnRelease = (XButtonReleasedEvent*)xev; | |||
| lglw->mouse.p.x = btnRelease->x; | |||
| lglw->mouse.p.y = btnRelease->y; | |||
| switch(btnRelease->button) | |||
| { | |||
| default: | |||
| printf("vstgltest<lglw_linux>: xev ButtonRelease unhandled button: %i\n", btnRelease->button); | |||
| Dlog("lglw:loc_eventProc: xev ButtonRelease unhandled button: %i\n", btnRelease->button); | |||
| eventHandled = LGLW_FALSE; | |||
| break; | |||
| case Button1: | |||
| @@ -864,14 +890,14 @@ static void loc_eventProc(XEvent *xev, lglw_int_t *lglw) { | |||
| break; | |||
| case SelectionClear: | |||
| printf("vstgltest<lglw_linux>: xev SelectionClear\n"); | |||
| Dlog("lglw:loc_eventProc: xev SelectionClear\n"); | |||
| lglw->clipboard.numChars = 0; | |||
| free(lglw->clipboard.data); | |||
| eventHandled = LGLW_TRUE; | |||
| break; | |||
| case SelectionRequest: | |||
| printf("vstgltest<lglw_linux>: xev SelectionRequest\n"); | |||
| Dlog("lglw:loc_eventProc: xev SelectionRequest\n"); | |||
| XSelectionRequestEvent *cbReq = (XSelectionRequestEvent*)xev; | |||
| XSelectionEvent cbRes; | |||
| @@ -907,7 +933,7 @@ static void loc_eventProc(XEvent *xev, lglw_int_t *lglw) { | |||
| { | |||
| if(0 == lglw->parent_xwnd) | |||
| { | |||
| printf("lglw_linux:loc_eventProc: no parent window to send events to"); | |||
| Dlog("lglw:loc_eventProc: no parent window to send events to"); | |||
| XSendEvent(lglw->xdsp, InputFocus, True/*propgate*/, NoEventMask, xev); | |||
| } | |||
| else | |||
| @@ -924,16 +950,18 @@ static void loc_eventProc(XEvent *xev, lglw_int_t *lglw) { | |||
| static void loc_XEventProc(void *_xevent) { | |||
| XEvent *xev = (XEvent*)_xevent; | |||
| Dlog_verbose("XEventProc\n"); | |||
| // printf("vstgltest<lglw_linux>: XEventProc, xev=%p\n", xev); | |||
| Dlog_vvv("lglw:loc_XEventProc: ENTER\n"); | |||
| // Dlog_vvv("lglw: XEventProc, xev=%p\n", xev); | |||
| if(NULL != xev) | |||
| { | |||
| LGLW(loc_getProperty(xev->xany.display, xev->xany.window, "_lglw")); // get instance pointer | |||
| Dlog_verbose("lglw_linux:loc_XEventProc: xev=%p lglw=%p\n", xev, lglw); | |||
| Dlog_vvv("lglw:loc_XEventProc: xev=%p lglw=%p\n", xev, lglw); | |||
| loc_eventProc(xev, lglw); | |||
| } | |||
| Dlog_vvv("lglw:loc_XEventProc: LEAVE\n"); | |||
| } | |||
| static void loc_setProperty(Display *_display, Window _window, const char *_name, void *_value) { | |||
| @@ -944,7 +972,7 @@ static void loc_setProperty(Display *_display, Window _window, const char *_name | |||
| temp[0] = (long)(data & 0xffffffffUL); | |||
| temp[1] = (long)(data >> 32L); | |||
| printf("xxx lglw_linux:loc_setProperty: name=\"%s\" value=%p temp[0]=%08x temp[1]=%08x\n", _name, _value, (uint32_t)temp[0], (uint32_t)temp[1]); | |||
| Dlog_v("lglw:loc_setProperty: name=\"%s\" value=%p temp[0]=%08x temp[1]=%08x\n", _name, _value, (uint32_t)temp[0], (uint32_t)temp[1]); | |||
| Atom atom = XInternAtom(_display, _name, False/*only_if_exists*/); | |||
| @@ -988,54 +1016,45 @@ static void *loc_getProperty(Display *_display, Window _window, const char *_nam | |||
| } uptr; | |||
| uptr.any = 0; | |||
| // printf("xxx lglw_linux: loc_getProperty: LOWER userSize=%d userCount=%lu bytes=%lu data=%p\n", userSize, userCount, bytes, data); | |||
| Dlog_vvv("lglw:loc_getProperty: LOWER userSize=%d userCount=%lu bytes=%lu data=%p\n", userSize, userCount, bytes, data); | |||
| if(NULL != data) | |||
| { | |||
| if(userCount >= 1) | |||
| { | |||
| // if(userCount >= 2) | |||
| // { | |||
| // printf("xxx loc_getProperty: lo=0x%08x hi=0x%08x\n", ((uint32_t*)data)[0], ((uint32_t*)data)[1]); | |||
| // } | |||
| // lower 32-bit | |||
| uptr.ui[0] = *(long*)data; | |||
| uptr.ui[1] = 0; | |||
| // printf("xxx lower=0x%08x\n", uptr.ui[0]); | |||
| // // printf("xxx upper=0x%08x\n", uptr.ui[1]); | |||
| Dlog_vvv("lglw:loc_getProperty: lower=0x%08x\n", uptr.ui[0]); | |||
| XFree(data); | |||
| // // if(userCount >= 2) | |||
| XGetWindowProperty(_display, | |||
| _window, | |||
| atom, | |||
| 1/*offset*/, | |||
| 1/*length*/, | |||
| False/*delete*/, | |||
| AnyPropertyType, | |||
| &userType/*actual_type_return*/, | |||
| &userSize/*actual_format_return*/, | |||
| &userCount/*nitems_return*/, | |||
| &bytes/*bytes_after_return / partial reads*/, | |||
| &data); | |||
| Dlog_vvv("lglw:loc_getProperty: UPPER userSize=%d userCount=%lu bytes=%lu data=%p\n", userSize, userCount, bytes, data); | |||
| if(NULL != data) | |||
| { | |||
| XGetWindowProperty(_display, | |||
| _window, | |||
| atom, | |||
| 1/*offset*/, | |||
| 1/*length*/, | |||
| False/*delete*/, | |||
| AnyPropertyType, | |||
| &userType/*actual_type_return*/, | |||
| &userSize/*actual_format_return*/, | |||
| &userCount/*nitems_return*/, | |||
| &bytes/*bytes_after_return / partial reads*/, | |||
| &data); | |||
| // printf("xxx lglw_linux: loc_getProperty: UPPER userSize=%d userCount=%lu bytes=%lu data=%p\n", userSize, userCount, bytes, data); | |||
| if(NULL != data) | |||
| { | |||
| // upper 32-bit | |||
| uptr.ui[1] = *(long*)data; | |||
| // printf("xxx upper=0x%08x\n", uptr.ui[1]); | |||
| XFree(data); | |||
| } | |||
| // upper 32-bit | |||
| uptr.ui[1] = *(long*)data; | |||
| Dlog_vvv("lglw:loc_getProperty: upper=0x%08x\n", uptr.ui[1]); | |||
| XFree(data); | |||
| } | |||
| } | |||
| } | |||
| // printf("xxx lglw_linux: loc_getProperty: return value=%p\n", uptr.any); | |||
| Dlog_vvv("lglw:loc_getProperty: return value=%p\n", uptr.any); | |||
| return uptr.any; | |||
| } | |||
| @@ -1050,7 +1069,7 @@ static void loc_setEventProc (Display *display, Window window) { | |||
| size_t data = (size_t)loc_eventProc; | |||
| long temp[2]; | |||
| printf("vstgltest<lglw_linux>: setEventProc (2*32bit). window=%lu loc_eventProc=%p\n", window, &loc_eventProc); | |||
| Dlog("lglw: setEventProc (2*32bit). window=%lu loc_eventProc=%p\n", window, &loc_eventProc); | |||
| // Split the 64 bit pointer into a little-endian unsigned int array | |||
| temp[0] = (uint32_t)(data & 0xffffffffUL); | |||
| @@ -1098,7 +1117,7 @@ static void loc_setEventProc (Display *display, Window window) { | |||
| memcpy(ptr, kJumpInstructions, sizeof(kJumpInstructions)); | |||
| *((uint64_t *)(ptr + kJumpAddress)) = (uint64_t)(&loc_XEventProc); | |||
| msync(ptr, sizeof(kJumpInstructions), MS_INVALIDATE); | |||
| printf("vstgltest<lglw_linux>: 64bit trampoline installed\n"); | |||
| Dlog("lglw: 64bit trampoline installed\n"); | |||
| } | |||
| } | |||
| @@ -1140,26 +1159,26 @@ lglw_bool_t lglw_window_open (lglw_t _lglw, void *_parentHWNDOrNull, int32_t _x, | |||
| if(NULL != lglw) | |||
| { | |||
| lglw_log("lglw:lglw_window_open: 1, %p, %i \n", (Window)_parentHWNDOrNull, (Window)_parentHWNDOrNull); | |||
| Dlog_v("lglw:lglw_window_open: 1, %p, %i \n", (Window)_parentHWNDOrNull, (Window)_parentHWNDOrNull); | |||
| lglw->parent_xwnd = (0 == _parentHWNDOrNull) ? DefaultRootWindow(lglw->xdsp) : (Window)_parentHWNDOrNull; | |||
| lglw_log("lglw:lglw_window_open: 2 lglw=%p\n", lglw); | |||
| Dlog_v("lglw:lglw_window_open: 2 lglw=%p\n", lglw); | |||
| if(_w <= 16) | |||
| _w = lglw->hidden.size.x; | |||
| lglw_log("lglw:lglw_window_open: 3\n"); | |||
| Dlog_v("lglw:lglw_window_open: 3\n"); | |||
| if(_h <= 16) | |||
| _h = lglw->hidden.size.y; | |||
| // TODO: compare to 'WindowClass' from Windows implementation | |||
| lglw_log("lglw:lglw_window_open: 4\n"); | |||
| Dlog_v("lglw:lglw_window_open: 4\n"); | |||
| XSetWindowAttributes swa; | |||
| // // XEvent event; | |||
| XSync(lglw->xdsp, False); | |||
| #if 1 | |||
| lglw_log("lglw:lglw_window_open: 5\n"); | |||
| Dlog_v("lglw:lglw_window_open: 5\n"); | |||
| swa.border_pixel = 0; | |||
| swa.colormap = lglw->cmap; | |||
| // (note) [bsp] setting this to NoEventMask causes all events to be propagated to the parent (host) window. | |||
| @@ -1179,7 +1198,7 @@ lglw_bool_t lglw_window_open (lglw_t _lglw, void *_parentHWNDOrNull, int32_t _x, | |||
| &swa/*attributes*/ | |||
| ); | |||
| lglw_log("lglw:lglw_window_open: 6\n"); | |||
| Dlog_v("lglw:lglw_window_open: 6\n"); | |||
| XSetStandardProperties(lglw->xdsp/*display*/, | |||
| lglw->win.xwnd/*window*/, | |||
| "LGLW"/*window_name*/, | |||
| @@ -1192,7 +1211,7 @@ lglw_bool_t lglw_window_open (lglw_t _lglw, void *_parentHWNDOrNull, int32_t _x, | |||
| // Setup the event proc now, on the parent window as well just for the debug host | |||
| // It was simpler to do this than check in the debug host for the reparent event | |||
| lglw_log("lglw:lglw_window_open: 7\n"); | |||
| Dlog_v("lglw:lglw_window_open: 7\n"); | |||
| loc_setEventProc(lglw->xdsp, lglw->win.xwnd); | |||
| loc_setProperty(lglw->xdsp, lglw->win.xwnd, "_lglw", (void*)lglw); // set instance pointer | |||
| @@ -1209,7 +1228,7 @@ lglw_bool_t lglw_window_open (lglw_t _lglw, void *_parentHWNDOrNull, int32_t _x, | |||
| // (note) [cameronleger] In Ardour's code-base, the only time it looks for the _XEventProc is during a ReparentNotify event | |||
| if (0 != _parentHWNDOrNull) | |||
| { | |||
| lglw_log("lglw:lglw_window_open: 8\n"); | |||
| Dlog_v("lglw:lglw_window_open: 8\n"); | |||
| XReparentWindow(lglw->xdsp, lglw->win.xwnd, lglw->parent_xwnd, 0, 0); | |||
| } | |||
| #endif | |||
| @@ -1219,7 +1238,7 @@ lglw_bool_t lglw_window_open (lglw_t _lglw, void *_parentHWNDOrNull, int32_t _x, | |||
| lglw->win.b_owner = LGLW_FALSE; | |||
| #endif | |||
| lglw_log("lglw:lglw_window_open: 9\n"); | |||
| Dlog_v("lglw:lglw_window_open: 9\n"); | |||
| if(lglw->win.b_owner) | |||
| { | |||
| // // XMapRaised(lglw->xdsp, lglw->win.xwnd); | |||
| @@ -1249,14 +1268,14 @@ lglw_bool_t lglw_window_open (lglw_t _lglw, void *_parentHWNDOrNull, int32_t _x, | |||
| XSync(lglw->xdsp, False); | |||
| lglw->win.mapped = LGLW_TRUE; | |||
| lglw_log("lglw:lglw_window_open: 10\n"); | |||
| Dlog_v("lglw:lglw_window_open: 10\n"); | |||
| lglw->win.size.x = _w; | |||
| lglw->win.size.y = _h; | |||
| lglw_log("lglw:lglw_window_open: 11\n"); | |||
| Dlog_v("lglw:lglw_window_open: 11\n"); | |||
| loc_enable_dropfiles(lglw, (NULL != lglw->dropfiles.cbk)); | |||
| lglw_log("lglw:lglw_window_open: EXIT\n"); | |||
| Dlog_v("lglw:lglw_window_open: EXIT\n"); | |||
| r = LGLW_TRUE; | |||
| } | |||
| @@ -1273,51 +1292,51 @@ lglw_bool_t lglw_window_resize (lglw_t _lglw, int32_t _w, int32_t _h) { | |||
| { | |||
| if(0 != lglw->win.xwnd) | |||
| { | |||
| lglw_log("lglw:lglw_window_resize: 1\n"); | |||
| Dlog_v("lglw:lglw_window_resize: 1\n"); | |||
| r = LGLW_TRUE; | |||
| lglw_log("lglw:lglw_window_resize: 2\n"); | |||
| Dlog_v("lglw:lglw_window_resize: 2\n"); | |||
| XResizeWindow(lglw->xdsp, lglw->win.xwnd, _w, _h); | |||
| XRaiseWindow(lglw->xdsp, lglw->win.xwnd); | |||
| lglw_log("lglw:lglw_window_resize: 3\n"); | |||
| Dlog_v("lglw:lglw_window_resize: 3\n"); | |||
| int deltaW = _w - lglw->win.size.x; | |||
| int deltaH = _h - lglw->win.size.y; | |||
| lglw_log("lglw:lglw_window_resize: 4\n"); | |||
| Dlog_v("lglw:lglw_window_resize: 4\n"); | |||
| lglw->win.size.x = _w; | |||
| lglw->win.size.y = _h; | |||
| lglw_log("lglw:lglw_window_resize: 5\n"); | |||
| Dlog_v("lglw:lglw_window_resize: 5\n"); | |||
| Window root, parent, *children = NULL; | |||
| unsigned int num_children; | |||
| lglw_log("lglw:lglw_window_resize: 6\n"); | |||
| Dlog_v("lglw:lglw_window_resize: 6\n"); | |||
| if(!XQueryTree(lglw->xdsp, lglw->win.xwnd, &root, &parent, &children, &num_children)) | |||
| return r; | |||
| lglw_log("lglw:lglw_window_resize: 7\n"); | |||
| Dlog_v("lglw:lglw_window_resize: 7\n"); | |||
| if(children) | |||
| XFree((char *)children); | |||
| lglw_log("lglw:lglw_window_resize: 8\n"); | |||
| Dlog_v("lglw:lglw_window_resize: 8\n"); | |||
| // Resize parent window (if any) | |||
| if(0 != parent) | |||
| { | |||
| lglw_log("lglw:lglw_window_resize: 8.1\n"); | |||
| Dlog_v("lglw:lglw_window_resize: 8.1\n"); | |||
| int x, y; | |||
| unsigned int width, height; | |||
| unsigned int border_width; | |||
| unsigned int depth; | |||
| lglw_log("lglw:lglw_window_resize: 8.2\n"); | |||
| Dlog_v("lglw:lglw_window_resize: 8.2\n"); | |||
| if(!XGetGeometry(lglw->xdsp, lglw->win.xwnd, &root, &x, &y, &width, &height, &border_width, &depth)) | |||
| return r; | |||
| lglw_log("lglw:lglw_window_resize: 8.3\n"); | |||
| Dlog_v("lglw:lglw_window_resize: 8.3\n"); | |||
| XResizeWindow(lglw->xdsp, parent, width + deltaW, height + deltaH); | |||
| } | |||
| lglw_log("lglw:lglw_window_resize: EXIT\n"); | |||
| Dlog_v("lglw:lglw_window_resize: EXIT\n"); | |||
| } | |||
| } | |||
| @@ -1333,13 +1352,13 @@ void lglw_window_close (lglw_t _lglw) { | |||
| { | |||
| if(0 != lglw->win.xwnd) | |||
| { | |||
| lglw_log("lglw:lglw_window_close: 1\n"); | |||
| Dlog_v("lglw:lglw_window_close: 1\n"); | |||
| lglw_timer_stop(_lglw); | |||
| lglw_log("lglw:lglw_window_close: 2\n"); | |||
| Dlog_v("lglw:lglw_window_close: 2\n"); | |||
| glXMakeCurrent(lglw->xdsp, None, NULL); | |||
| lglw_log("lglw:lglw_window_close: 3\n"); | |||
| Dlog_v("lglw:lglw_window_close: 3\n"); | |||
| if(lglw->win.b_owner) | |||
| { | |||
| XDestroyWindow(lglw->xdsp, lglw->win.xwnd); | |||
| @@ -1350,7 +1369,7 @@ void lglw_window_close (lglw_t _lglw) { | |||
| lglw->win.mapped = LGLW_FALSE; | |||
| } | |||
| } | |||
| lglw_log("lglw:lglw_window_close: EXIT\n"); | |||
| Dlog_v("lglw:lglw_window_close: EXIT\n"); | |||
| } | |||
| @@ -1360,12 +1379,12 @@ void lglw_window_show(lglw_t _lglw) { | |||
| if(NULL != lglw) | |||
| { | |||
| lglw_log("lglw:lglw_window_show: 1\n"); | |||
| Dlog_v("lglw:lglw_window_show: 1\n"); | |||
| XMapRaised(lglw->xdsp, lglw->win.xwnd); | |||
| lglw->win.mapped = LGLW_TRUE; | |||
| } | |||
| lglw_log("lglw:lglw_window_show: EXIT\n"); | |||
| Dlog_v("lglw:lglw_window_show: EXIT\n"); | |||
| } | |||
| @@ -1375,12 +1394,12 @@ void lglw_window_hide(lglw_t _lglw) { | |||
| if(NULL != lglw) | |||
| { | |||
| lglw_log("lglw:lglw_window_hide: 1\n"); | |||
| Dlog_v("lglw:lglw_window_hide: 1\n"); | |||
| XUnmapWindow(lglw->xdsp, lglw->win.xwnd); | |||
| lglw->win.mapped = LGLW_FALSE; | |||
| } | |||
| lglw_log("lglw:lglw_window_hide: EXIT\n"); | |||
| Dlog_v("lglw:lglw_window_hide: EXIT\n"); | |||
| } | |||
| @@ -1389,14 +1408,14 @@ lglw_bool_t lglw_window_is_visible(lglw_t _lglw) { | |||
| lglw_bool_t r = LGLW_FALSE; | |||
| LGLW(_lglw); | |||
| // lglw_log("lglw:lglw_window_is_visible: 1\n"); | |||
| Dlog_vvv("lglw:lglw_window_is_visible: 1\n"); | |||
| if(NULL != lglw && 0 != lglw->win.xwnd) | |||
| { | |||
| // lglw_log("lglw:lglw_window_is_visible: 2\n"); | |||
| Dlog_vvv("lglw:lglw_window_is_visible: 2\n"); | |||
| r = lglw->win.mapped; | |||
| } | |||
| // lglw_log("lglw:lglw_window_is_visible: EXIT\n"); | |||
| Dlog_vvv("lglw:lglw_window_is_visible: EXIT\n"); | |||
| return r; | |||
| } | |||
| @@ -1405,7 +1424,7 @@ lglw_bool_t lglw_window_is_visible(lglw_t _lglw) { | |||
| void lglw_window_size_get(lglw_t _lglw, int32_t *_retX, int32_t *_retY) { | |||
| LGLW(_lglw); | |||
| Dlog_verbose("lglw:lglw_window_size_get: 1\n"); | |||
| Dlog_vvv("lglw:lglw_window_size_get: 1\n"); | |||
| if(NULL != lglw) | |||
| { | |||
| if(0 != lglw->win.xwnd) | |||
| @@ -1417,7 +1436,7 @@ void lglw_window_size_get(lglw_t _lglw, int32_t *_retX, int32_t *_retY) { | |||
| *_retY = lglw->win.size.y; | |||
| } | |||
| } | |||
| Dlog_verbose("lglw:lglw_window_size_get: EXIT\n"); | |||
| Dlog_vvv("lglw:lglw_window_size_get: EXIT\n"); | |||
| } | |||
| @@ -1432,7 +1451,7 @@ void lglw_redraw(lglw_t _lglw) { | |||
| if(0 != lglw->win.xwnd) | |||
| { | |||
| // TODO Event Loop | |||
| Dlog_verbose("lglw:lglw_redraw: 1\n"); | |||
| Dlog_vvv("lglw:lglw_redraw: 1\n"); | |||
| XEvent xev; | |||
| xev.xany.type = Expose; | |||
| xev.xany.serial = 0; | |||
| @@ -1475,11 +1494,11 @@ void lglw_glcontext_push(lglw_t _lglw) { | |||
| lglw->prev.drw = glXGetCurrentDrawable(); | |||
| lglw->prev.ctx = glXGetCurrentContext(); | |||
| // lglw_log("lglw:lglw_glcontext_push: win.xwnd=%p hidden.xwnd=%p ctx=%p\n", | |||
| // lglw->win.xwnd, lglw->hidden.xwnd, lglw->ctx); | |||
| Dlog_vvv("lglw:lglw_glcontext_push: win.xwnd=%p hidden.xwnd=%p ctx=%p\n", | |||
| lglw->win.xwnd, lglw->hidden.xwnd, lglw->ctx); | |||
| if(!glXMakeCurrent(lglw->xdsp, (0 == lglw->win.xwnd) ? lglw->hidden.xwnd : lglw->win.xwnd, lglw->ctx)) | |||
| { | |||
| lglw_log("[---] lglw_glcontext_push: glXMakeCurrent() failed. win.xwnd=%p hidden.xwnd=%p ctx=%p glGetError()=%d\n", lglw->win.xwnd, lglw->hidden.xwnd, lglw->ctx, glGetError()); | |||
| Dlog("[---] lglw_glcontext_push: glXMakeCurrent() failed. win.xwnd=%p hidden.xwnd=%p ctx=%p glGetError()=%d\n", lglw->win.xwnd, lglw->hidden.xwnd, lglw->ctx, glGetError()); | |||
| } | |||
| } | |||
| } | |||
| @@ -1491,11 +1510,11 @@ void lglw_glcontext_pop(lglw_t _lglw) { | |||
| if(NULL != lglw) | |||
| { | |||
| // lglw_log("lglw:lglw_glcontext_pop: prev.drw=%p prev.ctx=%p\n", | |||
| // lglw->prev.drw, lglw->prev.ctx); | |||
| Dlog_vvv("lglw:lglw_glcontext_pop: prev.drw=%p prev.ctx=%p\n", | |||
| lglw->prev.drw, lglw->prev.ctx); | |||
| if(!glXMakeCurrent(lglw->xdsp, lglw->prev.drw, lglw->prev.ctx)) | |||
| { | |||
| lglw_log("[---] lglw_glcontext_pop: glXMakeCurrent() failed. prev.drw=%p ctx=%p glGetError()=%d\n", lglw->prev.drw, lglw->prev.ctx, glGetError()); | |||
| Dlog("[---] lglw_glcontext_pop: glXMakeCurrent() failed. prev.drw=%p ctx=%p glGetError()=%d\n", lglw->prev.drw, lglw->prev.ctx, glGetError()); | |||
| } | |||
| } | |||
| } | |||
| @@ -1509,7 +1528,7 @@ void lglw_swap_buffers(lglw_t _lglw) { | |||
| { | |||
| if(0 != lglw->win.xwnd) | |||
| { | |||
| // lglw_log("lglw:lglw_swap_buffers: 1\n"); | |||
| Dlog_vv("lglw:lglw_swap_buffers: 1\n"); | |||
| glXSwapBuffers(lglw->xdsp, lglw->win.xwnd); | |||
| } | |||
| } | |||
| @@ -1525,12 +1544,12 @@ void lglw_swap_interval_set(lglw_t _lglw, int32_t _ival) { | |||
| { | |||
| if(0 != lglw->win.xwnd) | |||
| { | |||
| lglw_log("lglw:lglw_swap_interval_set: 1\n"); | |||
| Dlog_vv("lglw:lglw_swap_interval_set: 1\n"); | |||
| PFNWGLEXTSWAPINTERVALPROC glXSwapIntervalEXT; | |||
| glXSwapIntervalEXT = (PFNWGLEXTSWAPINTERVALPROC) glXGetProcAddress((const GLubyte*)"glXSwapIntervalEXT"); | |||
| if(NULL != glXSwapIntervalEXT) | |||
| { | |||
| lglw_log("lglw:lglw_swap_interval_set: 2\n"); | |||
| Dlog_vv("lglw:lglw_swap_interval_set: 2\n"); | |||
| glXSwapIntervalEXT(lglw->xdsp, lglw->win.xwnd, _ival); | |||
| lglw->win.swap_interval = _ival; | |||
| } | |||
| @@ -1562,7 +1581,7 @@ static void loc_handle_mouseleave(lglw_int_t *lglw) { | |||
| lglw->focus.cbk(lglw, lglw->focus.state, LGLW_FOCUS_MOUSE); | |||
| } | |||
| lglw_log("xxx lglw:loc_handle_mouseleave: LEAVE\n"); | |||
| Dlog_vv("xxx lglw:loc_handle_mouseleave: LEAVE\n"); | |||
| } | |||
| @@ -1576,7 +1595,7 @@ static void loc_handle_mouseenter(lglw_int_t *lglw) { | |||
| lglw->focus.cbk(lglw, lglw->focus.state, LGLW_FOCUS_MOUSE); | |||
| } | |||
| lglw_log("xxx lglw:loc_handle_mouseenter: LEAVE\n"); | |||
| Dlog_vv("xxx lglw:loc_handle_mouseenter: LEAVE\n"); | |||
| } | |||
| @@ -1724,7 +1743,7 @@ void lglw_mouse_grab(lglw_t _lglw, uint32_t _grabMode) { | |||
| CurrentTime/*time*/); | |||
| if(GrabSuccess != result) | |||
| { | |||
| printf("vstgltest<lglw_linux>: Grab Result: %i\n", result); | |||
| Dlog("lglw: Grab Result: %i\n", result); | |||
| } | |||
| else | |||
| { | |||
| @@ -1743,7 +1762,7 @@ void lglw_mouse_grab(lglw_t _lglw, uint32_t _grabMode) { | |||
| CurrentTime/*time*/); | |||
| if(GrabSuccess != result) | |||
| { | |||
| printf("vstgltest<lglw_linux>: Grab Result: %i\n", result); | |||
| Dlog("lglw: Grab Result: %i\n", result); | |||
| } | |||
| else | |||
| { | |||
| @@ -1865,7 +1884,7 @@ void lglw_timer_start(lglw_t _lglw, uint32_t _millisec) { | |||
| if(NULL != lglw) | |||
| { | |||
| lglw_log("xxx lglw_linux:lglw_timer_start: interval=%u\n", _millisec); | |||
| Dlog_v("lglw:lglw_timer_start: interval=%u\n", _millisec); | |||
| lglw->timer.interval_ms = _millisec; | |||
| lglw->timer.b_running = LGLW_TRUE; | |||
| } | |||
| @@ -1878,7 +1897,7 @@ void lglw_timer_stop(lglw_t _lglw) { | |||
| if(NULL != lglw) | |||
| { | |||
| lglw_log("xxx lglw_linux:lglw_timer_stop\n"); | |||
| Dlog_v("lglw:lglw_timer_stop\n"); | |||
| lglw->timer.b_running = LGLW_FALSE; | |||
| } | |||
| } | |||
| @@ -1907,6 +1926,7 @@ static void loc_process_timer(lglw_int_t *lglw) { | |||
| if(NULL != lglw->timer.cbk) | |||
| { | |||
| Dlog_vvv("lglw: invoke timer callback\n"); | |||
| lglw->timer.cbk(lglw); | |||
| } | |||
| } | |||
| @@ -1985,7 +2005,7 @@ void lglw_clipboard_text_set(lglw_t _lglw, const uint32_t _numChars, const char | |||
| } | |||
| lglw->clipboard.data[numChars - 1] = 0; | |||
| printf("xxx lglw_clipboard_text_set(%i): %s\n", lglw->clipboard.numChars, lglw->clipboard.data); | |||
| Dlog("xxx lglw_clipboard_text_set(%i): %s\n", lglw->clipboard.numChars, lglw->clipboard.data); | |||
| Atom clipboard = XInternAtom(lglw->xdsp, "CLIPBOARD", False); | |||
| XSetSelectionOwner(lglw->xdsp, clipboard, lglw->win.xwnd, CurrentTime); | |||
| @@ -2029,13 +2049,13 @@ void lglw_clipboard_text_get(lglw_t _lglw, uint32_t _maxChars, uint32_t *_retNum | |||
| owner = XGetSelectionOwner(lglw->xdsp, clipboard); | |||
| if(owner == None) | |||
| { | |||
| printf("xxx lglw_clipboard_text_get: No Window can provide a clipboard result\n"); | |||
| Dlog("xxx lglw_clipboard_text_get: No Window can provide a clipboard result\n"); | |||
| return; | |||
| } | |||
| if(owner == lglw->win.xwnd) | |||
| { | |||
| printf("xxx lglw_clipboard_text_get: We are the owner of the clipboard, skip X interactions\n"); | |||
| Dlog("xxx lglw_clipboard_text_get: We are the owner of the clipboard, skip X interactions\n"); | |||
| uint32_t i = 0u; | |||
| for(; i < _maxChars; i++) | |||
| @@ -2049,7 +2069,7 @@ void lglw_clipboard_text_get(lglw_t _lglw, uint32_t _maxChars, uint32_t *_retNum | |||
| if(NULL != _retNumChars) | |||
| *_retNumChars = i; | |||
| printf("xxx lglw_clipboard_text_get: (result on next line)\n%s\n", _retText); | |||
| Dlog("xxx lglw_clipboard_text_get: (result on next line)\n%s\n", _retText); | |||
| return; | |||
| } | |||
| @@ -2059,7 +2079,7 @@ void lglw_clipboard_text_get(lglw_t _lglw, uint32_t _maxChars, uint32_t *_retNum | |||
| cbReq = (XSelectionEvent*)&xev; | |||
| if(None == cbReq->property) | |||
| { | |||
| printf("xxx lglw_clipboard_text_get: Clipboard was not converted to UTF-8 string\n"); | |||
| Dlog("xxx lglw_clipboard_text_get: Clipboard was not converted to UTF-8 string\n"); | |||
| return; | |||
| } | |||
| @@ -2082,13 +2102,13 @@ void lglw_clipboard_text_get(lglw_t _lglw, uint32_t _maxChars, uint32_t *_retNum | |||
| if(utf8 != returnType) | |||
| { | |||
| printf("xxx lglw_clipboard_text_get: Clipboard result is not a UTF-8 string\n"); | |||
| Dlog("xxx lglw_clipboard_text_get: Clipboard result is not a UTF-8 string\n"); | |||
| return; | |||
| } | |||
| if(8u != returnFormat) | |||
| { | |||
| printf("xxx lglw_clipboard_text_get: Clipboard format is not a char array\n"); | |||
| Dlog("xxx lglw_clipboard_text_get: Clipboard format is not a char array\n"); | |||
| return; | |||
| } | |||
| @@ -2110,7 +2130,7 @@ void lglw_clipboard_text_get(lglw_t _lglw, uint32_t _maxChars, uint32_t *_retNum | |||
| if(returnSize == 0) | |||
| { | |||
| printf("xxx lglw_clipboard_text_get: No Clipboard result after final request\n"); | |||
| Dlog("xxx lglw_clipboard_text_get: No Clipboard result after final request\n"); | |||
| return; | |||
| } | |||
| @@ -2126,7 +2146,7 @@ void lglw_clipboard_text_get(lglw_t _lglw, uint32_t _maxChars, uint32_t *_retNum | |||
| if(NULL != _retNumChars) | |||
| *_retNumChars = i; | |||
| printf("xxx lglw_clipboard_text_get: (result on next line)\n%s\n", _retText); | |||
| Dlog("xxx lglw_clipboard_text_get: (result on next line)\n%s\n", _retText); | |||
| XFree(propertyValue); | |||
| } | |||
| } | |||
| @@ -2146,14 +2166,14 @@ void lglw_events(lglw_t _lglw) { | |||
| int numEv = XEventsQueued(lglw->xdsp, QueuedAfterReading); | |||
| // => numEv is always 0 | |||
| int evIdx = 0; | |||
| printf("xxx lglw_events: numEv=%d\n", numEv); | |||
| Dlog_v("xxx lglw_events: numEv=%d\n", numEv); | |||
| //for(; evIdx < numEv; evIdx++) | |||
| for(;;) | |||
| { | |||
| XEvent xev; | |||
| XNextEvent(lglw->xdsp, &xev); | |||
| printf("xxx lglw_events: XNextEvent[%d]\n", evIdx++); | |||
| Dlog_v("xxx lglw_events: XNextEvent[%d]\n", evIdx++); | |||
| loc_eventProc(&xev, lglw); | |||
| } | |||
| #else | |||
| @@ -2163,7 +2183,7 @@ void lglw_events(lglw_t _lglw) { | |||
| // // XEvent xev; | |||
| // // // => blocks forever | |||
| // // XNextEvent(lglw->xdsp, &xev); | |||
| // // printf("xxx XNextEvent[%d]\n", evIdx++); | |||
| // // Dlog_v("xxx XNextEvent[%d]\n", evIdx++); | |||
| // // } | |||
| loc_process_timer(lglw); | |||