static void applet_show_menu (AppletInfo *info, GdkEventButton *event) { PanelWidget *panel_widget; g_return_if_fail (info != NULL); panel_widget = mate_panel_applet_get_panel_widget (info); if (info->menu == NULL) info->menu = mate_panel_applet_create_menu (info); if (info->menu == NULL) return; mate_panel_applet_menu_set_recurse (GTK_MENU (info->menu), "menu_panel", panel_widget); gtk_menu_set_screen (GTK_MENU (info->menu), gtk_window_get_screen (GTK_WINDOW (panel_widget->toplevel))); if (!gtk_widget_get_realized (info->menu)) gtk_widget_show (info->menu); gtk_menu_popup (GTK_MENU (info->menu), NULL, NULL, (GtkMenuPositionFunc) mate_panel_applet_position_menu, info->widget, event->button, event->time); }
GtkWidget * panel_context_menu_create (PanelWidget *panel) { GtkWidget *retval; GtkWidget *menuitem; GtkWidget *image; if (panel->master_widget) { gpointer *pointer; AppletInfo *info; pointer = g_object_get_data (G_OBJECT (panel->master_widget), "applet_info"); g_assert (pointer != NULL); info = (AppletInfo *) pointer; if (info->menu == NULL) { info->menu = mate_panel_applet_create_menu (info); } return info->menu; } retval = create_empty_menu (); gtk_widget_set_name (retval, "mate-panel-context-menu"); if (!panel_lockdown_get_locked_down ()) panel_context_menu_build_edition (panel, retval); menuitem = gtk_image_menu_item_new_with_mnemonic (_("_Help")); image = gtk_image_new_from_stock (GTK_STOCK_HELP, GTK_ICON_SIZE_MENU); gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menuitem), image); gtk_widget_show (menuitem); gtk_menu_shell_append (GTK_MENU_SHELL (retval), menuitem); g_signal_connect (menuitem, "activate", G_CALLBACK (panel_context_menu_show_help), NULL); menuitem = gtk_image_menu_item_new_with_mnemonic (_("A_bout Panels")); image = gtk_image_new_from_stock (GTK_STOCK_ABOUT, GTK_ICON_SIZE_MENU); gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menuitem), image); gtk_widget_show (menuitem); gtk_menu_shell_append (GTK_MENU_SHELL (retval), menuitem); g_signal_connect (menuitem, "activate", G_CALLBACK (panel_context_menu_show_about_dialog), NULL); //FIXME: can we get rid of this? (needed by menu_get_panel()) g_object_set_data (G_OBJECT (retval), "menu_panel", panel); return retval; }
static void mate_panel_applet_recreate_menu (AppletInfo *info) { GList *l; if (!info->menu) return; for (l = info->user_menu; l; l = l->next) { AppletUserMenu *menu = l->data; menu->menuitem =NULL; menu->submenu =NULL; } g_object_unref (info->menu); info->menu = mate_panel_applet_create_menu (info); }
static void mate_panel_applet_recreate_menu (AppletInfo *info) { GList *l; if (!info->menu) return; for (l = info->user_menu; l; l = l->next) { AppletUserMenu *menu = l->data; menu->menuitem =NULL; menu->submenu =NULL; } g_signal_handlers_disconnect_by_func (info->menu, G_CALLBACK (applet_menu_show), info); g_signal_handlers_disconnect_by_func (info->menu, G_CALLBACK (applet_menu_deactivate), info); g_object_unref (info->menu); info->menu = mate_panel_applet_create_menu (info); }
GtkWidget * panel_context_menu_create (PanelWidget *panel) { GtkWidget *retval; GtkWidget *menuitem; if (panel->master_widget) { gpointer *pointer; AppletInfo *info; pointer = g_object_get_data (G_OBJECT (panel->master_widget), "applet_info"); g_assert (pointer != NULL); info = (AppletInfo *) pointer; if (info->menu == NULL) { info->menu = mate_panel_applet_create_menu (info); } return info->menu; } retval = create_empty_menu (); gtk_widget_set_name (retval, "mate-panel-context-menu"); if (!panel_lockdown_get_locked_down ()) panel_context_menu_build_edition (panel, retval); menuitem = panel_image_menu_item_new_from_icon ("help-browser", _("_Help")); gtk_widget_show (menuitem); gtk_menu_shell_append (GTK_MENU_SHELL (retval), menuitem); g_signal_connect (menuitem, "activate", G_CALLBACK (panel_context_menu_show_help), NULL); menuitem = panel_image_menu_item_new_from_icon ("help-about", _("A_bout Panels")); gtk_widget_show (menuitem); gtk_menu_shell_append (GTK_MENU_SHELL (retval), menuitem); g_signal_connect (menuitem, "activate", G_CALLBACK (panel_context_menu_show_about_dialog), NULL); //FIXME: can we get rid of this? (needed by menu_get_panel()) g_object_set_data (G_OBJECT (retval), "menu_panel", panel); /* Set up theme and transparency support */ GtkWidget *toplevel = gtk_widget_get_toplevel (retval); /* Fix any failures of compiz/other wm's to communicate with gtk for transparency */ GdkScreen *screen = gtk_widget_get_screen(GTK_WIDGET(toplevel)); GdkVisual *visual = gdk_screen_get_rgba_visual(screen); gtk_widget_set_visual(GTK_WIDGET(toplevel), visual); /* Set menu and it's toplevel window to follow panel theme */ GtkStyleContext *context; context = gtk_widget_get_style_context (GTK_WIDGET(toplevel)); gtk_style_context_add_class(context,"gnome-panel-menu-bar"); gtk_style_context_add_class(context,"mate-panel-menu-bar"); return retval; }