diff options
author | Sven Weidauer <sven.weidauer@gmail.com> | 2011-02-28 15:24:38 +0000 |
---|---|---|
committer | Sven Weidauer <sven.weidauer@gmail.com> | 2011-02-28 15:24:38 +0000 |
commit | c03890339ecf69b577927e100b3fa69eb1227a53 (patch) | |
tree | 584ea471b44c9fd51a327aa43b81abe7f27cdbd2 /cocoa/BrowserViewController.m | |
parent | 4b10485de13d5ba23ab496092184c15d4d4bc9a1 (diff) | |
download | netsurf-c03890339ecf69b577927e100b3fa69eb1227a53.tar.gz netsurf-c03890339ecf69b577927e100b3fa69eb1227a53.tar.bz2 |
Implemented menu for back and forward buttons.
svn path=/trunk/netsurf/; revision=11857
Diffstat (limited to 'cocoa/BrowserViewController.m')
-rw-r--r-- | cocoa/BrowserViewController.m | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/cocoa/BrowserViewController.m b/cocoa/BrowserViewController.m index 8f903c839..387227de0 100644 --- a/cocoa/BrowserViewController.m +++ b/cocoa/BrowserViewController.m @@ -182,4 +182,63 @@ static inline bool compare_float( float a, float b ) [browserView updateHistory]; } +struct history_add_menu_item_data { + NSInteger index; + NSMenu *menu; + id target; +}; + +static bool history_add_menu_item_cb( const struct history *history, int x0, int y0, int x1, int y1, + const struct history_entry *page, void *user_data ) +{ + struct history_add_menu_item_data *data = user_data; + + NSMenuItem *item = nil; + if (data->index < [data->menu numberOfItems]) { + item = [data->menu itemAtIndex: data->index]; + } else { + item = [[NSMenuItem alloc] initWithTitle: @"" + action: @selector( historyItemSelected: ) + keyEquivalent: @""]; + [data->menu addItem: item]; + [item release]; + } + ++data->index; + + [item setTarget: data->target]; + [item setTitle: [NSString stringWithUTF8String: history_entry_get_title( page )]]; + [item setRepresentedObject: [NSValue valueWithPointer: page]]; + + return true; +} + +- (IBAction) historyItemSelected: (id) sender; +{ + struct history_entry *entry = [[sender representedObject] pointerValue]; + history_go( browser, browser->history, entry, false ); + [self updateBackForward]; +} + +- (void) buildBackMenu: (NSMenu *)menu; +{ + struct history_add_menu_item_data data = { + .index = 0, + .menu = menu, + .target = self + }; + history_enumerate_back( browser->history, history_add_menu_item_cb, &data ); + while (data.index < [menu numberOfItems]) [menu removeItemAtIndex: data.index]; +} + +- (void) buildForwardMenu: (NSMenu *)menu; +{ + struct history_add_menu_item_data data = { + .index = 0, + .menu = menu, + .target = self + }; + history_enumerate_forward( browser->history, history_add_menu_item_cb, &data ); + while (data.index < [menu numberOfItems]) [menu removeItemAtIndex: data.index]; +} + @end |