static int drun_token_match ( const Mode *data, GRegex **tokens, unsigned int index ) { DRunModePrivateData *rmpd = (DRunModePrivateData *) mode_get_private_data ( data ); int match = 1; if ( tokens ) { for ( int j = 0; match && tokens != NULL && tokens[j] != NULL; j++ ) { int test = 0; GRegex *ftokens[2] = { tokens[j], NULL }; // Match name if ( rmpd->entry_list[index].name && helper_token_match ( ftokens, rmpd->entry_list[index].name ) ) { test = 1; } // Match generic name if ( !test && rmpd->entry_list[index].generic_name && helper_token_match ( ftokens, rmpd->entry_list[index].generic_name ) ) { test = 1; } // Match executable name. if ( !test && helper_token_match ( ftokens, rmpd->entry_list[index].exec ) ) { test = 1; } // Match against category. if ( !test ) { #ifdef GET_CAT_PARSE_TIME gchar **list = rmpd->entry_list[index].categories; for ( int iter = 0; !test && list && list[iter]; iter++ ) { test = helper_token_match ( ftokens, list[iter] ); } #else gchar **list = g_key_file_get_locale_string_list ( rmpd->entry_list[index].key_file, "Desktop Entry", "Categories", NULL, NULL, NULL ); for ( int iter = 0; !test && list && list[iter]; iter++ ) { test = helper_token_match ( ftokens, list[iter] ); } g_strfreev ( list ); #endif } if ( test == 0 ) { match = 0; } } } return match; }
static int script_token_match ( const Mode *sw, GRegex **tokens, unsigned int index ) { ScriptModePrivateData *rmpd = sw->private_data; return helper_token_match ( tokens, rmpd->cmd_list[index] ); }