Skip to content

Commit 105f685

Browse files
committed
Ensure alt-F1 can show the menu even if no menu applet on panel
Fix regression introduced by 17ac8aa and ensure that menu shown follows same theme as menu shown from panel menu button or panel menu bar
1 parent d68268a commit 105f685

File tree

1 file changed

+16
-4
lines changed

1 file changed

+16
-4
lines changed

mate-panel/panel-action-protocol.c

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -50,11 +50,14 @@ static Atom atom_mate_panel_action_kill_dialog = None;
5050

5151
static void
5252
panel_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

8294
static 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

Comments
 (0)