GtkWidget * create_applications_menu (const char *menu_file, const char *menu_path, gboolean always_show_image) { MateMenuTree *tree; GtkWidget *menu; guint idle_id; menu = create_empty_menu (); if (always_show_image) g_object_set_data (G_OBJECT (menu), "panel-menu-force-icon-for-categories", GINT_TO_POINTER (TRUE)); tree = matemenu_tree_lookup (menu_file, MATEMENU_TREE_FLAGS_NONE); matemenu_tree_set_sort_key (tree, MATEMENU_TREE_SORT_DISPLAY_NAME); g_object_set_data_full (G_OBJECT (menu), "panel-menu-tree", matemenu_tree_ref (tree), (GDestroyNotify) matemenu_tree_unref); g_object_set_data_full (G_OBJECT (menu), "panel-menu-tree-path", g_strdup (menu_path ? menu_path : "/"), (GDestroyNotify) g_free); g_object_set_data (G_OBJECT (menu), "panel-menu-needs-loading", GUINT_TO_POINTER (TRUE)); g_signal_connect (menu, "show", G_CALLBACK (submenu_to_display), NULL); idle_id = g_idle_add_full (G_PRIORITY_LOW, submenu_to_display_in_idle, menu, NULL); g_object_set_data_full (G_OBJECT (menu), "panel-menu-idle-id", GUINT_TO_POINTER (idle_id), remove_submenu_to_display_idle); g_signal_connect (menu, "button_press_event", G_CALLBACK (menu_dummy_button_press_event), NULL); matemenu_tree_add_monitor (tree, (MateMenuTreeChangedFunc) handle_matemenu_tree_changed, menu); g_signal_connect (menu, "destroy", G_CALLBACK (remove_matemenu_tree_monitor), tree); matemenu_tree_unref (tree); return menu; }
GtkWidget * create_applications_menu (const char *menu_file, const char *menu_path, gboolean always_show_image) { MateMenuTree *tree; GtkWidget *menu; guint idle_id; menu = create_empty_menu (); if (always_show_image) g_object_set_data (G_OBJECT (menu), "panel-menu-force-icon-for-categories", GINT_TO_POINTER (TRUE)); tree = matemenu_tree_lookup (menu_file, MATEMENU_TREE_FLAGS_NONE); matemenu_tree_set_sort_key (tree, MATEMENU_TREE_SORT_DISPLAY_NAME); g_object_set_data_full (G_OBJECT (menu), "panel-menu-tree", matemenu_tree_ref (tree), (GDestroyNotify) matemenu_tree_unref); g_object_set_data_full (G_OBJECT (menu), "panel-menu-tree-path", g_strdup (menu_path ? menu_path : "/"), (GDestroyNotify) g_free); g_object_set_data (G_OBJECT (menu), "panel-menu-needs-loading", GUINT_TO_POINTER (TRUE)); g_signal_connect (menu, "show", G_CALLBACK (submenu_to_display), NULL); idle_id = g_idle_add_full (G_PRIORITY_LOW, submenu_to_display_in_idle, menu, NULL); g_object_set_data_full (G_OBJECT (menu), "panel-menu-idle-id", GUINT_TO_POINTER (idle_id), remove_submenu_to_display_idle); g_signal_connect (menu, "button_press_event", G_CALLBACK (menu_dummy_button_press_event), NULL); matemenu_tree_add_monitor (tree, (MateMenuTreeChangedFunc) handle_matemenu_tree_changed, menu); g_signal_connect (menu, "destroy", G_CALLBACK (remove_matemenu_tree_monitor), tree); matemenu_tree_unref (tree); /*HACK Fix any failures of compiz/other wm's to communicate with gtk for transparency */ #if GTK_CHECK_VERSION (3, 0, 0) GtkWidget *toplevel = gtk_widget_get_toplevel (menu); 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); #endif return menu; }