static void add_drawers_from_alias (MateMenuTreeAlias *alias, const char *toplevel_id) { MateMenuTreeItem *aliased_item; aliased_item = matemenu_tree_alias_get_item (alias); switch (matemenu_tree_item_get_type (aliased_item)) { case MATEMENU_TREE_ITEM_DIRECTORY: add_drawers_from_dir (MATEMENU_TREE_DIRECTORY (aliased_item), G_MAXINT/2, toplevel_id); break; case MATEMENU_TREE_ITEM_ENTRY: panel_launcher_create_with_id (toplevel_id, G_MAXINT/2, matemenu_tree_entry_get_desktop_file_path (MATEMENU_TREE_ENTRY (aliased_item))); break; default: break; } matemenu_tree_item_unref (aliased_item); }
static void activate_app_def (GtkWidget *menuitem, MateMenuTreeEntry *entry) { const char *path; path = matemenu_tree_entry_get_desktop_file_path (entry); panel_menu_item_activate_desktop_file (menuitem, path); }
static void add_drawers_from_dir (MateMenuTreeDirectory *directory, int pos, const char *toplevel_id) { const char *name; const char *icon; GSList *items; GSList *l; char *attached_toplevel_id; name = matemenu_tree_directory_get_name (directory); icon = matemenu_tree_directory_get_icon (directory); attached_toplevel_id = panel_drawer_create_with_id (toplevel_id, pos, icon, icon != NULL, name); if (!attached_toplevel_id) return; items = matemenu_tree_directory_get_contents (directory); for (l = items; l; l = l->next) { MateMenuTreeItem *item = l->data; switch (matemenu_tree_item_get_type (item)) { case MATEMENU_TREE_ITEM_ENTRY: panel_launcher_create_with_id (attached_toplevel_id, G_MAXINT/2, matemenu_tree_entry_get_desktop_file_path (MATEMENU_TREE_ENTRY (item))); break; case MATEMENU_TREE_ITEM_DIRECTORY: add_drawers_from_dir (MATEMENU_TREE_DIRECTORY (item), G_MAXINT/2, attached_toplevel_id); break; case MATEMENU_TREE_ITEM_ALIAS: add_drawers_from_alias (MATEMENU_TREE_ALIAS (item), attached_toplevel_id); break; default: break; } matemenu_tree_item_unref (item); } g_slist_free (items); g_free (attached_toplevel_id); }
static void panel_addto_prepend_entry (GSList **parent_list, MateMenuTreeEntry *entry, const char *filename) { PanelAddtoAppList *data; data = g_new0 (PanelAddtoAppList, 1); data->item_info.type = PANEL_ADDTO_LAUNCHER; data->item_info.name = g_strdup (matemenu_tree_entry_get_display_name (entry)); data->item_info.description = g_strdup (matemenu_tree_entry_get_comment (entry)); data->item_info.icon = g_strdup (matemenu_tree_entry_get_icon (entry)); data->item_info.launcher_path = g_strdup (matemenu_tree_entry_get_desktop_file_path (entry)); data->item_info.static_data = FALSE; *parent_list = g_slist_prepend (*parent_list, data); }
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 add_app_to_desktop (GtkWidget *item, MateMenuTreeEntry *entry) { char *source_uri; const char *source; char *target_dir; char *target_uri; char *target; GError *error; g_return_if_fail (entry != NULL); if (desktop_is_home_dir ()) { target_dir = g_build_filename (g_get_home_dir (), NULL); } else { target_dir = g_strdup (g_get_user_special_dir (G_USER_DIRECTORY_DESKTOP)); } source = matemenu_tree_entry_get_desktop_file_path (entry); source_uri = g_filename_to_uri (source, NULL, NULL); target_uri = panel_make_unique_desktop_uri (target_dir, source_uri); g_free (target_dir); g_free (source_uri); g_return_if_fail (target_uri != NULL); target = g_filename_from_uri (target_uri, NULL, NULL); g_free (target_uri); error = NULL; panel_key_file_copy_and_mark_trusted (source, target, &error); g_free (target); if (error != NULL) { g_warning ("Problem while copying launcher to desktop: %s", error->message); g_error_free (error); } }
static void drag_data_get_menu_cb (GtkWidget *widget, GdkDragContext *context, GtkSelectionData *selection_data, guint info, guint time, MateMenuTreeEntry *entry) { const char *path; char *uri; char *uri_list; path = matemenu_tree_entry_get_desktop_file_path (entry); uri = g_filename_to_uri (path, NULL, NULL); uri_list = g_strconcat (uri, "\r\n", NULL); g_free (uri); gtk_selection_data_set (selection_data, gtk_selection_data_get_target (selection_data), 8, (guchar *)uri_list, strlen (uri_list)); g_free (uri_list); }
static gboolean panel_run_dialog_add_items_idle (PanelRunDialog *dialog) { GtkCellRenderer *renderer; GtkTreeViewColumn *column; GtkTreeModel *model_filter; GSList *all_applications; GSList *l; GSList *next; const char *prev_name; /* create list store */ dialog->program_list_store = gtk_list_store_new (NUM_COLUMNS, G_TYPE_ICON, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_BOOLEAN); all_applications = get_all_applications (); /* Strip duplicates */ prev_name = NULL; for (l = all_applications; l; l = next) { MateMenuTreeEntry *entry = l->data; const char *entry_name; next = l->next; entry_name = matemenu_tree_entry_get_display_name (entry); if (prev_name && entry_name && strcmp (entry_name, prev_name) == 0) { matemenu_tree_item_unref (entry); all_applications = g_slist_delete_link (all_applications, l); } else { prev_name = entry_name; } } for (l = all_applications; l; l = l->next) { MateMenuTreeEntry *entry = l->data; GtkTreeIter iter; const gchar *icon = matemenu_tree_entry_get_icon (entry); GIcon *gicon = panel_gicon_from_icon_name (icon); gtk_list_store_append (dialog->program_list_store, &iter); gtk_list_store_set (dialog->program_list_store, &iter, COLUMN_GICON, gicon, COLUMN_NAME, matemenu_tree_entry_get_display_name (entry), COLUMN_COMMENT, matemenu_tree_entry_get_comment (entry), COLUMN_EXEC, matemenu_tree_entry_get_exec (entry), COLUMN_PATH, matemenu_tree_entry_get_desktop_file_path (entry), COLUMN_VISIBLE, TRUE, -1); g_object_unref (gicon); matemenu_tree_item_unref (entry); } g_slist_free (all_applications); model_filter = gtk_tree_model_filter_new (GTK_TREE_MODEL (dialog->program_list_store), NULL); gtk_tree_model_filter_set_visible_column (GTK_TREE_MODEL_FILTER (model_filter), COLUMN_VISIBLE); gtk_tree_view_set_model (GTK_TREE_VIEW (dialog->program_list), model_filter); //FIXME use the same search than the fuzzy one? gtk_tree_view_set_search_column (GTK_TREE_VIEW (dialog->program_list), COLUMN_NAME); renderer = gtk_cell_renderer_pixbuf_new (); g_object_set (renderer, "stock-size", panel_menu_icon_get_size(), NULL); column = gtk_tree_view_column_new (); gtk_tree_view_column_pack_start (column, renderer, FALSE); gtk_tree_view_column_set_attributes (column, renderer, "gicon", COLUMN_GICON, NULL); renderer = gtk_cell_renderer_text_new (); gtk_tree_view_column_pack_start (column, renderer, TRUE); gtk_tree_view_column_set_attributes (column, renderer, "text", COLUMN_NAME, NULL); gtk_tree_view_append_column (GTK_TREE_VIEW (dialog->program_list), column); dialog->add_items_idle_id = 0; return G_SOURCE_REMOVE; }