From def2d1a9e4947b460291bc52fa5a16e5fe3e1939 Mon Sep 17 00:00:00 2001 From: Bjorn Winckler Date: Tue, 16 Sep 2008 22:51:08 +0200 Subject: [PATCH] Update fullscreen background color immediately It is no longer necessary to exit and re-enter fullscreen to see changes to the "background" setting in 'fopt'. --- src/MacVim/MMBackend.h | 1 + src/MacVim/MMBackend.m | 9 +++++++++ src/MacVim/MMVimController.m | 5 +++++ src/MacVim/MMWindowController.h | 2 ++ src/MacVim/MMWindowController.m | 6 ++++++ src/MacVim/MacVim.h | 1 + src/MacVim/MacVim.m | 1 + src/MacVim/gui_macvim.m | 14 ++++++++++++++ src/option.c | 4 ++++ src/proto/gui_macvim.pro | 1 + 10 files changed, 44 insertions(+) diff --git a/src/MacVim/MMBackend.h b/src/MacVim/MMBackend.h index df7d1b32db..e0dd855555 100644 --- a/src/MacVim/MMBackend.h +++ b/src/MacVim/MMBackend.h @@ -111,6 +111,7 @@ - (void)enterFullscreen:(int)fuoptions background:(int)bg; - (void)leaveFullscreen; +- (void)setFullscreenBackgroundColor:(int)color; - (void)setAntialias:(BOOL)antialias; diff --git a/src/MacVim/MMBackend.m b/src/MacVim/MMBackend.m index 8b9bc9bf0b..7cf376c19e 100644 --- a/src/MacVim/MMBackend.m +++ b/src/MacVim/MMBackend.m @@ -1019,6 +1019,15 @@ static NSString *MMSymlinkWarningString = [self queueMessage:LeaveFullscreenMsgID data:nil]; } +- (void)setFullscreenBackgroundColor:(int)color +{ + NSMutableData *data = [NSMutableData data]; + color = MM_COLOR(color); + [data appendBytes:&color length:sizeof(int)]; + + [self queueMessage:SetFullscreenColorMsgID data:data]; +} + - (void)setAntialias:(BOOL)antialias { int msgid = antialias ? EnableAntialiasMsgID : DisableAntialiasMsgID; diff --git a/src/MacVim/MMVimController.m b/src/MacVim/MMVimController.m index c778a517a2..82e05b6841 100644 --- a/src/MacVim/MMVimController.m +++ b/src/MacVim/MMVimController.m @@ -923,6 +923,11 @@ static BOOL isUnsafeMessage(int msgid); } } else if (CloseWindowMsgID == msgid) { [self scheduleClose]; + } else if (SetFullscreenColorMsgID == msgid) { + const int *bg = (const int*)[data bytes]; + NSColor *color = [NSColor colorWithRgbInt:bg]; + + [windowController setFullscreenBackgroundColor:color]; // IMPORTANT: When adding a new message, make sure to update // isUnsafeMessage() if necessary! } else { diff --git a/src/MacVim/MMWindowController.h b/src/MacVim/MMWindowController.h index 55dec0f7cf..de899b2c45 100644 --- a/src/MacVim/MMWindowController.h +++ b/src/MacVim/MMWindowController.h @@ -62,6 +62,8 @@ - (void)enterFullscreen:(int)fuoptions backgroundColor:(NSColor *)back; - (void)leaveFullscreen; +- (void)setFullscreenBackgroundColor:(NSColor *)back; + - (void)setBuffersModified:(BOOL)mod; - (IBAction)addNewTab:(id)sender; diff --git a/src/MacVim/MMWindowController.m b/src/MacVim/MMWindowController.m index 1b44a5d7de..c0bbabbe93 100644 --- a/src/MacVim/MMWindowController.m +++ b/src/MacVim/MMWindowController.m @@ -571,6 +571,12 @@ shouldResizeVimView = YES; } +- (void)setFullscreenBackgroundColor:(NSColor *)back +{ + if (fullscreenEnabled) + [fullscreenWindow setBackgroundColor:back]; +} + - (void)setBuffersModified:(BOOL)mod { // NOTE: We only set the document edited flag on the decorated window since diff --git a/src/MacVim/MacVim.h b/src/MacVim/MacVim.h index 2d1e520ccd..bf51c9a803 100644 --- a/src/MacVim/MacVim.h +++ b/src/MacVim/MacVim.h @@ -174,6 +174,7 @@ enum { OpenWithArgumentsMsgID, CloseWindowMsgID, InterruptMsgID, + SetFullscreenColorMsgID, }; diff --git a/src/MacVim/MacVim.m b/src/MacVim/MacVim.m index b3825116c1..cc220ea1c2 100644 --- a/src/MacVim/MacVim.m +++ b/src/MacVim/MacVim.m @@ -81,6 +81,7 @@ char *MessageStrings[] = "OpenWithArgumentsMsgID", "CloseWindowMsgID", "InterruptMsgID", + "SetFullscreenColorMsgID", }; diff --git a/src/MacVim/gui_macvim.m b/src/MacVim/gui_macvim.m index 1727e9752c..67ddd5b7db 100644 --- a/src/MacVim/gui_macvim.m +++ b/src/MacVim/gui_macvim.m @@ -1599,6 +1599,20 @@ gui_mch_leave_fullscreen() } + void +gui_mch_fuopt_update() +{ + guicolor_T fg, bg; + if (fuoptions_flags & FUOPT_BGCOLOR_HLGROUP) { + syn_id2colors(fuoptions_bgcolor, &fg, &bg); + } else { + bg = fuoptions_bgcolor; + } + + [[MMBackend sharedInstance] setFullscreenBackgroundColor:bg]; +} + + void gui_macvim_update_modified_flag() { diff --git a/src/option.c b/src/option.c index b629cda1f5..5d3b86e553 100644 --- a/src/option.c +++ b/src/option.c @@ -10875,6 +10875,10 @@ check_fuoptions(p_fuoptions, flags, bgcolor) *flags = new_fuoptions_flags; *bgcolor = new_fuoptions_bgcolor; + + /* Let the GUI know, in case the background color has changed. */ + gui_mch_fuopt_update(); + return OK; } #endif diff --git a/src/proto/gui_macvim.pro b/src/proto/gui_macvim.pro index 36b28ac62d..6852e4b9df 100644 --- a/src/proto/gui_macvim.pro +++ b/src/proto/gui_macvim.pro @@ -192,6 +192,7 @@ int serverSendReply(char_u *serverid, char_u *str); void gui_mch_enter_fullscreen(int fuoptions_flags, guicolor_T bg); void gui_mch_leave_fullscreen(void); +void gui_mch_fuopt_update(void); void gui_macvim_update_modified_flag(); void gui_macvim_add_to_find_pboard(char_u *pat);