add window resize tracking
This commit is contained in:
parent
c364ddbaf0
commit
0d7cf716ad
110
platform.d
110
platform.d
@ -721,7 +721,8 @@ CreateWindow(PlatformWindow* window, string name, u32 width, u32 height, XVisual
|
|||||||
ButtonReleaseMask |
|
ButtonReleaseMask |
|
||||||
PointerMotionMask |
|
PointerMotionMask |
|
||||||
StructureNotifyMask |
|
StructureNotifyMask |
|
||||||
PropertyChangeMask;
|
PropertyChangeMask |
|
||||||
|
ResizeRedirectMask;
|
||||||
|
|
||||||
XSelectInput(window.display, window.window, event_mask);
|
XSelectInput(window.display, window.window, event_mask);
|
||||||
|
|
||||||
@ -766,107 +767,6 @@ CreateWindow(PlatformWindow* window, string name, u32 width, u32 height, XVisual
|
|||||||
|
|
||||||
XFlush(window.display);
|
XFlush(window.display);
|
||||||
|
|
||||||
/*
|
|
||||||
window.conn = XGetXCBConnection(window.display);
|
|
||||||
assert(window.conn != null, "XGetXCBConnection failure");
|
|
||||||
|
|
||||||
xcb_void_cookie_t cookie;
|
|
||||||
xcb_generic_error_t *error;
|
|
||||||
|
|
||||||
xcb_setup_t *setup = xcb_get_setup(window.conn);
|
|
||||||
xcb_screen_iterator_t iter = xcb_setup_roots_iterator(setup);
|
|
||||||
window.screen = iter.data;
|
|
||||||
|
|
||||||
i32 event_mask = XCB_EVENT_MASK_EXPOSURE |
|
|
||||||
XCB_EVENT_MASK_KEY_PRESS |
|
|
||||||
XCB_EVENT_MASK_KEY_RELEASE |
|
|
||||||
XCB_EVENT_MASK_BUTTON_PRESS |
|
|
||||||
XCB_EVENT_MASK_BUTTON_RELEASE |
|
|
||||||
XCB_EVENT_MASK_POINTER_MOTION |
|
|
||||||
XCB_EVENT_MASK_STRUCTURE_NOTIFY|
|
|
||||||
XCB_EVENT_MASK_PROPERTY_CHANGE;
|
|
||||||
|
|
||||||
i32[2] val_win = [window.screen.black_pixel, event_mask];
|
|
||||||
i32 val_mask = XCB_CW_BACK_PIXEL | XCB_CW_EVENT_MASK;
|
|
||||||
|
|
||||||
window.window = xcb_generate_id(window.conn);
|
|
||||||
|
|
||||||
cookie = xcb_create_window_checked(
|
|
||||||
window.conn,
|
|
||||||
XCB_COPY_FROM_PARENT,
|
|
||||||
window.window,
|
|
||||||
window.screen.root,
|
|
||||||
0, // x pos
|
|
||||||
0, // y pos
|
|
||||||
window.w, // width
|
|
||||||
window.h, // height
|
|
||||||
0,
|
|
||||||
XCB_WINDOW_CLASS_INPUT_OUTPUT,
|
|
||||||
window.screen.root_visual,
|
|
||||||
val_mask,
|
|
||||||
val_win.ptr
|
|
||||||
);
|
|
||||||
error = xcb_request_check(window.conn, cookie);
|
|
||||||
CheckErr(&window, &cookie, error, "xcb_create_window failure");
|
|
||||||
pureFree(error);
|
|
||||||
|
|
||||||
cookie = xcb_map_window_checked(window.conn, window.window);
|
|
||||||
error = xcb_request_check(window.conn, cookie);
|
|
||||||
CheckErr(&window, &cookie, error, "xcb_map_window_checked failure");
|
|
||||||
pureFree(error);
|
|
||||||
|
|
||||||
cookie = xcb_change_property_checked(
|
|
||||||
window.conn,
|
|
||||||
XCB_PROP_MODE_REPLACE,
|
|
||||||
window.window,
|
|
||||||
XCB_ATOM_WM_NAME,
|
|
||||||
XCB_ATOM_STRING,
|
|
||||||
8,
|
|
||||||
cast(u32)name.length,
|
|
||||||
name.ptr
|
|
||||||
);
|
|
||||||
error = xcb_request_check(window.conn, cookie);
|
|
||||||
CheckErr(&window, &cookie, error, "xcb_change_property_checked failure");
|
|
||||||
pureFree(error);
|
|
||||||
|
|
||||||
for(u64 i = 0; i < Atoms.max; i += 1)
|
|
||||||
{
|
|
||||||
xcb_intern_atom_cookie_t intern = xcb_intern_atom(window.conn, 1, cast(u16)ATOM_STRS[i].length, ATOM_STRS[i].ptr);
|
|
||||||
xcb_intern_atom_reply_t* reply = xcb_intern_atom_reply(window.conn, intern, &error);
|
|
||||||
CheckErr(&window, &cookie, error, "xcb_intern_atom failure");
|
|
||||||
|
|
||||||
window.atoms[i] = reply.atom;
|
|
||||||
|
|
||||||
pureFree(error);
|
|
||||||
pureFree(reply);
|
|
||||||
}
|
|
||||||
|
|
||||||
window.selections[CBM.Clipboard].xmode = window.atoms[Atoms.Clipboard];
|
|
||||||
window.selections[CBM.Primary].xmode = XCB_ATOM_PRIMARY;
|
|
||||||
window.selections[CBM.Secondary].xmode = XCB_ATOM_SECONDARY;
|
|
||||||
|
|
||||||
cookie = xcb_change_property_checked(
|
|
||||||
window.conn,
|
|
||||||
XCB_PROP_MODE_REPLACE,
|
|
||||||
window.window,
|
|
||||||
window.atoms[Atoms.WMProtocols],
|
|
||||||
XCB_ATOM_ATOM,
|
|
||||||
32,
|
|
||||||
1,
|
|
||||||
&window.atoms[Atoms.DeleteWindow]
|
|
||||||
);
|
|
||||||
error = xcb_request_check(window.conn, cookie);
|
|
||||||
CheckErr(&window, &cookie, error, "xcb_change_property_checked failure");
|
|
||||||
pureFree(error);
|
|
||||||
|
|
||||||
xcb_map_window(window.conn, window.window);
|
|
||||||
|
|
||||||
i32 stream_result = xcb_flush(window.conn);
|
|
||||||
assert(stream_result > 0, "xcb_flush failure");
|
|
||||||
|
|
||||||
xcb_xfixes_query_version(window.conn, 4, 0);
|
|
||||||
*/
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -1458,6 +1358,12 @@ HandleEvents(void* window_ptr)
|
|||||||
XSendEvent(w.display, req.requestor, false, PropertyChangeMask, ¬ify);
|
XSendEvent(w.display, req.requestor, false, PropertyChangeMask, ¬ify);
|
||||||
XFlush(w.display);
|
XFlush(w.display);
|
||||||
} break;
|
} break;
|
||||||
|
case ResizeRequest:
|
||||||
|
{
|
||||||
|
XResizeRequestEvent* resize_ev = &e.xresizerequest;
|
||||||
|
w.w = resize_ev.width;
|
||||||
|
w.h = resize_ev.height;
|
||||||
|
} break;
|
||||||
default: break;
|
default: break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user