diff --git a/src/jtk/jtk.c b/src/jtk/jtk.c index a6c6db7..621f15d 100644 --- a/src/jtk/jtk.c +++ b/src/jtk/jtk.c @@ -96,9 +96,10 @@ static Bool wait_for_notify(Display * display, XEvent * event, XPointer arg) return (event->type == MapNotify) && (event->xmap.window == (Window)arg); } -void * jtk_window_create() +bool jtk_window_create(uint64_t * window_handle) { XEvent event; + bool success; XLockDisplay(g_display); Window window = XCreateWindow(g_display, @@ -112,40 +113,42 @@ void * jtk_window_create() /* Disable the window close button. */ Atom wm_delete_window_atom = XInternAtom(g_display, "WM_DELETE_WINDOW", False); XSetWMProtocols(g_display, window, &wm_delete_window_atom, 1); + success = true; + *window_handle = (uint64_t)window; } else { fprintf(stderr, "glXMakeCurrent() failure\n"); XDestroyWindow(g_display, window); - window = NULL; + success = false; } XUnlockDisplay(g_display); - return (void *)window; + return success; } -void jtk_window_swap_buffers(void * window) +void jtk_window_swap_buffers(uint64_t window_handle) { XLockDisplay(g_display); - glXSwapBuffers(g_display, (Window)window); + glXSwapBuffers(g_display, (Window)window_handle); XUnlockDisplay(g_display); } -void jtk_window_close(void * window) +void jtk_window_close(uint64_t window_handle) { XLockDisplay(g_display); - XDestroyWindow(g_display, (Window)window); + XDestroyWindow(g_display, (Window)window_handle); XUnlockDisplay(g_display); } -void jtk_window_set_title(void * window, const char * title) +void jtk_window_set_title(uint64_t window_handle, const char * title) { XLockDisplay(g_display); XTextProperty title_property; if (XStringListToTextProperty((char **)&title, 1, &title_property) != 0) { - XSetTextProperty(g_display, (Window)window, &title_property, XA_WM_NAME); + XSetTextProperty(g_display, (Window)window_handle, &title_property, XA_WM_NAME); XFree(title_property.value); } XUnlockDisplay(g_display); @@ -164,7 +167,7 @@ void jtk_window_set_title(void * window, const char * title) * @param height * Icon height. */ -void jtk_window_set_icon(void * window, const uint8_t * data, +void jtk_window_set_icon(uint64_t window_handle, const uint8_t * data, size_t width, size_t height) { XLockDisplay(g_display); @@ -182,8 +185,9 @@ void jtk_window_set_icon(void * window, const uint8_t * data, *dest++ = *src++; } } - XChangeProperty(g_display, (Window)window, net_wm_icon_atom, XA_CARDINAL, - 32, PropModeReplace, (uint8_t *)property_data, property_size); + XChangeProperty(g_display, (Window)window_handle, net_wm_icon_atom, + XA_CARDINAL, 32, PropModeReplace, (uint8_t *)property_data, + property_size); XFlush(g_display); free(property_data); XUnlockDisplay(g_display); diff --git a/src/jtk/window.d b/src/jtk/window.d index 651ab1d..77abdc4 100644 --- a/src/jtk/window.d +++ b/src/jtk/window.d @@ -2,20 +2,23 @@ module jtk.window; import std.string; -private extern(C) void * jtk_window_create(); -private extern(C) void jtk_window_swap_buffers(void * window); -private extern(C) void jtk_window_close(void * window); -private extern(C) void jtk_window_set_title(void * window, const char * title); -private extern(C) void jtk_window_set_icon(void * window, const ubyte * data, +private extern(C) bool jtk_window_create(ulong * window); +private extern(C) void jtk_window_swap_buffers(ulong window); +private extern(C) void jtk_window_close(ulong window); +private extern(C) void jtk_window_set_title(ulong window, const char * title); +private extern(C) void jtk_window_set_icon(ulong window, const ubyte * data, size_t width, size_t height); class Window { - private void * m_window; + private ulong m_window; this() { - m_window = jtk_window_create(); + if (!jtk_window_create(&m_window)) + { + /* TODO */ + } } void close()