# HG changeset patch # User bsmith@81767d24-ef19-dc11-ae90-00e081727c95 # Date 1611530222 0 # Node ID 5dbe950115c1fe5b7229f83b017d315d13bbbe88 # Parent 15347d28995a04723742f73a9ff73f3f46e5d4d5 Mac: Fix crash in dw_window_set_font() with NULL font name. Not sure if I am getting the default font correctly, may need to revisit. Also switched Helv to Helvetica so it works on Mac, might need an #ifdef if this doesn't work on other platforms. diff -r 15347d28995a -r 5dbe950115c1 dwtest.c --- a/dwtest.c Sun Jan 24 21:00:15 2021 +0000 +++ b/dwtest.c Sun Jan 24 23:17:02 2021 +0000 @@ -1388,11 +1388,11 @@ dw_window_set_style(text, DW_DT_VCENTER, DW_DT_VCENTER); dw_box_pack_start(hbox, text, -1, -1, FALSE, TRUE, 1); fontsize = dw_spinbutton_new("9", 0); - dw_box_pack_start(hbox, fontsize, 50, -1, TRUE, FALSE, 1); + dw_box_pack_start(hbox, fontsize, 50, -1, FALSE, FALSE, 1); dw_spinbutton_set_limits(fontsize, 100, 5); fontname = dw_combobox_new("Default", 0); dw_listbox_append(fontname, "Default"); - dw_listbox_append(fontname, "Helv"); + dw_listbox_append(fontname, "Helvetica"); dw_listbox_append(fontname, "Arial"); dw_box_pack_start(hbox, fontname, 150, -1, TRUE, FALSE, 1); dw_box_pack_start(notebookbox4, hbox, -1, -1, TRUE, FALSE, 1); diff -r 15347d28995a -r 5dbe950115c1 mac/dw.m --- a/mac/dw.m Sun Jan 24 21:00:15 2021 +0000 +++ b/mac/dw.m Sun Jan 24 23:17:02 2021 +0000 @@ -8691,18 +8691,19 @@ /* Internal function to convert fontname to NSFont */ NSFont *_dw_font_by_name(const char *fontname) { - char *fontcopy = strdup(fontname); - char *name = strchr(fontcopy, '.'); - NSFont *font = nil; - - if(name) - { - int size = atoi(fontcopy); - *name = 0; - name++; - font = [NSFont fontWithName:[ NSString stringWithUTF8String:name ] size:(float)size]; - } - free(fontcopy); + NSFont *font = DWDefaultFont; + + if(fontname) + { + char *name = strchr(fontname, '.'); + + if(name && (name++)) + { + int size = atoi(fontname); + + font = [NSFont fontWithName:[ NSString stringWithUTF8String:name ] size:(float)size]; + } + } return font; } @@ -10293,7 +10294,8 @@ */ int API dw_window_set_font(HWND handle, const char *fontname) { - NSFont *font = _dw_font_by_name(fontname); + NSFont *font = fontname ? _dw_font_by_name(fontname) : + (DWDefaultFont ? DWDefaultFont : [NSFont systemFontOfSize:[NSFont smallSystemFontSize]]); if(font) { @@ -10308,6 +10310,12 @@ { [object setTitleFont:font]; } + else if([object isMemberOfClass:[DWMLE class]]) + { + DWMLE *mle = object; + + [[mle textStorage] setFont:font]; + } else if([object isKindOfClass:[NSControl class]]) { [object setFont:font]; @@ -12396,8 +12404,12 @@ void API dw_font_set_default(const char *fontname) { NSFont *oldfont = DWDefaultFont; - DWDefaultFont = _dw_font_by_name(fontname); - [DWDefaultFont retain]; + DWDefaultFont = nil; + if(fontname) + { + DWDefaultFont = _dw_font_by_name(fontname); + [DWDefaultFont retain]; + } [oldfont release]; }