Skip to content

Commit 2822b64

Browse files
committed
Mac menu fix
1 parent 0e62a43 commit 2822b64

13 files changed

+91
-37
lines changed

nw.gypi

Lines changed: 29 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -666,26 +666,44 @@
666666
'src/api/base/base.h',
667667
'src/api/menu/menu.cc',
668668
'src/api/menu/menu.h',
669-
'src/api/menu/menu_delegate.cc',
670-
'src/api/menu/menu_delegate.h',
671-
'src/api/menu/menu_views.cc',
672-
'src/api/menu/menu_views.h',
673669
'src/api/menuitem/menuitem.cc',
674670
'src/api/menuitem/menuitem.h',
675-
'src/api/menuitem/menuitem_views.cc',
676671
'src/api/shell/shell.cc',
677672
'src/api/shell/shell.h',
678-
'src/browser/browser_view_layout.cc',
679-
'src/browser/browser_view_layout.h',
680-
'src/browser/menubar_controller.cc',
681-
'src/browser/menubar_controller.h',
682-
'src/browser/menubar_view.cc',
683-
'src/browser/menubar_view.h',
684673
'src/nw_content.cc',
685674
'src/nw_content.h',
686675
'src/nw_custom_bindings.cc',
687676
'src/nw_custom_bindings.h',
688677
],
678+
'conditions': [
679+
['OS=="win" or OS=="linux"', {
680+
'sources': [
681+
'src/api/menu/menu_delegate.cc',
682+
'src/api/menu/menu_delegate.h',
683+
'src/api/menu/menu_views.cc',
684+
'src/api/menu/menu_views.h',
685+
'src/browser/menubar_view.cc',
686+
'src/browser/menubar_view.h',
687+
'src/api/menuitem/menuitem_views.cc',
688+
'src/browser/browser_view_layout.cc',
689+
'src/browser/browser_view_layout.h',
690+
'src/browser/menubar_controller.cc',
691+
'src/browser/menubar_controller.h',
692+
],
693+
}],
694+
['OS=="mac"', {
695+
'sources': [
696+
'src/api/menuitem/menuitem_mac.mm',
697+
'src/api/menu/menu_mac.mm',
698+
'src/api/menu/menu_delegate_mac.h',
699+
'src/api/menu/menu_delegate_mac.mm',
700+
'src/api/menuitem/menuitem_delegate_mac.h',
701+
'src/api/menuitem/menuitem_delegate_mac.mm',
702+
'src/nw_content_mac.h',
703+
'src/nw_content_mac.mm',
704+
],
705+
}],
706+
],
689707
},
690708
{
691709
'target_name': 'about_credits_nw',

src/api/menu/menu_delegate_mac.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,16 +23,16 @@
2323

2424
#import <Cocoa/Cocoa.h>
2525

26-
namespace nwapi {
26+
namespace nw {
2727
class Menu;
2828
}
2929

3030
@interface NWMenuDelegate : NSObject<NSMenuDelegate> {
3131
@private
32-
nwapi::Menu* nwmenu_;
32+
nw::Menu* nwmenu_;
3333
}
3434

35-
- (id)initWithMenu:(nwapi::Menu*)menu;
35+
- (id)initWithMenu:(nw::Menu*)menu;
3636

3737
@end
3838
#endif // CONTENT_NW_SRC_API_MENU_MENU_DELEGATE_MAC_H_

src/api/menu/menu_delegate_mac.mm

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,15 +19,14 @@
1919
// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
2020

2121
#include "base/run_loop.h"
22-
#include "content/nw/src/api/dispatcher_host.h"
22+
#include "base/values.h"
23+
#include "content/nw/src/api/object_manager.h"
2324
#include "content/nw/src/api/menu/menu.h"
2425
#include "content/nw/src/api/menu/menu_delegate_mac.h"
25-
#include "content/nw/src/browser/native_window.h"
26-
#include "content/nw/src/nw_shell.h"
2726

2827
@implementation NWMenuDelegate
2928

30-
- (id)initWithMenu:(nwapi::Menu*) menu {
29+
- (id)initWithMenu:(nw::Menu*) menu {
3130
if ((self = [super init])) {
3231
nwmenu_ = menu;
3332
}
@@ -40,7 +39,7 @@ - (BOOL)menuHasKeyEquivalent:(NSMenu *)menu forEvent:(NSEvent *)event target:(id
4039

4140
- (void)menuNeedsUpdate:(NSMenu*)menu {
4241

43-
if (!nwmenu_->enable_show_event() || nwmenu_->dispatcher_host()->run_loop())
42+
if (!nwmenu_->enable_show_event() || nwmenu_->object_manager()->run_loop())
4443
return;
4544

4645
// NSEvent* event = [NSApp currentEvent];
@@ -56,8 +55,8 @@ - (void)menuNeedsUpdate:(NSMenu*)menu {
5655

5756
base::ListValue args;
5857
base::RunLoop run_loop;
59-
nwmenu_->dispatcher_host()->set_run_loop(&run_loop);
60-
nwmenu_->dispatcher_host()->SendEvent(nwmenu_, "show", args);
58+
nwmenu_->object_manager()->set_run_loop(&run_loop);
59+
nwmenu_->object_manager()->SendEvent(nwmenu_, "show", args);
6160
run_loop.Run();
6261
}
6362

src/api/menu/menu_mac.mm

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,11 @@
2525
#include "base/values.h"
2626
#import <Cocoa/Cocoa.h>
2727
#include "content/public/browser/web_contents.h"
28-
#include "content/nw/src/api/dispatcher_host.h"
28+
#include "content/nw/src/api/object_manager.h"
2929
#include "content/nw/src/api/menu/menu_delegate_mac.h"
3030
#include "content/nw/src/api/menuitem/menuitem.h"
31-
#include "content/nw/src/browser/native_window_mac.h"
32-
#include "content/nw/src/nw_shell.h"
3331

34-
namespace nwapi {
32+
namespace nw {
3533

3634
void Menu::Create(const base::DictionaryValue& option) {
3735
menu_ = [[NSMenu alloc] initWithTitle:@"NW Menu"];
@@ -57,6 +55,7 @@
5755
[menu_ removeItem:menu_item->menu_item_];
5856
}
5957

58+
#if 0
6059
void Menu::Popup(int x, int y, content::Shell* shell) {
6160
// Fake out a context menu event for our menu
6261
NSWindow* window =
@@ -92,5 +91,6 @@
9291
forView:web_view];
9392
}
9493
}
94+
#endif
9595

96-
} // namespace nwapi
96+
} // namespace nw

src/api/menuitem/menuitem_delegate_mac.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,15 +20,15 @@
2020

2121
#import <Foundation/Foundation.h>
2222

23-
namespace nwapi {
23+
namespace nw {
2424
class MenuItem;
2525
}
2626

2727
@interface MenuItemDelegate : NSObject {
28-
nwapi::MenuItem* menu_item_;
28+
nw::MenuItem* menu_item_;
2929
}
3030

31-
-(id)initWithMenuItem: (nwapi::MenuItem*)item;
31+
-(id)initWithMenuItem: (nw::MenuItem*)item;
3232
-(void)invoke: (id)sender;
3333

3434
@end

src/api/menuitem/menuitem_delegate_mac.mm

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,12 @@
2121
#import "content/nw/src/api/menuitem/menuitem_delegate_mac.h"
2222

2323
#include "base/values.h"
24-
#include "content/nw/src/api/dispatcher_host.h"
24+
#include "content/nw/src/api/object_manager.h"
2525
#include "content/nw/src/api/menuitem/menuitem.h"
2626

2727
@implementation MenuItemDelegate
2828

29-
-(id)initWithMenuItem: (nwapi::MenuItem*)item {
29+
-(id)initWithMenuItem: (nw::MenuItem*)item {
3030
if ([super init]) {
3131
menu_item_ = item;
3232
}
@@ -39,7 +39,7 @@ -(void)invoke: (id)sender {
3939

4040
// Send event.
4141
base::ListValue args;
42-
menu_item_->dispatcher_host()->SendEvent(menu_item_, "click", args);
42+
menu_item_->object_manager()->SendEvent(menu_item_, "click", args);
4343
}
4444

4545
@end

src/api/menuitem/menuitem_mac.mm

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,11 @@
2222

2323
#include "base/values.h"
2424
#import <Cocoa/Cocoa.h>
25-
#include "content/nw/src/api/dispatcher_host.h"
25+
#include "content/nw/src/api/object_manager.h"
2626
#include "content/nw/src/api/menu/menu.h"
2727
#include "content/nw/src/api/menuitem/menuitem_delegate_mac.h"
2828

29-
namespace nwapi {
29+
namespace nw{
3030

3131
void MenuItem::Create(const base::DictionaryValue& option) {
3232
std::string type;
@@ -94,7 +94,7 @@
9494

9595
int menu_id;
9696
if (option.GetInteger("submenu", &menu_id))
97-
SetSubmenu(dispatcher_host()->GetApiObject<Menu>(menu_id));
97+
SetSubmenu(object_manager()->GetApiObject<Menu>(menu_id));
9898
}
9999
}
100100

@@ -174,4 +174,4 @@
174174
[menu_item_ setSubmenu:sub_menu->menu_];
175175
}
176176

177-
} // namespace nwapi
177+
} // namespace nw

src/api/nw_window_api.cc

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,16 @@
3030
using nw::BrowserViewLayout;
3131
#endif
3232

33+
#if defined(OS_MACOSX)
34+
#include "content/nw/src/nw_content_mac.h"
35+
#endif
36+
3337
using content::RenderWidgetHost;
3438
using content::RenderWidgetHostView;
3539
using content::WebContents;
3640

3741
using nw::Menu;
42+
3843
#if defined(OS_LINUX)
3944
using nw::MenuBarView;
4045
#endif
@@ -236,6 +241,10 @@ bool NwCurrentWindowInternalSetMenuFunction::RunAsync() {
236241
Menu* menu = (Menu*)obj_manager->GetApiObject(id);
237242

238243
window->menu_ = menu;
244+
#if defined(OS_MACOSX)
245+
NWChangeAppMenu(menu);
246+
#endif
247+
239248
#if defined(OS_LINUX)
240249
native_app_window::NativeAppWindowViews* native_app_window_views =
241250
static_cast<native_app_window::NativeAppWindowViews*>(

src/api/object_manager.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ ObjectManager* ObjectManager::Get(content::BrowserContext* context) {
5858
}
5959

6060
ObjectManager::ObjectManager(content::BrowserContext* context)
61-
: browser_context_(context), weak_ptr_factory_(this) {
61+
: run_loop_(nullptr), browser_context_(context), weak_ptr_factory_(this) {
6262
}
6363

6464
ObjectManager::~ObjectManager() {

src/api/object_manager.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,9 @@ class ObjectManager : public KeyedService {
6767

6868
static void ClearObjectRegistry();
6969

70+
void set_run_loop(base::RunLoop* run_loop) { run_loop_ = run_loop; }
71+
base::RunLoop* run_loop() { return run_loop_; }
72+
7073
// Send event to C++ object's corresponding js object.
7174
void SendEvent(Base* object,
7275
const std::string& event,
@@ -97,6 +100,8 @@ class ObjectManager : public KeyedService {
97100
static IDMap<Base, IDMapOwnPointer> objects_registry_;
98101
static int next_object_id_;
99102

103+
base::RunLoop* run_loop_;
104+
100105
std::set<int> objects_;
101106

102107
content::BrowserContext* browser_context_;

0 commit comments

Comments
 (0)