| 
									
										
										
										
											2014-10-31 11:17:05 -07:00
										 |  |  | // Copyright (c) 2014 GitHub, Inc.
 | 
					
						
							| 
									
										
										
										
											2014-07-11 08:57:19 +08:00
										 |  |  | // Use of this source code is governed by the MIT license that can be
 | 
					
						
							|  |  |  | // found in the LICENSE file.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifndef ATOM_BROWSER_UI_VIEWS_GLOBAL_MENU_BAR_X11_H_
 | 
					
						
							|  |  |  | #define ATOM_BROWSER_UI_VIEWS_GLOBAL_MENU_BAR_X11_H_
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include <string>
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-07-06 16:04:18 -07:00
										 |  |  | #include "atom/browser/ui/atom_menu_model.h"
 | 
					
						
							| 
									
										
										
										
											2014-07-11 08:57:19 +08:00
										 |  |  | #include "base/compiler_specific.h"
 | 
					
						
							| 
									
										
										
										
											2016-08-26 15:30:02 -07:00
										 |  |  | #include "base/macros.h"
 | 
					
						
							| 
									
										
										
										
											2014-07-11 08:57:19 +08:00
										 |  |  | #include "ui/base/glib/glib_signal.h"
 | 
					
						
							| 
									
										
										
										
											2014-07-11 09:18:06 +08:00
										 |  |  | #include "ui/gfx/native_widget_types.h"
 | 
					
						
							| 
									
										
										
										
											2014-07-11 08:57:19 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | typedef struct _DbusmenuMenuitem DbusmenuMenuitem; | 
					
						
							| 
									
										
										
										
											2018-04-17 21:44:10 -04:00
										 |  |  | typedef struct _DbusmenuServer DbusmenuServer; | 
					
						
							| 
									
										
										
										
											2014-07-11 08:57:19 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | namespace ui { | 
					
						
							|  |  |  | class Accelerator; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | namespace atom { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class NativeWindowViews; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Controls the Mac style menu bar on Unity.
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | // Unity has an Apple-like menu bar at the top of the screen that changes
 | 
					
						
							|  |  |  | // depending on the active window. In the GTK port, we had a hidden GtkMenuBar
 | 
					
						
							|  |  |  | // object in each GtkWindow which existed only to be scrapped by the
 | 
					
						
							|  |  |  | // libdbusmenu-gtk code. Since we don't have GtkWindows anymore, we need to
 | 
					
						
							|  |  |  | // interface directly with the lower level libdbusmenu-glib, which we
 | 
					
						
							|  |  |  | // opportunistically dlopen() since not everyone is running Ubuntu.
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | // This class is like the chrome's corresponding one, but it generates the menu
 | 
					
						
							|  |  |  | // from menu models instead, and it is also per-window specific.
 | 
					
						
							|  |  |  | class GlobalMenuBarX11 { | 
					
						
							|  |  |  |  public: | 
					
						
							| 
									
										
										
										
											2014-07-11 09:18:06 +08:00
										 |  |  |   explicit GlobalMenuBarX11(NativeWindowViews* window); | 
					
						
							| 
									
										
										
										
											2014-07-11 08:57:19 +08:00
										 |  |  |   virtual ~GlobalMenuBarX11(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-07 20:22:03 -08:00
										 |  |  |   // Creates the object path for DbusmenuServer which is attached to |xid|.
 | 
					
						
							| 
									
										
										
										
											2014-07-11 09:18:06 +08:00
										 |  |  |   static std::string GetPathForWindow(gfx::AcceleratedWidget xid); | 
					
						
							| 
									
										
										
										
											2014-07-11 08:57:19 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-07-06 16:04:18 -07:00
										 |  |  |   void SetMenu(AtomMenuModel* menu_model); | 
					
						
							| 
									
										
										
										
											2014-07-16 22:10:10 +08:00
										 |  |  |   bool IsServerStarted() const; | 
					
						
							| 
									
										
										
										
											2014-07-11 08:57:19 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-02-23 15:43:32 +08:00
										 |  |  |   // Called by NativeWindow when it show/hides.
 | 
					
						
							|  |  |  |   void OnWindowMapped(); | 
					
						
							|  |  |  |   void OnWindowUnmapped(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-07-11 08:57:19 +08:00
										 |  |  |  private: | 
					
						
							|  |  |  |   // Creates a DbusmenuServer.
 | 
					
						
							| 
									
										
										
										
											2014-07-11 09:18:06 +08:00
										 |  |  |   void InitServer(gfx::AcceleratedWidget xid); | 
					
						
							| 
									
										
										
										
											2014-07-11 08:57:19 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |   // Create a menu from menu model.
 | 
					
						
							| 
									
										
										
										
											2016-07-06 16:04:18 -07:00
										 |  |  |   void BuildMenuFromModel(AtomMenuModel* model, DbusmenuMenuitem* parent); | 
					
						
							| 
									
										
										
										
											2014-07-11 08:57:19 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |   // Sets the accelerator for |item|.
 | 
					
						
							|  |  |  |   void RegisterAccelerator(DbusmenuMenuitem* item, | 
					
						
							|  |  |  |                            const ui::Accelerator& accelerator); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-17 21:44:10 -04:00
										 |  |  |   CHROMEG_CALLBACK_1(GlobalMenuBarX11, | 
					
						
							|  |  |  |                      void, | 
					
						
							|  |  |  |                      OnItemActivated, | 
					
						
							|  |  |  |                      DbusmenuMenuitem*, | 
					
						
							| 
									
										
										
										
											2014-07-11 08:57:19 +08:00
										 |  |  |                      unsigned int); | 
					
						
							|  |  |  |   CHROMEG_CALLBACK_0(GlobalMenuBarX11, void, OnSubMenuShow, DbusmenuMenuitem*); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   NativeWindowViews* window_; | 
					
						
							| 
									
										
										
										
											2014-07-11 09:18:06 +08:00
										 |  |  |   gfx::AcceleratedWidget xid_; | 
					
						
							| 
									
										
										
										
											2014-07-11 08:57:19 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-22 00:18:38 +02:00
										 |  |  |   DbusmenuServer* server_ = nullptr; | 
					
						
							| 
									
										
										
										
											2014-07-11 08:57:19 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |   DISALLOW_COPY_AND_ASSIGN(GlobalMenuBarX11); | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | }  // namespace atom
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #endif  // ATOM_BROWSER_UI_VIEWS_GLOBAL_MENU_BAR_X11_H_
 |