X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Fgui%2Fmacosx%2Finteraction.m;h=c62e36c4fcb93f38ac78b9ac9b0faac0074d3854;hb=8a5d95d032dd1d3773858ece1d5efe2f970d6bab;hp=82275cb5c0d57f5a35438cfa47fda118136ef02b;hpb=74fd152da0cc0b9fe5dd856239da6967ce28e6e0;p=vlc diff --git a/modules/gui/macosx/interaction.m b/modules/gui/macosx/interaction.m index 82275cb5c0..c62e36c4fc 100644 --- a/modules/gui/macosx/interaction.m +++ b/modules/gui/macosx/interaction.m @@ -11,7 +11,7 @@ * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. - * + * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the @@ -24,9 +24,10 @@ #import "intf.h" #import "interaction.h" +#import "misc.h" /* for the icons in our custom error panel */ -#import +#import /***************************************************************************** * VLCInteractionList implementation @@ -78,7 +79,7 @@ -(void)addInteraction: (interaction_dialog_t *)p_dialog { VLCInteraction *o_interaction = [[VLCInteraction alloc] initDialog: p_dialog]; - + p_dialog->p_private = (void *)o_interaction; [o_interaction_list addObject:[o_interaction autorelease]]; [o_interaction runDialog]; @@ -94,16 +95,6 @@ return o_error_panel; } -#if GC_ENABLED --(void)finalize -{ - /* dealloc doesn't get called on 10.5 if GC is enabled, so we need to provide the basic functionality here */ - [[NSNotificationCenter defaultCenter] removeObserver:self]; - [o_interaction_list removeAllObjects]; - [super finalize]; -} -#endif - -(void)dealloc { [[NSNotificationCenter defaultCenter] removeObserver:self]; @@ -181,28 +172,28 @@ if( p_dialog->i_flags & DIALOG_BLOCKING_ERROR ) { msg_Dbg( p_intf, "error panel requested" ); - NSBeginInformationalAlertSheet( o_title, _NS("OK"), nil, nil, - o_window, self, @selector(sheetDidEnd: returnCode: contextInfo:), + NSBeginInformationalAlertSheet( o_title, _NS("OK"), nil, nil, + o_window, self, @selector(sheetDidEnd: returnCode: contextInfo:), NULL, nil, o_description ); } else if( p_dialog->i_flags & DIALOG_NONBLOCKING_ERROR ) { msg_Dbg( p_intf, "addition to non-blocking error panel received" ); - [[[[VLCMain sharedInstance] getInteractionList] getErrorPanel] + [[[[VLCMain sharedInstance] getInteractionList] getErrorPanel] addError: o_title withMsg: o_description]; } else if( p_dialog->i_flags & DIALOG_WARNING ) { msg_Dbg( p_intf, "addition to non-blocking warning panel received" ); - [[[[VLCMain sharedInstance] getInteractionList] getErrorPanel] + [[[[VLCMain sharedInstance] getInteractionList] getErrorPanel] addWarning: o_title withMsg: o_description]; } else if( p_dialog->i_flags & DIALOG_YES_NO_CANCEL ) { msg_Dbg( p_intf, "yes-no-cancel-dialog requested" ); - NSBeginInformationalAlertSheet( o_title, o_defaultButton, + NSBeginInformationalAlertSheet( o_title, o_defaultButton, o_alternateButton, o_otherButton, o_window, self, - @selector(sheetDidEnd: returnCode: contextInfo:), NULL, nil, + @selector(sheetDidEnd: returnCode: contextInfo:), NULL, nil, o_description ); } else if( p_dialog->i_flags & DIALOG_LOGIN_PW_OK_CANCEL ) @@ -257,7 +248,7 @@ - (void)sheetDidEnd:(NSWindow *)o_sheet returnCode:(int)i_return contextInfo:(void *)o_context { - vlc_mutex_lock( &p_dialog->p_interaction->object_lock ); + vlc_object_lock( p_dialog->p_interaction ); if( i_return == NSAlertDefaultReturn ) { p_dialog->i_return = DIALOG_OK_YES; @@ -271,14 +262,14 @@ p_dialog->i_return = DIALOG_CANCELLED; } p_dialog->i_status = ANSWERED_DIALOG; - vlc_mutex_unlock( &p_dialog->p_interaction->object_lock ); + vlc_object_unlock( p_dialog->p_interaction ); } -(void)updateDialog { if( p_dialog->i_flags & DIALOG_USER_PROGRESS ) { - [o_prog_description setStringValue: \ + [o_prog_description setStringValue: [NSString stringWithUTF8String: p_dialog->psz_description]]; [o_prog_bar setDoubleValue: (double)p_dialog->val.f_float]; @@ -314,21 +305,30 @@ -(void)hideDialog { - msg_Dbg( p_intf, "hide event" ); + msg_Dbg( p_intf, "hide event %p", self ); if( p_dialog->i_flags & DIALOG_USER_PROGRESS ) { - [NSApp endSheet: o_prog_win]; - [o_prog_win close]; + if([o_prog_win isVisible]) + { + [NSApp endSheet: o_prog_win]; + [o_prog_win close]; + } } if( p_dialog->i_flags & DIALOG_LOGIN_PW_OK_CANCEL ) { - [NSApp endSheet: o_auth_win]; - [o_auth_win close]; + if([o_auth_win isVisible]) + { + [NSApp endSheet: o_auth_win]; + [o_auth_win close]; + } } if( p_dialog->i_flags & DIALOG_PSZ_INPUT_OK_CANCEL ) { - [NSApp endSheet: o_input_win]; - [o_input_win close]; + if([o_input_win isVisible]) + { + [NSApp endSheet: o_input_win]; + [o_input_win close]; + } } if( p_dialog->i_flags & DIALOG_INTF_PROGRESS ) { @@ -348,10 +348,10 @@ - (IBAction)cancelAndClose:(id)sender { /* tell the core that the dialog was cancelled in a yes/no-style dialogue */ - vlc_mutex_lock( &p_dialog->p_interaction->object_lock ); + vlc_object_lock( p_dialog->p_interaction ); p_dialog->i_return = DIALOG_CANCELLED; p_dialog->i_status = ANSWERED_DIALOG; - vlc_mutex_unlock( &p_dialog->p_interaction->object_lock ); + vlc_object_unlock( p_dialog->p_interaction ); msg_Dbg( p_intf, "dialog cancelled" ); } @@ -359,16 +359,16 @@ { /* tell core that the user wishes to cancel the dialogue * Use this function if cancelling is optionally like in the progress-dialogue */ - vlc_mutex_lock( &p_dialog->p_interaction->object_lock ); - p_dialog->b_cancelled = VLC_TRUE; - vlc_mutex_unlock( &p_dialog->p_interaction->object_lock ); + vlc_object_lock( p_dialog->p_interaction ); + p_dialog->b_cancelled = true; + vlc_object_unlock( p_dialog->p_interaction ); msg_Dbg( p_intf, "cancelling dialog, will close it later on" ); } - (IBAction)okayAndClose:(id)sender { msg_Dbg( p_intf, "running okayAndClose" ); - vlc_mutex_lock( &p_dialog->p_interaction->object_lock ); + vlc_object_lock( p_dialog->p_interaction ); if( p_dialog->i_flags == DIALOG_LOGIN_PW_OK_CANCEL ) { p_dialog->psz_returned[0] = strdup( [[o_auth_login_fld stringValue] UTF8String] ); @@ -378,7 +378,7 @@ p_dialog->psz_returned[0] = strdup( [[o_input_fld stringValue] UTF8String] ); p_dialog->i_return = DIALOG_OK_YES; p_dialog->i_status = ANSWERED_DIALOG; - vlc_mutex_unlock( &p_dialog->p_interaction->object_lock ); + vlc_object_unlock( p_dialog->p_interaction ); msg_Dbg( p_intf, "dialog acknowledged" ); } @@ -404,49 +404,11 @@ o_errors = [[NSMutableArray alloc] init]; o_icons = [[NSMutableArray alloc] init]; - /* ugly Carbon stuff following... - * regrettably, you can't get the icons through clean Cocoa */ - - /* retrieve our error icon */ - IconRef ourIconRef; - int returnValue; - returnValue = GetIconRef(kOnSystemDisk, 'macs', 'stop', &ourIconRef); - errorIcon = [[NSImage alloc] initWithSize:NSMakeSize(32,32)]; - [errorIcon lockFocus]; - CGRect rect = CGRectMake(0,0,32,32); - PlotIconRefInContext((CGContextRef)[[NSGraphicsContext currentContext] - graphicsPort], - &rect, - kAlignNone, - kTransformNone, - NULL /*inLabelColor*/, - kPlotIconRefNormalFlags, - (IconRef)ourIconRef); - [errorIcon unlockFocus]; - returnValue = ReleaseIconRef(ourIconRef); - - /* retrieve our caution icon */ - returnValue = GetIconRef(kOnSystemDisk, 'macs', 'caut', &ourIconRef); - warnIcon = [[NSImage alloc] initWithSize:NSMakeSize(32,32)]; - [warnIcon lockFocus]; - PlotIconRefInContext((CGContextRef)[[NSGraphicsContext currentContext] - graphicsPort], - &rect, - kAlignNone, - kTransformNone, - NULL /*inLabelColor*/, - kPlotIconRefNormalFlags, - (IconRef)ourIconRef); - [warnIcon unlockFocus]; - returnValue = ReleaseIconRef(ourIconRef); - return self; } -(void)dealloc { - [errorIcon release]; - [warnIcon release]; [o_errors release]; [o_icons release]; [super dealloc]; @@ -463,19 +425,18 @@ NSMutableAttributedString * ourError; ourError = [[NSMutableAttributedString alloc] initWithString: [NSString stringWithFormat:@"%@\n%@", o_error, o_msg] - attributes: + attributes: [NSDictionary dictionaryWithObject: [NSFont systemFontOfSize:11] forKey: NSFontAttributeName]]; - [ourError + [ourError addAttribute: NSFontAttributeName - value: [NSFont boldSystemFontOfSize:11] + value: [NSFont boldSystemFontOfSize:11] range: NSMakeRange( 0, [o_error length])]; [o_errors addObject: ourError]; [ourError release]; - [o_icons addObject: errorIcon]; + [o_icons addObject: [NSImage imageWithErrorIcon]]; [o_error_table reloadData]; - [self showPanel]; } -(void)addWarning: (NSString *)o_warning withMsg:(NSString *)o_msg @@ -484,20 +445,18 @@ NSMutableAttributedString * ourWarning; ourWarning = [[NSMutableAttributedString alloc] initWithString: [NSString stringWithFormat:@"%@\n%@", o_warning, o_msg] - attributes: + attributes: [NSDictionary dictionaryWithObject: [NSFont systemFontOfSize:11] forKey: NSFontAttributeName]]; - [ourWarning + [ourWarning addAttribute: NSFontAttributeName - value: [NSFont boldSystemFontOfSize:11] + value: [NSFont boldSystemFontOfSize:11] range: NSMakeRange( 0, [o_warning length])]; [o_errors addObject: ourWarning]; [ourWarning release]; - [o_icons addObject: warnIcon]; - + [o_icons addObject: [NSImage imageWithWarningIcon]]; + [o_error_table reloadData]; - - [self showPanel]; } -(IBAction)cleanupTable:(id)sender