static gboolean show_item_menu (GtkWidget *item, GdkEventButton *bevent) { PanelWidget *panel_widget; GtkWidget *menu; if (panel_lockdown_get_locked_down ()) return FALSE; panel_widget = menu_get_panel (item); menu = g_object_get_data (G_OBJECT (item), "panel-item-context-menu"); if (!menu) menu = create_item_context_menu (item, panel_widget); if (!menu) return FALSE; gtk_menu_set_screen (GTK_MENU (menu), gtk_window_get_screen (GTK_WINDOW (panel_widget->toplevel))); gtk_menu_popup (GTK_MENU (menu), NULL, NULL, NULL, NULL, bevent->button, bevent->time); return TRUE; }
GdkScreen * menuitem_to_screen (GtkWidget *menuitem) { PanelWidget *panel_widget; panel_widget = menu_get_panel (menuitem); return gtk_window_get_screen (GTK_WINDOW (panel_widget->toplevel)); }
static void add_menu_to_panel (GtkWidget *menuitem, MateMenuTreeEntry *entry) { MateMenuTreeDirectory *directory; MateMenuTree *tree; PanelWidget *panel; PanelData *pd; int insertion_pos; char *menu_path; const char *menu_filename; directory = matemenu_tree_item_get_parent (MATEMENU_TREE_ITEM (entry)); if (!directory) { g_warning ("Cannot find the filename for the menu: no directory"); return; } tree = matemenu_tree_directory_get_tree (directory); if (!tree) { matemenu_tree_item_unref (directory); g_warning ("Cannot find the filename for the menu: no tree"); return; } menu_filename = matemenu_tree_get_menu_file (tree); matemenu_tree_unref (tree); if (!menu_filename) { matemenu_tree_item_unref (directory); g_warning ("Cannot find the filename for the menu: no filename"); return; } panel = menu_get_panel (menuitem); pd = g_object_get_data (G_OBJECT (panel->toplevel), "PanelData"); insertion_pos = pd ? pd->insertion_pos : -1; menu_path = matemenu_tree_directory_make_path (directory, NULL); panel_menu_button_create (panel->toplevel, insertion_pos, menu_filename, menu_path, TRUE, matemenu_tree_directory_get_name (directory)); g_free (menu_path); matemenu_tree_item_unref (directory); }
static void setup_menu_panel (GtkWidget *menu) { PanelWidget *panel; panel = g_object_get_data (G_OBJECT (menu), "menu_panel"); if (panel) return; panel = menu_get_panel (menu); g_object_set_data (G_OBJECT (menu), "menu_panel", panel); if (panel) gtk_menu_set_screen (GTK_MENU (menu), gtk_widget_get_screen (GTK_WIDGET (panel))); }
static void panel_context_menu_setup_delete_panel_item (GtkWidget *menu, GtkWidget *menuitem) { PanelWidget *panel_widget; gboolean sensitive; panel_widget = menu_get_panel (menu); g_assert (PANEL_IS_TOPLEVEL (panel_widget->toplevel)); sensitive = !panel_toplevel_is_last_unattached (panel_widget->toplevel) && !panel_lockdown_get_locked_down () && panel_profile_id_lists_are_writable (); gtk_widget_set_sensitive (menuitem, sensitive); }
static void add_app_to_panel (GtkWidget *item, MateMenuTreeEntry *entry) { PanelWidget *panel_widget; PanelToplevel *toplevel; PanelData *pd; int position; panel_widget = menu_get_panel (item); toplevel = panel_widget->toplevel; pd = g_object_get_data (G_OBJECT (toplevel), "PanelData"); position = pd ? pd->insertion_pos : -1; panel_launcher_create (toplevel, position, matemenu_tree_entry_get_desktop_file_path (entry)); }
static void panel_context_menu_setup_delete_panel_item (GtkWidget *menu, GtkWidget *menuitem) { PanelWidget *panel_widget; gboolean sensitive; panel_context_menu_check_for_screen (NULL, NULL, NULL); panel_widget = menu_get_panel (menu); g_assert (PANEL_IS_TOPLEVEL (panel_widget->toplevel)); sensitive = !panel_toplevel_is_last (panel_widget->toplevel) && !panel_lockdown_get_panels_locked_down_s () && panel_layout_is_writable (); gtk_widget_set_sensitive (menuitem, sensitive); }
static void add_menudrawer_to_panel (GtkWidget *menuitem, MateMenuTreeEntry *entry) { MateMenuTreeDirectory *directory; PanelWidget *panel; PanelData *pd; int insertion_pos; directory = matemenu_tree_item_get_parent (MATEMENU_TREE_ITEM (entry)); panel = menu_get_panel (menuitem); pd = g_object_get_data (G_OBJECT (panel->toplevel), "PanelData"); insertion_pos = pd ? pd->insertion_pos : -1; add_drawers_from_dir (directory, insertion_pos, panel_profile_get_toplevel_id (panel->toplevel)); matemenu_tree_item_unref (directory); }