mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-11-14 02:03:27 -08:00
fix incorrect listener socket creation on client-only win32 socket sessions; win32 window manager -> make robust to zero handles
This commit is contained in:
1 parent
4a9b10bb7b
commit
5ec3156d8e
6 files changed
+93
-55
No files matched your search
@@ -224,8 +224,8 @@ RD_VocabInfo rd_vocab_info_table[375] =
|
||||
{str8_lit_comp("state"), str8_lit_comp(""), str8_lit_comp("State"), str8_lit_comp(""), RD_IconKind_Null},
|
||||
{str8_lit_comp("eval"), str8_lit_comp(""), str8_lit_comp("Eval"), str8_lit_comp(""), RD_IconKind_Null},
|
||||
{str8_lit_comp("line_from_vaddr"), str8_lit_comp(""), str8_lit_comp("Line From Virtual Address"), str8_lit_comp(""), RD_IconKind_Null},
|
||||
{str8_lit_comp("enable_hidden_mode"), str8_lit_comp(""), str8_lit_comp("Enable Hidden Mode"), str8_lit_comp(""), RD_IconKind_Null},
|
||||
{str8_lit_comp("disable_hidden_mode"), str8_lit_comp(""), str8_lit_comp("Disable Hidden Mode"), str8_lit_comp(""), RD_IconKind_Null},
|
||||
{str8_lit_comp("hide_ui"), str8_lit_comp(""), str8_lit_comp("Hide UI"), str8_lit_comp(""), RD_IconKind_Null},
|
||||
{str8_lit_comp("show_ui"), str8_lit_comp(""), str8_lit_comp("Show UI"), str8_lit_comp(""), RD_IconKind_Null},
|
||||
{str8_lit_comp("wm_event"), str8_lit_comp(""), str8_lit_comp("OS Event"), str8_lit_comp(""), RD_IconKind_Null},
|
||||
{str8_lit_comp("select_thread"), str8_lit_comp(""), str8_lit_comp("Select Thread"), str8_lit_comp(""), RD_IconKind_Thread},
|
||||
{str8_lit_comp("select_unwind"), str8_lit_comp(""), str8_lit_comp("Select Unwind"), str8_lit_comp(""), RD_IconKind_Null},
|
||||
@@ -652,8 +652,8 @@ RD_CmdKindInfo rd_cmd_kind_info_table[261] =
|
||||
{ str8_lit_comp("state"), str8_lit_comp(""), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*1), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp("")}},
|
||||
{ str8_lit_comp("eval"), str8_lit_comp(""), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*1), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Expr, str8_lit_comp("")}},
|
||||
{ str8_lit_comp("line_from_vaddr"), str8_lit_comp(""), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*1), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Vaddr, str8_lit_comp("")}},
|
||||
{ str8_lit_comp("enable_hidden_mode"), str8_lit_comp(""), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*1), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp("")}},
|
||||
{ str8_lit_comp("disable_hidden_mode"), str8_lit_comp(""), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*1), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp("")}},
|
||||
{ str8_lit_comp("hide_ui"), str8_lit_comp(""), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*1), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp("")}},
|
||||
{ str8_lit_comp("show_ui"), str8_lit_comp(""), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*1), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp("")}},
|
||||
{ str8_lit_comp("wm_event"), str8_lit_comp(""), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp("")}},
|
||||
{ str8_lit_comp("select_thread"), str8_lit_comp("Selects a thread."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*1)|(RD_QueryFlag_Required*1), RD_RegSlot_Thread, str8_lit_comp("query:threads")}},
|
||||
{ str8_lit_comp("select_unwind"), str8_lit_comp("Selects an unwind frame number for the selected thread."), str8_lit_comp(""), str8_lit_comp(""), (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*1), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Floating*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp("query:call_stack")}},
|
||||
|
||||
@@ -115,8 +115,8 @@ RD_CmdKind_RunExternalDriverTextCommand,
|
||||
RD_CmdKind_State,
|
||||
RD_CmdKind_Eval,
|
||||
RD_CmdKind_LineFromVAddr,
|
||||
RD_CmdKind_EnableHiddenMode,
|
||||
RD_CmdKind_DisableHiddenMode,
|
||||
RD_CmdKind_HideUI,
|
||||
RD_CmdKind_ShowUI,
|
||||
RD_CmdKind_WMEvent,
|
||||
RD_CmdKind_SelectThread,
|
||||
RD_CmdKind_SelectUnwind,
|
||||
|
||||
@@ -1047,8 +1047,8 @@ RD_CmdTable: // | | | |
|
||||
{State 0 0 1 "" Null 0 0 0 0 0 0 0 Null "state" "State" "" "" "" }
|
||||
{Eval 0 0 1 "" Expr 0 0 0 0 0 0 0 Null "eval" "Eval" "" "" "" }
|
||||
{LineFromVAddr 0 0 1 "" Vaddr 0 0 0 0 0 0 0 Null "line_from_vaddr" "Line From Virtual Address" "" "" "" }
|
||||
{EnableHiddenMode 0 0 1 "" Null 0 0 0 0 0 0 0 Null "enable_hidden_mode" "Enable Hidden Mode" "" "" "" }
|
||||
{DisableHiddenMode 0 0 1 "" Null 0 0 0 0 0 0 0 Null "disable_hidden_mode" "Disable Hidden Mode" "" "" "" }
|
||||
{HideUI 0 0 1 "" Null 0 0 0 0 0 0 0 Null "hide_ui" "Hide UI" "" "" "" }
|
||||
{ShowUI 0 0 1 "" Null 0 0 0 0 0 0 0 Null "show_ui" "Show UI" "" "" "" }
|
||||
|
||||
//- rjf: os event passthrough
|
||||
{WMEvent 0 0 0 "" Null 0 0 0 0 0 0 0 Null "wm_event" "OS Event" "" "" "" }
|
||||
|
||||
@@ -5509,7 +5509,7 @@ rd_push_window_title(Arena *arena)
|
||||
prof_path = str8_chop_last_dot(prof_path);
|
||||
project_name = str8_skip_last_slash(prof_path);
|
||||
}
|
||||
String8 result = push_str8f(arena, "%S%s%s", project_name, project_name.size != 0 ? " - " : "", BUILD_TITLE " (" BUILD_VERSION_STRING_LITERAL " " BUILD_RELEASE_PHASE_STRING_LITERAL ")");
|
||||
String8 result = str8f(arena, "%S%s%s", project_name, project_name.size != 0 ? " - " : "", BUILD_TITLE " (" BUILD_VERSION_STRING_LITERAL " " BUILD_RELEASE_PHASE_STRING_LITERAL ")");
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -5519,7 +5519,7 @@ rd_window_from_cfg(CFG_Node *cfg)
|
||||
CFG_Node *result = &cfg_nil_node;
|
||||
for(CFG_Node *c = cfg; c != &cfg_nil_node; c = c->parent)
|
||||
{
|
||||
if(c->parent->parent == cfg_node_root() && str8_match(c->string, str8_lit("window"), 0))
|
||||
if(c->parent->parent == cfg_node_root() && str8_match(c->string, s("window"), 0))
|
||||
{
|
||||
result = c;
|
||||
break;
|
||||
@@ -5569,10 +5569,10 @@ rd_window_state_from_cfg(CFG_Node *cfg)
|
||||
Vec2F32 size = {0};
|
||||
WM_Monitor preferred_monitor = {0};
|
||||
{
|
||||
CFG_Node *pos_cfg = cfg_node_child_from_string(window_cfg, str8_lit("pos"));
|
||||
CFG_Node *pos_cfg = cfg_node_child_from_string(window_cfg, s("pos"));
|
||||
has_pos = (pos_cfg != &cfg_nil_node);
|
||||
CFG_Node *size_cfg = cfg_node_child_from_string(window_cfg, str8_lit("size"));
|
||||
CFG_Node *monitor_cfg = cfg_node_child_from_string(window_cfg, str8_lit("monitor"));
|
||||
CFG_Node *size_cfg = cfg_node_child_from_string(window_cfg, s("size"));
|
||||
CFG_Node *monitor_cfg = cfg_node_child_from_string(window_cfg, s("monitor"));
|
||||
pos.x = (F32)f64_from_str8(pos_cfg->first->string);
|
||||
pos.y = (F32)f64_from_str8(pos_cfg->first->next->string);
|
||||
size.x = (F32)f64_from_str8(size_cfg->first->string);
|
||||
@@ -11311,9 +11311,10 @@ rd_init(CmdLine *cmdln)
|
||||
Arena *arena = arena_alloc();
|
||||
rd_state = push_array(arena, RD_State, 1);
|
||||
rd_state->arena = arena;
|
||||
rd_state->quit_after_success = (cmd_line_has_flag(cmdln, str8_lit("quit_after_success")) ||
|
||||
cmd_line_has_flag(cmdln, str8_lit("q")));
|
||||
rd_state->quit_after_success = (cmd_line_has_flag(cmdln, s("quit_after_success")) ||
|
||||
cmd_line_has_flag(cmdln, s("q")));
|
||||
rd_state->override_focus_on_stop = (cmd_line_has_flag(cmdln, s("no_focus_on_stop")));
|
||||
rd_state->hidden_mode = cmd_line_has_flag(cmdln, s("hide_ui"));
|
||||
rd_state->user_path_arena = arena_alloc();
|
||||
rd_state->project_path_arena = arena_alloc();
|
||||
rd_state->theme_path_arena = arena_alloc();
|
||||
@@ -13975,6 +13976,8 @@ rd_frame(void)
|
||||
}
|
||||
str8_list_pushf(rd_state->cmd_output_arena, &rd_state->cmd_outputs, "}\n");
|
||||
}break;
|
||||
case RD_CmdKind_HideUI:{rd_state->hidden_mode = 1;}break;
|
||||
case RD_CmdKind_ShowUI:{rd_state->hidden_mode = 0;}break;
|
||||
|
||||
//- rjf: exiting
|
||||
case RD_CmdKind_Exit:
|
||||
@@ -18709,7 +18712,7 @@ rd_frame(void)
|
||||
//////////////////////////////
|
||||
//- rjf: submit rendering to all windows
|
||||
//
|
||||
ProfScope("submit rendering to all windows")
|
||||
ProfScope("submit rendering to all windows") if(!rd_state->hidden_mode)
|
||||
{
|
||||
r_begin_frame();
|
||||
for(RD_WindowState *w = rd_state->first_window_state; w != &rd_nil_window_state; w = w->order_next)
|
||||
|
||||
@@ -392,16 +392,19 @@ sock_session_open(U16 listener_port, SOCK_WakeupFunctionType *wakeup_hook)
|
||||
WSAIoctl(session->tcp_listen_socket, SIO_GET_EXTENSION_FUNCTION_POINTER, &AcceptEx_guid, sizeof(AcceptEx_guid), &session->lpfnAcceptEx, sizeof(session->lpfnAcceptEx), &dwBytes, 0, 0);
|
||||
|
||||
//- rjf: create accepting socket
|
||||
if(listener_port != 0)
|
||||
{
|
||||
session->tcp_accept_socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
|
||||
}
|
||||
|
||||
//- rjf: associate accepting socket with IOCP
|
||||
if(listener_port != 0)
|
||||
{
|
||||
CreateIoCompletionPort((HANDLE)session->tcp_accept_socket, session->iocp, 0, 0);
|
||||
}
|
||||
|
||||
//- rjf: kick off accept
|
||||
if(listener_port != 0)
|
||||
{
|
||||
session->lpfnAcceptEx(session->tcp_listen_socket, session->tcp_accept_socket, session->tcp_accept_buffer, 0, sizeof(struct sockaddr_storage) + 16, sizeof(struct sockaddr_storage) + 16, &session->tcp_accept_size_out, &session->tcp_accept_overlapped);
|
||||
}
|
||||
|
||||
@@ -1132,7 +1132,10 @@ internal void
|
||||
wm_window_close(WM_Window handle)
|
||||
{
|
||||
W32_WM_Window *window = w32_wm_window_from_handle(handle);
|
||||
w32_wm_window_release(window);
|
||||
if(window != 0)
|
||||
{
|
||||
w32_wm_window_release(window);
|
||||
}
|
||||
}
|
||||
|
||||
internal void
|
||||
@@ -1140,8 +1143,11 @@ wm_window_set_title(WM_Window handle, String8 title)
|
||||
{
|
||||
Temp scratch = scratch_begin(0, 0);
|
||||
W32_WM_Window *window = w32_wm_window_from_handle(handle);
|
||||
String16 title16 = str16_from_8(scratch.arena, title);
|
||||
SetWindowTextW(window->hwnd, (WCHAR *)title16.str);
|
||||
if(window != 0)
|
||||
{
|
||||
String16 title16 = str16_from_8(scratch.arena, title);
|
||||
SetWindowTextW(window->hwnd, (WCHAR *)title16.str);
|
||||
}
|
||||
scratch_end(scratch);
|
||||
}
|
||||
|
||||
@@ -1149,11 +1155,14 @@ internal void
|
||||
wm_window_first_paint(WM_Window window_handle)
|
||||
{
|
||||
W32_WM_Window *window = w32_wm_window_from_handle(window_handle);
|
||||
window->first_paint_done = 1;
|
||||
ShowWindow(window->hwnd, SW_SHOW);
|
||||
if(window->maximized)
|
||||
if(window != 0)
|
||||
{
|
||||
ShowWindow(window->hwnd, SW_MAXIMIZE);
|
||||
window->first_paint_done = 1;
|
||||
ShowWindow(window->hwnd, SW_SHOW);
|
||||
if(window->maximized)
|
||||
{
|
||||
ShowWindow(window->hwnd, SW_MAXIMIZE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1161,58 +1170,74 @@ internal void
|
||||
wm_window_focus(WM_Window handle)
|
||||
{
|
||||
W32_WM_Window *window = w32_wm_window_from_handle(handle);
|
||||
SetForegroundWindow(window->hwnd);
|
||||
SetFocus(window->hwnd);
|
||||
if(window != 0)
|
||||
{
|
||||
SetForegroundWindow(window->hwnd);
|
||||
SetFocus(window->hwnd);
|
||||
}
|
||||
}
|
||||
|
||||
internal B32
|
||||
wm_window_is_focused(WM_Window handle)
|
||||
{
|
||||
B32 result = 0;
|
||||
W32_WM_Window *window = w32_wm_window_from_handle(handle);
|
||||
HWND active_hwnd = GetForegroundWindow();
|
||||
return active_hwnd == window->hwnd;
|
||||
if(window != 0)
|
||||
{
|
||||
HWND active_hwnd = GetForegroundWindow();
|
||||
result = active_hwnd == window->hwnd;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
internal B32
|
||||
wm_window_is_fullscreen(WM_Window handle)
|
||||
{
|
||||
B32 result = 0;
|
||||
W32_WM_Window *window = w32_wm_window_from_handle(handle);
|
||||
DWORD window_style = GetWindowLong(window->hwnd, GWL_STYLE);
|
||||
return !(window_style & WS_OVERLAPPEDWINDOW);
|
||||
if(window != 0)
|
||||
{
|
||||
DWORD window_style = GetWindowLong(window->hwnd, GWL_STYLE);
|
||||
result = !(window_style & WS_OVERLAPPEDWINDOW);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
internal void
|
||||
wm_window_set_fullscreen(WM_Window handle, B32 fullscreen)
|
||||
{
|
||||
W32_WM_Window *window = w32_wm_window_from_handle(handle);
|
||||
DWORD window_style = GetWindowLong(window->hwnd, GWL_STYLE);
|
||||
B32 is_fullscreen_already = wm_window_is_fullscreen(handle);
|
||||
if(fullscreen)
|
||||
if(window != 0)
|
||||
{
|
||||
if(!is_fullscreen_already)
|
||||
DWORD window_style = GetWindowLong(window->hwnd, GWL_STYLE);
|
||||
B32 is_fullscreen_already = wm_window_is_fullscreen(handle);
|
||||
if(fullscreen)
|
||||
{
|
||||
GetWindowPlacement(window->hwnd, &window->last_window_placement);
|
||||
if(!is_fullscreen_already)
|
||||
{
|
||||
GetWindowPlacement(window->hwnd, &window->last_window_placement);
|
||||
}
|
||||
MONITORINFO monitor_info = {sizeof(monitor_info)};
|
||||
if(GetMonitorInfo(MonitorFromWindow(window->hwnd, MONITOR_DEFAULTTOPRIMARY), &monitor_info))
|
||||
{
|
||||
SetWindowLong(window->hwnd, GWL_STYLE, window_style & ~WS_OVERLAPPEDWINDOW);
|
||||
SetWindowPos(window->hwnd, HWND_TOP,
|
||||
monitor_info.rcMonitor.left,
|
||||
monitor_info.rcMonitor.top,
|
||||
monitor_info.rcMonitor.right - monitor_info.rcMonitor.left,
|
||||
monitor_info.rcMonitor.bottom - monitor_info.rcMonitor.top,
|
||||
SWP_NOOWNERZORDER | SWP_FRAMECHANGED);
|
||||
}
|
||||
}
|
||||
MONITORINFO monitor_info = {sizeof(monitor_info)};
|
||||
if(GetMonitorInfo(MonitorFromWindow(window->hwnd, MONITOR_DEFAULTTOPRIMARY), &monitor_info))
|
||||
else
|
||||
{
|
||||
SetWindowLong(window->hwnd, GWL_STYLE, window_style & ~WS_OVERLAPPEDWINDOW);
|
||||
SetWindowPos(window->hwnd, HWND_TOP,
|
||||
monitor_info.rcMonitor.left,
|
||||
monitor_info.rcMonitor.top,
|
||||
monitor_info.rcMonitor.right - monitor_info.rcMonitor.left,
|
||||
monitor_info.rcMonitor.bottom - monitor_info.rcMonitor.top,
|
||||
SetWindowLong(window->hwnd, GWL_STYLE, window_style | WS_OVERLAPPEDWINDOW);
|
||||
SetWindowPlacement(window->hwnd, &window->last_window_placement);
|
||||
SetWindowPos(window->hwnd, 0, 0, 0, 0, 0,
|
||||
SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER |
|
||||
SWP_NOOWNERZORDER | SWP_FRAMECHANGED);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
SetWindowLong(window->hwnd, GWL_STYLE, window_style | WS_OVERLAPPEDWINDOW);
|
||||
SetWindowPlacement(window->hwnd, &window->last_window_placement);
|
||||
SetWindowPos(window->hwnd, 0, 0, 0, 0, 0,
|
||||
SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER |
|
||||
SWP_NOOWNERZORDER | SWP_FRAMECHANGED);
|
||||
}
|
||||
}
|
||||
|
||||
internal B32
|
||||
@@ -1290,8 +1315,9 @@ internal void
|
||||
wm_window_set_monitor(WM_Window window_handle, WM_Monitor monitor)
|
||||
{
|
||||
W32_WM_Window *window = w32_wm_window_from_handle(window_handle);
|
||||
HMONITOR hmonitor = (HMONITOR)monitor.u64[0];
|
||||
if(window != 0)
|
||||
{
|
||||
HMONITOR hmonitor = (HMONITOR)monitor.u64[0];
|
||||
MONITORINFOEXW info;
|
||||
info.cbSize = sizeof(MONITORINFOEXW);
|
||||
if(GetMonitorInfoW(hmonitor, (MONITORINFO *)&info))
|
||||
@@ -1311,7 +1337,7 @@ internal void
|
||||
wm_window_clear_custom_border_data(WM_Window handle)
|
||||
{
|
||||
W32_WM_Window *window = w32_wm_window_from_handle(handle);
|
||||
if(window->custom_border)
|
||||
if(window && window->custom_border)
|
||||
{
|
||||
arena_clear(window->paint_arena);
|
||||
window->first_title_bar_client_area = window->last_title_bar_client_area = 0;
|
||||
@@ -1324,21 +1350,27 @@ internal void
|
||||
wm_window_push_custom_title_bar(WM_Window handle, F32 thickness)
|
||||
{
|
||||
W32_WM_Window *window = w32_wm_window_from_handle(handle);
|
||||
window->custom_border_title_thickness = thickness;
|
||||
if(window != 0)
|
||||
{
|
||||
window->custom_border_title_thickness = thickness;
|
||||
}
|
||||
}
|
||||
|
||||
internal void
|
||||
wm_window_push_custom_edges(WM_Window handle, F32 thickness)
|
||||
{
|
||||
W32_WM_Window *window = w32_wm_window_from_handle(handle);
|
||||
window->custom_border_edge_thickness = thickness;
|
||||
if(window != 0)
|
||||
{
|
||||
window->custom_border_edge_thickness = thickness;
|
||||
}
|
||||
}
|
||||
|
||||
internal void
|
||||
wm_window_push_custom_title_bar_client_area(WM_Window handle, Rng2F32 rect)
|
||||
{
|
||||
W32_WM_Window *window = w32_wm_window_from_handle(handle);
|
||||
if(window->custom_border)
|
||||
if(window && window->custom_border)
|
||||
{
|
||||
W32_WM_TitleBarClientArea *area = push_array(window->paint_arena, W32_WM_TitleBarClientArea, 1);
|
||||
if(area != 0)
|
||||
|
||||
Reference in new issue
Block a user