@@ -542,7 +542,7 @@ create_item_context_menu (GtkWidget *item,
542542
543543static gboolean
544544show_item_menu (GtkWidget * item ,
545- GdkEventButton * bevent )
545+ GdkEvent * event )
546546{
547547 PanelWidget * panel_widget ;
548548 GtkWidget * menu ;
@@ -562,11 +562,18 @@ show_item_menu (GtkWidget *item,
562562
563563 gtk_menu_set_screen (GTK_MENU (menu ),
564564 gtk_window_get_screen (GTK_WINDOW (panel_widget -> toplevel )));
565-
566- gtk_menu_popup (GTK_MENU (menu ),
567- NULL , NULL , NULL , NULL ,
568- bevent -> button ,
569- bevent -> time );
565+ /* Set up theme and transparency support */
566+ GtkWidget * toplevel = gtk_widget_get_toplevel (menu );
567+ /* Fix any failures of compiz/other wm's to communicate with gtk for transparency */
568+ GdkScreen * screen = gtk_widget_get_screen (GTK_WIDGET (toplevel ));
569+ GdkVisual * visual = gdk_screen_get_rgba_visual (screen );
570+ gtk_widget_set_visual (GTK_WIDGET (toplevel ), visual );
571+ /* Set menu and it's toplevel window to follow panel theme */
572+ GtkStyleContext * context ;
573+ context = gtk_widget_get_style_context (GTK_WIDGET (toplevel ));
574+ gtk_style_context_add_class (context ,"gnome-panel-menu-bar" );
575+ gtk_style_context_add_class (context ,"mate-panel-menu-bar" );
576+ gtk_menu_popup_at_pointer (GTK_MENU (menu ), event );
570577
571578 return TRUE;
572579}
@@ -586,7 +593,7 @@ menuitem_button_press_event (GtkWidget *menuitem,
586593 GdkEventButton * event )
587594{
588595 if (event -> button == 3 )
589- return show_item_menu (menuitem , event );
596+ return show_item_menu (menuitem , ( GdkEvent * ) event );
590597
591598 return FALSE;
592599}
@@ -1390,14 +1397,8 @@ panel_menu_key_press_handler (GtkWidget *widget,
13901397 GtkMenuShell * menu_shell = GTK_MENU_SHELL (widget );
13911398
13921399 active_menu_item = gtk_menu_shell_get_selected_item (menu_shell );
1393- if (active_menu_item && gtk_menu_item_get_submenu (GTK_MENU_ITEM (active_menu_item )) == NULL ) {
1394- GdkEventButton bevent ;
1395-
1396- bevent .button = 3 ;
1397- bevent .time = GDK_CURRENT_TIME ;
1398- retval = show_item_menu (active_menu_item , & bevent );
1399- }
1400-
1400+ if (active_menu_item && gtk_menu_item_get_submenu (GTK_MENU_ITEM (active_menu_item )) == NULL )
1401+ retval = show_item_menu (active_menu_item , (GdkEvent * ) event );
14011402 }
14021403 return retval ;
14031404}
0 commit comments