static void panel_addto_dialog_free (PanelAddtoDialog *dialog) { MateConfClient *client; GSList *item; client = panel_mateconf_get_client (); if (dialog->name_notify) mateconf_client_notify_remove (client, dialog->name_notify); dialog->name_notify = 0; if (dialog->search_text) g_free (dialog->search_text); dialog->search_text = NULL; if (dialog->applet_search_text) g_free (dialog->applet_search_text); dialog->applet_search_text = NULL; if (dialog->addto_dialog) gtk_widget_destroy (dialog->addto_dialog); dialog->addto_dialog = NULL; for (item = dialog->applet_list; item != NULL; item = item->next) { PanelAddtoItemInfo *applet; applet = (PanelAddtoItemInfo *) item->data; if (!applet->static_data) { panel_addto_dialog_free_item_info (applet); g_free (applet); } } g_slist_free (dialog->applet_list); panel_addto_dialog_free_application_list (dialog->application_list); panel_addto_dialog_free_application_list (dialog->settings_list); if (dialog->filter_applet_model) g_object_unref (dialog->filter_applet_model); dialog->filter_applet_model = NULL; if (dialog->applet_model) g_object_unref (dialog->applet_model); dialog->applet_model = NULL; if (dialog->filter_application_model) g_object_unref (dialog->filter_application_model); dialog->filter_application_model = NULL; if (dialog->application_model) g_object_unref (dialog->application_model); dialog->application_model = NULL; if (dialog->menu_tree) matemenu_tree_unref (dialog->menu_tree); dialog->menu_tree = NULL; g_free (dialog); }
static void panel_addto_make_application_model(PanelAddtoDialog* dialog) { GtkTreeStore* store; MateMenuTree* tree; MateMenuTreeDirectory* root; if (dialog->filter_application_model != NULL) return; store = gtk_tree_store_new(NUMBER_COLUMNS, GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_POINTER, G_TYPE_STRING); tree = matemenu_tree_lookup("mate-applications.menu", MATEMENU_TREE_FLAGS_NONE); matemenu_tree_set_sort_key(tree, MATEMENU_TREE_SORT_DISPLAY_NAME); if ((root = matemenu_tree_get_root_directory (tree))) { panel_addto_make_application_list(&dialog->application_list, root, "mate-applications.menu"); panel_addto_populate_application_model(store, NULL, dialog->application_list); matemenu_tree_item_unref(root); } matemenu_tree_unref(tree); tree = matemenu_tree_lookup("mate-settings.menu", MATEMENU_TREE_FLAGS_NONE); matemenu_tree_set_sort_key(tree, MATEMENU_TREE_SORT_DISPLAY_NAME); if ((root = matemenu_tree_get_root_directory(tree))) { GtkTreeIter iter; gtk_tree_store_append(store, &iter, NULL); gtk_tree_store_set(store, &iter, COLUMN_ICON, NULL, COLUMN_TEXT, NULL, COLUMN_DATA, NULL, COLUMN_SEARCH, NULL, -1); panel_addto_make_application_list(&dialog->settings_list, root, "mate-settings.menu"); panel_addto_populate_application_model(store, NULL, dialog->settings_list); matemenu_tree_item_unref(root); } matemenu_tree_unref(tree); dialog->application_model = GTK_TREE_MODEL(store); dialog->filter_application_model = gtk_tree_model_filter_new(GTK_TREE_MODEL(dialog->application_model), NULL); gtk_tree_model_filter_set_visible_func(GTK_TREE_MODEL_FILTER(dialog->filter_application_model), panel_addto_filter_func, dialog, NULL); }
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; }
static void panel_addto_dialog_free (PanelAddtoDialog *dialog) { GSList *item; g_signal_handlers_disconnect_by_func(dialog->panel_widget->toplevel->settings, G_CALLBACK (panel_addto_name_notify), dialog); if (dialog->search_text) g_free (dialog->search_text); dialog->search_text = NULL; if (dialog->applet_search_text) g_free (dialog->applet_search_text); dialog->applet_search_text = NULL; if (dialog->addto_dialog) gtk_widget_destroy (dialog->addto_dialog); dialog->addto_dialog = NULL; for (item = dialog->applet_list; item != NULL; item = item->next) { PanelAddtoItemInfo *applet; applet = (PanelAddtoItemInfo *) item->data; if (!applet->static_data) { panel_addto_dialog_free_item_info (applet); g_free (applet); } } g_slist_free (dialog->applet_list); panel_addto_dialog_free_application_list (dialog->application_list); panel_addto_dialog_free_application_list (dialog->settings_list); if (dialog->filter_applet_model) g_object_unref (dialog->filter_applet_model); dialog->filter_applet_model = NULL; if (dialog->applet_model) g_object_unref (dialog->applet_model); dialog->applet_model = NULL; if (dialog->filter_application_model) g_object_unref (dialog->filter_application_model); dialog->filter_application_model = NULL; if (dialog->application_model) g_object_unref (dialog->application_model); dialog->application_model = NULL; if (dialog->menu_tree) matemenu_tree_unref (dialog->menu_tree); dialog->menu_tree = NULL; g_free (dialog); }
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 GSList* get_all_applications(void) { MateMenuTree* tree; MateMenuTreeDirectory* root; GSList* retval; tree = matemenu_tree_lookup("mate-applications.menu", MATEMENU_TREE_FLAGS_NONE); matemenu_tree_set_sort_key(tree, MATEMENU_TREE_SORT_DISPLAY_NAME); root = matemenu_tree_get_root_directory(tree); retval = get_all_applications_from_dir(root, NULL); matemenu_tree_item_unref(root); matemenu_tree_unref(tree); retval = g_slist_sort(retval, (GCompareFunc) compare_applications); return retval; }
static GtkWidget * create_item_context_menu (GtkWidget *item, PanelWidget *panel_widget) { MateMenuTreeEntry *entry; MateMenuTreeDirectory *directory; MateMenuTree *tree; GtkWidget *menu; GtkWidget *submenu; GtkWidget *menuitem; const char *menu_filename; gboolean id_lists_writable; id_lists_writable = panel_profile_id_lists_are_writable (); entry = g_object_get_data (G_OBJECT (item), "panel-menu-tree-entry"); if (!entry) return NULL; directory = matemenu_tree_item_get_parent (MATEMENU_TREE_ITEM (entry)); if (!directory) return NULL; tree = matemenu_tree_directory_get_tree (directory); matemenu_tree_item_unref (directory); if (!tree) return NULL; menu_filename = matemenu_tree_get_menu_file (tree); matemenu_tree_unref (tree); if (!menu_filename) return NULL; menu = create_empty_menu (); g_object_set_data (G_OBJECT (item), "panel-item-context-menu", menu); g_object_set_data (G_OBJECT (menu), "menu_panel", panel_widget); g_signal_connect (item, "destroy", G_CALLBACK (menu_destroy_context_menu), menu); g_signal_connect (menu, "deactivate", G_CALLBACK (restore_grabs), item); menuitem = gtk_menu_item_new_with_mnemonic (_("Add this launcher to _panel")); g_signal_connect (menuitem, "activate", G_CALLBACK (add_app_to_panel), entry); gtk_widget_set_sensitive (menuitem, id_lists_writable); gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem); gtk_widget_show (menuitem); menuitem = gtk_menu_item_new_with_mnemonic (_("Add this launcher to _desktop")); g_signal_connect (menuitem, "activate", G_CALLBACK (add_app_to_desktop), entry); gtk_widget_set_sensitive (menuitem, id_lists_writable); gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem); gtk_widget_show (menuitem); submenu = create_empty_menu (); g_object_set_data (G_OBJECT (submenu), "menu_panel", panel_widget); menuitem = gtk_menu_item_new_with_mnemonic (_("_Entire menu")); gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), submenu); gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem); gtk_widget_show (menuitem); menuitem = gtk_menu_item_new_with_mnemonic (_("Add this as _drawer to panel")); g_signal_connect (menuitem, "activate", G_CALLBACK (add_menudrawer_to_panel), entry); gtk_widget_set_sensitive (menuitem, id_lists_writable); gtk_menu_shell_append (GTK_MENU_SHELL (submenu), menuitem); gtk_widget_show (menuitem); menuitem = gtk_menu_item_new_with_mnemonic (_("Add this as _menu to panel")); g_signal_connect (menuitem, "activate", G_CALLBACK (add_menu_to_panel), entry); gtk_widget_set_sensitive (menuitem, id_lists_writable); gtk_menu_shell_append (GTK_MENU_SHELL (submenu), menuitem); gtk_widget_show (menuitem); 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; }