GtkWidget * panel_desktop_menu_item_new (gboolean use_image, gboolean append_lock_logout) { PanelDesktopMenuItem *menuitem; GtkWidget *image; menuitem = g_object_new (PANEL_TYPE_DESKTOP_MENU_ITEM, NULL); if (use_image) image = gtk_image_new_from_icon_name ("computer", panel_menu_icon_get_size ()); else image = NULL; setup_menuitem (GTK_WIDGET (menuitem), image ? panel_menu_icon_get_size () : GTK_ICON_SIZE_INVALID, image, _("System")); menuitem->priv->use_image = use_image; menuitem->priv->append_lock_logout = append_lock_logout; if (append_lock_logout) panel_lockdown_notify_add (G_CALLBACK (panel_desktop_menu_item_recreate_menu), menuitem); menuitem->priv->menu = panel_desktop_menu_item_create_menu (menuitem); gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), menuitem->priv->menu); return GTK_WIDGET (menuitem); }
GtkWidget * panel_desktop_menu_item_new (gboolean use_image, gboolean append_lock_logout) { PanelDesktopMenuItem *menuitem; char *name; #ifdef HAVE_TELEPATHY_GLIB PanelSessionManager *manager; #endif menuitem = g_object_new (PANEL_TYPE_DESKTOP_MENU_ITEM, NULL); name = panel_util_get_user_name (); if (use_image) { #ifdef HAVE_TELEPATHY_GLIB setup_menu_item_with_icon (GTK_WIDGET (menuitem), panel_menu_icon_get_size (), PANEL_ICON_USER_AVAILABLE, NULL, NULL, name); gtk_image_menu_item_set_always_show_image (GTK_IMAGE_MENU_ITEM (menuitem), TRUE); #else setup_menu_item_with_icon (GTK_WIDGET (menuitem), panel_menu_icon_get_size (), PANEL_ICON_COMPUTER, NULL, NULL, name); #endif } else setup_menuitem (GTK_WIDGET (menuitem), GTK_ICON_SIZE_INVALID, NULL, name); g_free (name); menuitem->priv->menu = panel_desktop_menu_item_create_menu (menuitem, append_lock_logout); gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), menuitem->priv->menu); #ifdef HAVE_TELEPATHY_GLIB manager = panel_session_manager_get (); menuitem->priv->presence_changed_id = g_signal_connect (manager, "presence-changed", G_CALLBACK (panel_desktop_menu_item_on_presence_changed), menuitem); panel_desktop_menu_item_on_presence_changed (manager, panel_session_manager_get_presence (manager), menuitem); #endif return GTK_WIDGET (menuitem); }
static void panel_desktop_menu_item_recreate_menu (PanelDesktopMenuItem *desktop_item) { if (desktop_item->priv->menu) { gtk_widget_destroy (desktop_item->priv->menu); desktop_item->priv->menu = panel_desktop_menu_item_create_menu (desktop_item); gtk_menu_item_set_submenu (GTK_MENU_ITEM (desktop_item), desktop_item->priv->menu); mate_panel_applet_menu_set_recurse (GTK_MENU (desktop_item->priv->menu), "menu_panel", desktop_item->priv->panel); } }