]> git.sesse.net Git - vlc/blobdiff - modules/gui/macosx/bookmarks.m
macosx: do not allow playlist item deletion for sd modules
[vlc] / modules / gui / macosx / bookmarks.m
index aa87abf8bedf4c3bc3b7c9030b24739642542e09..a322cdda2cc9a3066161b9cb55cb56f67d7555bd 100644 (file)
 
 #import "bookmarks.h"
 #import "wizard.h"
-#import <vlc_interface.h>
 #import "CompatibilityFixes.h"
 
+@interface VLCBookmarks (Internal)
+- (void)initStrings;
+@end
+
 @implementation VLCBookmarks
 
 static VLCBookmarks *_o_sharedInstance = nil;
@@ -68,6 +71,11 @@ static VLCBookmarks *_o_sharedInstance = nil;
         [o_bookmarks_window setCollectionBehavior: NSWindowCollectionBehaviorFullScreenAuxiliary];
 
     [self initStrings];
+
+    [[NSNotificationCenter defaultCenter] addObserver:self
+                                             selector:@selector(inputChangedEvent:)
+                                                 name:VLCInputChangedNotification
+                                               object:nil];
 }
 
 - (void)dealloc
@@ -75,6 +83,8 @@ static VLCBookmarks *_o_sharedInstance = nil;
     if (p_old_input)
         vlc_object_release(p_old_input);
 
+    [[NSNotificationCenter defaultCenter] removeObserver:self];
+
     [super dealloc];
 }
 
@@ -104,13 +114,25 @@ static VLCBookmarks *_o_sharedInstance = nil;
     [o_edit_lbl_bytes setStringValue: _NS("Position")];
 }
 
+- (void)updateCocoaWindowLevel:(NSInteger)i_level
+{
+    if (o_bookmarks_window && [o_bookmarks_window isVisible] && [o_bookmarks_window level] != i_level)
+        [o_bookmarks_window setLevel: i_level];
+}
+
 - (void)showBookmarks
 {
     /* show the window, called from intf.m */
     [o_bookmarks_window displayIfNeeded];
+    [o_bookmarks_window setLevel: [[[VLCMain sharedInstance] voutController] currentStatusWindowLevel]];
     [o_bookmarks_window makeKeyAndOrderFront:nil];
 }
 
+-(void)inputChangedEvent:(NSNotification *)o_notification
+{
+    [o_tbl_dataTable reloadData];
+}
+
 - (IBAction)add:(id)sender
 {
     /* add item to list */
@@ -170,7 +192,7 @@ static VLCBookmarks *_o_sharedInstance = nil;
         return;
     }
 
-    [o_edit_fld_name setStringValue: [NSString stringWithFormat:@"%s", pp_bookmarks[row]->psz_name]];
+    [o_edit_fld_name setStringValue: toNSStr(pp_bookmarks[row]->psz_name)];
     int total = pp_bookmarks[row]->i_time_offset/ 1000000;
     int hour = total / (60*60);
     int min = (total - hour*60*60) / 60;
@@ -295,7 +317,7 @@ clear:
     }
 
     char *psz_uri = input_item_GetURI(input_GetItem(p_input));
-    [[[VLCMain sharedInstance] wizard] initWithExtractValuesFrom: [NSString stringWithFormat:@"%lli", pp_bookmarks[i_first]->i_time_offset/1000000] to: [NSString stringWithFormat:@"%lli", pp_bookmarks[i_second]->i_time_offset/1000000] ofItem: [NSString stringWithFormat:@"%s", psz_uri]];
+    [[[VLCMain sharedInstance] wizard] initWithExtractValuesFrom: [NSString stringWithFormat:@"%lli", pp_bookmarks[i_first]->i_time_offset/1000000] to: [NSString stringWithFormat:@"%lli", pp_bookmarks[i_second]->i_time_offset/1000000] ofItem: toNSStr(psz_uri)];
     free(psz_uri);
     vlc_object_release(p_input);
 
@@ -334,15 +356,6 @@ clear:
     [o_tbl_dataTable reloadData];
 }
 
-/*****************************************************************************
- * callback stuff
- *****************************************************************************/
-
--(id)dataTable
-{
-    return o_tbl_dataTable;
-}
-
 /*****************************************************************************
  * data source methods
  *****************************************************************************/
@@ -356,17 +369,18 @@ clear:
 
     if (!p_input)
         return 0;
-    else if (input_Control(p_input, INPUT_GET_BOOKMARKS, &pp_bookmarks, &i_bookmarks) != VLC_SUCCESS) {
-        vlc_object_release(p_input);
+
+    int returnValue = input_Control(p_input, INPUT_GET_BOOKMARKS, &pp_bookmarks, &i_bookmarks);
+    vlc_object_release(p_input);
+
+    if (returnValue != VLC_SUCCESS)
         return 0;
-    } else {
-        vlc_object_release(p_input);
-        // Clear the bookmark list
-        for (int i = 0; i < i_bookmarks; i++)
-            vlc_seekpoint_Delete(pp_bookmarks[i]);
-        free(pp_bookmarks);
-        return i_bookmarks;
-    }
+
+    for (int i = 0; i < i_bookmarks; i++)
+        vlc_seekpoint_Delete(pp_bookmarks[i]);
+    free(pp_bookmarks);
+
+    return i_bookmarks;
 }
 
 - (id)tableView:(NSTableView *)theDataTable objectValueForTableColumn: (NSTableColumn *)theTableColumn row: (NSInteger)row
@@ -375,16 +389,18 @@ clear:
     input_thread_t * p_input = pl_CurrentInput(VLCIntf);
     seekpoint_t **pp_bookmarks;
     int i_bookmarks;
-    id ret;
+    id ret = @"";
 
     if (!p_input)
         return @"";
     else if (input_Control(p_input, INPUT_GET_BOOKMARKS, &pp_bookmarks, &i_bookmarks) != VLC_SUCCESS)
         ret = @"";
+    else if (row >= i_bookmarks)
+        ret = @"";
     else {
         NSString * identifier = [theTableColumn identifier];
         if ([identifier isEqualToString: @"description"])
-            ret = [NSString stringWithFormat:@"%s", pp_bookmarks[row]->psz_name];
+            ret = toNSStr(pp_bookmarks[row]->psz_name);
         else if ([identifier isEqualToString: @"size_offset"])
             ret = [NSString stringWithFormat:@"%lli", pp_bookmarks[row]->i_byte_offset];
         else if ([identifier isEqualToString: @"time_offset"]) {