@@ -50,11 +50,14 @@ static Atom atom_mate_panel_action_kill_dialog = None;
5050
5151static void
5252panel_action_protocol_main_menu (GdkScreen * screen ,
53- guint32 activate_time )
53+ guint32 activate_time , GdkEvent * event )
5454{
5555 PanelWidget * panel_widget ;
5656 GtkWidget * menu ;
5757 AppletInfo * info ;
58+ GdkVisual * visual ;
59+ GtkWidget * toplevel ;
60+ GtkStyleContext * context ;
5861
5962 info = mate_panel_applet_get_by_type (PANEL_OBJECT_MENU_BAR , screen );
6063 if (info ) {
@@ -76,7 +79,16 @@ panel_action_protocol_main_menu (GdkScreen *screen,
7679 panel_toplevel_push_autohide_disabler (panel_widget -> toplevel );
7780
7881 gtk_menu_set_screen (GTK_MENU (menu ), screen );
79- gtk_menu_popup_at_pointer (GTK_MENU (menu ), NULL );
82+ /* Set up theme and transparency support */
83+ toplevel = gtk_widget_get_toplevel (menu );
84+ /* Fix any failures of compiz/other wm's to communicate with gtk for transparency */
85+ visual = gdk_screen_get_rgba_visual (screen );
86+ gtk_widget_set_visual (GTK_WIDGET (toplevel ), visual );
87+ /* Set menu and it's toplevel window to follow panel theme */
88+ context = gtk_widget_get_style_context (GTK_WIDGET (toplevel ));
89+ gtk_style_context_add_class (context ,"gnome-panel-menu-bar" );
90+ gtk_style_context_add_class (context ,"mate-panel-menu-bar" );
91+ gtk_menu_popup_at_pointer (GTK_MENU (menu ),event );
8092}
8193
8294static void
@@ -120,11 +132,11 @@ panel_action_protocol_filter (GdkXEvent *gdk_xevent,
120132 return GDK_FILTER_CONTINUE ;
121133
122134 if (xevent -> xclient .data .l [0 ] == atom_mate_panel_action_main_menu )
123- panel_action_protocol_main_menu (screen , xevent -> xclient .data .l [1 ]);
135+ panel_action_protocol_main_menu (screen , xevent -> xclient .data .l [1 ], event );
124136 else if (xevent -> xclient .data .l [0 ] == atom_mate_panel_action_run_dialog )
125137 panel_action_protocol_run_dialog (screen , xevent -> xclient .data .l [1 ]);
126138 else if (xevent -> xclient .data .l [0 ] == atom_gnome_panel_action_main_menu )
127- panel_action_protocol_main_menu (screen , xevent -> xclient .data .l [1 ]);
139+ panel_action_protocol_main_menu (screen , xevent -> xclient .data .l [1 ], event );
128140 else if (xevent -> xclient .data .l [0 ] == atom_gnome_panel_action_run_dialog )
129141 panel_action_protocol_run_dialog (screen , xevent -> xclient .data .l [1 ]);
130142 else if (xevent -> xclient .data .l [0 ] == atom_mate_panel_action_kill_dialog )
0 commit comments